DisplayLists

DisplayLists

de Mauricio Eguia -
Número de respuestas: 0
Me pareció interesante hablar un poco más de las displayLists.

Una displayList guarda de forma ordenada una secuencia de comandos a OpenGL. El resto de código (for, while, if, etc) no es compilado en la displayList. Cambiar variables (ej: los límites de iteración de un bloque for) no altera el resultado de dibujar una displayList.

Hay algunos comandos en OpenGL que no se compilan en una displayList. En la documentación que se encuentra en  http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml expone una gran lista de comandos. Todos ellos tienen que ver con la obtención del estado actual de OpenGL (gets).
Los comandos que sí se compilan son los que alteran el estado de OpenGL (color, normal, coordenada de textura, transformaciones, etc).

Al compilar un glCallList dentro de un displayList, no se guardan los comandos de la lista referenciada. Al modificar la displayList referenciada se modifica el resultado final de dibujado. A continuación presento un ejemplo:

modelo = glGenLists(1);
subModelo = glGenLists(1);

glNewList(subModelo, GL_COMPILE);
// código de dibujado del submodelo
glEndList();

glNewList(modelo, GL_COMPILE);
// código de dibujado del modelo
glCallList(subModelo);
// más código
glEndList();

// dibujo el modelo la primera vez
glCallList(modelo);
// modifico el submodelo
glNewList(subModelo, GL_COMPILE);
// otro código de dibujado del submodelo
glEndList();
// dibujo el modelo por segunda vez
glCallList(modelo);

Primero se dibuja el modelo, se compila de nuevo la displayList referenciada y por último se dibuja de nuevo la misma displayList con otro resultado.

Saludos