Ich arbeite an einer einfachen 2D-Engine mit OpenGL (3.3+) zum Rendern und habe mich gefragt, wie die optimale Methode für das Sprite-Batching aussehen würde. Ich plane, alle Sprites in einen (oder weniger) Texturatlanten zu setzen. Es überrascht nicht, dass jedes Sprite aus 2 Dreiecken und 4 Texturkoordinaten besteht. Nehmen wir der Einfachheit halber an, dass nur die Sprites vorerst nicht animiert sind.
Nun zu meiner Frage, ich weiß nicht, wie ich sie am besten zeichnen könnte. Soweit ich graben konnte, habe ich zwei Möglichkeiten:
Zeichnen Sie jedes Sprite separat, um die Position / Drehung / Skalierung jedes Sprites im Shader über MVP-Matrizen zu ändern. Dies bedeutet auch, dass ich die Sprite-Datenpuffer (Vertex Pos. & Tex. Coords) auf der GPU nicht aktualisieren müsste.
Füllen Sie alle Sprites-Daten in einem einzigen VBO und zeichnen Sie sie alle mit einem
glDrawElements
Aufruf (vorausgesetzt, sie verwenden denselben Texturatlas und Shader). Dann müsste ich jedoch den VBO in jedem Frame aktualisieren (oder zumindest die geänderten Teile, was auch bedeutet, dass ich den Status jedes Sprites beobachten müsste).
Welche dieser Optionen ist aus praktischer Sicht besser? Oder gibt es eine andere Methode, um das zu erreichen, was ich versuche?