1
對於該設備,我的所有着色器都可以正常加載,除了一個之外。對於這個着色器程序,當我調用glGetProgramInfoLog(...)時,出現「片段程序無法編譯當前上下文狀態」的錯誤,接着出現類似的頂點着色器錯誤;iPad Opengl ES程序在模擬器上工作正常,但不是設備
頂點着色器:
#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(shader,GL_COMPILE_STATUS,&結果)鏈接程序時,我檢查了每個着色器的編譯狀態,並且它們都檢出正常。有任何想法嗎?
通常,信息日誌會爲您提供發生錯誤的確切位置。它是否提供了特定的行號? – user1118321
不,它不。確切的日誌是:「驗證失敗:片段程序無法編譯當前上下文狀態 驗證失敗:頂點程序無法編譯當前上下文狀態。 – AbleArcher
另外,當我使用glGetShaderiv(theShader,GL_COMPILE_STATUS,&result)鏈接程序時,我檢查了每個着色器的編譯狀態,並且它們都檢查出正常。 (編輯問題以反映這一事實)。 – AbleArcher