nachdem ich nun endlich (hoffentlich stabil) mein Delphi- Progrämmchen wieder in mehreren Fenstern am Laufen habe (habe mich von den div. Fenster- Komponenten verabschiedet und das Code- Template von hier als Basis genommen), habe ich nun eine Einsteiger- Frage:
Mit welchem OGL- Befehl versetze ich die State- Machine von OpenGl wieder in den Basis- Zustand, d.h wieder in den Zustand direkt nach der Initialisierung? Hintergrund: Da ich mit OpenGl in mehreren Forms arbeite, und in diesen zwischen 2d (Ortho) und 3d (Projection) hin- und herwechsele, suche ich einen einfachen Befehl um z.B. beim OnShow, bzw. innerhalb des OnIdle wieder alles aus dem anderen Fenster 'aufzuräumen' ohne mir alles merken zu müssen und entsprechend wieder zurückzusetzen.
Gibt es da einen Befehl? Habe bisher in den Büchern nicht so recht 'was finden können (Vielleicht bin ich auch einfach nur zu blöde es zu finden ).
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Um die Statemachine wieder in ihren "Urzustand" zurück zuversetzen, mußt du direkt nach der Initialisierung alle Attribute mittels glPushAttrib(GL_ALL_ATTRIB_BITS) auf den Attributstack legen.Danach kannst du alle gesicherten Attribute wieder mittels glPopAttrib vom Stack herunterholen.Funktioniert also genauso wie das sichern bzw. laden einer Matrix. Welche Attribute genau gesichert werden steht hier : <a href='http://www.3dlabs.com/support/developer/GLmanpages/glpushattrib.htm' target='_blank'>http://www.3dlabs.com/support/developer/GL...lpushattrib.htm</a>
Aber noch ein Hinweis im Bezug auf das Sichern aller Attribute : Je nach Grafikkarte (auf meiner 9700er Radeon ists z.B. recht langsam) ist das pushen bzw. popen aller Attribute sehr langsam, weshalb du es nicht unbedingt in jedem Frame machen solltest!
Du kannst sämtliche Befehle, die du für einen definierten Ausgangszustand brauchst, in eine Displaylist legen und die halt immer wieder aufrufen (dann sparst du dir das ständige neue "pushen" der Attribute - außerdem ist es schneller, weil du z.B. die Attribute von Textureinheiten, die du eh nicht verwendest, auch nicht berücksichtigen. musst). In deinem Fall wären es zwei Displaylisten: eine initialisiert den Ortho-Modus, die andere die perspektive Darstellung.
Für eine "richtige" Neuinitialisierung (also auch das frei geben sämtliche Displaylisten und Texturobjekte) bleibt dir aber nur das Auflösen und Wiederherstellen des Renderkontextes, wenn du nicht immer brav mitprotokolliert hast.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.