QRhiResource 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 |
継承元 |
パブリック型
enum | Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, CommandBuffer } |
パブリック関数
virtual | ~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 を参照のこと。
メンバー型ドキュメント
enum 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 |
メンバ関数ドキュメント
[virtual noexcept]
QRhiResource::~QRhiResource()
デストラクタ。
基礎となるネイティブ・グラフィックス・リソースがある場合は、それを解放します(または解放の延期を要求します)。
注意: 現在のフレームのコマンドによって参照されているリソースは、QRhi::endFrame() によってフレームがサブミットされるまで解放されるべきではありません。
destroy()も参照してください 。
void QRhiResource::deleteLater()
フレームが記録されていない状態で呼び出された場合、この関数はオブジェクトを削除するのと同じことになります。しかし、QRhi::beginFrame ()とQRhi::endFrame ()の間では動作が異なります。QRhi::endFrame ()を介してフレームが送信されるまで、QRhiResource は破棄されないため、記録中のフレームによって参照されるQRhiResource オブジェクトを変更しないというQRhi の要件を満たします。
このオブジェクトを生成したQRhi がすでに破棄されている場合、オブジェクトは即座に削除されます。
deleteLater()を使用することは、多くの場合に便利であり、C++ オブジェクトのインスタンス(QRhiBuffer 、QRhiTexture など)自体も現在のフレームが終了するまで有効であることを確認する方法を提供することによって、低レベルの保証(そうすることが安全であり、それらがまだ飛行中のフレームで GPU によって使用されていないことが確実にわかるまで、基礎となるネイティブ・グラフィックス・オブジェクトが決して破棄されないこと)を補完します。
次の例は、1 つのフレームでのみ使用され、endFrame() で自動的に解放されるスローアウェイ・バッファを作成する便利な方法を示しています。(バッファが GPU によってアクセスされるフレームが完了することが保証されるまで、QRhi バックエンドはバッファの解放を延期します)。
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()も参照してください 。
[pure virtual]
void QRhiResource::destroy()
基盤となるネイティブ・グラフィックス・リソースを解放する(または解放の延期を要求する)。複数回呼び出しても問題ありませんが、それ以降呼び出すことはできません。
destroy()が呼び出されると、create()
を再度呼び出すことで、QRhiResource インスタンスを再利用できます。この場合、その下に新しいネイティブ・グラフィックス・リソースが作成されます。
注意: 現在のフレームのコマンドによって参照されているリソースは、QRhi::endFrame ()によってフレームがサブミットされるまで解放されるべきではありません。
QRhiResource デストラクタも同じタスクを実行するので、QRhiResource を削除する前にこの関数を呼び出す必要はありません。
deleteLater()も参照してください 。
quint64 QRhiResource::globalResourceId() const
このQRhiResource のグローバルで一意な識別子を返します。
ユーザーコードがこの値を直接扱う必要はほとんどありません。内部的に追跡や帳簿管理の目的で使用されます。
QByteArray QRhiResource::name() const
現在設定されているオブジェクト名を返します。デフォルトでは、名前は空です。
setName()も参照してください 。
[pure virtual]
QRhiResource::Type QRhiResource::resourceType() const
リソースのタイプを返します。
QRhi *QRhiResource::rhi() const
このリソースを作成したQRhi を返す。
このオブジェクトを作成したQRhi がすでに破棄されている場合、結果はnullptr
になります。
void QRhiResource::setName(const QByteArray &name)
オブジェクトにname を設定します。
これにより、RenderDocやXCode などのグラフィックス・デバッグ・ツールで表示されるネイティブ・グラフィックス・リソースの説明的な名前を取得できます。
適切なグラフィックス API 経由で名前を中継してネイティブオブジェクトに名前を付ける場合、QRhi::DebugMarkers がサポートされていない場合、名前は無視されることに注意してください。また、バックエンドによっては、QRhi::EnableDebugMarkers が設定されていない場合も無視されることがあります。
注意 : バッファ、レンダーバッファ、テクスチャ以外のオブジェクトでは、バックエンドによっては名前が無視されることがあります。
注: 名前は変更される可能性があります。複数のネイティブバッファに裏打ちされたQRhiBuffer のようなスロット化されたリソースの場合、QRhi はサフィックスを付加して、基盤となるネイティブバッファを容易に区別できるようにします。
name()も参照のこと 。
© 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.