Ich habe hier nen ganz komisches prob. Ich habe unter Win2000 an verschiedenen stellen meines OpenGL codes Stack underflow´s, unter WinXP jedoch garnicht.
Es ist auch nicht eine bestimmte stelle des codes.
Woran kann denn sowas liegen?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Stack underflow bedeutet dass du irgendwo versuchst Matrizen vom Stack zu holen, obwohl da keine mehr drauf sind. V.a. Projektionsmatrizen können bei den meisten OpenGL-Implementationen nur wengie (oft nur 4) auf den Stack gelegt werden, und wenn mann dann z.B. 5 auf den Stack legt und auch 5 mal glPop aufruft, dann entstehr ein Stack underflow. Wenns unter XP geht und unter 2k nicht, dann werden wohl verschiedene Treiber bzw. Grafikkarten genutzt, mittels glGet kann man aber leicht herausfinden wie viele Matrizen auf den Stack passen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das ist ja mal ein doller Fehler. Mit der Erklärung von Sascha wirds zwar schnell klar wie sowas zustande kommt, aber ich wäre bei so nem Fehler sicherlich auch erstmal ungläubig gewesen.
Aber das das teilweise so wenige Matrizen sind... Nagut, die Projektionsmatrix sollte nicht soooo häufig gewechselt werden.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Was ich jetzt nicht ganz verstehe ist das wenn ich nach jedem Push auch nen Pop aufrufe der stack voll ist.
Pop nimmt doch die Matrix wieder vom Stack und das geht ja bei WinXP auch ohne probs, nur unter Win2k anscheinend nicht.
Genaus wird mein Text unter WinXP einwandfrei gerendert doch unter Win2k nicht. Da wird der text einfach nicht dargestellt.
Muß man da unter Win2k bestimmte dinge anders machen als unter XP?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also eigentlich sollte der effekt den Sascha erklärt nur auftreten, wenn du 5x hintereinander pushst, und dann 5x pops. Bei 5x (push, ..., pop) sollte nix passieren.
Was aber sein kann ist foglendes. Im Selektion tutorial schreibt Phobeus, dass man einen Namen auf den leeren Stack legen muss, damit man nicht beim ersten poppen nen fehler bekommt. Abeitest du mit Selektion? Wenn ja, könnte es sein, dass dein XP treiber durch zufall dieses Verhalten nicht hat, dein Win2000er Treiber aber schon.
Is aber Spekulation....
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wahrscheinlich liegen in deinem Falle unter Win2k und XP jeweils unterschiedliche OpenGL-Implementationen vor, also entweder andere Treiber oder Grafikkarten. Und da kann es schonmal vorkommen dass man nen Treiber hat der nur (hab ich jedenfalls schonmal erlebt) 2 Projektionsmatrizen auf den Stack legen kann, und wenn man da verschachtelt was auf den Stack legt und wieder runterholen will ist man schnell übers Limit und bekommt nen Stackunderflow. Am einfachsten schreibt man sich dann nen eigenen Stack, der dann ja nix weiter als ein Matrizenarray ist, dann muss man sich nicht mit solchen Sachen rumplagen.
An sich sollte es mit gleichem Treiber und gleicher Grafikkarte aber keine Unterschiede zwischen 2k und XP geben, da (zumindest bei NVidia und ATI) die Treiber unifiziert sind, also z.B. gleiche nvoglnt.dll für 2k und XP.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.