Hab gerade wieder versucht, OpenGL unter Lazarus zum Laufen zu bringen. ok, man braucht da so ein TOpenGLControl. Nur: Das gibt´s nicht. Weder in den Komponenten noch sonstwo. Also mit Deklaration suchen findet er nichts (kompilieren tut er sowieso nicht). dglOpenGL geht auch nicht mangels GetDC. Einzige Möglichkeit, die mir da noch einfällt, wäre GLScene, nur... Kann man da abgesehen von den Komponenten noch irgendwas benutzen, oder muss man bei Beleuchtung per Vertex und so bleiben?
Vor nem Jahr oder so hab ich´s schon mal mit SDL zum Laufen gebracht, aber nach den ersten paar Dreiecken war das ganze dann bereits unübersichtlich genug, dass ich mich in meinem Code nicht mehr zurechtgefunden habe. Außerdem müsste man sich da sämtliche Komponenten selber machen (aus demselben Grund gefallt mir GLUT nicht wirklich. Ja, und weil noch eine überflüssige dll mitgeschleppt wird, die das Programm wahrscheinlich auf anderen OS unbenutzbar macht (*), oder eben, wenn sie nicht mitgeschleppt sondern installiert wird, allgemein auf anderen Rechnern).
(*): Ja, ich weiß man muss neu kompilieren, aber das geht wesentlich einfacher als irgendwelche Dateien herumzuschieben.
Die OpenGL-Komponente muss erst installiert werden und befindet sich im Verzeichnis Lazarus\components\opengl und das Beispiel unter examples\openglcontrol.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du brauchst das OpenGLControl nicht, und mit Lazarus kann man problemlos die dglOpenGL.pas benutzen (siehe mein aktuelles Projekt, nutzt unseren Header sowohl unter Windows als auch unter Linux). Einen DC kannst du dir unter Windows ja ganz einfach selber holen (vom Fenster z.b.) und unter Linux muss mans halt händisch statt mit CreateRenderingContext machen, also z.b. via glxCreateContext.
P.S. : Das OpenGLControl ist halt praktisch wenn man cross-plattform macht, weil es einem einen aktiven Kontext für verschiedene Betriebsysteme liefert. Aber ein Muss unter Lazarus ists definitiv nicht. Und es läuft problemlos zusammen mit unserer dglOpenGL.pas!
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, das OpenGLControl ist das sinnigste, wenn du unbedingt eine vollständige GUI-Anwendung drumherum brauchst. Sonst ist SDL um längen sinnvoller (weil kleiner). Wichtig ist, dass du das OpenGLControl erst initialisieren kannst, wenn das Fenster vollständig erstellt ist (also z.B. im OnActivate oder OnShow oder mit einem Timer). Dann aber vorsichtig sein, dass das nur einmal passiert (also z.B. nen Boolean setzen, wenn fertig initialisiert ist und den vorher prüfen…).
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Sa Nov 24, 2007 11:59 Beiträge: 116
Programmiersprache: FreePascal
Wem SDL noch zu fett ist oder unbedingt cross-platform nen OpenGL 3-Context haben will, kann auch zu GLFW greifen, Pascal-Header werden da praktischerweise gleich mitgeliefert. Allerdings bietet es auch wirklich nur die nötigsten Funktionen zum Context erstellen und fürs Input Handling.
Wenn nicht unbedingt benötigt, würde ich die LCL an eurer Stelle aus OpenGL-Anwendungen rauslassen, zumal die dazu neigt, von Version zu Version problematischer zu werden (TScrollBox hat keine Scrollbalken mehr, ab und an fehlt bei der Qt-Version der Button zum Fenster schließen, ..)
Registriert: Di Mai 10, 2011 19:00 Beiträge: 43
Programmiersprache: FreePascal , C++
Das mitschleppen der SDL dll ist wirklich ziemlich unpraktisch. Aber ich habe mich damit einigermaßen abgefunden, weil ich es einfach enorm toll finde wenn man meine Programme nur durch neues kompilieren auf eine andere Plattform(*) bringen kann. Außerdem war ich ehrlich gesagt zu bequem mir dieses TOpenGLControl zu installieren.
Zum Thema GUI hätte ich den Vorschlag dass man das SDL-Fenster aus einer LCL Anwendung erzeugt. Mein erstes kleines Spielchen funktionierte so. Allerdings habe ich damals das Fenster nach einem ButtonClick erzeugt, worauf die Hauptschleife einsetzte, und somit die LCL GUI einfrohr. Aber durch etwas geschickteren Code könnte man dieses Verhalten bestimmt umgehen (vllt. mit Threads). Dann sind es eben zwei Fenster eins für OpenGL und eins für Einstellungen. Für einen Leveleditor o.Ä. könnte das aber reichen. Ist aber nur so ne Idee...
Und die Unübersichtlichkeit im Code finde ich nicht so dramatisch.
(*) Wenn diese SDL unterstützt und die SDL Header + Libary hat
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
sharkman hat geschrieben:
ok, hab jetzt mal das TOpenGLControl installiert. Zumal da keine OpenGL funktionen dabei sind, hab ich dann dafür dglOpenGL verwendet -> SIGSEGV
InitOpenGL hab ich gemacht, der Rest, also CreateRenderingContext und ActivateRenderingContext geht mangels DC nicht.
Klappt hier einwandfrei. Sowohl Windows als auch Linux. Du musst aber nachdem du den Kontext aktuell gemacht hast (TOpenGLControl.MakeCurrent) noch ReadExtensions und ReadImplementationProperties aufrufen, das macht ja ansonsten ActivateRenderingContext.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
sharkman hat geschrieben:
Zitat:
Wichtig ist, dass du das OpenGLControl erst initialisieren kannst, wenn das Fenster vollständig erstellt ist
Ja, habe mich ungenau ausgedrückt. Also du kannst die Initialisierung des OpenGL-Kontextes (ReadExtensions etc.) erst machen, wenn das Fenster vollständig erstellt ist.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: Google [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.