1

我有 N 个需要从片段着色器同时访问的纹理单元。N 随加载的数据而变化。所以,在着色器中,我需要类似的东西:

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

此外,OpenGL ES 2.0 似乎不支持 sampler2DArray。

只是想知道是否有任何其他技巧或 GLSL 预处理器构造可以用来实现上述目标。

或者,动态生成着色器代码是更好的选择吗?我可以生成类似下面的代码,并加载着色器:

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

2 回答 2

0

you can try defining a constant maximum number of samplers, and receive the actual size at runtime.

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

您是否需要明确设置数组的大小?据我了解,您可以使用以下命令指定任意大小的 sampler2D 的统一数组:

uniform sampler2D tex[];

我认为这通常会按照你想要的方式工作,但没有明确设置大小。我正在使用这种方法,但目前仅向数组提供一个纹理,并稍后在代码中使用其数组索引 tex[0] 引用它。还没有建立到我准备在那里放置超过 1 个纹理的地步,所以我不是 100% 的。

我对 OpenGL 很陌生,所以定义我不知道的数组大小可能会有一些好处。

于 2012-07-19T17:44:24.923 回答