OpenGL und DirectX im Vergleich



  • Vorweg: Auch wenn es so aussieht, ich will hier keinen Flamewar provozieren!

    Also, mich würde interessieren, wo die Vor- und Nachteile der jeweiligen APIs (?) liegen.
    Es wäre auch interessant zu erfahren, warum vorallem Spielehersteller so intensiv auf DirectX setzen und wie es um OpenGLs Zukunft in Windows steht.



  • OpenGLs Zukunft in Windows? 🙄 👎
    Warum alle auf DX setzen? -> Microsoft?



  • personenkult schrieb:

    OpenGLs Zukunft in Windows? 🙄 👎

    Glaub ich nicht. Solange es erfolgreiche Engines gibt wie Quake3 und Doom3 auf denen eine ganze Reihe beliebter Spiele basieren, kann Microsoft es sich nicht
    leisten die OpenGl Unterstuetzung aussterben zu lassen.
    Auch wenn sie es nicht gerne wahrhaben wollen, aber das Geld wird nach wie vor im Spiele(r)-Sektor verdient.



  • iD Software hat angeblich schon angekündigt, ihre aktuelle engine (D3) auf Direct3D upzudaten.....



  • loki1985 schrieb:

    iD Software hat angeblich schon angekündigt, ihre aktuelle engine (D3) auf Direct3D upzudaten.....

    Richtig. Ich denke mittelfristig wird OGL für die Spielebranche (die _verdammt_ groß ist und immer größer wird) total uninteressant.



  • Ach, wird diese Frage jemals geklärt?
    Oder werden sich noch in 100 Jahren Historiker darüber streiten...

    Ich habe mir diese Frage natürlich auch schon gestellt.
    Habe es so gelöst, dass ich ein kleines Projekt einmal mit DX und einmal mit OGl schrieb.
    DX gefiel mir besser, also ist es besser als OGL! Logisch.
    An dieser Stelle bitte 1001 fadenscheinige Argumente von mir denken, die das untermauern.

    In einem späterem Job musste auch mal OGl verwendet werden. Ich hab's überlebt.



  • Ich find OpenGL besser weil ich mich einfach dran gewöhnt habe und aus keinem
    anderen Grund. Sollte OGL irgendwann verschwinden steig ich halt auf DX um.
    Der Einstieg in OGL verlief bei mir etwa so: Klein CppJunky will krasse
    Grafiksachen programmieren und hört irgendwas von DirectX. Er liest ein Paar
    Forenbeiträge und Tutorials von Stefan Zerbst und merkt das er so ein SDK
    braucht. Er geht auf die Microsoft Homepage. Er wühlt sich durch die
    unübersichtlichste Seite des Universums, findet das SDK, sieht das es über
    100MB gross ist, sieht das er ein 56k Modem hat und nimmt lieber OpenGL 😃



  • Textkonsole schrieb:

    Also, mich würde interessieren, wo die Vor- und Nachteile der jeweiligen APIs (?) liegen.

    Grundsätzlich kannst Du in beiden alles machen. 💡

    a) Was wohl jeder weiß: Plattform-Support

    OpenGL: Jede erdenkliche Plattform eigentlich (Windows, MacOS, über X-Server quasi alles an *NIX und Linux-Derivaten, IRIX (wo es herkommt), als Mesa3D-Software-Implementation auch überall hin portierbar).

    DirectX: Microsoft Windows. Punkt.

    b) Programmiersprache & -paradigma

    OpenGL: C. Also wie die WinAPI z.B.. Das heißt einen Haufen globaler Funktionen ohne Scope, die Du nach Einbinden von "gl.h" von überall aus aufrufen kannst (scheinbar erfolgreich), die aber dann nur was tun, wenn ein RenderContext gesetzt ist, bzw. bestimmte Verschachtelungen (z.B. glBegin() <-> glEnd()) stattfanden.
    Keine Threadsicherheit.

    DirectX: C++. COM-Interfaces. Objekt-orientiert. Es gibt nur eine globale Funktion ( Direct3DCreate(X) - bei einigen Unterschnittstellen wie DirectSound gar keine (nur über COM-API möglich)), die Dir 'nen Objekt-Zeiger auf ein Direct3D-Interface zurückliefert. Nur über diesen kannst Du dann weiteren Kram machen.
    Geringe Threadsicherheit.
    Grundsätzlich auch mit C möglich zu programmieren, aber DER HELLE WAHNSINN (Tu' das nicht!).

    Die FixedFunction-Pipeline arbeitet bei beiden intern als StateMachine.

    c) Überprüfung, was unterstützt wird

    OpenGL: Extensions: Einen langen String parsen, schauen, ob das was man braucht dabei ist, und dann einen Funktionszeiger auf eine nachzuladene Funktion nutzen.

    Direct3D: Capabilities: Eine Capabilities-Struktur auf die notwendige Eigenschaft prüfen. Falls true zurückkommt, ist das benutzbar, ansonsten wirft der jeweilige Aufruf einen Fehler.

    d) Offen <-> Proprietär

    OpenGL: ARB (Architecture Review Board) mit vielen Industrie-Firmen stimmt ab, was reinkommt und was nicht. Daher ist der "Fortschritt" in Versionsnummern oftmals sehr lahm. Stattdessen müssen dann Extensions (s.o.) genutzt werden. Offene Spezifikation.

    DirectX: Geheimbund Microsoft.

    e) Docs / Support

    OpenGL: Die "Standard-Werke" RedBook & BlueBook sind sehr altbacken, aber frei verfügbar. Das DelphiGL Wiki hat umfangreiche deutsche Beschreibungen zu allen Befehlen. NeHe bietet eine riesige Tutorial-Reihe an, wenn der Code auch sehr beschissen ist.

    DirectX: Zum Entwickeln brauchst Du das SDK, das einige hundert MB schwer ist. Darin enthalten sind umfangreiche Dokumentationen, Tutorials/HowTos, funktionierende Demos für quasi alles von einfachen bis schwereren Sachen.

    f) Compiler-Unterstützung

    OpenGL: Quasi alle.

    DirectX: Quasi nur (mittlerweile) die Microsoft Serie (Visual Studio 2003 .NET und höher). Die Libraries kannst Du zwar in ein Format für MingW und Borland umtransformieren, das ist aber natürlich nervig. Zudem integriert sich Direct3D in Visual Studio, bietet Projekt-Templates an, DirectX Debugging, sogar Direct3D Shader Debugging.

    g) Einsteigerfreundlichkeit

    Schwer zu sagen. Mal ein differenzierter Betrachtungsversuch:

    Der Initialisierungscode ist ungefähr gleich lang und viel.

    In OpenGL kommst Du schneller zu ersten (minimalen) Ergebnissen. D.h. Dein erstes Dreieck rotiert relativ schnell und einfach auf Deinem Schirm. Dieser erste Schritt ist in Direct3D schwerer, zumal Du direkt am Anfang mit FVF (Flexible Vertex Format) und anderem Klunker konfrontiert wirst, was als Anfänger vielleicht zunächst nicht alles einleuchtend ist.
    Dann wandelt sich aber ganz schnell das Blatt: Sobald Du erstmal Modelle reinladen willst, bzw. merkst das glVertex() 5000-Mal aufzurufen nicht gerade das wahre in Sachen Performance ist, und Du Buffer brauchst, ist Direct3D massiv im Vorteil, da es viel zusätzliche Funktionalität bietet:
    - Alles grundlegende, was Du an Mathe brauchst: Matrizen, Vektoren, Mesh-Gerade-Schnittfunktionen, Quaternionen, etc.
    - Textur laden? Ein Befehl.
    - X-Modell reinladen? Ein Befehl.
    - Sprites nutzen? Ein Befehl.
    Gerade für Anfänger ist die D3DX (X = eXtension library) der Bringer. Für alles oben genannte mußt Du Dir unter OpenGL
    - entweder Deine eigenen Funktionen programmieren
    - oder auf vorhandene Bibliotheken zurückgreifen (die natürlich auch erstmal verstanden werden müssen, und deren Funktionsweise sich u.U. wieder gravierend unterscheidet)

    Weitere Vorteil bei Direct3D: Alles, was Du sonst noch für ein Spiel z.B. brauchst, gibt's mit identischer Handhabung und genauso gut dokumentiert in den anderen DirectX-Bibliotheken (Sound, Input, ...).

    Wenn Du natürlich direkt eine Kombination SDL + OpenGL anstrebst o.ä., schwinden die Vorteile auch wieder etwas, das kommt ganz auf den Fall an.

    Textkonsole schrieb:

    Es wäre auch interessant zu erfahren, warum vorallem Spielehersteller so intensiv auf DirectX setzen und wie es um OpenGLs Zukunft in Windows steht.

    Weil 99% eh nur für Windows entwickeln, und dort DirectX deutlich besser supported ist, gut dokumentiert, Support direkt am Mann (MSDN / Microsoft), super IDE-Integration in die Windows-Tools bietet, die Funktionalität für Spiele unter Direct3D deutlich mehr gepusht wird als unter OpenGL, wer auf Konsolenprogrammierung mal umsteigen will mit der X-Box viel wiederverwendbaren Code Windows<->X-Box hat. Microsoft will die Spiele-Entwicklung X-Box<->Windows noch mehr vereinen (spezielles Toolset extra für GameDev).

    Zu OpenGLs Zukunft unter Windows: Das kommt eigentlich nur drauf an, wie stark es genutzt (und daher gebraucht) wird.

    Disclaimer: Das ist natürlich meine persönliche Meinung und so wie ich es sehe. Wer eine andere Meinung hat kann mich kreuzweise und soll die Fresse ja halten!! 😉 👍



  • Da ich kein Windows benutze habe ich für 3D Zeugs immer OpenGL benutzt. OpenGL ist zwar C, aber da man das ganze Lowlevel Zeugs eh wrappt, ist das egal.

    Ich denke MS versucht jetzt stärkeren Druck auf die Spielehersteller auszuüben und FUD über OpenGL (von wegen keine Unterstützung mehr etc) zu verbreiten, da alternative Betriebssysteme wie MacOS X und Linux immer bekannter und somit auch für die Spielehersteller interessanter werden.

    Bei DirectX muss man sich immer im klaren sein, dass man sich zu einem MS Sklaven macht. Die APIs wechseln AFAIK relativ oft und eine langfristige Entwicklung scheint so eh erschwert zu sein.


  • Mod

    Die APIs wechseln AFAIK relativ oft und eine langfristige Entwicklung scheint so eh erschwert zu sein.

    Sagen wir mal, dass DirectX seit 3.0 ordentlich eingesetzt werden kann. Dann ist die API nicht ganz 10 Jahre alt und zudem die einzige 3D-Grafik-API von Microsoft. Wo sind da jetzt die häufigen Wechsel?

    MfG SideWinder



  • sehr gute beschreibung von Sgt. Nukem

    OGL wir auch auf dem spielemarkt eine zunkunft haben -> PS3

    schoenste api und dahinterliegende implementierung is sinnlos wenns nicht vom hardwarehersteller unterstuetzt/implementiert wird

    und das is, mMn, wo das ganze eher haesslich wird bzw werden koennte.
    es bleibt zu hoffen das der aufsteigende trend brauchbare treiber fuer mehrere OS zu liefern nicht gebremst wird und ogl hw untersteuzung nicht aus den mainstreamkarten (leistbar) wegfaellt weils die spieler eh net brauchen und ausserdem sonst eh auch alles ueber d3d abgehandelt wird



  • loki1985 schrieb:

    iD Software hat angeblich schon angekündigt, ihre aktuelle engine (D3) auf Direct3D upzudaten.....

    ehm, nein..

    sie haben ueberlegt, die naechste engine mit directx zu machen. die aktuelle portieren - hab ich nicht gehoert (das waer sehr viel arbeit..)

    ogl wird auch in vista unterstuetzt. allerdings wird es gewrappt (auf directx / das neue zeugs wgf oder so), wenn es mit der neuen schnuckligen gui verwendet wird. fullscreenanwendungen (spiele, blender, wasweisich) werden ueber den grafiktreiber bedient. das gleiche auch, wenn man auf die alte gui (ohne die ganzen 3d effekte) umschaltet. das ganze ist angeblich, weil eine graka nicht gleichzeitig d3d und ogl bedienen kann (laut golem, heise hat ja nur gesagt, dass es nicht geht)..

    mfg aman..



  • aMan schrieb:

    loki1985 schrieb:

    iD Software hat angeblich schon angekündigt, ihre aktuelle engine (D3) auf Direct3D upzudaten.....

    ehm, nein..

    sie haben ueberlegt, die naechste engine mit directx zu machen. die aktuelle portieren - hab ich nicht gehoert (das waer sehr viel arbeit..)

    Naja, Doom 3 gibt's ja auch auf der X-Box. Aber das sie wirklich den GL Kram nach D3D geschoben haben kann ich mir auch nicht vorstellen... 😕

    aMan schrieb:

    das ganze ist angeblich, weil eine graka nicht gleichzeitig d3d und ogl bedienen kann (laut golem, heise hat ja nur gesagt, dass es nicht geht)..

    Das ist Blödsinn. Bei Fullscreen kann das sein, aber generell kannst Du die sogar beide in ein Fenster rendern lassen. Kommt natürlich auf den Treiber an.

    Und ob das wirklich so kritisch mit Vista wird, glaub' ich auch noch nicht... die Sticky-News auf opengl.org ist jedenfalls weg... Das wird also die Zeit zeigen... (C&C Zitat ;))



  • Sgt. Nukem schrieb:

    Das wird also die Zeit zeigen... (C&C Zitat ;))

    Nachdem Einstein mit der Chronsphäre in der Zeit zurückgereist ist und Hitler beseitigt hat. 😉



  • kingruedi schrieb:

    OpenGL ist zwar C, aber da man das ganze Lowlevel Zeugs eh wrappt, ist das egal.

    Ja, klar. Aber es ist krass aufwändig. Und wrappe mal schnell eine Textausgabe mit Formatierung zusammen, als Test kannst du dann mal ein Rechteck vorgeben, in dem der Text eingepasst werden soll mit Umbrüchen zwischen den Wörtern. Freilich, nichts, was unmöglich ist. Aber in Direct3D ein 1-Zeiler plus 4 zusätzliche Zeilen initialisierung.

    Für mich persönlich auch noch ein Grund ist das managed Interface, weil das einfach super angenehm zum handhaben ist.



  • Optimizer schrieb:

    Für mich persönlich auch noch ein Grund ist das managed Interface, weil das einfach super angenehm zum handhaben ist.

    Oh ja, sch**sse. Die hab' ich mal komplett vergessen. Naja, das kannst Du ja noch hinzufügen... 😉



  • Sgt. Nukem schrieb:

    Naja, das kannst Du ja noch hinzufügen... 😉

    Ja Mann!!! Geben wir's den OpenGL-Phr34k5 ! 🤡 👍



  • wenn micisoft direct x auf linux portieren wuerde, dann wuerd ichs verwenden..

    dem is aber leider nicht so..
    (aus verstaendlichen gruenden..)



  • Dann mach' Du es doch! 🤡

    Bzw. hilf mit... www.winehq.org



  • Textkonsole schrieb:

    Es wäre auch interessant zu erfahren, warum vorallem Spielehersteller so intensiv auf DirectX setzen

    weil es nur darauf ankommt wie sehr den leuten die arbeit abgenommen wird. viele grundlegenden dinge mußt du dank d3dx nicht mehr schreiben, texturen werden für dich geladen und sogar die verwaltung davon wird dir abgenommen(natürlich mit einem dx format für das es plugins für allerlei software gibt). du mußt heutzutage nicht mehr viel wissen und können (nichtmal sauberes vorgehen ist nötig) um ein spiel hinzubekommen. die zukunft der spieleentwicklung geht weiter in die richtung. es gibt heute schon viele die nichtmal wissen wie dreiecke durch die pipe auf den screen gelangen und zukünftig wird man nur noch ziemlich fertig elemente einladen (sprich, ganze level mit allen eigenschaften indem man nur eine dx funktion nutzt und nichts an arbeit investierte).

    bei ogl steckt man zwar noch alle features rein, manchmal sogar mehr als in d3d, aber die nutzung davon ist oft viel aufwendiger.

    Textkonsole schrieb:

    wie es um OpenGLs Zukunft in Windows steht.

    sie steht eigentlich aufgrund der kleinen dummheit von microsoft, dass sie D3D10 nicht für WXP rausbringen, erstaunlich gut. denn die ganzen möglichkeiten neuer hardware wird auf ms-betriebssystemen <Vista (und natürlich den alternativen OS) nur über oGL zugänglich sein. zudem ist es mit oGL ebenfalls möglich hardware anzusprechen die top aktuell ist und die die alt ist, mit d3d10 wirst du keine ältere graphikkarten nutzen können, mit d3d9 wiederrum nicht die neustesten features. falls ms das nicht ändert, werden spiele vermutlich für beide schnittstellen programmiert werden müssen (alleine schon deswegen, weil die xbox360 wohl d3d9 hardware hat), oder für oGL damit man jede hardware unterstützt(dann zwar nicht xbox360, aber in verbindung mit cg die ps3).


Anmelden zum Antworten