J'ai une application OpenGL très simple qui ne restitue qu'un seul quad texturé. Ceci est mon code, qui fonctionne très bien (le quad texturé apparaît très bien):La texture OpenGL est entièrement noire lorsqu'elle est rendue avec le shader
// Bind the test texture
glBindTexture(GL_TEXTURE_2D, mTestTexture);
// Draw the quad
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y + (float)height, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x + (float)width, y + (float)height, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x + (float)width, y, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y, 0.0f);
glEnd();
Alors je voulais intoduce un shader simple. Donc, j'ai modifié mon code un peu:
// Use shader and point it to the right texture
auto texLocation = glGetUniformLocation(mProgram, "tex");
glUseProgram(mProgram);
glUniform1i(texLocation, mTestTexture);
// Draw the quad
// Same drawing code as before...
Vertex shader:
void main(void)
{
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
}
shader Fragment:
uniform sampler2D tex;
void main()
{
vec4 color = texture2D(tex, gl_TexCoord[0].st);
gl_FragColor = color;
}
Maintenant, tout ce que je reçois est un quad noir :-(
J'ai déjà essayé et testé beaucoup de choses:
- Les shaders fines (compilent pas d'erreur)
- Le quad est visible (vertex shader semble OK)
- Si je change le shader pour produire une couleur fixe ("gl_FragColor = vec4 (1,0, 0,1); ") mon quad devient rouge -> fragment shader fait quelque chose!
- glGetError() ne renvoie pas d'erreur
- Mon texLocation, MPROGRAM et mTestTexture semblent tous être d'identité valides
Est-ce que quelqu'un a une idée pourquoi je ne vais pas voir ma texture lors de l'utilisation du shader?
Modifier dans un [mcve]. – genpfault