QQuickFramebufferObject 类
QQuickFramebufferObject 类提供了一个便利类,用于使用帧缓冲对象(FBO)将 OpenGL 渲染与 Qt Quick 集成。更多...
头文件 | #include <QQuickFramebufferObject> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake | QT += quick |
继承 | QQuickItem |
公共类型
class | Renderer |
属性
- mirrorVertically : bool
- textureFollowsItemSize : bool
公共函数
QQuickFramebufferObject(QQuickItem *parent = nullptr) | |
virtual QQuickFramebufferObject::Renderer * | createRenderer() const = 0 |
bool | mirrorVertically() const |
void | setMirrorVertically(bool enable) |
void | setTextureFollowsItemSize(bool follows) |
bool | textureFollowsItemSize() const |
重写的公共函数
virtual bool | isTextureProvider() const override |
virtual void | releaseResources() override |
virtual QSGTextureProvider * | textureProvider() const override |
信号
void | mirrorVerticallyChanged(bool) |
void | textureFollowsItemSizeChanged(bool) |
详细描述
警告:此类仅在 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
。
访问函数
bool | mirrorVertically() const |
void | setMirrorVertically(bool 启用) |
通知信号
void | mirrorVerticallyChanged(bool) |
textureFollowsItemSize : bool
此属性控制FBO纹理的大小是否应随QQuickFramebufferObject组件的尺寸同步。当此属性为false时,FBO将在第一次显示时创建一次。如果设置为true,则每次组件尺寸变化时都会重新创建FBO。
默认值是true
。
访问函数
bool | textureFollowsItemSize() const |
void | setTextureFollowsItemSize(bool follows) |
通知信号
void | textureFollowsItemSizeChanged(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
© 2024 Qt公司版权所有。本内容的文档贡献者拥有其各自的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本的条款进行许可的。Qt及其商标是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。