PySide6.QtQuick.QQuickFramebufferObject

class QQuickFramebufferObject

QQuickFramebufferObject 类是一个便捷类,用于将使用帧缓冲对象(FBO)的 OpenGL 渲染与 Qt Quick 集成。More_

PySide6.QtQuick.QQuickFramebufferObject 的继承图

概要

属性

方法

虚拟方法

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

该类仅在Qt Quick通过OpenGL渲染时有效。它与Vulkan或Metal等其他图形API不兼容。应将其视为遗留类,仅用于使Qt 5应用程序在不破坏源代码兼容性的情况下继续运行,只要它们绑定到OpenGL。

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

为了避免两个线程之间的竞争条件和读写问题,渲染器和项目永远不应该读取或写入共享变量。项目和渲染器之间的通信应主要通过synchronize()函数进行。此函数将在GUI线程被阻塞时在渲染线程上调用。

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

渲染器和FBO都在内部进行内存管理。

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

FBO的大小默认会适应项目的大小。如果希望固定大小,请将textureFollowsItemSize设置为false,并从createFramebufferObject()返回您选择的纹理。

从Qt 5.4开始,QQuickFramebufferObject类是一个texture provider,可以直接用于ShaderEffects和其他消耗纹理提供者的类中。

另请参阅

场景图和渲染

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property mirrorVerticallyᅟ: bool

此属性控制绘制时FBO内容的大小是否应垂直镜像。这使得可以轻松集成不符合标准期望的第三方渲染代码。

默认值为false

Access functions:
property textureFollowsItemSizeᅟ: bool

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

默认值为 true

Access functions:
__init__([parent=None])
Parameters:

父级QQuickItem

使用父对象 parent 构造一个新的 QQuickFramebufferObject

abstract createRenderer()
Return type:

Renderer

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

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

mirrorVertically()
Return type:

布尔

另请参阅

setMirrorVertically()

属性 mirrorVerticallyᅟ 的获取器。

mirrorVerticallyChanged(arg__1)
Parameters:

arg__1 – 布尔值

属性 mirrorVerticallyᅟ 的通知信号。

setMirrorVertically(enable)
Parameters:

enable – 布尔值

另请参阅

mirrorVertically()

属性 mirrorVerticallyᅟ 的设置器。

setTextureFollowsItemSize(follows)
Parameters:

follows – 布尔值

属性 textureFollowsItemSizeᅟ 的设置器。

textureFollowsItemSize()
Return type:

布尔

属性 textureFollowsItemSizeᅟ 的获取器。

textureFollowsItemSizeChanged(arg__1)
Parameters:

arg__1 – 布尔值

属性 textureFollowsItemSizeᅟ 的通知信号。

class Renderer

概要

方法

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

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

__init__()

构建一个新的渲染器。

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

createFramebufferObject(size)
Parameters:

大小QSize

Return type:

QOpenGLFramebufferObject

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

返回的FBO可以有任何附件。如果QOpenGLFramebufferObjectFormat指示FBO应该是多采样的,渲染器的内部实现将分配第二个FBO并将多采样的FBO复制到用于显示纹理的FBO中。

注意

某些硬件在处理小尺寸的FBO时存在问题。size 已经考虑到了这一点,因此在用固定尺寸覆盖尺寸时要小心。64x64的最小尺寸应该总是有效的。

注意

size 考虑了设备像素比,意味着它已经乘以了正确的比例因子。当将包含 QQuickFramebufferObject 项目的窗口移动到具有不同设置的屏幕时,FBO 会自动重新创建,并且此函数会以正确的大小调用。

framebufferObject()
Return type:

QOpenGLFramebufferObject

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

invalidateFramebufferObject()

synchronize()期间调用此函数以使当前的FBO无效。这将导致使用createFramebufferObject()创建一个新的FBO。

abstract render()

当需要渲染到FBO时调用此函数。此时帧缓冲区已绑定,并且glViewport已设置为与FBO大小匹配。

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

注意

不要假设在调用此函数时,OpenGL状态都已设置为默认值,或者在调用之间保持不变。Qt Quick渲染器和自定义渲染代码使用相同的OpenGL上下文。这意味着在调用此函数之前,状态可能已被Quick修改。

注意

建议在返回之前调用resetOpenGLState()。这将重置Qt Quick渲染器使用的OpenGL状态,从而避免此函数中的渲染代码所做的状态更改产生干扰。

synchronize(item)
Parameters:

项目QQuickFramebufferObject

此函数作为update()的结果被调用。

使用此函数以更新渲染器,反映项目中发生的更改。item 是实例化此渲染器的项目。在创建FBO之前,此函数会被调用一次。

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

此函数是渲染器和项目安全地读取和写入彼此成员的唯一地方。

update()

当需要再次渲染FBO时调用此函数。

此函数可以从render()调用,以强制在下一帧之前再次渲染FBO。

注意

此函数应从渲染器内部使用。要在GUI线程上更新项目,请使用update()