QRhiResource 类

封装原生资源对象的类的基类。 更多...

头文件 #include <QRhiResource>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
Qt 6.6
继承自
11 个类型

QRhiBufferQRhiCommandBufferQRhiComputePipelineQRhiGraphicsPipelineQRhiRenderBufferQRhiRenderPassDescriptorQRhiRenderTargetQRhiSamplerQRhiShaderResourceBindingsQRhiSwapChain,以及 QRhiTexture

公共类型

枚举Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, CommandBuffer }

公共函数

虚拟~QRhiResource()
voiddeleteLater()
virtual voiddestroy() = 0
quint64globalResourceId() const
QByteArrayname() const
virtual QRhiResource::TyperesourceType() const = 0
QRhi *rhi() const
voidsetName(const QByteArray &name)

详细描述

注意:这是一个有限兼容性保证的 RHI API,有关详细信息请参阅 QRhi

成员类型文档

枚举 QRhiResource::Type

指定资源类型。

常量
QRhiResource::Buffer0
QRhiResource::Texture1
QRhiResource::Sampler2
QRhiResource::RenderBuffer3
QRhiResource::RenderPassDescriptor4
QRhiResource::SwapChainRenderTarget5
QRhiResource::TextureRenderTarget6
QRhiResource::ShaderResourceBindings7
QRhiResource::GraphicsPipeline8
QRhiResource::SwapChain9
QRhiResource::ComputePipeline10
QRhiResource::CommandBuffer11

成员函数文档

[虚拟 noexcept] QRhiResource::~QRhiResource()

析构函数。

释放(或请求延迟释放)底层原生图形资源,如果有的话。

注意:当前帧的命令引用的资源不应在提交帧(通过 QRhi::endFrame())之前释放。

另请参阅 destroy()。

void QRhiResource::deleteLater()

当没有记录帧时调用此函数相当于删除对象。然而在QRhi::beginFrame()和QRhi::endFrame()之间,其行为不同:QRhiResource将在通过QRhi::endFrame()提交帧之前不会被销毁,从而满足QRhi不改变正在记录的帧所引用的QRhiResource对象的规范。

如果创建此对象的QRhi已经被销毁,对象将被立即删除。

在许多情况下,使用deleteLater()可以是一个有用的便利,它通过提供一种确保C++对象实例(如QRhiBuffer、QRhiTexture等)本身直到当前帧结束也保持有效的方式,来补充低级保证(在底层原生图形对象安全且不再被GPU用于仍在执行的帧中时才销毁)。

以下示例展示了创建一次使用的缓冲区,它只在一帧中使用,并在endFrame()中自动释放的便捷方式。(至于底层的原生缓冲区,通常的保证适用:QRhi后端将延迟释放这些,直到能够保证缓冲区被GPU访问的帧已经完成)

rhi->beginFrame(swapchain);
QRhiBuffer *buf = rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, 256);
buf->deleteLater(); // !
u = rhi->nextResourceUpdateBatch();
u->uploadStaticBuffer(buf, data);
// ... draw with buf
rhi->endFrame();

另请参阅 destroy()。

[纯虚函数] void QRhiResource::destroy()

释放(或请求延迟释放)底层原生图形资源。可以多次安全调用,后续调用将不执行任何操作。

一旦调用了destroy(),可以通过再次调用create()来重复使用QRhiResource实例。这将在其下方创建新的原生图形资源。

注意:当前帧的命令引用的资源不应在提交帧(通过 QRhi::endFrame())之前释放。

QRhiResource析构函数也执行相同的任务,因此删除QRhiResource之前无需调用此函数。

另请参阅deleteLater().

quint64 QRhiResource::globalResourceId() const

返回此QRhiResource的全局唯一标识符。

用户很少需要直接处理此值。它用于内部的跟踪和记录目的。

QByteArray QRhiResource::name() const

返回目前设置的对象名称。默认情况下名称为空。

另请参阅setName().

[纯虚函数] QRhiResource::Type QRhiResource::resourceType() const

返回资源类型。

QRhi *QRhiResource::rhi() const

返回创建此资源的QRhi。

如果创建此对象的QRhi已经被销毁,结果将是null指针。

void QRhiResource::setName(const QByteArray &name)

为对象设置一个名称。

这允许在如RenderDoc和XCode等图形调试工具中查看的本地图形资源上获取描述性名称。

使用适当的图形API传递名称来命名本地对象时,请注意,当不支持QRhi::DebugMarkers 时,名称会被忽略,并且根据后端,当QRhi::EnableDebugMarkers 未设置时,名称也可能被忽略。

注意: 名称可能对于缓冲区、渲染缓冲区和纹理之外的其它对象会被忽略,具体取决于后端。

注意: 名称可能会被修改。对于如QRhiBuffer这样的槽资源,它是多个本地缓冲区的支持,QRhi 将会追加后缀,以便底层本地缓冲区容易区分。

另请参阅 name()。

© 2024 The Qt Company Ltd. 本 文档中的贡献包含的版权属于其各自的拥有者。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可证1.3版本许可的。Qt及其相关标志是The Qt Company Ltd în芬兰及其它全球国家的商标。所有其它商标均属于其各自的所有者。