OpenGL 2 und zurück gegen 3 und vorwärts: Was sind die Hauptunterschiede für 2D-Grafiken? [geschlossen]

7

OpenGL-Kontexte vor und nach OpenGL 3.0 sind ziemlich unterschiedlich. Bisher habe ich sowieso nur mit Puffern auf beiden Seiten gearbeitet. Ich weiß, dass der bemerkenswerteste Unterschied das Fehlen des Sofortmodus ist.

Welche wichtigen Unterschiede sollte ich besonders beachten, wenn ich zweidimensionale Operationen auf niedriger Ebene in einer 2D-Grafik-Engine codiere?

Garet Claborn
quelle
Die bisherigen Antworten waren hilfreich, jedoch nur ein Hinweis: Ich bin im Moment mit GL3 + wirklich besser vertraut und denke aus Kompatibilitätsgründen über eine Rückportierung auf 2.1 nach. Am wichtigsten ist, welche Version mit OpenGL ES am besten kompatibel ist.
Garet Claborn
2
Ich bin gespannt, warum Sie die vorherige Bearbeitung zurückgesetzt haben ...
Vaillancourt
Dies liegt daran, dass dieser Titel auf eine bestimmte wesentliche Änderung der OpenGL-Kernmethodik verweist. Vor Version 3 war die OpenGL-Architektur eng mit der OpenGL 1.1- und 1.0-Architektur verbunden. Der Grund, warum dies ein wichtiger Punkt in der OpenGL-Historie / -Methode ist, ist die für OpenGL spezifische Domäne. Nach dieser Version ist die Abwärtskompatibilität zum ersten Mal seit etwa 97 Jahren unterbrochen. Es ist auch ein großes Schisma, wenn es darum geht, den Standard für moderne Hardware praktischer zu machen. Für die Bedeutung dieser Frage ist es wichtig, dass sie diesen Bruch in der Architektur darstellt.
Garet Claborn

Antworten:

8

In Bezug auf die Kontexte gibt es kaum Unterschiede. Die meisten OpenGL-Implementierungen bieten aufgrund der Funktionsweise von OpenGL-Erweiterungen die meisten Funktionen von OpenGL 3.0+, selbst wenn ein älterer Kontext verwendet wird.

Wenn Sie speziell fragen, welche Funktionen in OpenGL 3.0 es wert sind, verwendet zu werden, sind einige der besten Geometrie-Shader und Instanzen, die unter bestimmten Umständen auch für 2D-Grafiken nützlich sind. In den meisten Fällen für einfaches 2D müssen Sie jedoch nur jeden Frame einen Streaming-Vertex-Puffer füllen und einen einzelnen Draw-Aufruf ausführen, sodass Sie wirklich nur sehr wenig mehr tun müssen.

Stellen Sie in Bezug auf 2D in OpenGL im Allgemeinen nur sicher, dass Sie einen Texturatlas (Sprite Sheet) haben, damit Sie die Texturzustände sehr selten ändern müssen. Sie möchten vermeiden, einen Draw-Aufruf pro Sprite durchzuführen, da dies unglaublich ineffizient ist. Stattdessen möchten Sie viele Sprites zusammenfassen und alle gleichzeitig zeichnen. Rendern mit dem Malalgorithmus, wobei "Rendern" bedeutet, dass die Geometrie in einen Scheitelpunktpuffer verschoben und am Ende gezeichnet wird. Nachbearbeitung nach Belieben.

Sean Middleditch
quelle
3

Viele Informationen finden Sie hier: OpenGL-Registrierung . Es gibt viele Erweiterungen. Jeder Abschnitt (ARB, EXT, ...) wird nach dem Hinzufügungsdatum sortiert. Neue Erweiterungen werden gegen neuere Versionen von OpenGL geschrieben. Beispiel: Wenn ich mir den Abschnitt ARB anschaue, wird fast jede Erweiterung unter ARB_timer_query (einschließlich) gegen OpenGL 3.2 oder höher geschrieben.

Sie haben auch Puffer erwähnt, damit Sie die Erweiterung GL_NV_vertex_buffer_unified_memory ausprobieren können. Einige Infos finden Sie hier (es gibt auch einen Link zur Präsentation).

Auch shader_buffer_load sollte nützlich sein, wenn Sie Shader verwenden, aber ich habe die Spezifikation noch nicht gelesen.

zacharmarz
quelle