1

デバイスの場合、1 つを除いてすべてのシェーダーが正常に読み込まれます。このシェーダー プログラムの場合、"Fragment program failed to compile with current context state" エラーが発生し、続いて glGetProgramInfoLog(...); を呼び出すと、頂点シェーダーで同様のエラーが発生します。

頂点シェーダー:

#version 100

uniform mat4 Projection;
uniform mat4 Modelview;
uniform mat4 Rotation;
uniform vec3 Translation;

uniform vec4 LightDirection;
uniform vec4 MaterialDiffuse;
uniform float MaterialShininess;

attribute vec3 position;
attribute vec3 normal;

varying vec4 color;
varying float specularCoefficient;

void main() {
    vec3 _normal = normalize(mat3(Modelview[0].xyz, Modelview[1].xyz, Modelview[2].xyz)*normal); 
    // There is an easier way to do the above using typecast, but is apparently broken

    float NdotL = dot(-_normal, normalize(vec3(LightDirection)));
    if(NdotL < 0.0){
        NdotL = 0.0;
    }
    color = NdotL * MaterialDiffuse;
    float NdotO = dot(-_normal, vec3(0.0, 0.0, -1.0));
    if(NdotO < 0.0){
        NdotO = 0.0;
    }
    specularCoefficient = pow(NdotO, MaterialShininess);

    vec3 p = position + Translation;
    gl_Position = Projection*Modelview*vec4(p, 1.0);
}

フラグメント シェーダー:

#version 100
precision mediump float;

varying vec4 color;
varying float specularCoefficient;
uniform vec4 MaterialSpecular;

void main(){
    gl_FragColor = vec4((color + specularCoefficient*MaterialSpecular).rgb, 1.0);
}

特に、テクスチャ座標が追加された上記とまったく同じプログラムがあるため、何が起こっているのかわかりません。また、glGetShaderiv(theShader, GL_COMPILE_STATUS, &result) を使用してプログラムをリンクしたときに、各シェーダーのコンパイル ステータスを確認したところ、すべて正常にチェックアウトされました。何か案は?

4

1 に答える 1