DirectX oder OpenGL

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Brainfreeze
Beiträge: 21
Registriert: 20.06.2012, 20:14

DirectX oder OpenGL

Beitrag von Brainfreeze »

Hi,

ich habe eine prinzipelle Frage, zu der ich noch keine Antwort gefunden habe, aber die hier sicher beantwortet werden kann.

Ich habe mich in den letzten Woche mit DirectX 11 beschäftigt, und in den letzten Tagen etwas mit OpenGL.

Mit DirectX bin ich recht gut klar gekommen, mit OpenGL (noch) nicht wirklich.

Ich möchte ein Spiel programmieren, bin mir aber nicht sicher, welche API ich nehmen soll.
Ist es "zeitgemäß" mit DirectX zu programmieren, oder nimmt der Einfluss in Zukunft ab? In letzter Zeit sind ja immer neue Plattformen entstanden (iOS, Andorid etc.), ist es da noch lohnenswert ein Spiel mit DirectX anzufangen?
Da ich nur "gelegendlich" programmiere, kann sich die Programmierung noch Monate/Jahre hinziehen.

Lohnt es sich, DirectX zu nutzen, oder soll ich mich doch näher mit OpenGL beschäftigen?


Gruß
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von dot »

Wenn du für Windows entwickelst, nimm Direct3D, insbesondere wenn du damit besser zurecht kommst. Sobald du eine der beiden APIs kannst, kannst du problemlos auch mit der anderen umgehen, Doku und google reicht dann. Es ist vermutlich einfacher, erst Direct3D und dann OpenGL zu machen. Direct3D zwingt einen, die Dinge von Anfang an ordentlich zu machen. Zu OpenGL findet man leider immer noch hauptsächlich veraltetes Material, von dem man leicht in die Irre geleitet wird. Wenn man Direct3D bereits kann, dann muss man einfach nur versuchen den aus Direct3D bekannten Weg in OpenGL zu verfolgen...
Brainfreeze
Beiträge: 21
Registriert: 20.06.2012, 20:14

Re: DirectX oder OpenGL

Beitrag von Brainfreeze »

Hi,

kann man DirectX noch ruhigen Gewissens programmieren, oder wird das in absehbarer Zukunft durch andere Technologien abeglöst?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von dot »

Direct3D ist die native Grafik API unter Windows. Ich bezweifle, dass sich in den nächsten Jahren da was dran ändern wird. Vermutlich wird halt irgendwann D3D12 kommen, um die nächste Hardwaregeneration abzudecken. Mal sehen, wie lang es dauert, bis sich an der Hardware mal wieder wirklich was tut...
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: DirectX oder OpenGL

Beitrag von antisteo »

Brainfreeze hat geschrieben:Hi,

kann man DirectX noch ruhigen Gewissens programmieren, oder wird das in absehbarer Zukunft durch andere Technologien abeglöst?
kurzfristig nein. Langfristig solltest du dich mal damit auseinandersetzen, welche Plattformen Spieler z.B heutzutage schon nutzen (z.B. Steam) und wohin sich diese Plattformen bewegen.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von dot »

Fang an, lern eine API, egal welche. Wenn du unter Windows arbeitest, lautet meine Empfehlung D3D. Bis du die gemeistert hast, zieht eh einige Zeit ins Land. Es wird immer Neuerungen geben, aber die Grundlagen ändern sich nicht. Irgendwelche Plattformen der Zukunft sind irrelevant, wenn es darum geht, hier und jetzt die Grundlagen zu lernen. Wenn du die drauf hast, stehen dir alle Plattformen offen...
Slin
Beiträge: 44
Registriert: 15.05.2010, 01:21
Echter Name: Nils Daumann
Wohnort: Lübeck
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von Slin »

D3D hat eine schöne API und wird dank XBox One, Windows Phone 8 und Windows 8 die das soweit ich weiß für so ziemlich alles an Rendering nutzen auch sicher noch lange bleiben und von Microsoft weiter entwickelt werden. Allerdings gibt es von AMD jetzt Mantle als potentiell Alternative mit viel geringerem Driver Overhead und außerdem pusht Valve/Steam Linux im Moment extrem und damit auch OpenGL. Außerdem läuft OpenGL nicht nur auf Linux sondern ja auch auf OSX und Windows und außerdem auf iOS und Android, was das ganze deutlich universeller und flexibler macht. Durch Extensions sowohl von NVIDIA als auch AMD lässt sich angeblich auch in OpenGL der Driveroverhead extrem reduzieren was dann erhebliche Vorzüge gegenüber DirectX bringen könnte, das habe ich mir allerdings noch nicht so genau angeguckt...
Also ich sehe die Zukunft aktuell eher bei OpenGL 4+ mit Core Profile, vor allem durch die größere Plattformunabhängigkeit, allerdings auch mit mehr Willkür durch die Hardwarehersteller mit ihren Extensions, die man andererseits aber dann leider auch nutzen will wenn es sie gibt.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von dot »

Slin hat geschrieben:Allerdings gibt es von AMD jetzt Mantle als potentiell Alternative mit viel geringerem Driver Overhead [...]
Mantle ist durchaus interessant, aber erstens ist es wohl extrem low-level (und daher wohl vielleicht nicht unbedingt für Anfänger geeignet), zweitens kommt man als Normalsterblicher afaik im Moment noch nicht an Mantle ran (falls ich da falsch liege: Link pls :) ) und drittens wird es afaik nur auf einem PC mit AMD Hardware laufen...
Slin hat geschrieben:Außerdem läuft OpenGL nicht nur auf Linux sondern ja auch auf OSX und Windows und außerdem auf iOS und Android, was das ganze deutlich universeller und flexibler macht.
Ja, auf all diesen Plattformen gibt es "OpenGL". Das "OpenGL", das auf iOS und Android läuft, ist allerdings ein anderes "OpenGL" als das, das auf Linux und Windows läuft. Und auch wenn sich alle ähnlich schauen: Du willst auf einem Mobiltelefon sowieso nicht den selben Code zum Rendern verwenden, wie z.B. auf einem PC. Von OSX reden wir besser gar nicht, Apple hat vor langer Zeit beschlossen, dass OpenGL 3.2 für die Menschheit gut genug ist. Und wenn Apple sowas beschließt, dann muss man es entweder toll finden oder trotzdem damit leben. Erst mit Mavericks haben sie sich aufgemacht und offenbar mühevoll ins aktuelle Jahrzehnt geschleppt wo sie, wie es aussieht, bei 4.2 erschöpft zu liegen gekommen sind...

In der Praxis kannst du mit OpenGL meiner Erfahrung nach höchstens Windows und Linux abdecken. Und wie in der Welt von OpenGL üblich, funktioniert selbst das bereits nur bedingt, zumidest wenn wir von modernem OpenGL reden:
  • Mit den Drivern wird es laaaaangsam besser, im Moment ist das aber immer noch ein massives Problem (Intel...).
  • Wie immer kocht jeder Hersteller sein eigenes Süppchen und da es kein Zertifizierungsprogramm o.ä. gibt, muss man damit leben, dass jeder Driver jedes Herstellers alle möglichen individuellen Macken hat, was OpenGL zu einem sich bewegenden Ziel macht. Beispiel: Jeder OpenGL Driver muss seinen eigenen Shadercompiler mitliefern und da man GLSL nicht vorkompilieren kann, muss dein GLSL Code mit allen aktuellen und zukünftigen Drivern aller Hersteller, die du unterstützen willst, kompilieren. Die Tatsache, dass es in der Welt von OpenGL tatsächlich an Compilerfehlern beim Endbenutzer scheitern kann und oft genug auch tut, ist fast schon komisch...
  • OpenGL wird nur auf dem Windows Desktop unterstützt, wenn du für den Windows Store (Windows RT bzw. Windows Phone) entwickeln willst, musst du zu Direct3D greifen.
Slin hat geschrieben: Durch Extensions sowohl von NVIDIA als auch AMD lässt sich angeblich auch in OpenGL der Driveroverhead extrem reduzieren was dann erhebliche Vorzüge gegenüber DirectX bringen könnte, das habe ich mir allerdings noch nicht so genau angeguckt...
Bin mir nicht ganz sicher, worauf du da genau anspielst, aber ich kenne nur eine NVIDIA Extension, die in diese Richtung geht; und die dient dazu, einen Teil des Overhead zu reduzieren, der vor allem unnötigerweise durch das bescheu...eigenartige Design der OpenGL API anfällt...allerdings natürlich nur auf NVIDIA Hardware mit dem passenden Driver; wenn AMD tatsächlich eine ähnliche Extension anbietet, müsste man natürlich den ganzen "OpenGL" Code nochmal für AMD schreiben...funktioniert dann allerdings natürlich wieder nur für AMD Hardware mit dem passenden Driver...Willkommen in der Welt von OpenGL... ;)
Slin hat geschrieben:Also ich sehe die Zukunft aktuell eher bei OpenGL 4+ mit Core Profile, vor allem durch die größere Plattformunabhängigkeit, allerdings auch mit mehr Willkür durch die Hardwarehersteller mit ihren Extensions, die man andererseits aber dann leider auch nutzen will wenn es sie gibt.
Die "Plattformunabhängigkeit" von OpenGL existiert vielleicht in der Welt der Märchen und Sagen, in der Praxis sieht es, zumindest meiner Erfahrung nach, dagegen so aus, dass man mit OpenGL bestenfalls ein wenig Betriebssystemabhängigkeit gegen Herstellerabhängigkeit eintauschen kann. Ja, alle möglichen Plattformen unterstützen "OpenGL". "OpenGL" ist aber leider ein einziges Wirrwarr aus Versionen. Ja wenn man den Leuten, die bei uns für Mobile entwickeln, so zuhört, hört man die nichtmal über "OpenGL" reden, die reden immer nur darüber, was dieses und jenes iPhone nun wieder anders macht oder welches Samsung Tablet Feature X unterstützt. So ist es halt. Das soll auch gar keine Argumentation gegen OpenGL sein. Ich sehe die Zukunft als multiplattform. Unterschiedliche Plattformen sind nunmal unterschiedlich und genau in diesen Unterschieden liegt ja überhaupt erst der Sinn ihrer Existenz. Anstatt von einer Welt zu träumen, in der alles und nichts unterschiedlich ist, halte ich es für sinnvoller, die Unterschiede der Plattformen zu begrüßen und zu seinen Verbündeten zu machen. Es wird notwendigerweise immer plattformspezifische APIs geben und manche Plattformen verwenden heute eben ihre Version von "OpenGL", andere Direct3D und wieder andere wieder etwas Anderes und morgen wird es wieder etwas Anderes geben. Insbesondere ist "Plattformunabhängigkeit" imo kein Argument, das für einen Anfänger in dem Bereich von Relevanz ist, der sich überhaupt erstmal auf irgendeiner Plattform zurechtfinden muss. Neue Technologien, Sprachen, APIs etc. zu lernen ist früher oder später sowieso unvermeidbar und sehr lehrreich... ;)
Slin
Beiträge: 44
Registriert: 15.05.2010, 01:21
Echter Name: Nils Daumann
Wohnort: Lübeck
Kontaktdaten:

Re: DirectX oder OpenGL

Beitrag von Slin »

dot hat geschrieben:und drittens wird es afaik nur auf einem PC mit AMD Hardware laufen...
Naja, theoretisch ist Mantle offen und andere könnten es auch unterstützen. Aber klar, passieren wird das wohl eher nicht.
dot hat geschrieben: Ja, auf all diesen Plattformen gibt es "OpenGL". Das "OpenGL", das auf iOS und Android läuft, ist allerdings ein anderes "OpenGL" als das, das auf Linux und Windows läuft. Und auch wenn sich alle ähnlich schauen: Du willst auf einem Mobiltelefon sowieso nicht den selben Code zum Rendern verwenden, wie z.B. auf einem PC. Von OSX reden wir besser gar nicht, Apple hat vor langer Zeit beschlossen, dass OpenGL 3.2 für die Menschheit gut genug ist. Und wenn Apple sowas beschließt, dann muss man es entweder toll finden oder trotzdem damit leben. Erst mit Mavericks haben sie sich aufgemacht und offenbar mühevoll ins aktuelle Jahrzehnt geschleppt wo sie, wie es aussieht, bei 4.2 erschöpft zu liegen gekommen sind...
OpenGL ES 2.0/3.0 ist tatsächlich ein Subset von OpenGL 4.0 Core Profile, d.h. ein Großteil des Codes funktioniert einfach wenn man vom Desktop kommt, bzw funktioniert es wirklich einfach wenn man den OpenGL ES 2.0 Code nutzt, wobei man in Wirklichkeit natürlich mehr will wo es zur Verfügung steht. Aber trotzdem bedeutet das, dass die Unterschiede nur minimal sind.
Mavericks unterstützt nur OpenGL 4.1 was aber ja garnicht soo outdated ist, wenn man bedenkt dass die aktuelle Version 4.4 ist. Aber klar, es gibt schon Features die es in 4.4 gibt und man dann in 4.1 vermisst.
dot hat geschrieben: In der Praxis kannst du mit OpenGL meiner Erfahrung nach höchstens Windows und Linux abdecken. Und wie in der Welt von OpenGL üblich, funktioniert selbst das bereits nur bedingt, zumidest wenn wir von modernem OpenGL reden:
  • Mit den Drivern wird es laaaaangsam besser, im Moment ist das aber immer noch ein massives Problem (Intel...).
Wir entwickeln http://rayne3d.com unter OSX und sind damit bisher eigentlich ziemlich zufrieden und auf den ca 50 Systemen (OSX und Windows) auf denen wir getestet haben gibt es nur Probleme mit Intel HD3000 (da mindestens OpenGL 3.2 benötigt wird und die nur 3.1 unterstützen) und Intel HD4000 unter Windows (unter OSX funktioniert die super...), warum auch immer, aber das werden wir noch fixen. Oh und alte AMD Treiber sind auch ein Problem, aber die lassen sich ja updaten.
Übrigens wird aktiv ein GLSL Referenz Compiler entwickelt, was das von dir genannte Problem in Zukunft hoffentlich löst: http://www.khronos.org/opengles/sdk/too ... -Compiler/
dot hat geschrieben: Bin mir nicht ganz sicher, worauf du da genau anspielst, aber ich kenne nur eine NVIDIA Extension, die in diese Richtung geht; und die dient dazu, einen Teil des Overhead zu reduzieren, der vor allem unnötigerweise durch das bescheu...eigenartige Design der OpenGL API anfällt...allerdings natürlich nur auf NVIDIA Hardware mit dem passenden Driver; wenn AMD tatsächlich eine ähnliche Extension anbietet, müsste man natürlich den ganzen "OpenGL" Code nochmal für AMD schreiben...funktioniert dann allerdings natürlich wieder nur für AMD Hardware mit dem passenden Driver...Willkommen in der Welt von OpenGL... ;)
Das einzige was ich dazu gefunden habe sind zwei Tweets, einer von Carmack der behauptet, dass besagte Extensions eine ernsthafte Alternative zu Mantle sind und dann noch von irgendwem von AMD, dass die Mantle Features auch als OpenGL Extension zur Vefügung gestellt werden sollen. Ersteres findet man sofort wenn man danach googled, zweiteres habe ich grad noch nicht wieder gefunden. Nach meiner Suche gestern bin ich zu dem Schluss gekommen, dass auch die NVIDIA Extensions noch nicht released sind.

Letztlich ist es halt so, dass OpenGL einerseits feste Spezifikationen hat und wenn man sich an diese hält, dann deckt man damit eine ziemliche Breite an Plattformen relativ problemlos ab. Und dann gibt es eben noch das "Problem" mit den Extensions, was einerseits das ganze sehr Hardware und Treiberspezifisch macht, andererseits aber auch die Möglichkeit bietet mit einem Treiberupdate mal eben neue Features zur Verfügung zu stellen, die dann ermöglichen Probleme sehr viel schöner oder schneller zu lösen. Wenn es dann also darum geht noch mehr Leistung herauszukitzeln oder irgendein Überfeature zu unterstützen wo es möglich ist, dann braucht man da Variable Pfade im Code, was sicher nicht schön ist, aber in der Regel etwas womit man leben kann.

Klar für einen Anfänger ist es ziemlich egal womit er anfängt, wobei es für DirectX die besseren Ressourcen gibt, da wie ja schon erwähnt das meiste zu OpenGL extrem veraltet ist und auch immernoch viel zu viele Leute die alte API nutzen...
Antworten