Problème de texture avec shaders
Bonjour,
Je précise pour commencer que je fais de l'OpenGL dans Qt (via un héritage de QGLWidget).
Je dois afficher une texture (type un viseur) par dessus une image de fond pour cela j'ai fait le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE) ;
qglColor(Qt::white);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _crosshairTexture[0]);
glBegin(GL_QUADS);
glTexCoord2d(0,0); glVertex3f(centreX-5,centreY-5, -1.0);
glTexCoord2d(1,0); glVertex3f(centreX+5,centreY-5, -1.0);
glTexCoord2d(1,1); glVertex3f(centreX+5,centreY+5, -1.0);
glTexCoord2d(0,1); glVertex3f(centreX-5,centreY+5, -1.0);
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST); |
Ce code fonctionne parfaitement lorsque mon image de fond est une texture chargée via glTexImage2D(...) mais lorsque mon image de fond est l'association de 3 textures mixées via GLSL (pixelShader) mon viseur n'apparait plus.
Dans le cas de l'utilisation des GLSL mes 3 textures sont chargés via
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 8) ;
glEnable (GL_TEXTURE_2D);
//1ere texture
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,_EodTextureName[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
_textureWidth,
_textureHeight,
0, GL_LUMINANCE, GL_UNSIGNED_SHORT,
_buffer);
// 2e texture
glActiveTexture(GL_TEXTURE1);
...
// 3e texture
glActiveTexture(GL_TEXTURE1); |
et en suite elle sont affichées via
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
glUseProgram(_ProgYUV422P);
glEnable ();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,_EodTextureName[0]);
GLuint locYtex = glGetUniformLocation (_ProgYUV422P, "Ytex");
glUniform1i(locYtex, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D,_EodTextureName[1]);
GLuint locUtex = glGetUniformLocation (_ProgYUV422P, "Utex");
glUniform1i(locUtex, 1);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D,_EodTextureName[2]);
GLuint locVtex = glGetUniformLocation (_ProgYUV422P, "Vtex");
glUniform1i(locVtex, 2); |
J'espère avoir été assez clair dans les explications de mon problèmes.
Merci d'avance