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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Dans le cas de l'utilisation des GLSL mes 3 textures sont chargés via
et en suite elle sont affichées via
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
J'espère avoir été assez clair dans les explications de mon problèmes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Merci d'avance
Partager