QRhiRenderBuffer Class

渲染缓冲区资源。更多

头文件: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Qt 6.6
继承: QRhiResource

公共类型

struct NativeRenderBuffer
enum Flag { UsedWithSwapChainOnly }
flags Flags
enum Type { DepthStencil, Color }

公共函数

virtual bool create() = 0
virtual bool createFrom(QRhiRenderBuffer::NativeRenderBuffer src)
QRhiRenderBuffer::Flags flags() const
QSize pixelSize() const
int sampleCount() const
void setFlags(QRhiRenderBuffer::Flags f)
void setPixelSize(const QSize &sz)
void setSampleCount(int s)
void setType(QRhiRenderBuffer::Type t)
QRhiRenderBuffer::Type type() const

重新实现的公共函数

virtual QRhiResource::Type resourceType() const override

详细说明

渲染缓冲区无法采样或读取,但在某些情况下比纹理更具优势:

DepthStencil 渲染缓冲区可以通过某些 API 进行懒散分配,并由瞬态内存提供支持。在某些平台上,这可能意味着深度/模版缓冲区完全不使用物理支持。

Color renderbuffer 非常有用,因为即使 不支持,也可以支持 。QRhi::MultisampleTexture QRhi::MultisampleRenderBuffer

后端如何实现呈现缓冲区并不向应用程序公开。在某些情况下,它可能由普通纹理支持,而在另一些情况下,可能会使用另一种本地资源。

QRhiSwapChain 的颜色缓冲区一起用作(且仅用作)深度模版缓冲区的渲染缓冲区应设置UsedWithSwapChainOnly 标志。这样做有两个目的:根据后端和底层应用程序接口的不同,此类缓冲区的效率会更高,而且QRhi 会自动调整大小以匹配颜色缓冲区,这意味着此类渲染缓冲区无需调用setPixelSize() 和create()。

注: 这是一个 RHI API,兼容性保证有限,详情请查看QRhi

成员类型文档

枚举 QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags

flags() 和setFlags() 的标志值

常量说明
QRhiRenderBuffer::UsedWithSwapChainOnly1 << 0对于DepthStencil 渲染缓冲区,这表示该渲染缓冲区仅与QRhiSwapChain 结合使用,而绝不会以任何其他方式使用。这将提供自动大小调整和资源重建功能,因此只要设置了该标志,就无需调用setPixelSize() 或create() 。该标志值还可能触发特定的后端行为,例如在使用单独窗口系统接口 API(EGL、GLX 等)的 OpenGL 中,该标志尤为重要,因为它可以避免创建任何实际的呈现缓冲区资源,因为根据QSurfaceFormat 的要求,已经有窗口系统提供的深度/模版缓冲区。

Flags 类型是QFlags<Flag> 的类型定义。它存储 Flag 值的 OR 组合。

enum QRhiRenderBuffer::Type

指定呈现缓冲区的类型

常量描述
QRhiRenderBuffer::DepthStencil0组合深度/模版
QRhiRenderBuffer::Color1颜色

成员函数文档

[pure virtual] bool QRhiRenderBuffer::create()

创建相应的本地图形资源。如果由于之前的 create() 没有相应的destroy() 而导致资源已经存在,则会先隐式调用destroy()。

成功时返回true ,图形操作失败时返回false 。无论返回值如何,调用destroy() 总是安全的。

[virtual] bool QRhiRenderBuffer::createFrom(QRhiRenderBuffer::NativeRenderBuffer src)

create() 类似,但不会创建新的本地呈现缓冲区对象。取而代之的是使用src 指定的本地呈现缓冲区对象。

这样就可以从外部图形引擎导入现有的呈现缓冲区对象(必须属于同一设备或共享上下文,具体取决于图形 API)。

注: 目前仅适用于 OpenGL。该函数的存在只是为了允许导入绑定到某些特殊外部对象(如 EGLImageKHR)的呈现缓冲区对象。一旦应用程序执行了 glEGLImageTargetRenderbufferStorageOES 调用,就可以将呈现缓冲区对象传递给此函数,以创建一个包装QRhiRenderBuffer ,然后再将其作为颜色附件传递给QRhiTextureRenderTarget ,从而实现对 EGLImage 的呈现。

注意: pixelSize(),sampleCount(), 和flags() 仍必须正确设置。如果向QRhi::newRenderBuffer() 传递不正确的大小和其他值,然后在其后使用 createFrom() 并期望仅凭本地 renderbuffer 对象就足以推断出这些值,这样做是错误的,会导致问题。

注意: QRhiRenderBuffer 不会取得本地对象的所有权,而且destroy() 也不会释放该对象。

注意: 只有当QRhi::RenderBufferImport 功能报告为supported 时,才会执行该函数。否则,该函数不会执行任何操作,返回值为false

成功时返回true ,不支持时返回false

QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const

返回标志。

另请参见 setFlags()。

QSize QRhiRenderBuffer::pixelSize() const

返回像素大小。

另请参见 setPixelSize()。

[override virtual] QRhiResource::Type QRhiRenderBuffer::resourceType() const

重实现:QRhiResource::resourceType() 常量。

返回资源类型。

int QRhiRenderBuffer::sampleCount() const

返回采样计数。1 表示无多采样抗锯齿。

另请参见 setSampleCount()。

void QRhiRenderBuffer::setFlags(QRhiRenderBuffer::Flags f)

将标志设置为f

另请参阅 flags() 。

void QRhiRenderBuffer::setPixelSize(const QSize &sz)

将大小(像素)设为sz

另请参阅 pixelSize() 。

void QRhiRenderBuffer::setSampleCount(int s)

将采样计数设置为s

另请参阅 sampleCount() 。

void QRhiRenderBuffer::setType(QRhiRenderBuffer::Type t)

将类型设为t

另请参阅 type() 。

QRhiRenderBuffer::Type QRhiRenderBuffer::type() const

返回 renderbuffer 类型。

另请参阅 setType()。

© 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.