IMHO gibt es drei Gründe, OpenGL ES in einem Spiel zu verwenden:
- Vermeiden Sie Unterschiede zwischen mobilen Plattformen, indem Sie einen offenen Standard verwenden.
- Um mehr Kontrolle über den Renderprozess zu haben;
- Um von der GPU-Parallelverarbeitung zu profitieren;
Das Zeichnen von Text ist im Spieldesign immer ein Problem, da Sie Dinge zeichnen, sodass Sie nicht das Erscheinungsbild einer allgemeinen Aktivität mit Widgets usw. haben können.
Sie können ein Framework verwenden, um Bitmap-Schriftarten aus TrueType-Schriftarten zu generieren und zu rendern. Alle Frameworks, die ich gesehen habe, funktionieren auf die gleiche Weise: Generieren Sie die Scheitelpunkt- und Texturkoordinaten für den Text in der Zeichenzeit. Dies ist nicht die effizienteste Verwendung von OpenGL.
Der beste Weg ist, Remote-Puffer (Vertex Buffer Objects - VBOs) für die Vertices und Texturen zu Beginn des Codes zuzuweisen, um die verzögerten Speicherübertragungsvorgänge in der Zeichenzeit zu vermeiden.
Denken Sie daran, dass Spieler keinen Text lesen möchten, sodass Sie keinen langen, dynamisch generierten Text schreiben. Für Beschriftungen können Sie statische Texturen verwenden, wobei dynamischer Text für Zeit und Punktzahl verbleibt. Beide sind numerisch und haben eine Länge von wenigen Zeichen.
Meine Lösung ist also einfach:
- Erstellen Sie eine Textur für allgemeine Beschriftungen und Warnungen.
- Erstellen Sie eine Textur für die Nummern 0-9, ":", "+" und "-". Eine Textur für jedes Zeichen;
- Generieren Sie Remote-VBOs für alle Positionen auf dem Bildschirm. Ich kann statischen oder dynamischen Text an diesen Positionen rendern, aber die VBOs sind statisch.
- Generieren Sie nur eine Textur VBO, da Text immer in eine Richtung gerendert wird.
- In der Zeichenzeit rendere ich den statischen Text.
- Für dynamischen Text kann ich einen Blick auf die Position VBO werfen, die Charaktertextur abrufen und sie zeichenweise zeichnen.
Zeichenvorgänge sind schnell, wenn Sie statische Remote-Puffer verwenden.
Ich erstelle eine XML-Datei mit Bildschirmpositionen (basierend auf dem diagonalen Prozentsatz des Bildschirms) und Texturen (statisch und Zeichen) und lade diese XML vor dem Rendern.
Um eine hohe FPS-Rate zu erzielen, sollten Sie vermeiden, beim Zeichnen VBOs zu generieren.