Displaylists and GeForce cards ?

I got a demo working which I intent to show at the Bizarre 2000 competition in the Netherlands. The ßeta tests worked fine on a voodoo3 and a voodoo1 (although, this one was somewhat, how shall I put it… slow ? )

However on GeForce cards, it doesn’t seem to show the displaylists. The machine the demo is showed upon also contains a geforce card.
(there’s my dilemma ) Is there some GL_variable I should set for the GeForce or is it a common problem ?

Help appreciated

Divide Overflow

It could be a bad driver, but I haven’t had any problems with display lists. Make sure you have the recent drivers from nVidia.

Otherwise, you might be doing an illegal operation with display lists that the voodoo drivers don’t check for. There are some things that can make display lists invalid. As long as you code to the OpenGL spec and the vendors make their drivers to spec, your code should work with any hardware.

I am sure you can ask nVida for some support on this.

/skw|d

Okay, it is an TNT2 instead of GeForce (oops :/) What are the things that make display lists invalid ?

(btw, the beta tester tells me it works fine in software rendering on his laptop… Maybe if I could get those 2 fps up to 5 … )

Divide Overflow

Weird, i use display lists with my geforce and they work perfectly… faster than vertex buffers…
In fact, i’ve seen some nvidia document somewhere which stated that the only thing faster than display lists is that nvidia specific vertex array range **** (at least i think that’s what it’s called

although i’m not sure if the same goes for the tnt2… it should at the very least not be any slower…

so maybe it’s a driver thang…
(since nvidia uses a shared driver architecture)

I have had the same problem on my GeForce. It acts as if the glNewList and glEndList commands weren’t there. Also, if I use glGenLists(1), when I call glCallList it generates a GL_INVALID_VALUE error, which doesn’t happen if I decide the number myself.
Tell me if you find the solution.

1/0: What I mean is that there are some rules when using display lists. You cannot use any GL function you want to inside a display list. There are specs on what you can and cannot store inside a display list.

/skw|d

I ran into this problem with the GForce, it only occured on Win 98, not NT… Anyway it was due to having invalid calls within the display list. The Red book documents what calls are not valide within a display list. Examples are (pg 263-264 in version 1.1. book)
glNormalPointer, glPixelStore,glFlush, glCOlorPOinter, glEnableClientState, glGet() etc. I think it is driver specific, some drivers just ignore invalid calls, others will not create the display list.

Such calls are supposed to be executed immediately and not compiled into the display list. They should NOT be ignored and they should NOT cause a failure to compile the display list.

So, if you do a Flush inside NewList/EndList, you will flush all commands up through the NewList.

If you call VertexPointer inside NewList/EndList, you will set the current vertex pointer. Note that vertex arrays get dereferenced during the process of compiling a vertex array.

If you call GetIntegerv inside NewList/EndList, you will retrieve a value as usual. Note that unless you are doing COMPILE_AND_EXECUTE, previous commands in the list will not have had any effect on this value. So:

glBlendFunc(GL_ONE, GL_ZERO);
glNewList(1, GL_COMPILE);
glBlendFunc(GL_ONE, GL_ONE);
glGetIntegerv(GL_BLEND_DST, &dstBlend);
glEndList();

…retrieves dstBlend == GL_ZERO, not GL_ONE.

If you can come up with a specific example where this does not appear to be working, please email me with it.

  • Matt

After reading the post by mcraighead my old display list problems make more sense, I went back to my old code to see what calls I was making. I was making a call within the display list that was invalid(that is can’t be stored in a display list), so the display I generated was not what I expected as some of the calls were not stored in the list. I’m not clear why this worked on a different OS though. I orginally assumed it was a driver issue, though on retrospect I was probably just lucky on the platform it worked on.

Thanks for the clarification! I assumed the non valid display list commands would fail, but it makes more sense that they are executed immediately.
Which of course can still change the behavior from what was intended.

elroy

Hey Divide Overflow, hasn’t Bizarre 2000 been completed? Did you get to show your demo? If so, which one was it?