Jump to content
  • Advertisement
Sign in to follow this  
Kincaid

OpenGL Stack Overflows And Disappearing DisplayLists

This topic is 4656 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

Hello, I'm working on an editor to place nature on landscapes. The Idea is kinda like billboarding, select an texture of some small plant/grass, and draw quad across the landsscape. This means many quads. Apart from framerate related problem; I got an stackoverflow when I projected about 20000 quads. So I thought up the following; - At each click start drawing a display list - the displaylist contains the 'new billboards' - start drawing a new display list - draw the old display list - draw the new display list toghether they contain all the nature which is added at each click. Still stackoverflow. (also got rid of pushMatrix() and popMatrix(), the overflow shifted in the code) So the problem is not in drawing, this goes well at each click, but in adding the nature elements in a linear list. Now I have a class with a base-list-element. from there I keep adding new items through new nextpointers in the list-elements. The stack overflow seems to come from very long recursive Next(list-item) calls, but definitily not inifinite. I know this is a 'general problem', but what is the main approach to making this work, calling things more than 30000+ times ?? But my openGl problem is yet another. The drawing part goes fine, but when about 70000 quads are drawn within the mainlist, it just disappears,nothing is projected anymore. a bit of code to specify; void StartCache ( ) { Cache_List = glGenLists(1); glNewList ( Cache_List, GL_COMPILE ); } void StopCache ( ) { glEndList(); } void JoinLists ( ) { int JoinedList = glGenLists(1); glNewList ( JoinedList, GL_COMPILE ); glCallList ( BoardList ); // boardlist is the displaylist, uptill now glCallList ( Cache_List ); glEndList ( ); BoardList = JoinedList; } void AddStuff () { StartCache( ); DrawStuff ( ); StopCache ( ); JoinLists ( ); glCallList( BoardList ); } So is there a limit to what a Display List can contain, which seems logical enough, and what is it, 70000+\-??? And is the problem here also created through stacking errors ?? Well, the basic question is, how the fudge do I project and add a hell of a lot of stuff to my scene ?

Share this post


Link to post
Share on other sites
Advertisement
70000 quads is best done with an array kept either on the card or in memory, depending on how you update it, or maybe using instancing or any of several other techniques.

Read up on vertex arrays and also VBOs, at least.

If the list runs out of memory, the error state will be set to GL_OUT_OF_MEMORY. Check for errors at glEndList();

I don't see any queries that will give how big those can be. I assume that this is because different operations take different amounts of memory.

Share this post


Link to post
Share on other sites
I know all aout vertex arrays. VBO's not yet, but I'll take a crack at them.
But still, it doesn't help with the stack overflow, because the vertex array data or VBO still has to be set. It's then when the problem presents otself. how to process that many numbers into an array??
and besides, my stuff is static, so lists serve my purposes best.
Arrays are reserved for dynamic data.
How do modern games project so many vertices? - apart from te real question, how to do it so fast as possible?

Share this post


Link to post
Share on other sites
You should brush up on your GL basics - stack overflows here refer to the projection/modelview/texture matrix stacks within OpenGL's state machine (most probably the modelview), the vertex count is irrelevant. The minimum value for these is two for projection and texture, and 32 for modelview.

Check all occurances of pushMatrix and make sure they've all got a corresponding popMatrix. Also check that you're not exceeding the matrix depth at any given point (eg. more than 32 nested transformations, although thats unlikely). At the very least post what your DrawStuff function contains, as your problem likely lies within it.

(Also, it looks like you're creating lots of new display lists and discarding old ones without deleting them. This is sloppy and will likely cause problems later).

Share this post


Link to post
Share on other sites
know my basics, as said, no matrix pushes or pops within the code anymore.
checked it, the problem shifted.
I am referring to the more general 'stack overflow'.
as to opengl, I asked another question.
Also, Im only creating 2 display lists at the time, and then join them.
deleting them seems only redundant to mention.
the drawstuff is, logically;
glBegin()
glvertex;
glVertex;
glVertex;
glVertex;
glEnd();
Just drawing a quad.

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!