此语法无效:
谁说的?采样器数组肯定是有效的(取决于版本)。你如何使用它们是另一回事。
GLSL 1.20 及更低版本不允许采样器数组。
在 GLSL 1.30 到 3.30 中,您可以拥有采样器数组,但对索引有严格的限制。索引必须是一个整数常量表达式。因此,虽然您可以声明一个采样器数组,但您不能循环遍历它。
GLSL 4.00 及更高版本允许索引是“动态统一积分表达式”。该术语基本上意味着着色器的所有实例化(在同一个绘制调用中)必须获得相同的值。
因此,您可以在 GLSL 4.00+ 中循环遍历一个恒定范围,并使用循环计数器索引一个采样器数组。您甚至可以从统一变量中获取索引。您不能做的是让索引依赖于着色器阶段的输入(除非该值在渲染命令引起的所有实例中都相同),或者来自从纹理访问派生的值(除非该值是由渲染命令引起的所有实例都相同),或其他东西。
对放置在采样器数组中的纹理的唯一要求是它们与采样器类型匹配。所以你必须在数组GL_TEXTURE_2D
的所有元素上使用 a 。sampler2D
除此之外,纹理可以有任意数量的差异,包括大小。数组的存在是为了使编码更容易;它不会改变那里的语义。
请记住:采样器数组中的每个单独元素都需要绑定到自己的纹理图像单元。