PDA

View Full Version : Noobie question on display lists



thealmightyone
03-23-2009, 02:44 PM
There is no actual problem, I just want to understand display lists better.

The code below is (obviously) part of a larger program. In main, init_ground is called. After, the glut loop is entered, and the callback functions are looped through, one of which calls a display function, which calls the display list 'ground'.

The bit that confuses me is how does the display function know what the contents of the 2 arrays are (needed for the material properties) if it is only calling the display list?


void init_ground()
{
GLfloat amb_and_diffuse[]= {0.1, 0.7, 0.1, 1.0};
GLfloat emission[]= {0.0, 0.2, 0.0, 1.0};

ground = glGenLists(1);
if (ground!=0)
{
glNewList(ground, GL_COMPILE);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, amb_and_diffuse);
glMaterialfv(GL_FRONT, GL_EMISSION, emission);

glBegin(GL_QUADS);
glNormal3f(0.0, 1.0, 0.0);
glVertex3f(-100.0, 0.0, -100.0);
glVertex3f(100.0, 0.0,-100.0);
glVertex3f(100.0, 0.0, 100.0);
glVertex3f(-100.0, 0.0, 100.0);
glEnd();
glEndList();
}
else
fprintf(stderr, "Error: OpenGL could not obtain a list for the ground\n");
return;
}

ZbuffeR
03-23-2009, 02:54 PM
http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml
Apart from the exceptions listed in the documentation, every gl command is compiled within the display list, even glMaterialfv commands and their parameters.
Imagine GL commands are assembly instructions for a Lego toy. Display list compiles the finished result to a 3D printing that can be build with 1 instruction.

thealmightyone
03-23-2009, 03:10 PM
So, if material commands require arrays outside of the display list, those arrays are compiled with the commands in the display list?

ZbuffeR
03-24-2009, 01:45 AM
Yes.
Think about it : if it was not the case, the performance benefits of using display lists would disappear.