OpenGL-Shader-Fehler 1282

Ich versuche, fügen Sie Lichteffekte hinzu, um meine aktuellen Szene, in der ein einfacher Würfel. Nach der Einrichtung meiner Uniformen habe ich bekommen 1282 Fehler von glGetError() für dieses Stück 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 );

Hier sind meine Shader:
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;
} 

Produkte und positionieren Sie jeweils eine Struktur, die von drei GLfloats und Glanz ist ein float. Ich habe alle Werte von den Griffen und die Werte, die ich bin übergeben und Sie scheinen alle gültig. Ideen?

--EDIT:
Ich habe verengt es die glUniform4fv Anrufe. Es passiert nach jeder. Auch ich habe überprüft, dass das Programm->getHandle() verweist auf etwas, das aussieht gültig.

Habe ich überprüft-Programm->getHandle ist ein gültiges Programm
Hier sind die Werte aller handles:
Programm Griff 3
ambientHandle 0
diffuseHandle 1
specularHandle 5
lightPosHandle 2
shinyHandle 4

So dass Sie alle gut Aussehen. Zum testen bin ich auskommentieren der Zeilen unterhalb der für ambientProduct. Für Klarheit bin ich ausdrücklich mit dieser Linie statt

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

Diese sind die Werte für ambientProd an der Zeit, dass die Zeile ausgeführt wird.
x = 0.200000003, y = 0.0, z = 0.200000003, w = 1.0

Mitarbeiter an diesem Projekt verschoben, der Aufruf für glUseProgram. Danke für die Hilfe Leute.

  • Wo ist der #version Richtlinie für Ihre fragment-shader?
  • versehentlich ausgefiltert
InformationsquelleAutor user2227713 | 2013-03-30
Schreibe einen Kommentar