iOS上OpenGL ES 2.0中着色器中可变数量的纹理单元

时间:2012-06-23 07:09:53

标签: ios opengl-es

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

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

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

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

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

uniform sampler2D tex1;
...
uniform sampler2D texN;

2 个答案:

答案 0 :(得分:0)

您可以尝试定义常量最大数量的采样器,并在运行时接收实际大小。

uniform sampler2D tex[MAX_VALUE];
uniform int size;
int main(){
    ....
}

答案 1 :(得分:0)

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

uniform sampler2D tex[];

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

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