当我尝试在Galaxy S(PowerVR SGX540,Android)上编译下面的简化顶点着色器时,它不会编译并且不会给出错误。只是“编译失败”。在日志中。
#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);
}
然而,当我将功能块移动到main函数中时,它编译得很好:
#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);
}
在桌面上,两者都编译。 我无法弄清楚,为什么它会这样。任何人都可以解释它或者它是系统内的一个错误吗?
答案 0 :(得分:0)
您的OpenGL ES实现似乎不支持变量(v_lightDir[i] = ...
)