C
帧缓冲区要求
概述
Qt Quick Ultralite 应用程序的图形内容可以通过将内容绘制到一个或多个帧缓冲区上来在显示上显示。然后,在更新显示内容之前,由显示控制器读取这些帧缓冲区。
每个帧缓冲区都是表示应用程序层的像素矩形网格。在大多数平台上,使用单个全屏应用程序层。在支持层的平台上,应用程序可能包含多个小于显示尺寸的层。
您可以使用部分帧缓冲区策略来降低应用程序的内存需求。有关更多信息,请参阅部分帧缓冲区。
颜色深度属性
除了层的宽度和高度之外,其颜色深度还决定了帧缓冲区的内存需求。虽然 Qt Quick Ultralite Core 支持多种颜色深度格式,但大多数参考平台使用 16 bpp(每像素位数)或 32 bpp 颜色深度。自定义平台移植还可以通过实现所有必要的绘图引擎 API 来添加对其他颜色深度的支持。
尽管更高的颜色深度提供了更好的图像质量,但它们带来了性能开销和更大的内存需求。
包含 alpha 位像素格式的格式在多层上下文中很有用。其中一些层可能包含半透明内容,必须在其他层之上进行组合。
以下表格列出了参考颜色深度及其对应的像素格式
颜色深度 | 像素格式 | 颜色信息 |
---|---|---|
32 bpp | ARGB32 | 8 位 alpha,8 位红色,8 位绿色,8 位蓝色 |
RGB32 | 8 位填充,8 位红色,8 位绿色,8 位蓝色 | |
24 bpp | RGB888 | 8 位红色,8 位绿色,8 位蓝色 |
16 bpp | ARGB4444 | 4 位 alpha,4 位红色,4 位绿色,4 位蓝色 |
RGB565 | 5 位红色,6 位绿色,5 位蓝色 | |
8 bpp | RGB332 | 3 位红色,3 位绿色,2 位蓝色 |
帧缓冲区策略
Qt Quick Ultralite 支持单缓冲和双缓冲策略,在内存使用和性能之间提供选择。单缓冲策略内存使用较少,但可能带来性能开销。而双缓冲策略内存使用较多,但性能更好。这些帧缓冲策略的可用性取决于平台。
使用双缓冲的优势是,Qt Quick Ultralite可以在显示控制器读取前一帧的同时准备下一帧。这确保渲染能够在下一个显示刷新时完成,从而提供一致的帧率。此外,对没有自带帧缓冲内存的显示也有用。当帧缓冲同时被读取和绘制时,会导致闪烁,并在显示上出现部分渲染的内容。
双缓冲的缺点是需要两倍的帧缓冲内存。
单缓冲和双缓冲都支持部分更新,Qt Quick Ultralite仅重新绘制已更改的内容。在双缓冲的情况下,Qt Quick Ultralite会在当前帧和前一帧中重新绘制层的更改区域。
注意:在决定帧缓冲策略之前,请参阅 支持的功能 表。
内存使用
给定层的内存使用可以通过以下方式计算:
Memory usage in bytes = width x height x bytes per pixel x number of buffers
以下示例显示了分辨率、颜色深度和帧缓冲策略几组组合的内存使用需求:
层级分辨率(宽度 x 高度) | 颜色深度 | 帧缓冲策略 | 内存使用 |
---|---|---|---|
800x480 | 32 bpp | 双缓冲 | 3.07 MB |
800x480 | 32 bpp | 单缓冲 | 1.54 MB |
800x480 | 16 bpp | 双缓冲 | 1.54 MB |
800x480 | 16 bpp | 单缓冲 | 768 KB |
480x272 | 32 bpp | 双缓冲 | 1.04 MB |
480x272 | 32 bpp | 单缓冲 | 522 KB |
480x272 | 16 bpp | 双缓冲 | 522 KB |
480x272 | 16 bpp | 单缓冲 | 261 KB |
480x272 | 8 bpp | 双缓冲 | 261 KB |
480x272 | 8 bpp | 单缓冲 | 131 KB |
320x240 | 16 bpp | 单缓冲 | 150 KB |
320x48 (320x240/5) 1 | 16 bpp | 部分缓冲 | 30 KB |
320x24 (320x240/10) 1 | 16 bpp | 部分缓冲 | 15 KB |
注意:1 部分帧缓冲的分辨率不是固定的,它表示单个部分帧缓冲的最大像素数。有关更多信息,请参阅 部分帧缓冲。
内存区域
微控制器通常有单独的易失性内存区域,例如视频RAM(VRAM)、内部SRAM、外部SDRAM等。帧缓冲应放置在VRAM中(如果可用)或放置在最快的易失性内存区域(内部SRAM)。然而,内部SRAM通常很小,使用外部SDRAM是另一个考虑的选项。
重要注意事项
- 参考平台适配默认使用双缓冲。可以通过以下更改在这些平台中使用单缓冲:
- 更新 frameBufferingType() 函数以返回 Qul::Platform::SingleBuffering。
- 修改平台代码,静默或动态分配帧缓冲,为每个层分配单个帧缓冲。
- 修改任何假定有两个帧缓冲的平台代码。
- 在不支持层平台的平台上添加不同颜色深度或屏幕分辨率的支持。
- 改变帧缓冲分配代码以适应新的内存需求。
- 从 availableScreens() 函数返回正确的屏幕分辨率。
- 将 beginFrame() 函数更新为返回一个具有正确宽度和高度的 DrawingDevice 实例。
在特定的 Qt 许可证下可获得。
了解更多信息。