Für welche OpenGL-Version sollte ich unter Berücksichtigung von Kompatibilitäts- und Leistungsaspekten codieren? [geschlossen]


19

Wenn die OpenGL-Spezifikation aktualisiert wird, werden immer nur Funktionen hinzugefügt. Theoretisch sollte auf der neuesten und besten Hardware mit Unterstützung für die Kern- und Kompatibilitätsprofile der alte OpenGL1.1-Code einwandfrei laufen. Dies hat sich als wahr herausgestellt. Ich habe 12 Monate damit verbracht, OpenGL1.1 zu lernen und habe ein gutes Verständnis dafür.

Ich habe ein paar Kapitel eines dieser schicken neuen OpenGL4.2-Bücher gelesen. Fast alle Funktionen, auf die ich mich stütze, sind veraltet (z. B. Anzeigelisten), sodass ich davon ausgehen kann, dass es bessere Möglichkeiten gibt, all diese Dinge zu tun.

Betrachten wir, dass 1.1 wahrscheinlich von ALLER modernen Hardware vollständig unterstützt wird. 1.1 wurde 1992 veröffentlicht. Ich codiere nicht auf die harte Tour, nur um 20 Jahre alte PCs zu unterstützen. :-p Ich halte es für vernünftig, anzunehmen, dass die meisten Gamer Hardware einsetzen, die bei einem mittleren Alter von etwa 5 Jahren den Tiefpunkt erreicht.

Ich denke, die neueren Methoden sind so konzipiert, dass sie entweder eines von zwei Dingen sind: bessere Leistung oder einfacher zu programmieren. Ich habe irgendwo gelesen, dass es aber nie beides ist! XD

Welche OpenGL-Version wird am häufigsten von ~ 5 Jahre alter Hardware unterstützt? Welche Version ist angesichts dieser Überlegungen am sinnvollsten zu verwenden?

Antworten:


19

Angesichts Ihrer Überlegungen schaute ich dann vorbei, um zu sehen, wann OpenGL-Spezifikationen für jede Version veröffentlicht wurden, und berücksichtigte auch einige allgemeine Erkenntnisse aus dem, was ich gesehen habe.

OpenGL 3, das FBOs, VAOs und andere Dinge einführte, wurde vor fast 5 Jahren am 11. Juli 2008 veröffentlicht. Natürlich können Sie nicht erwarten, dass alle Karten nach diesem Datum sofort OpenGL 3 zur Verfügung haben.

Ein Blick auf die Steam-Hardware-Umfrage zeigt , dass 40% DirectX 10 sind. Da für OpenGL 3 eine ähnliche Grafikkarte erforderlich ist, kann davon ausgegangen werden, dass auf den meisten DirectX 10-Karten mindestens OpenGL 3 ausgeführt werden kann.

OpenGL 3 wird auf Karten bis zur GeForce 8xxx-Serie unterstützt, die, wenn ich mich richtig erinnere, recht beliebt waren. Interessant ist auch, dass Intel HD 2000 und 3000 Graphics (Sandy Bridge) nur OpenGL 3 unterstützen.

Fazit: OpenGL 3 ist eine gute Wahl (denken Sie auch daran, dass die meisten Gamer, abhängig von Ihrer Zielgruppe, wahrscheinlich eine bessere Hardware als der Durchschnitt haben werden).


Das ist eine großartige Antwort. War genau die Art von Einsicht, die ich suchte.
Suds

3
"Interessant ist auch, dass Intel HD 2000 und 3000 Graphics (Sandy Bridge) nur bis zu OpenGL 3 unterstützen." Hinweis: Sie unterstützen nur GL 3.1 (da Intel es einfach nicht interessiert). Und da es sich um Intel handelt, sollte "Unterstützung" mit einem Körnchen Salz eingenommen werden. Ihre Hardware könnte 3.3 unterstützen, aber sie stellen das nicht zur Verfügung (auch das ist ihnen egal). Ich würde es vermeiden, OpenGL 3.x auf Intel-Hardware zu verwenden. In der Tat würde ich es vermeiden, etwas Shader-basiertes auf Intel-Hardware zu machen.
Nicol Bolas

Die Frage wird dann aufgeworfen; Wie gesättigt ist der Markt mit Intel Hardware? Lohnt es sich, sich nicht um Intel-Grafiken und OpenGL3.x zu kümmern? Oder gibt es genügend Intel-Grafikhardware, um tatsächlich eine Rolle zu spielen?
Suds

1
Ein Problem ist OSX. Die neueste Version 10.7.x unterstützt nur OpenGL 3.2 , 10.6.x unterstützt nur 3.0 (oder vielleicht sogar 2.x). 10.5.x variiert stark je nach Karte, 1.3, 1.5 und 2.0 sind Möglichkeiten. Diese Systeme bleiben bei diesen OpenGL-Versionen für immer hängen, es sei denn, der Benutzer zahlt Apple Geld für ein Update. Es gibt keine Grafikkartentreiber-Updates oder solche für OSX, die OpenGL aktualisieren. Andere Probleme sind einige der in Netbooks verwendeten eingebetteten Intel-Chipsätze. Viele von ihnen sind nur OpenGL 2.0 oder schlechter.
David C. Bishop

Und dann haben Sie die 3DS, die noch OpenGL 1.1 rockt ...
kirbyfan64sos

8

Ich würde hier anfangen: http://store.steampowered.com/hwsurvey

Ich würde einen bestimmten Zeitraum nicht als Ziel für einen bestimmten Prozentsatz von Nutzern festlegen. Wenn Sie beispielsweise 4cpus als Ziel festlegen, werden Sie nur 45% der Nutzer erreichen. Wenn Sie jedoch mit 2 arbeiten, werden Sie fast 90% erreichen.


1
Wo hast du OpenGL gesehen? Ich sehe nur DirectX (was interessant ist, wenn Sie nur auf Windows abzielen).
DMan

Ich nehme an, Sie erledigen die Vorarbeit basierend auf der Aufschlüsselung der Grafikkarte
Jimmy

Ja - ich habe nichts über OpenGL gesehen - aber Sie können es von den Kartenmodellen bekommen, oder ich glaube, dass es eine ziemlich große Korrelation zwischen DirectX-Versionen und OpenGL geben würde.
Lachs Elch

3

Die Antwort hängt davon ab, ob Sie mit Intel-Grafiken arbeiten müssen oder möchten, die innerhalb des von Ihnen genannten Zeitraums veröffentlicht wurden.

Wenn Sie dies tun, beschränken Sie sich auf OpenGL 2.1 (oder sogar 1.5), wenn Sie dies nicht tun, erscheint 3.x vernünftig.

Ja, ältere Versionen von OpenGL laufen immer noch, und ja, aus einer Perspektive können sie einfacher erscheinen. Wenn Sie versuchen, Dinge zu tun (und Sie werden es tun), die sie nicht so leicht unterstützen, geraten die Dinge aus der Form. OpenGL 1.1 ist nicht nur der harte Weg - es ist oft der unmögliche Weg, um bestimmte Ergebnisse zu erzielen.


Mir fällt ein, dass ich ein Beispiel hinzufügen sollte, warum 1.1 oft unmöglich ist. Eine davon, die leicht mit der 1.1-Funktionalität in Verbindung gebracht werden kann, sind mehrere Mischungsdurchläufe. Da Sie keine FBOs haben und meistens auf 8 Bit pro Komponententexturen beschränkt sind, werden Sie feststellen, dass Sie mit zunehmender Anzahl von Überblendungen an Präzision verlieren. Verwenden Sie 3/4/5 Durchgänge und das Endergebnis sieht aus wie (oder schlechter als) 16-Bit- oder 8-Bit-Grafiken. Es sind jedoch häufig mehrere Durchgänge erforderlich, um Effekte höherer Ebenen mit einem 1.1-Funktionsumfang zu simulieren (die grundlegende Multitexturierung wäre eine, die wir alle kennen).
Maximus Minimus

Selbst Intel HD-Grafik (Sandy / Ivy Bridge) unterstützt nur OpenGL 3.1, und das ist ein Jahr alt. Es kommt darauf an, ob Sie billige (oder stromsparende) Laptops unterstützen möchten.
Steve Howard

2
@SteveHoward: Intel HD Graphics unterstützt OpenGL 4. Quelle
Janus Troelsen

Dieser Artikel stammt aus ungefähr 3 Monaten, nachdem ich meinen Kommentar gepostet habe.
Steve Howard

1

Erstens funktionieren OpenGL 1.1-Inhalte wie Anzeigelisten immer noch in einem neuen Kontext, vorausgesetzt, Sie haben das Kompatibilitätsprofil (was im Allgemeinen der Fall ist). Das einzige Problem ist, wenn Sie eine Portierung auf OpenGL ES, eine der konsolenspezifischen Grafikbibliotheken (diese sind in der Regel OpenGL-ähnlich wie OpenGL ES) oder sogar WebGL (was ohnehin einiges Nacharbeiten erfordern würde), erwarten.

Persönlich würde ich die Verwendung von Vertex- / Fragment-Shadern und VBOs empfehlen. Sie gibt es schon seit geraumer Zeit und sie bieten großartige Leistungsverbesserungen. Sie könnten wahrscheinlich sogar einen einfachen Fallback bereitstellen, wenn Sie die Funktionen in eine Klasse einschließen.

Möglicherweise können Sie auch Objekte wie Vertex-Array-Objekte emulieren.


0

Mit 5 Jahre alter Hardware verwenden einige Leute immer noch XP. Und das bedeutet, dass Sie nicht einmal mit DirectX 10 oder OpenGL 3 programmieren können. Und OpenGL 3 verfügt über viele Funktionen, von denen Sie wirklich profitieren würden, wie z. B. Framebuffers und dergleichen. Ehrlich gesagt, würde ich Ihre Systemanforderungen ein wenig erhöhen, damit Sie diese Funktionen einbinden können.


8
-1: "Mit 5-jähriger Hardware verwenden einige Leute immer noch XP. Das bedeutet, dass Sie nicht einmal mit DirectX 10 oder OpenGL 3 programmieren können." Nicht wahr. OpenGL 3.x läuft ganz gut in XP. Es ist nur D3D10, das aus API- / Treibergründen von XP eingeschränkt ist. Es hat nichts mit der Hardware zu tun.
Nicol Bolas

0

Es ist üblich, dass 3D-Software Codepfade sowohl für eine "Baseline" -Grafik-API-Version als auch für eine "neueste und beste" API-Version hat.

Gängige Ausgangsgrafikversionen sind D3D9 und OpenGL 2.1 / GLSL 120. Bei beiden fehlen Geometrie-Shader, da sie von alter Hardware nicht unterstützt werden.

Eine weitere Basisoption ist ANGLE, GLES 2.0 plus EGL, das auf D3D9, Desktop OpenGL und Mobile GLES 2.0 ausgeführt wird. Es ist das Backend für Google Chrome und Webgl in Chrome und Firefox.

http://code.google.com/p/angleproject/

Bei der von Ihnen ausgewählten "neuesten und besten" Version ist dies eine größere Herausforderung. Je aktueller die API und die Hardware sind, auf die Sie abzielen, desto besser aussehende Funktionen können Sie unterstützen - allerdings nur auf der neuesten und besten Hardware.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.