Registriert: So Dez 19, 2004 00:27 Beiträge: 454 Wohnort: Nürnberg
Ich bastel gerade an ner Unit, um nicht jedesmal OGL initialisieren bzw. die Template benutzen muss.
Aber wie mach ich des mit dem Rendern.
In D3D gibt es ja die Möglichkeit hiermit:
Code:
Device.beginScene;
// Befehle
Device.EndScene;
die Befehle, die dazwischen stehen zu rendern.
Gibt es das (bzw. etwas ähnlichen) auch in OGL?
Zuletzt geändert von LH_Freak am Di Mai 24, 2005 19:18, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jeder gültige OpenGL Aufruf wird an die GraKa bzw. den Framebuffer weitergeleitet. Durch aufrufen von Flush oder einer entsprechenden Funktion, die den Buffer ausgibt, wird das Zeichnen "beendet" (zumindest für dieses Bild).
Aus welcher Unit auch immer die OpenGL Befehle kommen, alle Landen im Framebuffer wenn Sie:
die selbe OpenGL Unit nutzen und
gültig sind.
(Zu ersteren: Es gibt fehler, wenn du in einer Unit die OpenGL12.pas verwendest OpenGL aber über die DGLOpenGL.pas initialisiert wurde.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Kleine Anmerkung zu Flash. Das ist nicht ganz richtig. Die OpenGL12.ps und die dglOpenGL.pas bertragen sich nicht, da beide die Methoden dynamisch laden. Wenn du OpenGL mit der dglOpenGL initialisiert hast und dann die OpenGL12.pas initialisierst (Also die Funktionspointer lädst) dann kannst du auch diese verwenden.
Die Textures.pas benutzt keinen der OpenGL Header. Sie lädt ihre 2-3 Methoden von selbst und sie funktioniert dennoch. Im Endeffekt zeigen alle diese Methoden dann ja eh auf die selben Methoden in der Schnittstelle von OpenGL. Für OpenGL spielt es keine Rolle woher die Befehle kommen. Hauptsache sie kommen von dem gleichem Thread.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich kann dir gerade nicht folgen. Aber mir fällt gerade was zu deinem "Problem" ein. Du könntest eine Klasse machen, die
- bei der Erzeugung OpenGL initialisiert.
- bei BeginScene den Bildschirm löscht.
- bei EndScene den aktiven Buffer wechselt und somit das neue Bild zu gesicht bring
- bei dem Freigeben dann entsprechend auch OpenGL wieder frei gibt.
Allerdings alle Aufrufe von OpenGL die außerhalb von Begin und EndScene aufgerufen werden würden, würden dennoch zu OpenGL gelangen. Das könntest du nur dann verhinden indem du alle Funktionspointer von OpenGL löschen und wieder laden würdest. Allerdings solltest du so etwas bei jedem Bild versuchen würdest du unglaublich viel Zeit verschwenden. Was absolut nicht nötig wäre. Abgesehen davon, dass die Aufrufe von OpenGL dann in einem Fehler enden würde. Da deren Poiner Nil wären.
Allerdings um deine Initialisierung zu vereinfachen kannst du auch die Methode aus der dglOpenGL benutzen.
CreateRenderingContext, DestroyRenderingContext, ActivateRenderingContext und DeactivateRenderingContext
Das dürfte das alles schon ein wenig schmaler machen.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Also das glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); sollte in den "EndRender"-Teil, aber sonst seh ich kein Problem, und das ganze sollte funzen, hab nämlich zufällig letzte Woche gerade genau dasselbe gemacht, will meinen Code in Zukunft ein bissl übersichtlicher halten.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Mi Aug 28, 2002 19:27 Beiträge: 568 Wohnort: Chemnitz / Sachsen
@geo : genau das wollt ich auch grade sagen ...
meines wissens macht das absolut keinen unterschied, da es ja in der render-"schleife" von opengl immer an der selben stelle steht, egal ob man das vor dem rendern oder nach dem swapbuffers macht ...
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
@LH_Freak: Wenns schwarz is, ists doch ok, oder soll schon was gezeichnet werden?
@geo, rswm: Das war einfach Gewohnheit von mir, vielleicht ists wirklich egal, habs aber bis jetzt noch nie wo anders als vor dem eigentlichen Zeichnen gesehen...
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Mitglieder in diesem Forum: Bing [Bot] und 13 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.