本页内容

QQuickWindow::GraphicsStateInfo Struct

struct QQuickWindow::GraphicsStateInfo

描述了在调用beginExternalCommands()时,RHI的某些图形状态。更多内容...

公共变量

详细说明

成员变量文档

int GraphicsStateInfo::currentFrameSlot

该变量在录制帧时保存当前帧槽索引。

当场景图通过 Vulkan 或 Metal 等底层 3D API 进行渲染时,Qt 有责任确保在开始新帧时进行阻塞,并检查 CPU 是否已比 GPU 领先一定帧数(因为在帧号current -FramesInFlight 中提交的命令缓冲区尚未完成)。 对于其他图形 API(如 OpenGL 或 Direct 3D 11),这种级别的控制不会暴露给 API 客户端,而是由图形 API 的实现来处理。

由此延伸,这也意味着资源(如缓冲区)的适当双缓冲(或三缓冲)应由图形 API 客户端来管理。 最常见的情况是,当帧与帧之间数据发生变化时,统一缓冲区在提交帧时无法简单地更改其内容,因为当开始记录下一帧时,该帧可能仍然处于活动状态(“正在处理中”)。 为了避免管道停滞,一种方法是在后台设置多个缓冲区(和内存分配),从而针对此类资源实现至少双缓冲方案。

直接使用 Vulkan 等图形 API 进行渲染的应用程序,可能需要对其图形资源执行类似的双缓冲或三缓冲操作,且该操作需与 Qt 渲染引擎的帧提交过程兼容。 这需要了解“处理中帧”的最大数量(通常为 2 或 3)以及当前帧槽索引——该索引从 0、1、…、FramesInFlight-1 开始计数,达到上限后循环重置。 前者通过framesInFlight 变量提供。后者(即当前索引)即为此值。

关于在实际中使用这些值的示例,请参阅 {场景图 - QML 下的 Vulkan} 和 {场景图 - Vulkan 纹理导入} 示例。

int GraphicsStateInfo::framesInFlight

该变量存储飞行中保留的帧数上限。

详细说明请参见currentFrameSlot 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.