この構文は無効です:
誰が言ったのですか?サンプラーの配列は最も確実に有効です(バージョンによって異なります)。それらをどのように使用するかは別の問題です。
GLSL 1.20以下では、サンプラーアレイは許可されていません。
GLSL 1.30〜3.30では、サンプラー配列を使用できますが、インデックスに厳しい制限があります。インデックスは整数定数式である必要があります。したがって、サンプラー配列を宣言することはできますが、ループすることはできません。
GLSL 4.00以降では、インデックスを「動的に均一な積分式」にすることができます。この用語は基本的に、(同じ描画呼び出し内の)シェーダーのすべてのインスタンス化が同じ値を取得する必要があることを意味します。
したがって、GLSL 4.00+で一定の範囲をループし、ループカウンターを使用してサンプラー配列にインデックスを付けることができます。一様変数からインデックスを取得することもできます。できないことは、インデックスをシェーダーステージへの入力に依存させるか(レンダリングコマンドによって発生するすべてのインスタンスで値が同じでない場合)、またはテクスチャアクセスから派生した値から取得することです(その値がレンダリングコマンドによって引き起こされたすべてのインスタンスで同じ)、または何か。
サンプラーの配列に配置されたテクスチャーの唯一の要件は、それらがサンプラータイプと一致することです。したがって、配列GL_TEXTURE_2D
のすべての要素でを使用する必要があります。sampler2D
それ以外にも、テクスチャにはサイズなど、さまざまな違いがあります。配列はコーディングを容易にするために存在します。そこにあるもののセマンティクスは変更されません。
また、サンプラー配列内の個々の要素は、それぞれ独自のテクスチャ画像ユニットにバインドする必要があることを忘れないでください。