繁体   English   中英

OpenGL ES2.0中的着色器中访问数组

[英]access arrays in shader in OpenGL ES2.0

这是一个非常奇怪的问题! 而且应该很容易解决。

我要做的只是遍历一个数组,然后将数组数据添加在一起(类似这样)。

float kernel[] = float[5] (1.0, 1.0, 1.0, 1.0,1.0);
for(int i=-2;i<=2;i++) {            
    for(int j=-2; j<=2; j++){           
        color += kernel[0] * texture2D(image,  outUV);
    }
} 

上面的代码不起作用,但是如果将kernel [0]更改为1.0,那将起作用。

float kernel[] = float[5] (1.0, 1.0, 1.0, 1.0,1.0);
for(int i=-2;i<=2;i++) {            
    for(int j=-2; j<=2; j++){           
        color +=  1.0 * texture2D(image,  outUV);
    }
} 

所以我想在访问数组时会有一些问题!!! 为什么?

我发现了问题,似乎在声明它时无法分配数组值。 我必须写一些这样的代码:

float kernel[5] ;

void main(){
    kernel[0]=1.0;
    kernel[1]=2.0;
    ...
    for(int i=-2;i<=2;i++) {            
      for(int j=-2; j<=2; j++){           
         color +=  kernel[i+2]*kernel[j+2] * texture2D(image,  outUV);
      } 
    } 
 }

或者,您可以使用单个vec4并访问其xyzw值。

我猜这是片段着色器,因此导致它无法正常工作的最可能原因可能是浮点类型缺乏精度。 在片段着色器中,必须为浮点类型明确指定精度:

precision mediump float;

您能否详细描述着色器的不良行为? 另外,着色器的完整代码可能会在您的问题上造成一些阴影。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM