Ich habe ein Problem beim Übergeben von Vertex-Attributen an das laufende Shader-Programm. Ich würde gerne zwei Attribute übergeben, die Position und eine RGBA-Farbe. Das Binden der Attributposition funktioniert für die Position. Es funktioniert jedoch nicht für die Farbe. Daher wird die gesamte Geometrie schließlich schwarz dargestellt. DieseGLSL 1.5 & OpenGL 3.3: Farbe an Vertex-Shader übergeben scheint zu scheitern
ist, was ich tue:
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!
Mein Vertex-Shader ist sehr einfach. Alles, was ich wirklich tun Umwandlung Ecken und Führen des Farbshader an das Fragment:
#version 150 core
precision highp float;
// input
in vec4 PassColor;
// output
out vec4 FragColor;
void main(void) {
FragColor = PassColor;
}
Warum Bindung „InPosition“ Arbeit und „InColor“:
#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);
}
Mein Fragment-Shader einfach die Farbe zurückgeben soll nicht? Ich bin mir bewusst, dass der GLSL-Compiler den Shader-Code optimiert, so dass nicht verwendete Variablen nicht gebunden werden können. Aber ich sehe nicht, warum die Farbe hier draußen optimiert werden sollte. Schließlich benutze ich es, indem ich es an den Fragment-Shader übergebe.
Irgendwelche 'glGetError()' 's da draußen? Was ist deine GPU und Treiberversion? – Kos