Bonjour,
Je suis en train de suivre le tutoriel pdf de ce site http://www.opengl-tutorial.org/
Je suis dans la partie de l'affichage d'une texture qui est en fait, dans mon cas une image png chargée avec SOIL et j'ai apparemment un problème avec la fonction glTexImage2D....
Pour récapituler voici comment j'ai fait pour préparer la texture, avant la boucle infinie :
Initialisation du TAMPON :
(La partie MIPMAPPING je sais pas trop quoi mettre exactement, j'ai mis selon ce que j'ai vu sur internet)
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 //Création d'un tampon pour la texture GLuint tex; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//x side repeat texture glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);//y side repeat texture float color[] = { 0.25f, 0.5f, 0.88f, 1.0f }; glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color);//border with color in param //filtering MIN (image reduction) and MAG /*glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);*/ //MIPMAPPING glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR / GL_NEAREST);
Chargement de l'image (avec SOIL) dans la texture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int logoW, logoH; unsigned char* logoIMG = SOIL_load_image("logo.png", &logoW, &logoH, 0, SOIL_LOAD_RGB); if (logoIMG == NULL) { printf("An error occurred while loading image.\n"); exit(EXIT_FAILURE); } else { printf("Img loaded\n"); printf("Image Height : %d\nImage Width : %d\n", logoW, logoH); } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, logoW, logoH, 0, GL_RGB, GL_FLOAT, logoIMG); SOIL_free_image_data(logoIMG);
Les shaders en question sont tous bêtes :
Vertexshader :
FragmentShader :
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 #version 330 core // Input vertex data, different for all executions of this shader. layout(location = 0) in vec3 vertexPosition_modelspace; layout(location = 1) in vec3 vertex_color; layout(location = 2) in vec2 texcoord; out vec3 Color; out vec2 Texcoord; void main(){ Texcoord = texcoord; Color = vertex_color; gl_Position.xyz = vertexPosition_modelspace; gl_Position.w = 1.0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #version 330 core in vec3 Color; in vec2 Texcoord; // Ouput data out vec4 outputColor; uniform sampler2D tex; void main() { outputColor = texture(tex, Texcoord)* vec4(Color, 1.0); }
Quand j'exécute, une fenêtre toute noire s'affiche, sans afficher la texture, qui fait un peu ramer l'ordi et quitte. Le programme semble quitter avant même de rentrer dans la boucle.
Voici ce que la console m'affiche :
Je soupçonne fortement cette ligne de code :
Il y a apparemment un problème avec cette fonction, j'ai pourtant changé GL_RGB en GL_RGBA, mais sans effet.....
Code : Sélectionner tout - Visualiser dans une fenêtre à part glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, logoW, logoH, 0, GL_RGB, GL_FLOAT, logoIMG);
Ce problème est vraiment mystérieux....
(D'ailleurs le code d'erreur renvoyé est toujours le même : -1073741819, à quoi cela pourrait bien correspondre?)
Merci d'avance pour votre aide
Partager