Wiz SDL und OpenGL


profpaule

Still Fresh
Joined
May 11, 2007
Messages
54
Location
in meine kabuff
ICQ
580817124
LOCATION
in meine kabuff
Tach,

Ich hatte ursprünglich geplant, Raycasting für mein kleines Projekt fürn Wiz zu verwenden, aber wie's scheint schafft selbst mein Laptop mit 2.4gHz nicht mehr als 74 fps (Floorcasting ist seeeehr langwierig). Deswegen will ich jetzt OpenGL verwenden, bekomme das aber nicht zum Laufen. Gibts da eine Anleitung zum Installieren der Libs usw.? Wenn ich SDL_opengl.h include, dann hab ich ja immernoch nicht die richtige Lib dazu gelinkt. Wie heisst die? Ich hab hier ne OpenGL SuperBible rumzuliegen, aber die scheint GLUT zu verwenden. Ich will hingegen die in SDL eingebauten Funktionen für Events usw. verwenden. Hab ich da evtl. etwas nicht richtig verstanden?

Wenn man mir jetzt hingegen sagen würde, dass man ein Rollenspiel auch ohne Boden und Decke, so a la Wolf3D zocken könnte, dann würde ich meine Raycastingfunktionen natürlich beibehalten. Was meint ihr? Ach mist, ich seh grade, dass selbst ohne Floorcasting nur max. 100-150 fps drinne sind (Wie gesagt: auf meinem Laptop, ich weis nicht, wie repräsentativ das ist). Ich denke, dass ich mir langsam mal nen Wiz kaufen sollte, um das selber zu testen.

MfG.
Paul
 
Die Frage verstehe ich nicht, aber ich nutze Windows, programmiere jedoch für Linux.
 
profpaule said:
Die Frage verstehe ich nicht, aber ich nutze Windows, programmiere jedoch für Linux.

Das war meine Frage ;)
Ich wollte wissen, ob du Windows nutzt. Natürlich programmierst du (wenn du für die Wiz programmierst) für Linux.
Leider kann ich dir somit nicht helfen.
 
Verstehe :). Welche Libs nutzt du denn unter Linux. Statische oder dynamische und wie heissen die Teile?
 
Die nötigen Header- und Librarydateinen hast du höchst wahrscheinlich schon alle auf dem Rechner, wenn du eine IDE wie Visual Studio oder CodeBlocks auf deinem Rechner installiert hast.
Sprich, die nötige SDL-Library muss du nur noch bei den Compiler/Linker Optionen deiner IDE miteinbinden; der Klassiker unter den nervigen Fehlern beim programmieren^^

mehr dazu hier


EDIT: Apropo, mit was hast du dein Raycasting bis jetzt programmiert(oder meinst du Raytracing)? Weil ich sag dir ganz ehrlich, allein mit einem Wechsel der Grafikbibliothek wirst du nicht das Leistungsplus rausholen, dass du dir wahrscheinlich vorstellst und wünscht...wenn man nicht gerade von Basic auf C++ wechselt. Wer mal eine Informatikvorlesung besucht hat, weiß, dass Codeoptimierung viel mehr an Leistungsfähigkeit bringt, als die Rechenleistung zu erhöhen. Klingt verdreht, ist aber so - kann man leicht nachrechnen, einfach mal "Vergleich Bubble Sort und Quick sort" googlen. Quick sort wird auch auf einem nur halb so starken Rechner immer noch schneller laufen, als Bubble sort, weil gute Programmierung wesentlich mehr ausmacht, als die Leistung des Zielsystems.
 
Noch mal ne neue Frage: Welche Libs sind eigentlich auf dem Wiz standartmässig installiert? Gibts da Glut, Glu oder Gl? Ist SDL_opengl.h besser als glu.h oder sind das komplett unterschiedliche Dinger? (Und ja, ich weis das sind beides Header.)
Gibts da ein nettes Tut für OpenGL aufm Wiz? Meine SuperBible nutzt nur gl.h und glu.h .

Tut mir leid, ich bin auf diesem Gebiet noch ziemlich neu.

Nochmal kurz: Welche Header und welche Libs (systemunabhängig), damit das Zeug auf dem Wiz ohne Probleme lauffähig ist?
 
SDL besitzt je nach Zielsystem verschiedene Abstraktionsebenen; sehr einfach gesagt: Beim Compilieren sucht sich der Compiler von selber die richtigen Bibliotheken und Funktionen zusammen. Sprich, welche Bibliothek die Wiz schlussendlich nutzt, braucht dich nicht zu kratzen, das macht der Compiler, falls alles richtig eingestellt ist.

reines OpenGL, GLU, GLUT und SDL sind verschieden; SDL auf OpenGL kann man grob mit MFC auf Win32-API vergleichen. SDL ist aber komplett in C geschrieben. Eine SDL Funktion tut nichts anderes als mehrere OpenGL Funktionen zusammen zufassen, um dem Programmierer da etwas Arbeit abzunehmen.

Wenn du schon auf Windows mit GLU programmiert hast, wird dir der Umstieg auf die Wiz nicht schwer fallen; guck dir halt die Dokumentation von SDL an, paar Beispielcodes...wie gesagt, du musst nur den richtigen Compiler verwenden, dann kannst du die Output Datei direkt auf die Wiz übertragen und testen.

Im Archiv findet sich folgendes Codebeispiel: http://dl.openhandhelds.org/cgi-bin/gp2x.cgi?0,0,0,0,46,1047
Vielleicht hilft dir der Guide hier weiter: http://wiki.gp2x.org/wiki/Setting_up_a_development_environment_(Windows)

Musst halt die entsprechenden Dateien für die Wiz ersetzen
 
So wie ich das verstanden gibt es noch keine funktionierende OpenGL Lib für den Wiz. Auch ein funktionierendes Beispiel hab ich noch nicht gesehen. Ich zitiere mal Pickle: "Just be aware the opengles support is a mess, gph is been silent of late on the issue too." (http://www.gp32x.com/board/index.php?showtopic=47879&st=45&start=45)
 
Der Wiz unterstützt doch nur OpenGL ES, welches zum Beispiel kein glBegin() und glEnd() kennt, richtig? Wenn ich mir jetzt die Beispiele auf libsdl.org angucke werden dort aber genau diese Funktionen benutzt.

Ist das jetzt total egal, weil die SDL DLLs auf dem Wiz diese Befehle total anders handhaben, oder wie?

Die Links sind übrigends nutzlos, da sie nur andere SDL-Funktionen behandeln bzw. garnichts mit Programmierung an sich zutun haben.

Und noch was: EvilDragon hat mir ans Herz gelegt, OpenGL statt meiner selbstgeschriebenen 3D-Funktionen zu benutzen, daher gehe ich davon aus, das OpenGL schon laufen sollte. Hier: http://en.wikipedia.org/wiki/GP2X_Wiz steht übrigends, dass der Wiz OGL unterstützt. Jetzt stellt sich wieder die Frage nach der Quelle...
 
der Wiz kann OpenGL|ES. Es gibt Demos von GPH, die das klar belegen. Allerdings ist der Treiber eine Katastrophe, weil fast nichts läuft und wenn man irgendwie vom Demo abewicht schepperts (mein Code läuft 100% auf iPhone mit OpenGL|ES, auf dem Wiz nichtmal annähernd). Hier ist noch viel Arbeit Seitens GPH nötig. (Meine Erfahrung - evtl. beweist jemand das Gegenteil)
 
profpaule said:
Der Wiz unterstützt doch nur OpenGL ES, welches zum Beispiel kein glBegin() und glEnd() kennt, richtig?
Jep, genauso wie die Pandora oder das iPhone.
Wenn ich mir jetzt die Beispiele auf libsdl.org angucke werden dort aber genau diese Funktionen benutzt.
Das zeigt, wie schlecht die Beispiele sind. glBegin und glEnd sind z.B. seit OpenGL 3 als "deprecated" deklariert (sollten afaik eigentlich komplett entfernt werden). Du musst stattdessen Vertex Arrays benutzen, such mal nach OpenGL ES Tutorials, da wird das erklärt.
Und noch was: EvilDragon hat mir ans Herz gelegt, OpenGL statt meiner selbstgeschriebenen 3D-Funktionen zu benutzen, daher gehe ich davon aus, das OpenGL schon laufen sollte. Hier: http://en.wikipedia.org/wiki/GP2X_Wiz steht übrigends, dass der Wiz OGL unterstützt. Jetzt stellt sich wieder die Frage nach der Quelle...
Da steht auch nur, dass er OpenGL ES unterstützt. Als Quelle ist u. a. folgende Seite angegeben: http://www.linuxfordevices.com/c/a/News/ARM9based-SoC-targets-lowend-PMPs/
 
Ich hatte ursprünglich geplant, Raycasting für mein kleines Projekt fürn Wiz zu verwenden, aber wie's scheint schafft selbst mein Laptop mit 2.4gHz nicht mehr als 74 fps (Floorcasting ist seeeehr langwierig)

Auf welcher auflösung? Auch 320x240 wie aufm gp2x ?
Dann muss das noch stark zu optimieren sein.
Falls du code aus nem tutorial übernommen hast, ist der evtl. nur anschaulich, aber alles andere als optimal.
Ich hab damals, ca. 1999 auf meinem AMD K6-300 oderso bei 320x240 mit meiner "aufgemotzten wolf3d style engine" mit texturierten böden/decken die bei dieser auflösung mit meinem monitor max zu erreichenden 120fps @ 320x240 gehabt, keine ahnung wie es ohne vsync gewesen wär ^^ Da sollte ein 2.4 GHz teil schon etwas mehr machen.
Allerdings hab ich die innersten schleifen mit x86-Assembler optimiert, der code ist für ARM maschinchen nutzlos - andererseits hatte ich damals ne nicht-optimierende version des MSVC6 compiler, da ists nich schwer besser zu sein mit grundlegendem assembler (ein guru bin ich nicht) - gcc könnte da genug rausholen, also ist vllt der algorithmus nicht toll.

Ich rate zwar mal, dass du inzwischen schon diese provisorischen / inoffiziellen opengl es libraries benutzt, hm?
Falls du trotzdem noch interesse dran hast, die software engine schneller zu machen (zB. damits auch für die älteren gp2x leutchens funktioniert), kannste den entsprechenden code ja mal hier reinwerfen.
Vielleicht sollte ich auch nochmal meinen alten raycaster ausgraben und schauen, ob der wirklich so schnell war, wie ich glaube *g* aber ich fand den trotzdem noch zu langsam, sowas muss ja auf nem 386 laufen wenns richtig optimiert ist, also bei dir sollte auf jeden fall noch ordentlich was rauszuholen sein.
 
Jan-Nik said:
Du musst stattdessen Vertex Arrays benutzen, such mal nach OpenGL ES Tutorials, da wird das erklärt
Oder Vertex Buffer Objects. ;)
 
Oder Vertex Buffer Objects

bringen die eigentlich auf solchen systemen tatsächlich vorteile?
Wenn es keine getrennten system-RAM und VRAM, sowie einen flaschenhals dazwischen gibt, sondern alles im gleichen dicken RAM block liegt (ist das bei zb. dem wiz so? habe mich mit der architektur solcher geräte nicht so genau befasst) ?
 
Es ging mir mehr darum das "musst" zu widerlegen. :p
Was da jetzt letztendlich schneller ist wird wahrscheinlich nur durch ausprobieren zu ermitteln sein.
 
Back
Top