2012-03-05 15 views
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); 
} 

、両方のコンパイル。 私は理解できません、なぜそれがそのように動作するのですか?誰でもそれを説明することができますか、それともシステム内部のバグですか?

答えて

0

OpenGL ESの実装では変数による配列インデックス作成がサポートされていないようです(v_lightDir[i] = ...