plattformunabhängig programmieren



  • Hallo,

    Ich möchte eine plattformunabhängige Spiel-Engine programmieren.
    ⚠ Ich bin kein Noob mehr, also Erfahrung mit C++, DirectX und der WinAPI habe ich.

    Leider ist die WinAPI sehr groß, alt und häßlich und ich möchte sie nicht verwenden. Für DirectX gilt dasselbe nur nicht, dass es alt ist. :p

    Mit OpenGL habe ich Dinge, die in Direct3D hunderte von Zeilen braucht, in ein paar dutzend Zeilen geschafft. Statt DirectInput möchte ich SDL(http://www.libsdl.de/) verwenden.
    Statt DirectAudio OpenAL(http://www.openal.org/). Statt DirectPlay GNE (http://www.rit.edu/~jpw9607/gne/).

    Wie schaffe ich es, eine Engine zu machen, ohne irgendwo die Headerdatei windows.h zu inkludieren? Was gibt es für Alternativen? Ich meine jetzt nicht nur fürs erstellen von GUIs für einen Editor (aber auch) sondern Message Handler und so ein Zeug. Irgendwann wird das .NET Framework die WinAPI ablösen, aber ich möchte nicht .NET programmieren. Das ist alles nur für Windows. Ich will mit Micro$oft nichts mehr zu tun haben. 😡

    Bisher habe ich folgende Sachen gefunden:

    ➡ wxWidgets (http://www.wxwidgets.org/)
    ➡ FLTK (http://www.fltk.org/)
    ➡ GLUT (http://www.xmission.com/~nate/glut.html)
    ➡ glLua (http://www.tecgraf.puc-rio.br/~celes/gllua/)
    ➡ LuaGL (http://luagl.sourceforge.net/)
    ➡ LuaFLTK (http://lua-fltk.sourceforge.net/)

    Es wäre ganz schön bequem Lua dafür zu verwenden, aber, ist das denn schnell genug und sinnvoll? Sind all die Dinge plattformunabhängig? Gibt es noch mehr?
    Was ist die beste Wahl? 😕

    gguru



  • Ehm, also OpenGL/SDL ist schon alles, was Du dazu brauchst, nicht?
    Damit kannst praktisch überall (Win, Linux, Solaris, ...) kompilieren. Naja, einige #ifdef's müssen trotzdem noch sein, bsp. beim Laden von Bitmaps oder Timern oder so..



  • durito schrieb:

    Ehm, also OpenGL/SDL ist schon alles, was Du dazu brauchst, nicht?
    Damit kannst praktisch überall (Win, Linux, Solaris, ...) kompilieren. Naja, einige #ifdef's müssen trotzdem noch sein, bsp. beim Laden von Bitmaps oder Timern oder so..

    Ich möchte aber auch einen Editor machen.
    Dafür brauche ich Fenster. Beinhalten die zwei APIs denn Fensterfunktionen und Klassen...?

    Könntest du das mit den #ifdef(s) mal näher erklären, bitte?
    Ich hab bisher nur in ein paar NVidia Samples gesehen, dass sie
    den Präprozessor das Betriebssystem erkennen lassen, oder so.



  • gguru schrieb:

    Leider ist die WinAPI sehr groß, alt und häßlich und ich möchte sie nicht verwenden. Für DirectX gilt dasselbe nur nicht, dass es alt ist.

    Wenn du glaubst, dass DirectX hässlich ist, dann hättest du mal ältere Versionen sehen sollen. 😃 Imo ist der aktuelle Stand recht akzeptabel.



  • gguru schrieb:

    durito schrieb:

    Ehm, also OpenGL/SDL ist schon alles, was Du dazu brauchst, nicht?
    Damit kannst praktisch überall (Win, Linux, Solaris, ...) kompilieren. Naja, einige #ifdef's müssen trotzdem noch sein, bsp. beim Laden von Bitmaps oder Timern oder so..

    Ich möchte aber auch einen Editor machen.
    Dafür brauche ich Fenster. Beinhalten die zwei APIs denn Fensterfunktionen und Klassen...?

    Könntest du das mit den #ifdef(s) mal näher erklären, bitte?
    Ich hab bisher nur in ein paar NVidia Samples gesehen, dass sie
    den Präprozessor das Betriebssystem erkennen lassen, oder so.

    Nein, weder SDL noch OpenGL enthalten sowas. Fuer SDL gibt es zwar GUI-Klassen, aber IMO ist es besser, du schreibst die GUI z. B. mit wxWidgets, dort kannst du dann auch OpenGL einbinden....

    Wegen der ifdefs: damit kannst du dich ausseinander setzen sobald du's wirklich brauchst... Fuer Bitmaps/Timer brauchst du die nicht, bietet ja beides SDL 😉



  • gguru schrieb:

    durito schrieb:

    Ehm, also OpenGL/SDL ist schon alles, was Du dazu brauchst, nicht?
    Damit kannst praktisch überall (Win, Linux, Solaris, ...) kompilieren. Naja, einige #ifdef's müssen trotzdem noch sein, bsp. beim Laden von Bitmaps oder Timern oder so..

    Ich möchte aber auch einen Editor machen.
    Dafür brauche ich Fenster. Beinhalten die zwei APIs denn Fensterfunktionen und Klassen...?

    Könntest du das mit den #ifdef(s) mal näher erklären, bitte?
    Ich hab bisher nur in ein paar NVidia Samples gesehen, dass sie
    den Präprozessor das Betriebssystem erkennen lassen, oder so.

    Achso, was den Editor betrifft kann ich nicht weiterhelfen. Ausser eben mit if #ifdef's

    Mit solchen Compiler-Anweisungen kannst Du zum Zeitpunkt der Kompilierung u.a. abfragen, auf welchen System kompiliert wird. Je nachdem kannst Du also eine Windows-Anweisung kompilieren oder ne Unix-Anweisung.
    Bsp:

    #ifdef WIN32 #include <windows.h> #endif
    

    Im Normalfall brauchst Du sowas aber nicht, solang Du auf OpenGL/SDL aufbaust. Gibt aber doch immer wieder Ausnahmen, z.B. hat Linux andere Timer als Solaris, oder RGB wird in einer anderen Reihenfolge gespeichert als in Win, etc..



  • Hi!

    Ich benutze OpenGL, SDL, fmod, libtinyxml, ODE, wxWindows und NASM.
    Meine Engine läuft ohne Probleme unter Linux und Windows.
    Alles was ich machen muß ist den Source zu recompilen.

    Bei Licht betrachtete ist plattformunabhängiges Coden gar nicht so schwer.
    Man muß sich nur an ein paar mehr Regeln halten (Unix-System sind z.B
    bei Pfadangaben chase-sensitiv).



  • Kane schrieb:

    Hi!

    Ich benutze OpenGL, SDL, fmod, libtinyxml, ODE, wxWindows und NASM.
    Meine Engine läuft ohne Probleme unter Linux und Windows.
    Alles was ich machen muß ist den Source zu recompilen.

    Bei Licht betrachtete ist plattformunabhängiges Coden gar nicht so schwer.
    Man muß sich nur an ein paar mehr Regeln halten (Unix-System sind z.B
    bei Pfadangaben chase-sensitiv).

    Cool.
    Mit welchem Teil deiner Engine hast du denn angefangen?
    Und was bedeutet chase-sensitiv?
    Oder meintest du Case Sensitive?


  • Mod

    btw. plattformunabhängig bedeuted nicht nur dass es unter linux und windows läuft. plattformunabhängig an sich ist eigentlich auch schon sehr übertrieben, man müßte eigentlich multi-platform-fähig schreiben oder sowas in der art, weil der code den man schreibt auf mehreren plattformen laufen mag, sicherlich aber nur in abhängigkeit von denen.
    Wenn man also portierbaren coden schreiben möchte, dann muss man die plattformen kennen auf denen es laufen soll und dann versuchen paradigm'en zu entwickeln und zu befolgen, die alle gewünschten plattformen erlauben.

    rapso->greets();


Anmelden zum Antworten