このページでは

QRhiShaderResourceBinding 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

パブリック型

enum StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage }
flags StageFlags
enum Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore }

パブリック関数

QRhiShaderResourceBinding()
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::VertexStage1 << 0頂点ステージ
QRhiShaderResourceBinding::TessellationControlStage1 << 1テッセレーション制御(ハルシェーダー)ステージ
QRhiShaderResourceBinding::TessellationEvaluationStage1 << 2テッセレーション評価(ドメインシェーダー)ステージ
QRhiShaderResourceBinding::FragmentStage1 << 4フラグメント(ピクセルシェーダー)ステージ
QRhiShaderResourceBinding::ComputeStage1 << 5コンピュートステージ
QRhiShaderResourceBinding::GeometryStage1 << 3ジオメトリステージ

StageFlags 型は、QFlags<StageFlag> の typedef です。これは、StageFlag 値の論理和(OR)の組み合わせを格納します。

enum QRhiShaderResourceBinding::Type

バインディングポイントにバインドされたシェーダーリソースのタイプを指定します

定数値説明
QRhiShaderResourceBinding::UniformBuffer0Uniform バッファ
QRhiShaderResourceBinding::SampledTexture1複合画像サンプラー(テクスチャとサンプラーのペア)。 基盤となる 3D API に関連付けられたシェーディング言語がこの概念をサポートしていない場合(D3D や HLSL など)でも、シェーダ変換レイヤーがバインディングポイントやシェーダレジスタの適切な変換と再マッピングを行うため、これはサポートされています。
QRhiShaderResourceBinding::Texture2テクスチャ(独立)
QRhiShaderResourceBinding::Sampler3サンプラー(個別)
QRhiShaderResourceBinding::ImageLoad4画像の読み込み(GLSL では、これは、シェーダーに画像オブジェクトとして公開されたテクスチャの単一レベル(および 1 つまたはすべてのレイヤー)に対して `imageLoad()` を実行することに相当します)
QRhiShaderResourceBinding::ImageStore5画像の書き込み(GLSL では、これは、シェーダーに画像オブジェクトとして公開されているテクスチャの単一レベル(および 1 つまたはすべてのレイヤー)に対して `imageStore()` または `imageAtomic*()` を実行することに相当します)
QRhiShaderResourceBinding::ImageLoadStore6画像の読み込みと書き込み
QRhiShaderResourceBinding::BufferLoad7ストレージバッファのロード(GLSL では、シェーダストレージバッファからの読み取りに相当します)
QRhiShaderResourceBinding::BufferStore8ストレージバッファへの書き込み(GLSL では、シェーダ・ストレージ・バッファへの書き込みに相当します)
QRhiShaderResourceBinding::BufferLoadStore9ストレージバッファの読み込みと書き込み

メンバ関数のドキュメント

[constexpr noexcept default] QRhiShaderResourceBinding::QRhiShaderResourceBinding()

QRhiShaderResourceBinding のインスタンスをデフォルトコンストラクタで生成します。

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)

指定されたbinding 番号およびパイプラインstage を持つ読み取り専用ストレージバッファのシェーダーリソースバインディングを返します。

注: buf がnullでない場合 、QRhiBuffer::StorageBuffer を使用して作成されている必要があります。

注: buf は nullでも構いません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する別のレイアウト互換のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に引数として渡して使用する必要があります。

注:バッファのロード /ストアは、コンピュートパイプライン内でのみ利用可能であることが保証されています。一部のバックエンドでは、グラフィックスパイプライン内でもこれらのリソースの使用をサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期しない問題が発生する可能性があります。したがって、コンピュート以外のシェーダーでは、このようなリソースの使用を避けてください。

[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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する別のレイアウト互換なQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に渡して使用する必要があります。

注:バッファの ロード/ストアは、コンピュート・パイプライン内でのみ利用可能であることが保証されています。一部のバックエンドでは、グラフィックス・パイプライン内でもこれらのリソースの使用をサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、コンピュート以外のシェーダーでこのようなリソースを使用することは避けてください。

[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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが指定された、レイアウト互換のQRhiShaderResourceBindings を、QRhiCommandBuffer::setShaderResources()に引数として渡して、常に併用する必要があります。

注:バッファの ロード/ストアは、コンピュートパイプライン内でのみ利用可能であることが保証されています。一部のバックエンドでは、グラフィックスパイプライン内でもこれらのリソースの使用をサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、コンピュート以外のシェーダーでは、このようなリソースの使用を避けてください。

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)

指定されたbinding 番号およびパイプラインstage を持つ、書き込み専用ストレージバッファのシェーダーリソースバインディングを返します。

注: buf がnullでない場合 、QRhiBuffer::StorageBuffer を使用して作成されている必要があります。

注: buf は nullでも構いません。リソースが指定されていないQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources()では使用できません。ただし、パイプラインの作成には適しています。そのようなパイプラインは、必ず、リソースが存在し、レイアウト互換性のある別のQRhiShaderResourceBindings をQRhiCommandBuffer::setShaderResources()に引数として渡して、それらと組み合わせて使用する必要があります。

注:バッファの ロード/ストアは、コンピュートパイプライン内でのみ利用可能であることが保証されています。一部のバックエンドでは、グラフィックスパイプライン内でもこれらのリソースの使用をサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、コンピュート以外のシェーダーでこのようなリソースを使用することは避けてください。

[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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが指定された、レイアウト互換のQRhiShaderResourceBindings をQRhiCommandBuffer::setShaderResources()に引数として渡して、常にそれらと組み合わせて使用する必要があります。

注:バッファのロード /ストアは、コンピュートパイプライン内でのみ利用可能であることが保証されています。一部のバックエンドでは、グラフィックスパイプライン内でもこれらのリソースの使用をサポートしている場合がありますが、これは普遍的にサポートされているわけではなく、サポートされている場合でも、バリアや同期に関して予期せぬ問題が発生する可能性があります。したがって、コンピュート以外のシェーダーでこれらのリソースを使用することは避けてください。

[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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する、レイアウト互換のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に渡し、常に使用する必要があります。

注:画像の 読み込み/保存は、コンピュートステージおよびフラグメントステージ内でのみ利用可能です。

[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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する、レイアウト互換の別のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に渡し、常に使用する必要があります。

注:画像の 読み込み/保存は、コンピュートステージおよびフラグメントステージ内でのみ利用可能です。

[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()で使用することはできません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する、レイアウト互換の別のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に渡して使用する必要があります。

注:画像の 読み込み/保存は、コンピュートステージおよびフラグメントステージ内でのみ利用可能です。

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()では使用できません。ただし、パイプラインの作成には適しています。そのようなパイプラインは、リソースが存在する、レイアウト互換の別のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に渡し、常に使用する必要があります。

注: 基盤となるグラフィックス API によっては、シェーダーが 消費できるテクスチャ/サンプラーの数が 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() と同等です。

この関数は、複合画像サンプラの配列が関与する場合に関連します。例えば、GLSLでは、layout(binding = 5) uniform sampler2D shadowMaps[8]; により複合画像サンプラの配列が宣言されます。その後、アプリケーションは、バインディングポイント5に対してQRhiShaderResourceBinding を提供することが期待されます。これには、count を8に設定し、配列の各要素に対して有効なテクスチャとサンプラを指定して、この関数を呼び出すことで設定されます。

警告: 配列のすべての 要素を指定する必要があります。上記の例の場合、唯一有効かつ移植性のあるアプローチは、count を8に設定してこの関数を呼び出すことです。さらに、すべてのQRhiTexture およびQRhiSampler インスタンスは有効でなければなりません。つまり、nullptrは許容される値ではありません。 これは、Vulkan などの基盤となる API の一部が、ディスクリプタ配列の各要素に対して有効な画像およびサンプラーオブジェクトを必要とするためです。配列の要素の一部が(シェーダー内でアクセスされないため)関連しない場合は、アプリケーション側で「ダミー」のサンプラーおよびテクスチャを用意することを推奨します。

注: texSamplers は nullでも構いません。リソースが未指定のQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources()では使用できません。ただし、パイプラインの作成には適しています。そのようなパイプラインは、リソースが存在する、レイアウト互換の別のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に引数として渡す必要があります。

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); 。

注: 基盤となるグラフィックスAPIによっては、シェーダーが 使用できるサンプラーの数が16個を超えることができない場合があります。このハードリミットは、レンダラーの設計において留意する必要があります。

texture()も参照してください 。

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex)

指定されたバインディング番号、パイプラインステージ、および `binding`、`stage`、`tex` で指定されたテクスチャに対するシェーダーリソースのバインディングを返します。

注:この関数は 、count を1としてtextures()を呼び出すことと同等です。

注: tex は nullでも構いません。リソースが未指定のQRhiShaderResourceBindings を作成することは有効ですが、そのようなオブジェクトはQRhiCommandBuffer::setShaderResources()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが存在する別のレイアウト互換のQRhiShaderResourceBindings と常に組み合わせて使用し、QRhiCommandBuffer::setShaderResources()に渡しなければなりません。

これは個別のテクスチャ(画像)オブジェクトに対するバインディングを作成しますが、sampledTexture() は結合された画像サンプラーに適しています。Vulkan 互換の GLSL コードでは、個別のテクスチャはsampler2D ではなく、texture2D として宣言されます:layout(binding = 1) uniform texture2D tex;

注: 基盤となるグラフィックスAPIによっては、1つの シェーダーが 処理できるテクスチャの数は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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが指定された、レイアウト互換のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に引数として渡して使用する必要があります。

注: 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()では使用できません。ただし、パイプラインの作成には適しています。その場合、そのようなパイプラインは、リソースが指定された、レイアウト互換のQRhiShaderResourceBindings と組み合わせて、QRhiCommandBuffer::setShaderResources()に引数として渡す必要があります。

注: 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()を使用してください。

© 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.