OpenGL ES Pascal-Header


carli

Member
Joined
Jul 18, 2010
Messages
445
Hier der Header für OpenGL ES.

Es ist auch ein Kompatibilitäts-Modus eingebaut, sodass der Header auch mit Desktop-OpenGL 3.0 läuft:

(Sourcode entfernt)

Das ganze müsste noch getestet werden, wir können hier ja noch einige Demo-Programme testen.
Vlt. les ich mich dann mal in die Doku von GLSL-ES rein, damit ich euch bald ein paar Beispielprogs liefern kann.

-- Di Sep 28, 2010 14:39 --

Weitere Informationen:

Infos zu GLES findet ihr hier:
http://www.khronos.org/registry/gles/
Der C-Header ist hier: http://www.khronos.org/registry/gles/api/2.0/gl2.h

Die GLES-Spezifikation (200 Seiten) könnt ihr hier bekommen: http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
Dazu kommt die GLES-GLSL-Spezifikation, die man auch gelesen haben sollte (100 Seiten): http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf

Hat man die beiden PDF gelesen, sollte es kein Problem mehr sein, eine Grafikengine zu schreiben.
Was noch fehlt ist ein "Einsteigertutorial", dass man überhaupt erst mal nen simplen Farbshader schreibt..

-- Di Sep 28, 2010 14:55 --

So, ich hab mal ein Mercurial-Repos auf Bitbucket angelegt, in dem die Pascal-relevanten Header und Beispielcodes landen werden.

Viel Spaß damit:

https://bitbucket.org/carli/gles-headers

-- Di Sep 28, 2010 15:51 --

So,

ein basic Tutorial ist jetzt auch hochgeladen, es zeichnet einen Farbverlauf.

Demnächst werd ich noch das eine besser kommentieren, und dann eins mit Texturen schreiben.

-- Mi Sep 29, 2010 02:26 --

So,

Ab jetzt gibt es auch ein Beispiel mit einer Textur.
Viel Spaß damit ;)

Für den Desktop-Gebrauch ist die Demo schon zu benutzen
Für die Pandora macht das Cross-Compilat jedoch noch Probleme.

Es soll angeblich mit dieser SDL-Lib besser gehn:
http://github.com/Cpasjuste/sdl-1.2.13_gles

Müsste mal jemand testen.
 
Was ich jetzt schon mal sagen kann ist, dass deine Tutorials/Demos auf meinem PC laufen. Mal sehen ob sich irgendwo noch mehr Infos zu ES auftreiben lassen.
 
Hallo carli.

Endlich ist es soweit dass man dank der Hilfe von KidPaddle dein Tutorial für die Pandora kompilieren kann.
Und hier poste ich die bisherigen Ergebnisse:

Beim kompilieren von "gles_tutorial.pas" entstanden keine Fehler sowie keine Warnhinweise.
Auf der Pandora allerdings gibt es noch ein kleines Problem.

Führt man es über die Konsole aus so bekommt man folgende Ausgabe:
Code:
Beginne Programm
SDL init: 
SDL videomode: Failed loading libGL.so.1
GLES: Error loading GL ES 2.0: Function not found "glActiveTexture"
An unhandled exception occurred at $00000000 :
EAccessViolation : Access violation
  $00000000
  $00008990
So. Das Problem ist also vermutlich dass die libGL.so.1 auf der Pandora garnicht existiert..
Ich vermute den Ort mal einfach unter /usr/lib

Doch sind dort nur folgende libGL-bezogene Dateien enthalten:
Code:
XXX:/home/XXX# ls /usr/lib | grep libGL
libGLES2D.so.1
libGLES2D.so.1.0.1
libGLES_CM.so
libGLES_CM.so.1
libGLES_CM.so.1.4
libGLES_CM.so.1.4.14.2616
libGLESv2.so
libGLESv2.so.1
libGLESv2.so.1.4
libGLESv2.so.1.4.14.2616
Was ich probiert habe war, nacheinander diese Dateien (bis auf die symbolischen Verknüpfungen) einfach mal in "libGL.so.1" zu benennen und in /usr/lib hinzu zu kopieren.
Das änderte aber nichts am Ergebnis. Also ich komme da erstmal nicht weiter.. entweder müssen mehrere oder andere Dateien umbenannt werden,
im Sourcecode etwas angepasst werden oder sogar noch ein Package auf der Pandora nachinstalliert werden.

Bitte nicht wundern dass ich selbst nicht auf die Lösung komme.. Mit Linux habe ich mich bisher nie ernsthaft beschäftigt,
was ich aber unbedingt ändern möchte ;)
 
Sorry, dass ich so spät antworte,

Das Problem liegt daran, dass SDL einen OpenGL-Kontext anfordert und keinen GLES-Kontext.

Ich habe auch mit den Entwicklern im IRC gesprochen, die meinen, es wird kein SDL mit ES geben. Man solle gefälligst den Kontext selbst erstellen mit EGL oder sonstigem.

Ich bin da ziemlich am A***, weil ich selbst keine Pandora zum testen habe. Ich kann aber allerdings mal probieren, ob ich EGL-Header portiert bekomme und damit ein bisschen rumbasteln könnte.

-- Do Apr 14, 2011 09:04 --

So,

ich hab mal Unterstützung für https://github.com/Cpasjuste/sdl-1.2.13_gles eingebaut.

Folgendes braucht man, ums zu testen:
- https://github.com/Cpasjuste/sdl-1.2.13_gles klonen, kompilieren und installieren
- bitbucket.org/carli/gles-headers klonen, kompilieren
- darauf achten, dass die libSDL-1.2.so.0 auf die frisch installierte SDL_GLES-Version zeigt (ldd gles_tutorial) eventuell Symlinks erstellen
- das Tutorial mit ./gles_tutorial starten.

Es müssen auf alle Fälle noch einige Anpassungen gemacht werden.
Aber teste das erst mal, obs so geht.

-- Do Apr 14, 2011 10:39 --

Die Lib scheint bei SDL_GLES_GetProcAddress nicht die richtigen Prozeduren zu finden.
Mal sehn, was ich hinbekomme.
 
Also ich bekomme SDL nicht kompiliert weil mein GCC offenbar keine ausführbaren Dateien erstellen kann.
Erste Fehlermeldung der Config.log ist "gcc: error trying to exec 'cc1': execvp: No such file or directory"

Werde mal später nach "cc1" googeln müssen, oder im IRC fragen.
GCC-4.3.3-r23.1 installiert habe ich durch:
Code:
sudo opkg update
sudo opkg install gcc
sudo opkg install gcc-symlinks
Offenbar reicht das nicht.. auf Windows fertig kompiliertes zu benutzen war soviel einfacher :)

Hoffentlich bekommt ihr bald eure Pandoras ;)
 
Soooo,

hier jetzt das Release des GLES 2.0 Headers inklusive der Spezifikation und zwei Beispielprogrammen (buntes Dreieck, texturiertes Dreieck)

https://bitbucket.org/carli/gles-headers/overview

Demnächst wird noch ein Minispiel auf GLES 2.0-Basis folgen. Freut euch schon mal ;)
 
Hallo carli und vielen Dank für den OpenGL ES 2.0 Support!
Ich habe es auf meiner Pandora getestet und es funktioniert einwandfrei :)



Nun habe ich folgenden Vorschlag für die nächste PND-Version 1.1.0.0:

Ich lasse alles wie bisher ablaufen, mit dem Zusatz "$SU cp -s /lib/libdl.so.2 /lib/libdl.so" in deinem install-Skript.
Mittlerweile habe ich alle Befehle des Skripts verstanden und weitere Befehle dazugelernt, sodass ich dein Skript nun
folgend erweitern würde:

Erst nach Abschluss aller Anweisungen, lasse ich ein weiteres in der PND beinhaltetes TAR-Archiv namens "Update.tar.gz" entpacken,
welches wiederum bereits mit richtigen Pfadangaben folgende Dinge zusätzlich ins Dateisystem kopiert:

Alle egl-bezogenen Dateien in: /usr/lib/fpc/2.5.1/units/arm-linux/egl
Der ogles2-header und shaderapi in: /usr/lib/fpc/2.5.1/units/arm-linux/opengles2

Zusätzlich kopiere ich dein SDL-Beispiel sowie deine 2 OpenGLES2-Beispiele jeweils in:
/usr/share/doc/fpc-2.5.1/sdl und /usr/share/doc/fpc-2.5.1/opengles2

Zum Schluss, da SU-Rechte noch gegeben sind, würde ich mit "sudo fpc xxx" alle neuen Dateien in /usr/lib/fpc/2.5.1/units/arm-linux kompilieren lassen,
sodass später direkt auf die kompilierten Varianten der libs zugegriffen wird, und man auch ohne SU-Rechten in einem einfachen Verzeichnis mit nur einer
x.pas Datei, ein OpenGLES2-Beispiel kompilieren kann.



Ausserdem werde ich später noch eine Uninstall-Option hinzufügen.
Darum werde ich mich dann selbst kümmern auf einfachste Art und Weise:

Ich entpacke dein FPC-Archiv auf meinem Windows Rechner,
programmiere mir schnell ein Tool welches alle Dateinamen und Pfade erkennt und mir in einer Textdatei mit dazugehörigem Löschbefehl speichert.
Dann noch Verschönerungen in Form von grafischen Rückmeldungen zum Deinstallations-Stand vornehmen.

und fertig ist das Gericht ^^

Was die Löschung der symbolischen Verknüpfungen angeht werde ich wohl eine gesonderte Sicherheitsabfrage einfügen,
da ich annehme dass diese von allen Compilern (auch c++) benötigt werden.



Nochmal vielen Dank für deine Bemühungen carli :)
 
Kaworu said:
Erst nach Abschluss aller Anweisungen, lasse ich ein weiteres in der PND beinhaltetes TAR-Archiv namens "Update.tar.gz" entpacken,
welches wiederum bereits mit richtigen Pfadangaben folgende Dinge zusätzlich ins Dateisystem kopiert:

Alle egl-bezogenen Dateien in: /usr/lib/fpc/2.5.1/units/arm-linux/egl
Die einzig wichtige Datei ist eglport.o (für arm-linux kompiliert) und egl.pas.
Kaworu said:
Der ogles2-header und shaderapi in: /usr/lib/fpc/2.5.1/units/arm-linux/opengles2
Solange es gefunden wird ;)
Kaworu said:
Zusätzlich kopiere ich dein SDL-Beispiel sowie deine 2 OpenGLES2-Beispiele jeweils in:
/usr/share/doc/fpc-2.5.1/sdl und /usr/share/doc/fpc-2.5.1/opengles2
Sehr gut. Steht das dann auch in irgendeiner README oder in der Beschreibung der PND? Ich meine, niemand will sich später noch die Sachen aus dem Forum zusammensuchen.
Kaworu said:
Ausserdem werde ich später noch eine Uninstall-Option hinzufügen.
Darum werde ich mich dann selbst kümmern auf einfachste Art und Weise:

Ich entpacke dein FPC-Archiv auf meinem Windows Rechner,
programmiere mir schnell ein Tool welches alle Dateinamen und Pfade erkennt und mir in einer Textdatei mit dazugehörigem Löschbefehl speichert.
Dann noch Verschönerungen in Form von grafischen Rückmeldungen zum Deinstallations-Stand vornehmen.

und fertig ist das Gericht ^^
Im Prinzip musst du bloß den Ordner /usr/lib/fpc entfernen, sowie die Dateien, die in /usr/bin verstreut sind.
Kaworu said:
Was die Löschung der symbolischen Verknüpfungen angeht werde ich wohl eine gesonderte Sicherheitsabfrage einfügen,
da ich annehme dass diese von allen Compilern (auch c++) benötigt werden.
Noch schlimmer - Sowohl einige opkg-Pakete als auch die Toolchains als PND setzen die Symlinks. Lass die Symlinks am besten so, die stören keinen und nehmen auch keinen Speicherplatz weg. (sind ja nur Verknüpfungen)


Kaworu said:
Nochmal vielen Dank für deine Bemühungen carli :)
Gern geschehen.
Hier eine Vorschau auf das kommende Game:
pfahrer.png
 
carli said:
Die einzig wichtige Datei ist eglport.o (für arm-linux kompiliert) und egl.pas.
Ich weiß.. dennoch finde ich es nützlich wenn dort auch die C-Quellcodes der Dateien drin sind.
So kann man eventuell schnell was ändern, für die auch C-Programmierer unter uns ;)
carli said:
Solange es gefunden wird
Jupp, alles was in dem Ordner: /usr/lib/fpc/2.5.1/units/arm-linux/ steckt, wird gefunden.
Hab ich auch getestet ;)
carli said:
Sehr gut. Steht das dann auch in irgendeiner README oder in der Beschreibung der PND? Ich meine, niemand will sich später noch die Sachen aus dem Forum zusammensuchen.
Na klar ^^ In der Beschreibung der PND ganz sicher.. (repo), möglicherweise füge ich es auch im Informationstext der PND hinzu, welcher nach einer erfolgreichen Installation angezeigt wird.
carli said:
Noch schlimmer - Sowohl einige opkg-Pakete als auch die Toolchains als PND setzen die Symlinks. Lass die Symlinks am besten so, die stören keinen und nehmen auch keinen Speicherplatz weg. (sind ja nur Verknüpfungen)
Haha, das wäre ja mal lustig ^^ gut, lasse ich dann besser so wie es ist ;)
carli said:
Hier eine Vorschau auf das kommende Game:
nice :D Wirst du uns auch den Quellcode dafür zur Verfügung stellen?

Sollte mein Spiel einmal fertig werden gibt es für mich 2 Schwierigkeiten,
zum portieren auf der Pandora:

1. Ich programmiere in OpenGL1.3, da ich noch am lernen bin.
Werd mir also erstmal OpenGL ES 2.0 aneignen müssen.

2. Fließkommazahlen.. Mein Spiel arbeitet mit Massen davon.
Da die Pandora allerdings keine FPU hat, und folglich nur langsam emuliert,
müsste ich auf Festkommazahlen umsteigen. Damit hab ich auch noch nie arbeiten müssen.
Hab mir aber schon zum Thema was angeschaut und verstehe wie sie funktionieren, bzw interpretiert werden.

Arbeitest du in deinem Spiel etwa auch schon mit den Festkommazahlen?
Dazu bräuchte ich aufjedemfall ein Beispiel..
 
Kaworu said:
carli said:
Hier eine Vorschau auf das kommende Game:
nice :D Wirst du uns auch den Quellcode dafür zur Verfügung stellen?
Momentan ist das Repos mit Zugangsbeschränkung. Aber falls sich jemand findet, der an entsprechendem Spiel mitentwickeln will..
(Ich hege ja immer noch die Hoffnung, dass die Pandora in Massenproduktion geht und es einen kommerziellen AppStore geben wird)
Kaworu said:
Sollte mein Spiel einmal fertig werden gibt es für mich 2 Schwierigkeiten,
zum portieren auf der Pandora:

1. Ich programmiere in OpenGL1.3, da ich noch am lernen bin.
Werd mir also erstmal OpenGL ES 2.0 aneignen müssen.
Was darin neu ist, sind die Shader. Die sind aber weniger heftig als du denkst. Ich verweise hier immer auf die DGL-Tutorials. Ansonsten gibts ja die Shaderapi ;)
Kaworu said:
2. Fließkommazahlen.. Mein Spiel arbeitet mit Massen davon.
Da die Pandora allerdings keine FPU hat, und folglich nur langsam emuliert,
müsste ich auf Festkommazahlen umsteigen. Damit hab ich auch noch nie arbeiten müssen.
Hab mir aber schon zum Thema was angeschaut und verstehe wie sie funktionieren, bzw interpretiert werden.

Arbeitest du in deinem Spiel etwa auch schon mit den Festkommazahlen?
Dazu bräuchte ich aufjedemfall ein Beispiel..
Ich arbeite mit Fließkomma, aber GLES nimmt auch Integers. Und die Integer-Werte landen automatisch als Float auf der Grafikkarte, wo sie eventuell im Vertex Shader nachskaliert werden können.
 
So, es ist passiert: Version 1.1.0.0 des FPC-Installers ist draussen :D

Hat mich den ganzen Tag gekostet, weil aus welchem Grund auch immer, mehrmaliges Nutzen von fpc in einem Skript mein Hauptskript abbricht..
Egal wieviele sleeps ich überall einsetze -_- Und ich hab erstmal unzählige andere Stellen geändert, bis ich das Problem eindeutig eingegrenzt habe.
Hab das jetzt durch die einmalige Nutzung von fpc gelöst, welche "compile.pas" kompiliert, wodurch über deren uses-Angaben alle noch zu
kompilierenden libs endlich kompiliert werden.

Habs zigmal getestet und es arbeitet einwandfrei und beinhaltet alle Änderungen die bis jetzt gepostet wurden :)

->> http://repo.openpandora.org/?page=detail&app=install_fpc <<-
 
Schade, dass man auf der Pandora nicht den vollen Detailgrad des Bildschirms sieht :(

Außerdem hab ich momentan Konzeptionsprobleme mit der Steuerung.
Bei dem Spiel steuert man die zwei Ketten des Panzers getrennt. Auf dem Desktop ist das richtig cool, da man seine Hand auf die Tastatur legen kann und einen Block steuert. Auf der Pandora hingegen muss man erst mal genug griffige Tasten finden und dann auch noch die Koordination 2 Ketten + Geschützturm hinbekommen.
 
Zur Steuerung, wie wär's mit Turm drehen per L und R, linke Kette D-Pad up und down, rechte Kette Y- und X-Button. Zum Feuern könnte man L und R gleichzeitig drücken.
 
Wieso nicht fahren mit Nubs Turm drehen mit einen der Nubs (rechts links) und Feuer auf R oder L
Also Nubs vorwärts und rückwärts zum Fahren und rechts links drehen zum Turm drehen.
Oder den Turm mit dem Dpad drehen.
 
Weil die zwei Ketten unabhängig voneinander gesteuert werden sollen, eben so wie in einem echten Panzer. Darum ist das nix mit einem Nub alleine.

Edit: Nagut, man könnte iwie die x-achse für linke Kette und y-achse für rechte Kette verwenden, aber das wäre ziemlich strange zu steuern IMO.
 
du hast 2 nubs. im panzer hat man auch 2 hebel für die 2 ketten, zumindest bei den alten panzern ^^ den turm drehst du mit L/R. feuern, rauchgranaten usw. kannst du ja aufs dpad oder so legen...
 
Gamepower said:
du hast 2 nubs. im panzer hat man auch 2 hebel für die 2 ketten, zumindest bei den alten panzern ^^ den turm drehst du mit L/R. feuern, rauchgranaten usw. kannst du ja aufs dpad oder so legen...

Kann man die Nubs überhaupt umstellen? Oder muss das der User machen?

Ich werd einfach mal eine Demo hochladen, vielleicht ist die Steuerung mit Pfeiltasten und XYAB auch nur gewöhnungsbedürftig. Auf alle Fälle ist es eine gute Übung für die Koordinierung der Finger.
 
Solange die Steuerung nicht den Spielspass killt, bin ich da flexibel. Aber moderne Panzer werden auch nur noch mitm Lenkrad oder Joystick gesteuert, da hebelt man nix mehr separat. :D
Wo hast du die Ingame Panzermodelle her, selber gemacht? Und sind die 3D Modelle oder 2D Sprites?
 
@Moderator: Bitte alle auf das Spiel bezogenen Posts in den entsprechenden Thread schieben. Danke
 
Ja zurück zum Thema ;)
Da steht viel was ich nicht verstehe und ich kenne auch Pascal nicht(weis nur dasses ne Programmiersprache ist :-D ),
aber haben wir hiermit eine funktionierende 3d Beschleunigung auf der Pandora auf Ogles Basis?
Wenn ja gibts auch einen Opengl Wrapper der die Befehle von OpenGL auf Ogles umsetzt?
Dann könnten viele von uns ja 3D Linux Spiele Porten die normalerweise ne OpenGL 3D Beschleunigung brauchen.
Hab ich das Richtig verstanden?
Oder gilt diese 3D Ogles Beschleunigung jetzt rein "nur" für Pascal?
 
Back
Top