QQuickFramebufferObject 类

QQuickFramebufferObject 类提供了一个便利类,用于使用帧缓冲对象(FBO)将 OpenGL 渲染与 Qt Quick 集成。更多...

头文件 #include <QQuickFramebufferObject>
CMakefind_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmakeQT += quick
继承 QQuickItem

公共类型

classRenderer

属性

公共函数

QQuickFramebufferObject(QQuickItem *parent = nullptr)
virtual QQuickFramebufferObject::Renderer *createRenderer() const = 0
boolmirrorVertically() const
voidsetMirrorVertically(bool enable)
voidsetTextureFollowsItemSize(bool follows)
booltextureFollowsItemSize() const

重写的公共函数

virtual boolisTextureProvider() const override
virtual voidreleaseResources() override
virtual QSGTextureProvider *textureProvider() const override

信号

详细描述

警告:此类仅在 Qt Quick 通过 OpenGL 渲染时才功能正常。它与其他图形 API(如 Vulkan 或 Metal)不兼容。它应被视为仅存在以便使 Qt 5 应用程序能够继续运行而不破坏源兼容性的遗留类,只要它们绑定到 OpenGL。

在大多数平台上,渲染将在一个 专用线程 上进行。因此,QQuickFramebufferObject 类强制在项目实现与 FBO 渲染之间保持严格的分离。所有项目逻辑,如属性和 QML 所需的 UI 相关辅助函数,应位于 QQuickFramebufferObject 类的子类中。与渲染相关的一切必须位于 QQuickFramebufferObject::Renderer 类中。

为了防止两个线程之间的竞争条件和读写问题,确保渲染器和组件从不读取或写入共享变量非常重要。组件和渲染器之间的通信应该主要通过QQuickFramebufferObject::Renderer::synchronize()函数进行。此函数将在渲染线程上调用,同时GUI线程将被阻塞。

使用排队连接或事件进行组件和渲染器之间的通信也是可能的。

渲染器和FBO都将由内部管理内存。

为了将渲染到FBO中,用户应继承Renderer类并重新实现其Renderer::render()函数。Renderer子类从createRenderer()返回。

FBO的大小默认将适应组件的大小。如果需要固定大小,则将textureFollowsItemSize设置为false,并从QQuickFramebufferObject::Renderer::createFramebufferObject()返回您选择的纹理。

从Qt 5.4开始,QQuickFramebufferObject类是一个纹理提供者,可以直接用于<та href="qml-qtquick-shadereffect.html" translate="no">ShaderEffects和其他消耗纹理提供者的类。

另请参阅场景图和渲染

属性文档

mirrorVertically : bool

此属性控制FBO内容的尺寸是否在绘图时垂直镜像。这允许轻松集成非常规期望的第三方渲染代码。

默认值是false

访问函数

boolmirrorVertically() const
voidsetMirrorVertically(bool 启用)

通知信号

voidmirrorVerticallyChanged(bool)

textureFollowsItemSize : bool

此属性控制FBO纹理的大小是否应随QQuickFramebufferObject组件的尺寸同步。当此属性为false时,FBO将在第一次显示时创建一次。如果设置为true,则每次组件尺寸变化时都会重新创建FBO。

默认值是true

访问函数

booltextureFollowsItemSize() const
voidsetTextureFollowsItemSize(bool follows)

通知信号

voidtextureFollowsItemSizeChanged(bool)

成员函数文档

QQuickFramebufferObject::QQuickFramebufferObject(QQuickItem * = nullptr)

使用父级(parent)构建一个新的QQuickFramebufferObject。

[纯虚函数] QQuickFramebufferObject::Renderer *QQuickFramebufferObject::createRenderer() const

重新实现此函数以创建一个用于渲染到FBO的渲染器。

此函数将在渲染线程上调用,同时GUI线程将被阻塞。

[重载虚函数] bool QQuickFramebufferObject::isTextureProvider() const

重新实现了QQuickItem::isTextureProvider() const

[覆盖虚函数] void QQuickFramebufferObject::releaseResources()

重实现: QQuickItem::releaseResources.

[覆盖虚函数] QSGTextureProvider *QQuickFramebufferObject::textureProvider() const

重实现: QQuickItem::textureProvider() const.

© 2024 Qt公司版权所有。本内容的文档贡献者拥有其各自的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本的条款进行许可的。Qt及其商标是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。