QRhiResource 类
封装原生资源对象的类的基类。 更多...
头文件 | #include <QRhiResource> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
自 | Qt 6.6 |
继承自 |
公共类型
枚举 | Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, CommandBuffer } |
公共函数
虚拟 | ~QRhiResource() |
void | deleteLater() |
virtual void | destroy() = 0 |
quint64 | globalResourceId() const |
QByteArray | name() const |
virtual QRhiResource::Type | resourceType() const = 0 |
QRhi * | rhi() const |
void | setName(const QByteArray &name) |
详细描述
注意:这是一个有限兼容性保证的 RHI API,有关详细信息请参阅 QRhi。
成员类型文档
枚举 QRhiResource::Type
指定资源类型。
常量 | 值 |
---|---|
QRhiResource::Buffer | 0 |
QRhiResource::Texture | 1 |
QRhiResource::Sampler | 2 |
QRhiResource::RenderBuffer | 3 |
QRhiResource::RenderPassDescriptor | 4 |
QRhiResource::SwapChainRenderTarget | 5 |
QRhiResource::TextureRenderTarget | 6 |
QRhiResource::ShaderResourceBindings | 7 |
QRhiResource::GraphicsPipeline | 8 |
QRhiResource::SwapChain | 9 |
QRhiResource::ComputePipeline | 10 |
QRhiResource::CommandBuffer | 11 |
成员函数文档
[虚拟 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芬兰及其它全球国家的商标。所有其它商标均属于其各自的所有者。