QRhiShaderResourceBinding 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 | 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 &key, 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 つのレベル、および 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 とともに使用しなければならない。
[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 &key, size_t seed = 0)
key のハッシュ値を返す。計算のシードには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)
2つのQRhiShaderResourceBinding オブジェクトa とb の内容が等しければtrue
を返す。これには、リソース(バッファ、テクスチャ)と関連するパラメータ(オフセット、サイズ)も含まれます。レイアウト(バインディングポイント、パイプラインステージ、リソースタイプ)のみを比較するには、代わりにisLayoutCompatible() を使用してください。
© 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.