OpenGL着色器中的奇怪动态迭代错误

时间:2017-07-12 13:00:36

标签: opengl libgdx glsl

我试图将float数组转换为vector2数组,因为float数组是我可以从Java代码传递到着色器的唯一数组。我将例如浮动3.8转换为vec2(3,8)。但这非常无关紧要。真正的问题是着色器在for循环中添加某一行时停止工作。这是我的代码:

attribute vec4 a_color;
attribute  vec3 a_position;
attribute vec2 a_texCoord0;

uniform float a_tileCoords[144];
uniform mat4 u_projTrans;

varying vec4 v_color;
varying vec2 v_texCoord0;
varying vec2 v_tileCoords[144];

int length = 144;

void main(){
    v_color = a_color;
    v_texCoord0 = a_texCoord0;
    for(int i = 0; i < length; i++){
       int x = int(a_tileCoords[i]);
       int y = int((a_tileCoords[i] - int(a_tileCoords[i])) * 10);
       v_tileCoords[i] = vec2(x,y);
    }
    gl_Position = u_projTrans * vec4(a_position + vec3(0, 1, 0), 1.);
}

关于这一行:

v_tileCoords[i] = vec2(x,y);

当我从for循环中删除该行时,着色器再次起作用(纹理被绘制。)但我希望这一行能够正常工作。所以问题是:我可能做错了什么,或者这甚至可能实现我想要实现的目标?

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:3)

变化矢量的最大数量可由MAX_VARYING_VECTORS确定,并限制可传递到下一个着色器阶段的矢量数。 我确定你超过了限制。

另见以下问题: