1

フラグメント シェーダーから同時にアクセスする必要がある N 個のテクスチャ ユニットがあります。N は、ロードされるデータによって異なります。したがって、シェーダーでは、次のようなものが必要です。

// illegal syntax?
uniform sampler2D tex[N];

また、sampler2DArray は OpenGL ES 2.0 ではサポートされていないようです。

上記を達成するために使用できる他のトリックまたはGLSLプリプロセッサ構造があるかどうか疑問に思っています。

または、シェーダー コードを動的に生成するためのより良いオプションはありますか? 以下のコードのようなものを生成し、シェーダーをロードできます。

uniform sampler2D tex1;
...
uniform sampler2D texN;
4

2 に答える 2

0

配列のサイズを明示的に設定する必要がありますか? 私の理解では、次を使用して、任意のサイズの sampler2D の均一な配列を指定できます。

uniform sampler2D tex[];

これは通常、意図したとおりに機能すると思いますが、サイズを明示的に設定する必要はありません。私はこの方法を使用していますが、現在、配列にテクスチャを 1 つだけ提供しており、後でコード内で配列インデックス tex[0] を使用して参照しています。まだ複数のテクスチャを配置する準備ができているところまですべてを構築していないため、これについては 100% ではありません。

私は OpenGL に非常に慣れていないので、私が知らない配列のサイズを定義することにはいくつかの利点があるかもしれません。

于 2012-07-19T17:44:24.923 に答える
0

サンプラーの定数の最大数を定義してみて、実行時に実際のサイズを受け取ることができます。

uniform sampler2D tex[MAX_VALUE];
uniform int size;
int main(){
    ....
}
于 2012-06-24T19:57:36.757 に答える