Das "Neuberechnen" der Sprites/Quads/Glyphen/Zeichen/WasAuchImmer kann ein bisschen Rechenzeit kosten, aber jetzt nicht exorbitant viel. Besonders seit ich die ganze Quad-Erstellung/Rotation/Skalierung/Texturkantenkorrektur per Instancing in den VertexShader geschoben habe, ist das so billig, dass es nicht mehr von Belang ist.
Du könntest natürlich einen "Cache" implementieren, so im Sinne von "vergleiche die reinkommenden Rendercalls mit dem bestehenden Satz Sprites vom letzten Mal, und setze erst dann ein Neu-Hochladen-Flag, wenn sich der erste Rendercall unterscheidet". Geht. Ob's was bringt, weiß ich aber nicht.
Abgesehen davon gibt da ja noch das Layout der Texte. Also so Sachen wie Zeilenumbruch, Zentrierung, Auspunkten bei Überlänge und sowas. Das mache ich aktuell jedes Frame live bei der Textausgabe, aber ich kann mir vorstellen, dass man ein paar Mikrosekunden sparen kann, wenn man es nur bei Änderungen einmalig tut. Das würde ich dann aber wieder in ne eigene Klasse auslagern. Vielleicht so:
- Code: Ansicht erweitern :: Alles auswählen
class TextLayout {
void SetText( const std::string& text);
void SetParams( Font& font, Vector2f screensize, Alignment horizontal, Alignment vertical, and so on);
void Render( Vector2f topleft, AlphaColor color) const;
};
Dann hast Du eine Klasse, deren Job es ist, einen Text nach gegebenen Parametern anzuordnen und sich das zu merken. Diese Klasse kann dann auf Zuruf den vorformatierten Text irgendwo hin rendern, solange alle Parameter konstant sind. Ich würde aber ernsthaft erstmal messen, ob das überhaupt die Arbeit wert ist.