Для устройства все мои шейдеры загружаются штрафом, кроме одного. Для этой шейдерной программы я получаю сообщение «Fragment program failed to compile with current context state», за которым следует аналогичная ошибка для вершинного шейдера при вызове glGetProgramInfoLog (...);iPad Opengl ES программа отлично работает на тренажере, но не на устройстве
Vertex шейдеров:
#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
Нет, это не так. Точный журнал: «Не удалось выполнить проверку: программа фрагмента не удалось скомпилировать с текущим контекстным состоянием. Ошибка проверки: программа Vertex не удалось скомпилировать с текущим контекстным состоянием». – AbleArcher
Кроме того, я проверил состояние компиляции каждого шейдера, когда я связал программы с помощью glGetShaderiv (theShader, GL_COMPILE_STATUS, & result), и все они отлично зарекомендовали себя. (Отредактированный вопрос, чтобы отразить этот факт). – AbleArcher