Es stimmt zwar dass man theoretisch über OpenGL auch unter XP noch die neuen Features aktueller Grafikhardware nutzen kann, die Frage ist allerdings, inwiefern das praktisch relevant ist. Denn die Anzahl der Leute die sich einen aktuellen PC mit entsprechend starker Hardware zulegen, diese grafiklastig nutzen wollen und sich dann XP drauf installieren, macht erst recht nur einen sehr sehr kleinen Teil dieser ohnehin rückläufigen Zielgruppe aus, da das zu tun natürlich völliger Schwachsinn ist. Für die Zukunft ist XP jedenfalls irrelevant, daher würd ich das hier nicht als Entscheidungsgrundlage heranziehen wenn du nicht gerade selber XP Nutzer bist.
Abgesehen davon handelt es sich bei der auf mobilen Systemen populären Variante um OpenGL ES, eine eigene API die mehr oder weniger eine Untermenge von OpenGL ist. In keiner ernsthaften Anwendung wirst du für mobile Systeme den selben Rendercode finden wie für den PC.
Spielekonsolen sind sowieso eine ganz eigene Geschichte, die haben alle ihre eigenen nativen APIs. Zwar gibt es afaik auf der PlayStation eine OpenGL Implementierung, aus performancegründen verwendet die dort aber niemand. Besonders nicht in Zeiten da es auf Konsolen gängige Praxis ist, gleich auch mal eigene Grafiktreiber zu basteln, um das letzte Bisschen an Performance rauszuholen, damit man auch nur irgendwie noch mit der Konkurrenz mithalten kann...
In der Realität sieht es also so aus:
Linux, Mac, (Windows): OpenGL
Windows: Direct3D
Mobile Geräte: In der Regel OpenGL ES
Spielekonsolen: Eigener Kram an den du als Normalsterblicher sowieso nicht rankommst, außer an die XBox (in sehr eingeschränktem Maße, Stichwort XNA), die eine Variante von Direct3D 9 verwendet.
Für jedes dieser Systeme wirst du in der Regel sowieso einen eigenen Renderer schreiben müssen. Welche API du dort dafür dann konkret verwendest ist eigentlich irrelevant. So wirst du beispielsweise, auch wenn du in beiden Fällen OpenGL verwendest, für Direct3D 9 Hardware einfach völlig anderen Code schreiben müssen als für Direct3D 10+ Hardware, es macht imo gar keinen Sinn, auch nur zu versuchen, da irgendwas in einen gemeinsamen Hut zu stopfen.
Ich möchte nur vermeiden, dass hier die Illusion vermittelt wird, dass man mit OpenGL einfach einmal alles runtercodet und dann läuft es out of the box immer und überall, auf jeder Hardware und nutzt dabei automatisch alle verfügbaren Features bestmöglich aus. Das ist leider nicht so. Nichtmal annähernd...
Ja, OpenGL hat den Vorteil der Portabilität (imo bei weitem der einzige Vorteil, aber das ist eine andere Geschichte), die sich realistisch betrachtet aber wohl nur auf Windows, Linux und Mac beschränkt. Und auch mit OpenGL wird es dir nicht erspart bleiben, für jedes dieser Systeme plattformspezifischen Code zu schreiben, denn zumindest die OpenGL Anbindung ist schon wieder völlig betriebssystemsabhängig. Die theoretische Portabilität beschränkt sich also zusätzlich rein auf den eigentlichen Rendercode, das ganze Drumherum musst du für jedes System anpassen. Bedenkt man weiters, dass der Rendercode allein sowieso nur einen kleinen Teil von einem größeren Projekt ausmacht und Dinge wie z.B. dass gewisse ATI Treiber unter Windows Probleme mit gewissen OpenGL Funktionen haben, sodass man für sowas dort wieder eigenes Handling braucht (nur weil ich mir just in diesem Moment genau mit sowas meine Zeit vertreib), kommt man zu der Schlussfolgerung: Es ist völlig egal welche API du ganz unten irgendwo verwendest, nimm die für die jeweilige Zielplattform beste Option.
Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von »dot« (14.04.2012, 15:37)