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。
注意: 此函数应在渲染器内部使用。要在图形用户界面线程上更新项目,请使用QQuickFramebufferObject::update() 。
© 2025 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.