渲染器类

QQuickFramebufferObject::Renderer

受保护的函数

渲染器()
虚拟~Renderer()
虚拟 QOpenGLFramebufferObject *createFramebufferObject(const QSize &size)
QOpenGLFramebufferObject *framebufferObject() const
voidinvalidateFramebufferObject()
虚拟 voidrender() = 0
虚拟 voidsynchronize(QQuickFramebufferObject *item)
voidupdate()

详细描述

用于实现 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 公司有限公司的商标。所有其他商标均为各自所有者的财产。