在这个OpenGL论坛帖子中提到:
我试图在GLSL规范中找到这个信息,但找不到。如果它不起作用,我有些紧张尝试并花时间更改代码。我最担心的是,如果我这么做并且它在我的计算机上似乎可以工作,但我不知道正在调用未定义的行为(这可能会在某个地方产生糟糕的结果)。以下是我想要实现的一个示例(我没有运行它,它只是伪代码):在GLSL 4.x中,采样器数组只能使用动态一致表达式进行索引(在顶点着色器中,表达式只能涉及一致变量,在片段着色器中,它只能涉及一致变量和flat限定的输入)。
// Fragment shader
in vec3 uv;
flat in uint index; // Assume in the range of 0 to 3 inclusive
uniform sampler3D textureSampler[4];
void main() {
someColor = texture(textureSampler[index], uv);
// ...
}
这是因为它带有 flat 修饰符,所以属于已定义行为吗?还是不属于?