PySide6.QtQuick.QQuickFramebufferObject¶
- class QQuickFramebufferObject¶
QQuickFramebufferObject
类是一个便捷类,用于将使用帧缓冲对象(FBO)的 OpenGL 渲染与 Qt Quick 集成。More_…概要¶
属性¶
方法¶
虚拟方法¶
def
createRenderer()
信号¶
注意
本文档可能包含从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
。重新实现此函数以创建一个用于渲染到FBO的渲染器。
此函数将在GUI线程被阻塞时在渲染线程上调用。
- mirrorVertically()¶
- Return type:
布尔
属性
mirrorVerticallyᅟ
的获取器。- mirrorVerticallyChanged(arg__1)¶
- Parameters:
arg__1 – 布尔值
属性
mirrorVerticallyᅟ
的通知信号。- setMirrorVertically(enable)¶
- Parameters:
enable – 布尔值
另请参阅
属性
mirrorVerticallyᅟ
的设置器。- setTextureFollowsItemSize(follows)¶
- Parameters:
follows – 布尔值
属性
textureFollowsItemSizeᅟ
的设置器。- textureFollowsItemSize()¶
- Return type:
布尔
属性
textureFollowsItemSizeᅟ
的获取器。- textureFollowsItemSizeChanged(arg__1)¶
- Parameters:
arg__1 – 布尔值
属性
textureFollowsItemSizeᅟ
的通知信号。- class Renderer¶
概要¶
方法¶
def
__init__()
def
update()
虚拟方法¶
def
render()
def
synchronize()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
Renderer
类用于实现QQuickFramebufferObject
的渲染逻辑。- __init__()¶
构建一个新的渲染器。
此函数在场景图同步阶段调用,此时GUI线程被阻塞。
当需要新的FBO时,会调用此函数。这发生在初始帧上。如果
textureFollowsItemSize
设置为true,则每次项目尺寸变化时都会再次调用此函数。返回的FBO可以有任何附件。如果QOpenGLFramebufferObjectFormat指示FBO应该是多采样的,渲染器的内部实现将分配第二个FBO并将多采样的FBO复制到用于显示纹理的FBO中。
注意
某些硬件在处理小尺寸的FBO时存在问题。
size
已经考虑到了这一点,因此在用固定尺寸覆盖尺寸时要小心。64x64的最小尺寸应该总是有效的。注意
size
考虑了设备像素比,意味着它已经乘以了正确的比例因子。当将包含QQuickFramebufferObject
项目的窗口移动到具有不同设置的屏幕时,FBO 会自动重新创建,并且此函数会以正确的大小调用。- framebufferObject()¶
- Return type:
返回当前正在渲染的帧缓冲对象。
- invalidateFramebufferObject()¶
在
synchronize()
期间调用此函数以使当前的FBO无效。这将导致使用createFramebufferObject()
创建一个新的FBO。- abstract render()¶
当需要渲染到FBO时调用此函数。此时帧缓冲区已绑定,并且
glViewport
已设置为与FBO大小匹配。函数返回后,FBO将自动解除绑定。
注意
不要假设在调用此函数时,OpenGL状态都已设置为默认值,或者在调用之间保持不变。Qt Quick渲染器和自定义渲染代码使用相同的OpenGL上下文。这意味着在调用此函数之前,状态可能已被Quick修改。
注意
建议在返回之前调用
resetOpenGLState()
。这将重置Qt Quick渲染器使用的OpenGL状态,从而避免此函数中的渲染代码所做的状态更改产生干扰。- synchronize(item)¶
- Parameters:
此函数作为
update()
的结果被调用。使用此函数以更新渲染器,反映项目中发生的更改。
item
是实例化此渲染器的项目。在创建FBO之前,此函数会被调用一次。例如,如果项目有一个由QML控制的颜色属性,应该调用
update()
并使用synchronize()将新颜色复制到渲染器中,以便它可以用于渲染下一帧。此函数是渲染器和项目安全地读取和写入彼此成员的唯一地方。
- update()¶
当需要再次渲染FBO时调用此函数。
此函数可以从
render()
调用,以强制在下一帧之前再次渲染FBO。注意
此函数应从渲染器内部使用。要在GUI线程上更新项目,请使用
update()
。