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?
opengl
2d
graphics-programming
Garet Claborn
quelle
quelle
Antworten:
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.
quelle
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.
quelle