QRhiShaderResourceBinding Class
単一のバインディングポイントのシェーダーリソースを記述します。詳細...
Header: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
qmake: | QT += gui-private |
Since: | Qt 6.6 |
パブリック型
enum | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
flags | StageFlags |
enum | Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore } |
パブリック関数
bool | isLayoutCompatible(const QRhiShaderResourceBinding &other) const |
静的パブリック・メンバー
QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
QRhiShaderResourceBinding | imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
QRhiShaderResourceBinding | imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
QRhiShaderResourceBinding | imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
QRhiShaderResourceBinding | sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler) |
QRhiShaderResourceBinding | sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers) |
QRhiShaderResourceBinding | sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler) |
QRhiShaderResourceBinding | texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex) |
QRhiShaderResourceBinding | textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex) |
QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
QRhiShaderResourceBinding | uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size) |
関連する非メンバー
size_t | qHash(const QRhiShaderResourceBinding &b, size_t seed = 0) |
bool | operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
bool | operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
詳細説明
QRhiShaderResourceBindingは直接構築することはできません。代わりに、uniformBuffer() やsampledTexture() などの静的関数を使用してインスタンスを取得してください。
注意: これは互換性が限定的に保証された RHI API です。詳細はQRhi を参照してください。
メンバ型ドキュメント
enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags
シェーダーリソースがどのステージで見えるかを示すフラグ値
定数 | 値 | 説明 |
---|---|---|
QRhiShaderResourceBinding::VertexStage | 1 << 0 | 頂点ステージ |
QRhiShaderResourceBinding::TessellationControlStage | 1 << 1 | テッセレーション制御(ハルシェーダ)ステージ |
QRhiShaderResourceBinding::TessellationEvaluationStage | 1 << 2 | テッセレーション評価(ドメインシェーダ)ステージ |
QRhiShaderResourceBinding::FragmentStage | 1 << 4 | フラグメント(ピクセルシェーダ)ステージ |
QRhiShaderResourceBinding::ComputeStage | 1 << 5 | 計算ステージ |
QRhiShaderResourceBinding::GeometryStage | 1 << 3 | ジオメトリステージ |
StageFlags 型はQFlags<StageFlag> の typedef です。StageFlagの値のORの組み合わせを格納します。
enum QRhiShaderResourceBinding::Type
バインディングポイントにバインドされているシェーダーリソースのタイプを指定します。
定数 | 値 | 説明 |
---|---|---|
QRhiShaderResourceBinding::UniformBuffer | 0 | ユニフォームバッファ |
QRhiShaderResourceBinding::SampledTexture | 1 | 結合画像サンプラー(テクスチャとサンプラーのペア)。基礎となる3D APIに関連するシェーディング言語がこの概念をサポートしていない場合でも(D3DやHLSLなど)、シェーダトランスレーションレイヤがバインディングポイントまたはシェーダレジスタの適切な変換と再マッピングを行うため、これはまだサポートされています。 |
QRhiShaderResourceBinding::Texture | 2 | テクスチャ(別) |
QRhiShaderResourceBinding::Sampler | 3 | サンプラー(別個) |
QRhiShaderResourceBinding::ImageLoad | 4 | イメージロード(GLSL の場合、これはイメージオブジェクトとしてシェーダに公開されたテクスチャの単一レベル、および 1 つまたはすべてのレイヤでimageLoad() を実行することに対応します。) |
QRhiShaderResourceBinding::ImageStore | 5 | イメージストア(GLSL の場合、これはイメージオブジェクトとしてシェーダに公開されたテクスチャの単一レベル、および 1 つまたはすべてのレイヤに対してimageStore() または imageAtomic*() を実行することに対応します)。 |
QRhiShaderResourceBinding::ImageLoadStore | 6 | イメージのロードとストア |
QRhiShaderResourceBinding::BufferLoad | 7 | ストレージバッファストア(GLSL の場合、これはシェーダストレージバッファ からの読み込みに対応する) |
QRhiShaderResourceBinding::BufferStore | 8 | ストレージバッファストア(GLSLでは、これはシェーダストレージバッファへの書き込みに対応する) |
QRhiShaderResourceBinding::BufferLoadStore | 9 | ストレージバッファのロードとストア |
メンバ関数ドキュメント
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
指定されたbinding 番号とパイプラインstage を持つ読み込み専用ストレージバッファのシェーダーリソースバインディングを返します。
注: buf が NULL でない場合、QRhiBuffer::StorageBuffer で作成されている必要があります。
注: buf は NULL でもかまいません。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
与えられたbinding 番号とパイプラインstage を持つ読み込み専用ストレージバッファのシェーダーリソースバインディングを返します。このオーバーロードは、offset およびsize で指定された領域のみをバインドします。
注: buf が NULL でない場合は、QRhiBuffer::StorageBuffer で作成されている必要があります。
注: buf はNULLでもよい。指定されていないリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
指定されたbinding 番号とパイプラインstage を持つ読み書きストレージバッファ用のシェーダーリソースバインディングを返します。
注: buf が NULL でない場合は、QRhiBuffer::StorageBuffer で作成されている必要があります。
注 :buf は NULL でもかまいません。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
指定されたbinding 番号とパイプラインstage を持つ読み書きストレージバッファのシェーダーリソースバインディングを返します。このオーバーロードは、offset およびsize で指定された領域のみをバインドします。
注: buf が NULL でない場合は、QRhiBuffer::StorageBuffer で作成されている必要があります。
注: buf はNULLでもよい。指定されていないリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
与えられたbinding 番号とパイプラインstage を持つ書き込み専用ストレージバッファのシェーダーリソースバインディングを返します。
注: buf が NULL でない場合、QRhiBuffer::StorageBuffer で作成されている必要があります。
注 :buf は NULL でもかまいません。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
与えられたbinding 番号とパイプラインstage を持つ書き込み専用ストレージバッファのシェーダーリソースバインディングを返します。このオーバーロードは、offset およびsize で指定された領域のみをバインドします。
注: buf が NULL でない場合は、QRhiBuffer::StorageBuffer で作成されている必要があります。
注: buf はNULLでもよい。指定されていないリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: バッファロード/ストアは、コンピュートパイプライン内でのみ使用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックス・パイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
指定されたbinding 番号とパイプラインstage を持つ読み込み専用ストレージイメージのシェーダーリソースバインディングを返します。イメージのロードオペレーションは、指定されたlevel のすべてのレイヤーにアクセスできます(したがって、テクスチャがキューブマップの場合、シェーダは image2D の代わりに imageCube を使用する必要があります)。
注意: tex が NULL でない場合は、QRhiTexture::UsedWithLoadStore で作成されている必要があります。
注: tex は NULL でもかまいません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings とともに使用しなければならない。
注意: 画像のロード/ストアは、計算パイプライン内でのみ利用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックスパイプラインでも使用することをサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアと同期に関しては予期しない問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
与えられたbinding 番号とパイプラインstage を持つ読み込み/書き込みストレージイメージのシェーダーリソースバインディングを返します。イメージのロード/ストア操作は、指定されたlevel のすべてのレイヤーにアクセスできます(したがって、テクスチャがキューブマップの場合、シェーダは image2D ではなく imageCube を使用する必要があります)。
注意: tex が NULL でない場合は、QRhiTexture::UsedWithLoadStore で作成されていなければなりません。
注: tex は NULL でもかまいません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用する必要があります。
注意: 画像のロード/ストアは、計算パイプライン内でのみ利用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックスパイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
指定されたbinding 番号とパイプラインstage を持つ書き込み専用ストレージイメージ用のシェーダーリソースバインディングを返します。イメージストアオペレーションは、指定されたlevel のすべてのレイヤーにアクセスできます(したがって、テクスチャがキューブマップの場合、シェーダは image2D の代わりに imageCube を使用する必要があります)。
注意: tex が NULL でない場合は、QRhiTexture::UsedWithLoadStore で作成されていなければなりません。
注: tex は NULL でもかまいません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用する必要があります。
注意: 画像のロード/ストアは、計算パイプライン内でのみ利用可能であることが保証されています。バックエンドによっては、これらのリソースをグラフィックスパイプラインでも使用できるものもありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、このようなリソースをコンピュート以外のシェーダで使用することは避けてください。
bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &other) const
レイアウトがother と互換性がある場合、true
を返します。レイアウトには、実際のリソース(バッファやテクスチャなど)や関連パラメータ(オフセットやサイズなど)は含まれません。
たとえば、以下のa
とb
は同等ではありませんが、レイアウト的には互換性があります:
auto a = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buffer); auto b = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, someOtherBuffer, 256);
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler)
binding 、stage 、tex 、sampler で指定された、指定されたバインディング番号、パイプラインステージ、テクスチャ、およびサンプラのシェーダリソースバインディングを返します。
注: この関数は、count
に 1 を指定してsampledTextures() を呼び出すのと同じです。
注: tex とsampler は NULL でも構いません。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings とともに使用する必要があります。
注意: シェーダが 16 個を超えるテクスチャ/サンプラを消費できない場合があ ります。レンダラーの設計では、このハードリミットを念頭に置く必要があります。これは、単一のバインディングポイント(シェーダレジスタ)を消費し、基礎となるグラフィックス API に応じて 256 ~ 2048 個のテクスチャを含むことができるテクスチャ配列には適用されません。しかし、テクスチャの配列(sampledTextures ()を参照)は、この点では同じ数の個々のテクスチャを使用するのと変わりません。
sampledTextures()も参照してください 。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers)
与えられたバインディング番号、パイプラインステージ、およびbinding 、stage 、count 、texSamplers で指定されたテクスチャとサンプラのペアの配列のためのシェーダリソースバインディングを返します。
注: count は少なくとも 1 でなければならず、16 を超えてはなりません。
注意 :count が 1 の場合、この関数はsampledTexture() と等価である。
この関数は、結合されたイメージサンプラーの配列が関係する場合に関連します。例えば、GLSLlayout(binding = 5) uniform sampler2D shadowMaps[8];
では、結合画像サンプラーの配列を宣言します。アプリケーションは、count を 8 に設定し、配列の各要素に有効なテクスチャとサンプラーを設定してこの関数を呼び出すことで、バインディングポイント 5 のQRhiShaderResourceBinding を提供することが期待されます。
警告 配列のすべての要素を指定する必要があります。上記の例では、唯一有効でポータブルな方法は、count を 8 に設定してこの関数を呼び出すことです。さらに、QRhiTexture とQRhiSampler のインスタンスはすべて有効でなければなりません。つまり、nullptr は受け入れられません。これは、Vulkanのような、ディスクリプタ配列の各要素に有効な画像とサンプラーオブジェクトを必要とする、基礎となるAPIの一部によるものです。アプリケーションは、(シェーダでアクセスされないために)いくつかの配列要素が関連しない場合、「ダミーの」サンプラとテクスチャを提供することをお勧めします。
注意: texSamplers は NULL でもかまいません。未指定のリソースでQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。ただし、パイプラインの作成には適しています。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings とともに使用されなければならない。
sampledTexture()も参照してください 。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
binding,stage,sampler で指定された、指定されたバインディング番号、パイプラインステージ、サンプラーのシェーダーリソースバインディングを返します。
注意: sampler は NULL でもかまいません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
別々のサンプラーの配列はサポートされていません。
これは別々のサンプラーオブジェクトのバインディングを作成しますが、sampledTexture ()は結合されたイメージサンプラーに適しています。Vulkan互換のGLSLコードでは、別々のサンプラーは、sampler2D
とは対照的に、sampler
として宣言されます:layout(binding = 2) uniform sampler samp;
texture2D
とsampler
の両方が存在する場合、テクスチャをサンプリングするために一緒に使用できます:fragColor = texture(sampler2D(tex, samp), texcoord);
。
注意: シェーダが 16 個以上のサンプラーを消費できない場合があります。このハードリミットは、レンダラー設計において留意する必要があります。
texture()も参照 。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex)
binding,stage,tex で指定されたバインディング番号、パイプラインステージ、およびテクスチャのシェーダーリソースバインディングを返します。
注: この関数は、count
に 1 を指定してtextures() を呼び出すのと同じです。
注: tex は NULL でもかまいません。未指定のリソースでQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできません。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources ()に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings とともに使用する必要があります。
これは、sampledTexture ()が結合されたイメージサンプラーに適しているのに対し、別々のテクスチャ(イメージ)オブジェクトのためのバインディングを作成します。Vulkan 互換の GLSL コードでは、別々のテクスチャはsampler2D
とは対照的にtexture2D
として宣言されます:layout(binding = 1) uniform texture2D tex;
注意: シェーダは、基礎となるグラフィックス API に依存して、16 を超えるテクスチャを消費できない場合があります。このハードリミットは、レンダラー設計において留意する必要があります。これは、単一のバインディングポイント(シェーダレジス タ)を消費し、基礎となるグラフィックス API によっては 256 ~ 2048 個のテクスチャを含むことができるテクスチャ配列には適用されません。しかし、テクスチャの配列(sampledTextures ()を参照)は、この点では同じ数の個々のテクスチャを使用するのと変わりません。
textures() およびsampler()も参照して ください。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex)
与えられたバインディング番号、パイプラインステージ、およびbinding 、stage 、count 、およびtex で指定された(個別の)テクスチャの配列に対するシェーダーリソースバインディングを返します。
注: count は少なくとも 1 でなければならず、16 を超えてはなりません。
注 :count が 1 の場合、この関数はtexture() と同等です。
警告: 配列のすべての要素を指定しなければならない。
注: tex は NULL でもよい。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。このようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings とともに使用しなければならない。
texture() およびsampler()も参照してください 。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
binding 、stage 、およびbuf で指定された、指定されたバインディング番号、パイプラインステージ、およびバッファのシェーダーリソースバインディングを返します。
注: buf が NULL でない場合は、QRhiBuffer::UniformBuffer で作成されている必要があります。
注: buf は NULL でもかまいません。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェクトをQRhiCommandBuffer::setShaderResources() で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注: buf のサイズがQRhi::MaxUniformBufferRange で報告された制限を超えると、予期しないエラーが発生することがあります。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
binding 、stage 、およびbuf で指定されたバインディング番号、パイプラインステージ、およびバッファのシェーダーリソースバインディングを返します。このオーバーロードは、offset およびsize で指定された領域のみをバインドします。
注 :オフセットがQRhi::ubufAlignment() にアラインされていることを確認するのはユーザー次第である。
注: size は 0 より大きくなければならない。
注: buf が NULL でない場合、QRhiBuffer::UniformBuffer で作成されていなければならない。
注: buf はNULLでもよい。未指定のリソースを持つQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェ クトをQRhiCommandBuffer::setShaderResources ()で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: size がQRhi::MaxUniformBufferRange で報告された制限を超えた場合、予期せぬエラーが発生する可能性があります。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size)
指定されたバインディング番号、パイプラインステージ、およびbinding 、stage 、およびbuf で指定されたバッファのシェーダーリソースバインディングを返します。一様バッファは、動的オフセットを持つと仮定されます。動的オフセットはQRhiCommandBuffer::setShaderResources() で指定することができ、バッファ用の新しいバインディングを作成することなく、さまざまなオフセット値を使用することができます。バインド領域のサイズはsize で指定する。非ダイナミック・オフセットの場合と同様に、offset + size
はbuf のサイズを超えることはできません。
注: buf がNULLでない場合、QRhiBuffer::UniformBuffer で作成されている必要があります。
注: buf はNULLでもよい。未指定のリソースでQRhiShaderResourceBindings を作成することは有効であるが、そのようなオブジェ クトをQRhiCommandBuffer::setShaderResources ()で使用することはできない。しかし、パイプラインの作成には適している。そのようなパイプラインは、常に、QRhiCommandBuffer::setShaderResources() に渡されたリソースを持つ、レイアウト互換性のある別のQRhiShaderResourceBindings と一緒に使用しなければならない。
注意: size がQRhi::MaxUniformBufferRange で報告された制限を超えると、予期せぬエラーが発生することがある。
関連する非メンバー
[noexcept]
size_t qHash(const QRhiShaderResourceBinding &b, size_t seed = 0)
b のハッシュ値を返します。計算のシードとしてseed を使用します。
[noexcept]
bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
2つのQRhiShaderResourceBinding オブジェクトa とb のバインディングがすべて等しい場合はfalse
を返し、そうでない場合はtrue
を返す。
[noexcept]
bool operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
つのQRhiShaderResourceBinding オブジェクトa とb の内容が等しい場合、true
を返します。これには、リソース(バッファ、テクスチャ)と関連するパラメータ(オフセット、サイズ)も含まれます。レイアウト(バインディングポイント、パイプラインステージ、リソースタイプ)のみを比較するには、代わりにisLayoutCompatible() を使用してください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。