本页内容

QQuickFramebufferObject::Renderer Class

class QQuickFramebufferObject::Renderer

受保护函数

Renderer()
virtual ~Renderer()
virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size)
QOpenGLFramebufferObject *framebufferObject() const
void invalidateFramebufferObject()
virtual void render() = 0
virtual void synchronize(QQuickFramebufferObject *item)
void update()

详细说明

QQuickFramebufferObject::Renderer 类用于实现QQuickFramebufferObject 的渲染逻辑。

成员函数文档

[protected] Renderer::Renderer()

创建一个新的渲染器。

该函数在场景图同步阶段被调用,此时 GUI 线程处于阻塞状态。

[virtual noexcept protected] Renderer::~Renderer()

当“QQuickFramebufferObject ”项的场景图资源被清理时,渲染器会自动被删除。

此函数在渲染线程上被调用。

[virtual protected] QOpenGLFramebufferObject *Renderer::createFramebufferObject(const QSize &size)

当需要新的 FBO 时,会调用此函数。这通常发生在初始帧。如果将 `QQuickFramebufferObject::textureFollowsItemSize ` 设置为 `true`,则每当项的尺寸发生变化时,都会再次调用此函数。

返回的 FBO 可以具有任何附加设置。如果 `QOpenGLFramebufferObjectFormat ` 指示该 FBO 应进行多采样,则渲染器的内部实现会分配第二个 FBO,并将多采样后的 FBO 复制到用于显示纹理的 FBO 中。

注意:某些 硬件在处理较小的 FBO 尺寸时会出现问题。size 已将此情况考虑在内,因此在使用固定尺寸覆盖原有尺寸时请务必谨慎。最小尺寸设置为 64x64 通常都能正常工作。

注意: size 会考虑设备像素比例,这意味着它已经乘以了正确的缩放因子。当将包含 `QQuickFramebufferObject ` 项的窗口移动到设置不同的屏幕时,FBO 会自动重建,并且该函数会以正确的大小被调用。

[protected] QOpenGLFramebufferObject *Renderer::framebufferObject() const

返回当前正在渲染到的帧缓冲区对象。

[protected] void Renderer::invalidateFramebufferObject()

在调用synchronize() 时调用此函数,以使当前的 FBO 失效。这将导致通过createFramebufferObject() 创建一个新的 FBO。

[pure virtual protected] void Renderer::render()

当需要将内容渲染到 FBO 中时,会调用此函数。此时帧缓冲区已绑定,且glViewport 已配置为与 FBO 尺寸匹配。

该函数返回后,FBO将自动解除绑定。

注意:请 勿假设在调用此函数时 OpenGL 状态已全部恢复为默认值,也请 勿假设该状态会在两次调用之间保持不变。Qt Quick 渲染器和自定义渲染代码均使用同一个 OpenGL 上下文。这意味着在调用此函数之前,Quick 可能已经修改了该状态。

注意:建议 在返回前调用QQuickOpenGLUtils::resetOpenGLState()。这将重置Qt Quick 渲染器所使用的 OpenGL 状态,从而避免本函数中渲染代码所做的状态更改造成干扰。

[virtual protected] void Renderer::synchronize(QQuickFramebufferObject *item)

该函数是由QQuickFramebufferObject::update() 调用的。

使用此函数将项目中发生的更改同步到渲染器。item 是实例化此渲染器的项目。该函数会在 FBO 创建之前被调用一次。

例如,如果项有一个由 QML 控制的颜色属性,则应调用QQuickFramebufferObject::update() 并使用 synchronize() 将新颜色复制到渲染器中,以便将其用于渲染下一帧。

此函数是渲染器和项之间安全地读写彼此成员的唯一场所。

[protected] void Renderer::update()

当需要重新渲染 FBO 时,调用此函数。

可从 `render()` 中调用此函数,以强制在下一帧渲染前重新渲染 FBO。

注意:此 函数应在渲染器内部使用。若要在 GUI 线程上更新该项,请使用 `QQuickFramebufferObject::update()`。

© 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.