Problem mit glDeleteLists()
-
Hallo zusammen,
ich erzeuge mit
Particles = glGenLists(5); glNewList(Particles, GL_COMPILE); for (unsigned int i = 0; (i<particles.size()); i++) { switch (particles[i].color) { case 0x00: glColor3ub(0xFF, 0xFF, 0xFF); break; case 0x01: glColor3ub(0x00, 0x00, 0xFF); break; case 0x02: glColor3ub(0xFF, 0xF0, 0x4F); break; case 0x03: glColor3ub(0x74, 0x49, 0xFF); break; case 0x04: glColor3ub(0xDC, 0x84, 0xFF); break; case 0x05: glColor3ub(0xFF, 0x93, 0x3A); break; case 0x06: glColor3ub(0xFF, 0xD5, 0xAC); break; case 0x07: glColor3ub(0xFF, 0x00, 0x00); break; } glBegin(GL_POINTS); glVertex3f((particles[i].x - move_x)* scale, (particles[i].z * scale), -(particles[i].y * scale) - MOVE_Z); glEnd(); } glEndList();in einem OpenGl-Fenster eine große Anzahl (einige 10000) an Punkten. Danach speichere ich das Fenster als Bitmap ab und führe
if (glIsList(5)) glDeleteLists(5,1);aus, um die Display-List wieder zu löschen. Das ganze wird ca. 400 mal in einer Schleife gemacht, wobei der Vektor particles jedesmal neu befüllt wird.
Nach ca. 100 Durchläufen erhalte ich dann eine Fehlermeldung, das zuwenig Arbeitsspeicher zur Verfügung steht.
Muss ich noch was anderes machen ausser glDeleteLists(), um den Speicher freizugeben.
Ich benutze den Borland Builder 2006 unter Windows XP
Gruss Lodo
-
1. Warum holst du dir jedes Mal 5 Listen, wenn du nur eine davon benutzt?
2. Warum rufst du für jeden Partikel glBegin und glEnd auf, wenn es ein einziges Mal für alle auch tun würde?
3. Warum löschst du nur die Liste Nr. 5, wobei du doch gar nicht weißt, was die Liste Nr. 5 überhaupt ist? Was passiert mit den 4 anderen Listen?
Fragen über Fragen ...
-
Danke,
in 1. von TomasRiker lag der Fehler...