Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe mich bisher nur mit Lazarus+SDL beschäfigt, wenns um OpenGL geht. Aber wenn du X11 + GLX benutzt, wirst du inkompatibel zu Windows, während du bei SDL auf ein Fenster beschränkt bist. Da musst du eventuell sogar für jedes Projekt einzeln abwägen.
Variante 1 dürfte eigentlich das non-plus-ultra sein, wenn die OpenGL-Kompo von Lazarus auf allen Systemen läuft, weil du 1. mehrere Fenster haben kannst und gleichzeitig Plattformunabhängig bleibst (soweit Lazarus-Projekte halt plattformunabhängig sind)
Gruß Lord Horazont
_________________ 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: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Aber wenn du X11 + GLX benutzt, wirst du inkompatibel zu Windows
Nicht wenn ich es klug mache. Ich habe eine Unit OSSupport, die ausgetauscht werden kann. Es muss mir nur gelingen, das Fenster- und Rendercontext-Erzeugen soweit zu standardisieren, dass ich nur mehr Folgendes machen muss: Windows-OSSupport-Unit raus - Linux-OSSupport-Unit rein. Ich habe mir in der Zwischenzeit die X11 und die glx-Funktionen angesehen: vielleicht gehts. Die dglOpenGL pas kann man in beiden Welten benutzen. Hier ist auch die Möglichkeit gegeben, mehrere Fenster zu haben.
In Linux sind die nötigen Units/Header und Beispielprogramme hier zu finden: glx Header: /usr/share/fpcsrc/2.2.2/packages/opengl/src
Zitat:
Variante 1 dürfte eigentlich das non-plus-ultra sein, wenn die OpenGL-Kompo von Lazarus auf allen Systemen läuft
Ja, tut sie, habs schon ausprobiert.
Aber was mir nicht gefällt: Es ist eine Lazarus-Komponente und sie erzeugt den Rendercontext selbsttätig. Wenn ich Einfluß auf den Rendercontext haben will, muss ich an der Komponente etwas ändern. So etwas würde ich eigentlich vermeiden wollen.
In Linux sind die nötigen Units/Header und Beispielprogramme hier zu finden:
OpenGL-Komponente: /usr/lib/lazarus/components/opengl/
Ich habe die Fundorte dazugeschrieben; vielleicht will einer die Beispielprogramme ausprobieren. Sie funktionieren "Out of the box". Allerdings gilt für das X11/glx-Beispiel, dass es etwas schleißig programmiert ist. Es gibt weder das Fenster noch den Rendercontext frei. Bei der OpenGL-Komponente kann ich das nicht beurteilen.
EDIT: hab vergessen zu erwähnen, dass es sich um die Lazarus Release 9.0.26 handelt.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Du meinst sicher 0.9.26, oder ist etwas an mir vorbeigegangen? .
Okay, dass du gerade von deiner GUI redest habe ich nicht ganz realisiert. Klar, dafür solltest du X11 nehmen, da du bei Windows ja auch die Winapi benutzt. Die Lazarus Kompos wären overpowerd und würden die GUI inkompatibel mit FPC ohne Lazarus machen. SDL hingegen passt nicht in dein Konzept. X11 dürfte perfekt sein.
Ich dachte, du willst einfach nur nen bissl mit OpenGL unter Linux rumspielen, dafür hätte ich dir SDL oder halt die Kompo empfohlen, weil das der schnellste weg ist. Wenns aber deine GUI betrifft, bist du so definitiv besser dran.
Gruß Lord Horazont
_________________ 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: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bin ja nicht neugierig oder so. Aber was kann ich mir denn unter "Linux-Entwicklungsumgebung für OpenGL" vorstellen?
SDL: Auch wenn ich mich damit bei dem ein oder anderen unbeliebt mache. Aber SDL ist nicht für alles unbedenktlich einsetzbar. Gerade dann, wenn man ein Fenster evtl. mal in der Größe anpassen möchte. Ehrlich gesagt ist es bei solchen Fällen einfach nur unbrauchbar. Aber dafür wurde es auch nicht entwickelt. Ich persönlich würde da auch lieber die Arbeit in kauf nehmen und direkt auf die Betriebssystem API zurückgreifen.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich versuch mich wirklich sehr kurz zu halten.
SDL ist bis zur nächsten Version für OpenGL total nutzlos, wenn man Cross arbeiten will(wer im forum sucht der findet, hab schön öfters geschrieben wieso).
Die beste Lösung ist direkt auf den Libs zu arbeiten also Windows Fenster API,X11,glew,gl,freetype.
Wie man sowas sinnvoll verpacken kann hab ich schon 2mal vorgemacht Karmarama Code und X-Dream 0.2.
Ich empfehle freetype zu benutzen, unter allen platformen, da es selbständig in einen eigenen buffer arbeitet und somit sehr flexibel ist(wichtiger ist der 8bit tiefenkanal und nicht wie bei windows die 1bit, welche richtig schlechte pixelfonts hervor bringt).
X11 und Win API sind sich sehr ähnlich und ausser im Eventsystem findet man immer wieder parallelen.
Wer auf C++ steht, der sollte mal hier gucken. Das ist meine bisheriger port von Karmarama auf C++ mit einigen neuerungen und optimierungen.
Da ich mich schon nicht mehr an mein Pascal Verison erinner aber mir doch recht sicher bin, hab ich in dieser Version das Klassen und Modulsystem ein bischen anders gelöst. Unabhängig davon, ist das C++ Klassensystem aufjedenfall wirklich Cross kompatibel, da es auch in wxWidget genutzt werden kann und auch theoretisch zur PS3 kompatibel ist(was bedeutet es würde auch unter Wii gehen).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
@Lossy:
Zitat:
Aber was kann ich mir denn unter "Linux-Entwicklungsumgebung für OpenGL" vorstellen?
Tschuldigung, hab mich da etwas unpräzise ausgedrückt. Ich möchte einfach in Linux OpenGL benutzen, unter der Voraussetzung, dass ich bei Pascal bleiben kann. Und die Frage war, was es da grundsätzlich für Möglichkeiten gibt. Ich wollte es nicht nur für die PasGUI, sondern auch ganz allmein persönlich für mich.
SDL hatte ich eigentlich ausgeschlossen, da es nur eine weitere Library ist, auf deren Nutzung auch verzichtet werden kann. Das soll jetzt keine Herabsetzung von SDL sein. Aber ich bin durch den dgl Header den direkten Zugriff auf OpenGL gewöhnt und was man gewöhnt ist, will man meistens auch behalten.
Die Lazarus-Komponente ist wie alles in Lazarus: ziemlich eingepackt und eingewickelt, wenn Du verstehst, was ich meine.
Für X11+GLX habe ich in Free Pascal ein Beispiel gefunden. Hat auf Anhieb funktioniert. Die FPC Package-Library ist eine Fundgrube. Weiß gar nicht, warum sich nur so wenig Leute dafür interessieren.
Und es hätte ja sein können, dass es noch etwas anderes gibt, was ich gar nicht kenne, und vielleicht auch eine gültige Option wäre. Du zum Beispiel hast den dgl Header doch auch in Linux getestet. Da musst Du doch auch irgendeine Umgebung gehabt haben, Free Pascal alleine genügt nicht, denk ich mal, denn für Opengl braucht man ein Fenster.
@Tak2004:
Zitat:
Wie man sowas sinnvoll verpacken kann hab ich schon 2mal vorgemacht Karmarama Code und X-Dream 0.2.
Ich gestehe, ich habe unsere Projekte bis vor kurzem total ignoriert. Aber ich werde mir Karmarama ansehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
@TAK: Wo siehst du das Problem mit SDL, sieht man mal von mysteriösen Fehlern mit 64-Bit systemen (die auch andere Libs haben) ab?
@Traude: Bei SDL hast du direkten OpenGL zugriff. Ganz normal. Du erstellst nur über SDL das Fenster und lässt dir von ihm die Events reinreichen. Die OpenGL-Befehle rufst du weiter ganz normal über den dglHeader auf (SDL bietet zwar auch eine Möglichkeit, die Adressen aus der OpenGL-Bibliothek manuell zu laden, aber wer ist schon so wahnsinnig).
Gruß Lord Horazont
_________________ 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: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ganz kurz und knapp, SDL ist aus der Steinzeit.
Man hat nur ein einziges Fenster und das ist auch noch richtig unflexibel(resize zerstört den context, vollbild auch).
Die Input Events sind grottig, ständig das hin und her konvertieren von ascii unicode, riesen Konstantentabellen für die Tasten(für Spiele kaum interessant aber für Anwendungen mit Textfeld schon).
Die Klassen, für den zugriff auf Surface und co sind mal sehr Performance unfreundlich und man braucht fast immer ne wrapperklasse zu den eigenen Datenstrukturen.
Der schon erwähnte 64Bit Support, ist wie russisch rollet.
Ich vermisse schlicht weg, ein bischen Kontrolle über die Events.
Sind alles dinge, die für jemanden, der nur sein OpenGL Fenster haben will ohne belange aber für jemanden, der ernsthaft, eine Game Engine und Tools Entwickeln will total nutzlos. Ich habe deswegen 3 Klassensammlungen in Karmarama, einmal für Windows API, einmal für Linux API und einmal wxWidget und die Abstrakten Klassen aka Interfaces bieten mir den einheitlichen zugriff mit den ganzen oben kritisierten Punkten. Noch dazu hab ich alles in OOP und nicht prozedural wie bei SDL. Es mit nen Wrapper zu versehen ist genauso viel Arbeit, wie die Klassen für die OS API's selber zu schreiben und der Wrapper für SDL wären dann auch noch langsamer.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Erm... Das Konvertieren ASCII<->Unicode kannst du dir mit SDL_EnableUNICODE abnehmen lassen. Dann ist das unicode-Feld im Keyevent mit dem Unicode-Wert der gedrückten Taste (Shift, Strg und Alt schon eingearbeitet) dort drin.
Riesige Konstantentabellen hast du sonst doch auch. Zum beispiel diese VK_*-Konstanten aus der Winapi.
Das mit dem einen Fenster ist für ein Spiel eigentlich doch egal, die Widgets zeichnet man doch eh auf dem OpenGL-Kontext, der Performance wegen. Und ich habe bisher noch kein Spiel gesehen, bei dem man im Windowed Mode die Fenster innerhalb des Spiels aus dem Fenster rausziehen kann.
Der Surface-Zugriff ist mindestens interessant. Ich habe mich damit noch nicht detailliert befasst, es hat mir gereicht, den kram an OpenGL zu schicken.
Klar, wenn man eine Anwendung entwickeln will, die mehrere Fenster braucht, ist man mit SDL ziehmlich schlecht bedient. Da besteht die einzige Möglichkeit darin, die DLL mehrfach zu laden, und dann hat man wirklich ein riesiges Chaos.
Aber was anderes: Im Moment setzt das DGLSDK ja auf SDL. (Ohne jetzt unfreundlich klingen zu wollen) Hast du vielleicht ne Idee, wie man diesen Nachteil beheben kann? Es wird ja EasySDL mitgeliefert, um neulingen den Einsteig in OpenGL zu erleichtern. Nun ist es ja quatsch und wir wären nicht besser als das ARB-Team, wenn wir auf diese veraltete Technik setzen und Neulinge dann wenn sie ernsthaft mit etwas anfangen sich komplett umstellen müssen. Aber das wäre vielleicht etwas für einen extra Thread.
Gruß Lord Horazont
_________________ 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: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich bin mir gerade etwas unschlüssig ob das nicht schon ein völlig neues Thema ist. Im Zweifel kann man das ja immer noch teilen.
SDL: Ich bin sicher nicht der größte Fan von SDL. Aber bei Bibliotheken darf man nie vergessen wozu sie eigentlich entwickelt wurden! Im Falle von SDL geht es darum ohne große Kenntnisse des Systems kleine Multimedia Anwendungen (Spiele) zu schreiben. Die man dann auch noch relativ einfach auf eine andere Platform portiert kann. Und genau diese Anforderungen erfüllt Simple DirectMedia Layer.
Wenn man spezielle Anforderungen hat dann wird man sicherlich an die Grenzen von SDL stoßen. Aber ich denke nicht, dass es von SDL beabsichtig war wirklich jeden möglichen Fall abzudecken. Die angesprochenen Kritikpunkte stimmen in jedem Fall. Ich habe bei SDL_ttf selber genügend Punkte gefunden die mich mitlerweile bereuhen lassen, dass ich SDL_ttf in meiner Fontbibliothek unterstütze. Allerdings für viele anderen Anwender reicht der Funktionsumfang von SDL trotzdem. Und genau dafür wurde SDL meiner Meinung nach ja auch gemacht.
DGLSDK: Ich denke nicht, dass man OpenGL Anfängern noch die Programmierung der Windows API oder des XServers zumuten sollte. Zu mal diese Einschränkungen für einen Großteil der Leute nicht mal ins Gewicht fallen werden.
Fazit: Nicht vergessen wofür etwas geschrieben wurde. Sonst könnte man meiner OpenGL Fontbibliothek ja fast vorwerfen für DirectX vollkommen nutzlos zu sein.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Tja, ich wollte dazu noch etwas sagen - aber Lossy hat es mir abgenommen. Jeder schwört eben auf sein eigenes System.
Aber nur soviel:
@Lord Horazont: Ich weiß, ich kenne SDL: Ich habe meine erste GUI mit SDL gemacht, und eigentlich hat sie tadellos funktioniert. Was mich gestört hat, ist die Tatsache, dass man nur ein Fenster haben kann. Und Du musst zugeben, dass sie von der neuen Release schon ziemlich lange sprechen.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Das war im Prinzip auch das, was ich sagen wollte.
Für die einfachen Dinge ist SDL völlig ausreichend und wer vor hat über den Tellerrand zu schauen nutzt halt andere Alternativen.
Mit der nächsten Version, wenn sie jemals erscheint, gibt es ja multi window und der 64bit support sollte dann auch gehen. Was es Neulingen dann auch wieder vereinfacht.
Zum Thema externe Dependencies minimieren, einfach mal auf alles ausser SDL verzichten Man braucht kein JPEG,PNG,tiff und was weiß ich libaries mehr mit schleppen, es ist bei Spielen eh zu empfehlen mal mit der Zeit zu gehen und auf DDS um zu stellen.
Gleiches gilt für den Sound, OpenAL+Ogg, Bass oder FMod(je nach Lizenz anforderungen) reicht völlig, kenne keinen der ein xm,sm,mid oder ähnliches benötigt.
Wenn man C++ nutzt kann man dann noch kleinere Libs(bei passender Lizenz) noch mit ins projekt rein linken. Ich mache das mit lua, glew und bei meinen Tools auch mit wxWidget so. OpenAL erwarte ich auf dem System(sonnst verlinkt man auf den installer für windows) und ogg bring ich selber als dynamic lib mit.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm... Ich weiss nicht, wie lange sie schon von einem neuen Release sprechen, aber ich habe die Meldung auch schon vor einiger Zeit gesehen... Aber gut, Lossy hat eigentlich alles gesagt, man sollte daran denken, wofür es geschaffen ist.
Gruß Lord Horazont
_________________ 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: 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.