J'ai un problème lors du passage d'attributs vertex au programme shader en cours d'exécution. Je voudrais passer deux attributs, la position et une couleur RGBA. La liaison de l'emplacement de l'attribut fonctionne pour la position. Cependant, cela ne fonctionne pas pour la couleur. Par conséquent, toute la géométrie est finalement rendue noire.GLSL 1.5 & OpenGL 3.3: Le passage de la couleur au vertex shader semble échouer
C'est ce que je fais:
GLuint programHandler;
// create program
// compile & attach vertex shader
// compile & attach fragment shader
glBindAttribLocation(programHandler, 0, "InPosition");
glBindAttribLocation(programHandler, 1, "InColor");
glBindFragDataLocation(programHandler, 1, "FragColor");
glLinkProgram(programHandler);
glUseProgram(programHandler);
// initialize uniform variables
// I'm trying to get the attribute locations now.
// I expect location "0" for InPosition and location "1" for InColor.
// In fact, it gets me a "-1" for InColor. I simply cannot see the reason for that behaviour
GLint positionLocation = glGetAttribLocation(programHandler, "InPosition"); // returns 0
GLint colorLocation = glGetAttribLocation(programHandler, "InColor"); // returns -1
glEnableVertexAttribArray(positionLocation);
glEnableVertexAttribArray(colorLocation); // fails!
Mon vertex shader est très basique. Tout ce que je fais vraiment transforme les sommets et passer la couleur au fragment shader:
#version 150 core
// input
uniform mat4 ModelviewMatrix;
uniform mat4 ProjectionMatrix;
in vec3 InPosition;
in vec4 InColor;
// output
out vec4 PassColor;
void main(void) {
// passing color through to fragment shader
PassColor = InColor;
// transformation
gl_Position = ProjectionMatrix * ModelviewMatrix * vec4(InPosition, 1.0);
}
Mon fragment shader ne devrait renvoyer cette couleur:
#version 150 core
precision highp float;
// input
in vec4 PassColor;
// output
out vec4 FragColor;
void main(void) {
FragColor = PassColor;
}
Pourquoi lier « InPosition » travail et « InColor » ne fait pas? Je suis conscient que le compilateur GLSL optimise le code shader, de sorte que les variables inutilisées ne peuvent pas être liées. Mais, je ne vois pas pourquoi la couleur devrait être optimisée ici. Après tout, je l'utilise en le passant au fragment shader.
Tout 'glGetError()' s existe-t-il? Aussi, quelle est votre version du GPU et du pilote? – Kos