Android OpenGL ES顶点着色器不会使用函数编译

Android OpenGL ES顶点着色器不会使用函数编译,android,opengl-es-2.0,galaxy,vertex-shader,Android,Opengl Es 2.0,Galaxy,Vertex Shader,当我尝试在Android Galaxy S PowerVR SGX540上编译下面的简化顶点着色器时,它不会编译,也不会给出任何错误。只是编译失败了。在日志中 #ifdef GL_ES precision mediump float; precision lowp int; #endif uniform mat4 u_m; //model uniform mat4 u_mvp; //model view projection uniform vec3 u_lightPos[1

当我尝试在Android Galaxy S PowerVR SGX540上编译下面的简化顶点着色器时,它不会编译,也不会给出任何错误。只是编译失败了。在日志中

#ifdef GL_ES
   precision mediump float;
   precision lowp int;
#endif

uniform mat4 u_m;   //model 
uniform mat4 u_mvp; //model view projection
uniform vec3 u_lightPos[1];

uniform int u_lightCount;

attribute vec3 a_position;

varying vec3 v_lightDir[1];

void pointLight(int i, vec3 vertPos){
    v_lightDir[i] = u_lightPos[i] - vertPos;
}

void main( void )
{   
    vec3 vertPos = (u_m * vec4(a_position, 1.0)).xyz;

    if(u_lightCount > 0){
        pointLight(0, vertPos);
    }

    gl_Position = u_mvp * vec4(a_position, 1.0);
}
但是,当我将函数块移动到主函数中时,它编译得很好:

#ifdef GL_ES
   precision mediump float;
   precision lowp int;
#endif

uniform mat4 u_m;   //model 
uniform mat4 u_mvp; //model view projection
uniform vec3 u_lightPos[1];

uniform int u_lightCount;

attribute vec3 a_position;

varying vec3 v_lightDir[1];

void main( void )
{   
    vec3 vertPos = (u_m * vec4(a_position, 1.0)).xyz;

    if(u_lightCount > 0){
        v_lightDir[0] = u_lightPos[0] - vertPos;
    }

    gl_Position = u_mvp * vec4(a_position, 1.0);
}
在桌面上,两者都可以编译。
我不明白为什么它会这样。有人能解释一下吗?或者它是系统内部的一个bug?

您的OpenGL ES实现似乎不支持通过变量v_lightDir[i]=