Arrays 当使用常量而不是变量进行访问时,采样器数组会给出不同的结果

Arrays 当使用常量而不是变量进行访问时,采样器数组会给出不同的结果,arrays,linux,opengl,glsl,amd-processor,Arrays,Linux,Opengl,Glsl,Amd Processor,我在一段着色器代码中遇到了奇怪的行为问题。当我用一个变量打开它时,它总是给我它引用的第一个纹理,但是当我用一个简单的常量打开它时,它给了我正确的textrue 所以这是可行的: final=texture(texShadowMap[curid], coords); 但这并不是: if(curid==0){ final=texture(texShadowMap[0], coords); }else if(curid==1){ final=texture

我在一段着色器代码中遇到了奇怪的行为问题。当我用一个变量打开它时,它总是给我它引用的第一个纹理,但是当我用一个简单的常量打开它时,它给了我正确的textrue

所以这是可行的:

final=texture(texShadowMap[curid], coords);
但这并不是:

  if(curid==0){
        final=texture(texShadowMap[0], coords);
    }else if(curid==1){
        final=texture(texShadowMap[1], coords);
    }
这真的很奇怪,特别是因为它只在amd卡上坏,在英特尔和英伟达上运行良好。还有其他纹理阵列,我可以轻松地正常打开,没有任何问题

有人知道这是什么原因吗?因为这对我来说毫无意义。

静态acesed数组的处理方式是否不同?我是否犯了一个根本性的错误,以某种方式破坏了整个着色器?

是“curid”整数还是浮点?如果浮动,比较可能会有精度问题。不,这是一个单元,比较一个是工作的。看一看,谢谢,我会看一看。问题是我的amd卡比我的NIvida旧,不支持动态链接纹理阵列,谢谢