Trouble with display lists and intel cards

Hi,

I am having trouble getting display lists to render on intel cards. I have no trouble with them showing up on nvidia or ati cards, but the same code on an integrated intel card does not seem to render anything. I’ve noticed this on both of the machines I have tested it on.
Trying to draw something using a display list produces no output, while things rendered in immediate mode work just fine.

Display lists are the way I had hoped to render everything, but I also tried using vertex arrays and ended up with similar results. The vertex array approach would produce some odd lines on the screen as if it were rendering the vertices at weird positions, but nothing resembling the actual model. Using vertex arrays also works fine on the nvidia and ati cards I have used.

I tried updating the drivers, but that did not help.

If anyone knows of a solution to this or maybe just some ideas, that would be great.

I noticed that there were a couple posts from over a year ago about a similar problem with display lists on intel cards, but there didn’t seem to be any ideas on how to fix this.

We had that problem after we loaded “too many” display lists. It went away because we moved our geometry management away from display lists in general, so we didn’t track it down further. We are/were heavy users of wglShareLists(); don’t know if that’s related or not.

On Intel Extreme, display lists may not buy you all that much compared to LockArrays() for multi-passing, or DrawRangeElements() for single-passing. It’s a fully software transform chip, and thus there’s no special geometry management needed (as long as you align your vertices on 16 byte boundaries, at least).

Originally posted by AlexN:
If anyone knows of a solution to this or maybe just some ideas, that would be great.

Hi Alex-

Do you have a simple app you can send me that reproduces this problem? If not, can you post some more info about your app – for example, what’s enabled when you’re rendering your display lists, how are you creating your lists, are you sharing lists, etc?

As Jon’s mentions above he has had a problem with display lists in the past but the problem seems to be difficult to reproduce and I haven’t seen it myself. Especially now that someone else is seeing a similar problem I’m very interested in getting this root-caused and fixed.

Thanks,
– Ben

Hi bashbaug,

I was actually about to email you to see if you were still looking into this problem, since I noticed you had been interested in it before.

I don’t have a simple program I can send you at the moment because I won’t have access to a computer with an intel card until at least monday, but I may be able to make one in a few days.

As for the details of what I am doing:

I am not sharing any display lists.
All lists are created near the beginning of my program.
There are 448 display lists in all, 256 for text characters and the rest for fairly simple models.
Here is how I create the lists for the models:

glEnable(GL_VERTEX_ARRAY);
glEnable(GL_NORMAL_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_COORD_ARRAY);

dlist = glGenLists(1);
glNewList(dlist, GL_COMPILE);
for (int m = 0; m < meshes; m++)
{
	glBindTexture(GL_TEXTURE_2D, texture[mesh[m].material]);

	glVertexPointer(3, GL_FLOAT, 0, mesh[m].vertex);
	glNormalPointer(GL_FLOAT, 0, mesh[m].normal);
	glTexCoordPointer(2, GL_FLOAT, 0, mesh[m].texvertex);

	glDrawElements(GL_TRIANGLES, mesh[m].triangles * 3, GL_UNSIGNED_INT, mesh[m].vertindex);
}
glEndList();

I also create a display list for each mesh in a model using the same approach.

If you need more information about what’s enabled and such when creating or calling the lists, I can look and get that for you. It may just be more straightforward if I create a simpler program that can recreate this, so I will try to do that soon.