IMHO ci sono tre ragioni per usare OpenGL ES in un gioco:
- Evita le differenze tra le piattaforme mobili utilizzando uno standard aperto;
- Per avere un maggiore controllo del processo di rendering;
- Per beneficiare dell'elaborazione parallela della GPU;
Disegnare il testo è sempre un problema nella progettazione del gioco, perché stai disegnando cose, quindi non puoi avere l'aspetto di un'attività comune, con i widget e così via.
È possibile utilizzare un framework per generare caratteri Bitmap dai caratteri TrueType e renderli. Tutti i framework che ho visto funzionano allo stesso modo: genera il vertice e le coordinate della trama per il testo in tempo di disegno. Questo non è l'uso più efficiente di OpenGL.
Il modo migliore è allocare buffer remoti (oggetti buffer vertici - VBO) per i vertici e le trame all'inizio del codice, evitando le operazioni di trasferimento della memoria lazy in tempo di disegno.
Tieni presente che ai giocatori non piace leggere il testo, quindi non dovrai scrivere un lungo testo generato dinamicamente. Per le etichette, puoi usare trame statiche, lasciando testo dinamico per tempo e punteggio, ed entrambi sono numerici con una lunghezza di alcuni caratteri.
Quindi, la mia soluzione è semplice:
- Crea texture per etichette e avvertenze comuni;
- Crea trama per i numeri 0-9, ":", "+" e "-". Una trama per ogni personaggio;
- Genera VBO remoti per tutte le posizioni nella schermata. Posso eseguire il rendering di testo statico o dinamico in quelle posizioni, ma i VBO sono statici;
- Genera solo un VBO Texture, poiché il testo viene sempre visualizzato in un modo;
- In fase di disegno, rendering il testo statico;
- Per un testo dinamico, posso dare un'occhiata alla posizione VBO, ottenere la trama del personaggio e disegnarla, un personaggio alla volta.
Le operazioni di disegno sono veloci se si utilizzano buffer statici remoti.
Creo un file XML con posizioni dello schermo (in base alla percentuale diagonale dello schermo) e trame (statico e caratteri), quindi carico questo XML prima del rendering.
Per ottenere un alto tasso di FPS, dovresti evitare di generare VBO al momento dell'estrazione.