渲染器类
类 QQuickFramebufferObject::Renderer受保护的函数
渲染器() | |
虚拟 | ~Renderer() |
虚拟 QOpenGLFramebufferObject * | createFramebufferObject(const QSize &size) |
QOpenGLFramebufferObject * | framebufferObject() const |
void | invalidateFramebufferObject() |
虚拟 void | render() = 0 |
虚拟 void | synchronize(QQuickFramebufferObject *item) |
void | update() |
详细描述
用于实现 QQuickFramebufferObject::Renderer 的渲染逻辑的类。
成员函数文档
[protected]
Renderer::Renderer()
构建一个新的渲染器。
该函数在场景图同步阶段GUI线程阻塞时调用。
[虚拟 noexcept 保护]
Renderer::~Renderer()
当清理 QQuickFramebufferObject 项的场景图资源时,渲染器会自动删除。
该函数在渲染线程上调用。
[虚拟保护]
QOpenGLFramebufferObject *Renderer::createFramebufferObject(const QSize &size)
当需要新的 FBO 时调用此函数。这种情况在初始帧中发生。如果将 QQuickFramebufferObject::textureFollowsItemSize 设置为 true,则在每次项尺寸改变时都调用。
返回的 FBO 可以有任何附件。如果 QOpenGLFramebufferObjectFormat 指示 FBO 应该是多次采样的,则渲染器的内部实现将分配第二个 FBO,并将多采样 FBO 复制到用于显示纹理的 FBO。
注意:有些硬件对小 FBO 尺寸有问题。size 考虑到这一点,因此当用固定大小覆盖大小时要小心。最小尺寸应为 64x64,始终有效。
注意:size 考虑到设备像素比,这意味着它已经乘以了正确的缩放因子。当将包含 QQuickFramebufferObject 项的窗口移动到具有不同设置的屏幕时,FBO 会自动重新创建,并且此函数会调用正确的尺寸。
[受保护]
QOpenGLFramebufferObject *Renderer::framebufferObject() const
返回当前正在渲染的目标帧缓冲对象。
[受保护]
void Renderer::invalidateFramebufferObject()
在调用 synchronize() 时调用此函数以使当前 FBO 无效。这将导致使用 createFramebufferObject() 创建新的 FBO。
[纯虚受保护]
void Renderer::render()
当应将 FBO 渲染到帧缓冲区时调用此函数。在此点加载帧缓冲区,并将 glViewport
设置为与 FBO 大小匹配。
函数返回后将自动取消绑定 FBO。
注意:不可以假设在调用此函数时所有 OpenGL 状态都设置为默认值,或者它在调用之间保持不变。Qt Quick 渲染器和自定义渲染代码都使用相同的 OpenGL 上下文。这意味着状态可能已被 Quick 在调用此函数之前修改。
注意:建议在返回之前调用 QQuickOpenGLUtils::resetOpenGLState()。这将重置 Qt Quick 渲染器使用的 OpenGL 状态,从而避免此函数中渲染代码引起的状态改变干扰。
[虚受保护]
void Renderer::synchronize(QQuickFramebufferObject *item)
此函数作为对 QQuickFramebufferObject::update() 的响应被调用。
使用此函数以更新由项目发生的更改。 item 是实例化此渲染器的项目。在创建 FBO 之前调用该函数一次。
例如,如果项目有一个颜色属性并由 QML 控制,应该调用 QQuickFramebufferObject::update() 并使用 synchronize() 将新的颜色复制到渲染器中,以便它可以在渲染下一帧时使用。
此函数是渲染器和项目可以安全读取和写入彼此成员的唯一位置。
[受保护]
void Renderer::update()
当 FBO 应再次渲染时应调用此函数。
可以从 render() 中调用此函数,以在下一帧之前强制 FBO 再次渲染。
注意:应在此函数内部调用此函数。要更新 GUI 线程上的项目,请使用 QQuickFramebufferObject::update()。
© 2024 Qt 公司有限公司。本文件中包含的文档贡献者是各自版权的拥有者。本文件中的文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款授予的。Qt及其相关标志是芬兰和/或其他国家的 Qt 公司有限公司的商标。所有其他商标均为各自所有者的财产。