Bonjour à tous,
Dans le cadre d'une implémentation logicielle du profil Safety-Critical d'OpenGL, je cherche à tester les fonctionnalités de base pour valider l'implémentation d'une part, pour pouvoir faire des analyse de performances et avoir un point de départ pour une éventuelle optimisation du code. Je me heurte aux textures que je n'arrive pas à rendre à l'écran. Avant de conclure que certaines commandes OpenGL ont été implémentées de travers, j'aimerais avoir l'avis de certains d'entre vous sur les tests, car je suis loin d'être confirmé en OpenGL.
Ci dessous, la fonction d'initialisation et la boucle principale de mon test.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 GLubyte Texture[64] = { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, }; GLuint toto; void init_test_15 (void) { glEnable(GL_TEXTURE_2D); /* Bien que cela soit la valeur par défaut, je m'assure que la première texture soit la texture active */ glActiveTexture(GL_TEXTURE0); /* Génération d'un numéro de texture */ glGenTextures(1, &toto); /* On lit ce numéro de texture avec la texture courante */ glBindTexture(GL_TEXTURE_2D, 0); /* On crée la texture contenant l'image (damier blanc et rouge)*/ glTexImage2D( GL_TEXTURE_2D, //Type : texture 2D 0, //Mipmap : aucun GL_RGBA, //Couleurs : 4 4, //Largeur : 4 4, //Hauteur : 4 0, //Largeur du bord : 0 GL_RGBA, //Format : RGBA GL_UNSIGNED_BYTE, //Type des couleurs Texture //Addresse de l'image ); /* Réglage des paramètres des filtres actifs */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); }Certains autres paramètres sont activés à l'initialisation comme le test de profondeur, ou la couleur par défaut de nettoyage. Ce code produit à l'écran un rectangle rouge dans le quart supérieur droit de mon écran. Le reste de l'écran est gris clair. Mon diagnostic serait alors de dire que ma texture ne prend que le premier octet de ce que je lui passe car si je change la valeur du premier octet de Texture[64], la couleur du rectangle change en fonction. Je ne sais pas ce que j'ai oublié ou mal fait pour obtenir ce résultat.
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
23 void main_test_15 (void) { /* Avant chaque rendu on nettoie les buffers de profondeur et de couleur, on fixe la couleur courante en gris clair */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(1.0f, 1.0f, 1.0f, 0.0f); /* Dessin du carré par deux triangles en appliquant les coordonnées de textures qui devraient correspondrent...*/ glBegin(GL_TRIANGLE_FAN); glMultiTexCoord2f(0, 0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 0.0f); glMultiTexCoord2f(0, 0.0f, 1.0f); glVertex3f(0.0f, 1.0f, 0.0f); glMultiTexCoord2f(0, 1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glMultiTexCoord2f(0, 1.0f, 0.0f); glVertex3f(1.0f, 0.0f, 0.0f); glEnd(); }
Je suis ouvert à toute piste de résolution, j'ai parcouru je pense la plus grande partie des tutoriels, blogs et autres documents sur le sujet (textures sur formes simples) en anglais et en français mais quasiment tous utilisent des commandes telles que glTexCoord2f, non supportées par le profil implémenté. Je finirai donc par vous lister les commandes en rapport avec les textures qui sont supportées par la spécification SC :
glActiveTexture,
glBindTexture,
glClientActiveTexture,
glDeleteTextures,
glGenTextures,
glMultiTexCoord2f,
glTexCoordPointer,
glTexEnvfv,
glTexEnvi,
glTexImage2D,
glTexParameteri,
glTexSubImage2D,
Pour plus d'info sur le profil Safety-Critical (si ça vous intéresse :-p) :
http://www.khronos.org/registry/glsc...spec_1_0_1.pdf
-Omalab
Partager