OpenGL Shader erreur 1282

Je suis en train d'ajouter de l'éclairage de ma scène d'un simple cube. Après la mise en place de mon uniforme, je reçois un 1282 erreur de glGetError() pour ce morceau de code

GLuint ambientHandle = glGetUniformLocation(program->getHandle(), "ambientProduct");
glUniform4fv( ambientHandle, 1, ambientProduct );
GLuint diffuseHandle = glGetUniformLocation(program->getHandle(), "diffuseProduct");
glUniform4fv( diffuseHandle, 1, diffuseProduct );
GLuint specularHandle = glGetUniformLocation(program->getHandle(), "specularProduct");
glUniform4fv( specularHandle, 1, specularProduct );
GLuint lightPosHandle = glGetUniformLocation(program->getHandle(), "lightPosition");
glUniform4fv( lightPosHandle, 1, light.position );
GLuint shinyHandle = glGetUniformLocation(program->getHandle(), "shininess");
glUniform1f( shinyHandle, materialShininess );

Voici mes shaders:
vertex.glsl

#version 120
attribute vec4 coord3d;
attribute vec3 normal3d;
//output values that will be interpretated per-fragment
varying  vec3 fN;
varying  vec3 fE;
varying  vec3 fL;
uniform vec4 lightPosition;
uniform mat4 mTransform;
void main()
{
fN = normal3d;
fE = coord3d.xyz;
fL = lightPosition.xyz;
if( lightPosition.w != 0.0 ) {
fL = lightPosition.xyz - coord3d.xyz;
}
gl_Position = mTransform*coord3d;
}

fragment.glsl

//per-fragment interpolated values from the vertex shader
varying  vec3 fN;
varying  vec3 fL;
varying  vec3 fE;
uniform vec4 ambientProduct, diffuseProduct, specularProduct;
uniform mat4 mTransform;
uniform vec4 lightPosition;
uniform float shininess;
void main() 
{ 
//Normalize the input lighting vectors
vec3 N = normalize(fN);
vec3 E = normalize(fE);
vec3 L = normalize(fL);
vec3 H = normalize( L + E );
vec4 ambient = ambientProduct;
float Kd = max(dot(L, N), 0.0);
vec4 diffuse = Kd*diffuseProduct;
float Ks = pow(max(dot(N, H), 0.0), shininess);
vec4 specular = Ks*specularProduct;
//discard the specular highlight if the light's behind the vertex
if( dot(L, N) < 0.0 ) {
specular = vec4(0.0, 0.0, 0.0, 1.0);
}
gl_FragColor = ambient + diffuse + specular;
gl_FragColor.a = 1.0;
} 

Les produits et la position sont chacun une structure de trois GLfloats et de brillance est un float. J'ai vérifié toutes les valeurs de plus, les poignées et les valeurs que je suis de passage et ils semblent tous valides. Des idées?

--EDIT:
J'ai rétréci à la glUniform4fv appels. Il arrive après chacun d'eux. J'ai également vérifié que le programme->getHandle() pointe vers quelque chose qui ressemble valide.

J'ai vérifié programme->getHandle est un programme valide
Voici les valeurs de toutes les poignées:
Programme de la poignée 3
ambientHandle 0
diffuseHandle 1
specularHandle 5
lightPosHandle 2
shinyHandle 4

Ainsi, ils ont tous l'air bien. Pour le test je suis en commentant les lignes ci-dessous ceux pour ambientProduct. Pour plus de clarté je suis explicitement à l'aide de cette ligne au lieu

glUniform4f( ambientHandle, ambientProd.x, ambientProd.y, ambientProd.z, ambientProd.w );

Ce sont ces valeurs pour ambientProd à l'époque que la ligne est exécutée.
x = 0.200000003, y = 0,0, z = 0.200000003, w = 1.0

Un collaborateur sur ce projet transféré l'appel pour glUseProgram. Merci pour l'aide les gars.

Où est la #version directive pour votre fragment shader?
omis accidentellement

OriginalL'auteur user2227713 | 2013-03-30

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *