0
以下の単純な頂点シェーダをGalaxy S(PowerVR SGX540、Android)でコンパイルしようとするとコンパイルされず、エラーも表示されません。ちょうど「コンパイルに失敗しました。ログに記録されています。私は主な機能にファンクションブロックを移動するときOpenGL ES頂点シェーダは関数でコンパイルされません
#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);
}
、両方のコンパイル。 私は理解できません、なぜそれがそのように動作するのですか?誰でもそれを説明することができますか、それともシステム内部のバグですか?