Jump to content
  • Advertisement
Sign in to follow this  
Steve-B

Display Lists (advanced question)

This topic is 4834 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi All This is a bit of an advanced question about display lists. I was contemplating whether to post this on the opengl.org advanced forum or here. I couldn't be arsed to setup an account on OpenGL.org so here we are. lol. Anyway the problem is that I have created a class that loads a Lightwave model. The model polygon and vertex data is stored in pointers within the class. Now I then load the model into my opengl app by created a pointer to the class: Lightwave *model = NULL; Then I initialise the model as normal and load the object into the memory. Now here is where display lists come in. The data is then passed to a display list using the array version of the opengl commands. I then delete the model data freeing up the memory it used and the model is display using the display list and it works fine. The problem is my program sometimes crashes and it is very annoying. The only time it doesn't crash is when I remove the display list code. The error message I recieve is always an unreferenced memory error. Is there something I should know about display lists that is going on behind the scenes?? Steve

Share this post


Link to post
Share on other sites
Advertisement
What you need to compile to the list are drawing codes. I think that compiling using vertex arrays within a display list still refers to the pointer's location, so by deleting it, you get that error. If you compile actual drawing commands to the list instead, you should get the same speed, but it won't be dynamic at all. I have been wrong before, and I'm not completly sure that the array calls go into the list this way, but I think so.

Share this post


Link to post
Share on other sites
according to msdn:

Quote:

You can include the glDrawElements function in display lists. When glDrawElements is included in a display list, the necessary array data (determined by the array pointers and enables) is also entered into the display list. Because the array pointers and enables are client-side state variables, their values affect display lists when the lists are created, not when the lists are executed.

from: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_2q5w.asp

So all the data should be copied into memory when you create the display list, and it should be safe to delete it. You can try replacing the data with garbage before you delete it to test that this is the case. Even after you delete a block of memory, the data might be accessable and it might not be messed with. In MSVC, the debug heap replaces deallocated blocks with 0xcd of 0xeefe or something like that.

Share this post


Link to post
Share on other sites
Sounds like the 'display list code' contains or gets passed an invalid pointer sometimes. Like Dyerseve says, the pointers are only used when creating the list, so it must be then.

Share this post


Link to post
Share on other sites
Hi

Thanks for your replies. I might give the glDrawElements a bit of investigation and see what happens when I use that.
I'll just say that my program would not instantly crash. It would run for between 30 minutes to sometimes 3 or more hours before crashing with a memory error message.
Well my code is now pretty stable (but that's without display lists). It also seems to be more stable since I changed all the objects in my demo to use pointers...
For example I have a vector class which I used to create an object with.

Vector camera;

Set the code running and went off to work. By the time I got home (9 hours later) it had crashed. So I changed that new addition to my program to this:

Vector *camera;

Initialise the camera (allocate RAM for it) in my setup function and the program didn't crash and ran for over 9 hours. Maybe I'm barking up the wrong tree but this sort of thing affects my engine. I'm not sure why though. I didn't think there was anything wrong with using the first method. Which method does everyone else use for adding objects to your demos??

Steve-B

Share this post


Link to post
Share on other sites
the thing about memory reference bugs is that they are very misleading about the cause. I once had a program that would crash at a line 1000 lines below the actual error.

basically, im saying that the problem may not be display lists, its just that when you remove the display list, you change the outputted exe to a state where the memory bug doesnt show up.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!