Les CallListes

1.  Commandes OpenGL

            Certains objets sont toujours les mêmes. Comme OpenGL traduit toutes les séquences entrées, il est intéressant de créer des listes pour regrouper les instructions. Cela accélère légèrement l’affichage et réduit le code. Une liste est alors codée par un entier (un seul entier est alors envoyé pour un objet quelconque).
En pratique, il faut :

Pour afficher une liste, il faut appeler : void glCallList( GLuint list ) ou void glCallLists( GLsizei n, GLenum type, const GLvoid *lists). Pour afficher plusieurs listes d’un coup (type indique le type du tableau passé en paramètre : GL_BYTE, GL_INT…).

Reste à effacer une liste lorsqu’elle n’est plus utile : void glDeleteLists( GLuint list, GLsizei range ), dont les paramètres sont les même que glGenList.

2.   Exemple

Il s'agit du même exemple qu'à la page précédente, mais cette fois un peu plus ordonnée avec des CallListes :
#define POINT 1
#define TRIANGLE 2
#define DROITE 3

void Make_CallListes()
{
            glNewList(POINT,GL_COMPILE);
                        glBegin(GL_POINTS);
                                   glVertex2f(-10.0f,-10.0f);
                       glEnd();
            glEndList();

            glNewList(TRIANGLE,GL_COMPILE);
                        glBegin(GL_TRIANGLES);
                                    glColor3f(0.0f,1.0f,0.0f);
                                    glVertex3f(0.0f,130.0f,0.0f);
                                    glColor3f(0.0f,0.0f,1.0f);
                                    glVertex3f(0.0f,0.0f,0.0f);
                                    glColor3f(1.0f,0.0f,0.0f);
                                    glVertex3f(130.0f,0.0f,0.0f);
                        glEnd();
            glEndList();

            glNewList(DROITE,GL_COMPILE);
                        glColor3f(1.0f,0.0f,1.0f);
                       glBegin(GL_LINES);
                                    glVertex3f(-10.0f,-10.0f,-50.0f);
                                    glVertex3f(100.0f,100.0f,50.0f);
                        glEnd();
            glEndList();
}

void CALLBACK Main_part(void)
{
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glCallList(POINT);
            glCallList(TRIANGLE);
            glCallList(DROITE);
            glFlush();
}

sources et éxécutable

3. Remarque à propos d' AUX

            Comme je l'ai déjà dit à lors de la présentation de GLUT et d'AUX, cette dernière bugue méchamment lorsqu'on utilise les CallListes et les fonctions de dessin prédéfinies tel que auxSolidSphere, auxSolidBox, auxSolidCone etc... En fait, dés que l'OpenGl rencontre une de ces fonctions dans la déclaration d'une liste, il sort de cette liste et la considère finie. Vous aurez certes votre sphère ou votre cône, mais ce qui se trouvait après n'aura même pas été lu !!! Evitez donc de les utiliser (elles ne sont là qu'a titre d'exemple, comme le dit si bien la documentation, et ne devrai pas servir dans des programmes plus consistants).

 

Page précédente    Page suivante