Rückgabewert von glGenLists ist immer derselbe
-
Hallo leute
ich versuche ein kleines spiel zu programmieren. die objekte werden aus .obj-dateien ausgelesen und in displaylisten gespeichert.
ich habe folgende klasse:struct PStaticObjects { [...] std::string Name; GLuint DL; void loadObject(std::string filename); void drawObjects(PVector pos); PStaticObjects(); PStaticObjects(std::string name, std::string filename); ~PStaticObjects(); }; PStaticObjects::PStaticObjects(std::string name, std::string filename) { [...] this->Name = name; this->loadObject(filename); } void PStaticObjects::loadObject(std::string filename) { this->DL = glGenLists(1); glNewList(this->DL,GL_COMPILE); loadObj(filename.c_str()); //in dieser funktion werden aus einer .obj-datei die vertices ausgelesen und mit glVertex an opengl übergeben glEndList(); [...] } std::vector<PStaticObjects> staticObj;
der name jedes objektes und der pfad zu dessen obj-datei wird nun aus einer textdatei ausgelesen und schliesslich so dem vector hinzugefügt:
staticObj.push_back(PStaticObjects(name, filename));
das problem ist nun: in der funktion PStaticObjects::loadObject() wird von glGenLists(1) immer dieselbe zahl zurückgegeben (laut gdb 257), und ich sehe 3 gleiche objekte auf dem bildschirm, die eigentlich nicht gleich sein sollten.. :o
bevor ich container in mein programm eingeführt habe, hat alles funktioniert (damals hab ich mittels eines pointers auf die objekte zugegriffen, was aber sehr umständlich war, wenn ich während der laufzeit weitere objekte hinzufügen wollte)
hat jemand eine idee, wieso glgenlists immer die gleiche zahl zurückgibt?
-
was fuer einen errorcode bekommst du?
-
0 (also GL_NO_ERROR)
-
Dann liegt dein Fehler wohl woanders.
-
ist dein devicecontext ueberhaupt schon initialisiert und gestzt ? manche vergessen das bevor sie daten laden und entsprechend ...
oder hast du vielleicht zuviele displaylists allokiert? bzw eventuell zu grosse? (out of mem?)
knivil schrieb:
Dann liegt dein Fehler wohl woanders.
captain obvious, is it you?
-
rapso schrieb:
captain obvious, is it you?
Manche sehen den Wald vor lauter Baeumen nicht.
-
devicecontext ist richtig gesetzt.
und am speicher kanns auch nicht liegen, hab insgesamt nur 4 displaylisten (die für die 3 objekte und noch eine für schrift (die eigentlich ca. 250 listen sind, aber da die einzelnen so klein sind zähle ich die mal als eine))
ausserdem hat es ja noch funktioniert bevor ich die container benutzt habe.. würde zu wenig speicher nicht ohnehin ein GL_OUT_OF_MEMORY-error generieren?knivil schrieb:
Dann liegt dein Fehler wohl woanders.
könnte schon sein, aber tatsache ist, dass ich den rückgabewert von glGenLists() unmitelbar nach dem aufruf überprüfe und er immer 257 ist (257 daher, weil die schrift 256 listen benötigt, die vorher erstellt werden). und ich wüsste nicht wo ich sonst nach der ursache suchen sollte..
-
Was ist an 257 so schlecht? Es ist einfach ein Identifier fuer die entsprechende Liste in dem entsprechenden Kontext. Es ist weder ein Fehler oder sonstwas. http://www.manpagez.com/man/3/glGenLists/
ich wüsste nicht wo ich sonst nach der ursache suchen sollte
Du faengst vorne beim Code an und arbeitest dich nach hinten durch.
-
wenn es nur einmal 257 zurückgeben würde, wäre das ja kein problem. das problem ist, dass es das mehrmals macht!
alles durcharbeiten ist ein wenig umständlich, sind immerhin mehr als 5000 zeilen.. :s
stellen, die relevant sein könnten, habe ich natürlich schon genauer angeschaut.EDIT: ok, habs rausgefunden. der container wurde mit einer grösse von 0 initialisiert, bei jedem aufruf von push_back() wurde also ein neuer vector angelegt, der inhalt kopiert und der alte gelöscht (und die destruktoren aufgerufen, in dem wiederum die displayliste gelöscht wird)
http://www.cplusplus.com/forum/beginner/2660/auf jeden fall danke für eure bemühungen