QRhiRenderPassDescriptor Class
レンダリングパスリソース。詳細...
| ヘッダー: | #include <rhi/qrhi.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake: | QT += gui-private |
| 以下のように: | Qt 6.6 |
| 継承元: | QRhiResource |
パブリック関数
| virtual bool | isCompatible(const QRhiRenderPassDescriptor *other) const = 0 |
| virtual const QRhiNativeHandles * | nativeHandles() |
| virtual QRhiRenderPassDescriptor * | newCompatibleRenderPassDescriptor() const = 0 |
| virtual QVector<quint32> | serializedFormat() const = 0 |
再実装されたパブリック関数
| virtual QRhiResource::Type | resourceType() const override |
詳細な説明
レンダリングパス(基盤となるグラフィックスAPIにそのような概念が存在する場合)は、アタッチメント(カラー、深度、ステンシル)の集合であり、それらのアタッチメントがどのように使用されるかを記述するものです。
注:これは 互換性の保証が限定的な RHI API です。詳細については、QRhi を参照してください。
メンバ関数のドキュメント
[pure virtual] bool QRhiRenderPassDescriptor::isCompatible(const QRhiRenderPassDescriptor *other) const
other QRhiRenderPassDescriptor が本 と互換性がある場合、true を返します。これは、this およびother がQRhiGraphicsPipeline::setRenderPassDescriptor() 内で互換的に使用できることを意味します。
レンダーパス記述子の互換性の概念は、QRhiShaderResourceBindings インスタンスのlayout compatibility に似ています。これにより、QRhiGraphicsPipeline インスタンスの再利用性が向上します。例えば、QRhiGraphicsPipeline インスタンスキャッシュは、単にポインタを比較するのではなく、これらの関数を使用して一致するパイプラインを検索することが期待されます。これにより、互換性がある限り、異なるQRhiRenderPassDescriptor とQRhiShaderResourceBindings をそのパイプラインと組み合わせて使用することが可能になります。
互換性の正確な詳細は、基盤となるグラフィックス API によって異なります。同じQRhiTextureRenderTarget からの 2 つのレンダーパス記述子created は、常に互換性があります。
QRhiShaderResourceBindings と同様に、既存のオブジェクトが2つ用意されていなくても互換性をテストすることができます。serializedFormat() を呼び出して不透明なブロブを抽出することで、返されたベクトルを別のQRhiRenderPassDescriptor のserializedFormat() と比較して互換性をテストすることができます。これは、パイプラインが当初構築されたQRhiRenderPassDescriptor が利用できなくなった場合でも(ただし、そのserializedFormat() から返されたデータは依然として利用可能である場合)、QRhiRenderPassDescriptor とQRhiGraphicsPipeline の互換性をテストできるため、特定の状況では有益です。
newCompatibleRenderPassDescriptor() およびserializedFormat()も参照してください 。
[virtual] const QRhiNativeHandles *QRhiRenderPassDescriptor::nativeHandles()
バックエンド固有のQRhiNativeHandles サブクラス(QRhiVulkanRenderPassNativeHandles など)へのポインタを返します。バックエンドが基盤となるネイティブリソースの公開をサポートしていない場合、戻り値はnullptr となります。
QRhiVulkanRenderPassNativeHandlesも参照してください 。
[pure virtual] QRhiRenderPassDescriptor *QRhiRenderPassDescriptor::newCompatibleRenderPassDescriptor() const
このオブジェクトとcompatible である新しいQRhiRenderPassDescriptor を返します。
この関数を使用すると、QRhiRenderPassDescriptor を複製することができます。返されるオブジェクトはすぐに使用可能であり、所有権は呼び出し元に譲渡されます。QRhiRenderPassDescriptor オブジェクトのクローン作成は、オブジェクトがグラフィックスパイプラインに関連するデータ構造に格納されている場合(新しいパイプラインの作成を可能にするため、その作成には renderpass descriptor オブジェクトが必要となる)、また、レンダリングターゲットから作成された renderpass descriptor のライフタイムがパイプラインよりも短い場合に有用となります。 (例えば、エンジンが、レンダーパスを作成したテクスチャやレンダーターゲットとともにレンダーパスを管理・破棄するためです) このような状況では、クローンされたバージョンをデータ構造に格納し、所有権も同時に譲渡することが有益となる場合があります。
isCompatible()も参照してください 。
[override virtual] QRhiResource::Type QRhiRenderPassDescriptor::resourceType() const
QRhiResource::resourceType() const を再実装します。
リソースの型を返します。
[pure virtual] QVector<quint32> QRhiRenderPassDescriptor::serializedFormat() const
compatibility に関連するデータを記述する不透明なブロブを含む整数のベクトルを返します。
2つのQRhiRenderPassDescriptor オブジェクトrp1 とrp2 が与えられた場合、この関数から返されるデータが同一であれば、rp1->isCompatible(rp2) が成り立ち、その逆も同様に成り立ちます。
注: 返されるデータは 、そのオブジェクトが属するQRhi の存続期間中、メモリへの格納や比較に使用することを意図しています。ディスクへの保存、プロセス間の再利用、あるいはバックエンドが異なる可能性のある複数のQRhi インスタンスでの使用を意図したものではありません。
注:この関数の呼び出しは 、バックエンドがこの関数内でデータを計算するのではなく、すでに計算済みのデータ系列を返すことを想定しているため、低コストな操作となることが期待されます。
ライブラリの一部として再利用可能なコンポーネントを作成する場合、ライブラリのクライアントによって管理されるQRhiRenderTarget (スワップチェーンであれテクスチャであれ)を対象としてグラフィックスパイプラインが作成・維持されるため、コンポーネントは変化するQRhiRenderPassDescriptor に対応できなければなりません。 例えば、レンダリングターゲットが変更されると、色形式やアタッチメントが異なる可能性があるため、以前のQRhiRenderPassDescriptor が(少なくとも新しいレンダリングターゲットに関しては)無効になるからです。あるいは、variable rate shading が動的に使用されるようになるためです。 この問題に対処するための簡単な手法として、毎フレーム以下のチェックを行い、以前のフレームと比較してレンダリングターゲットに何らかの違いが生じたために、パイプラインを新しいQRhiRenderPassDescriptor に関連付ける必要がある場合を判別する方法があります:
QRhiRenderPassDescriptor *rp = m_renderTarget->renderPassDescriptor();
if (m_pipeline && rp->serializedFormat() != m_renderPassFormat) {
m_pipeline->setRenderPassDescriptor(rp);
m_renderPassFormat = rp->serializedFormat();
m_pipeline->create();
}
// remember to store m_renderPassFormat also when creating m_pipeline the first timeisCompatible()も参照してください 。
© 2026 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.