À mon humble avis, il y a trois raisons d'utiliser OpenGL ES dans un jeu:
- Évitez les différences entre les plates-formes mobiles en utilisant une norme ouverte;
- Pour avoir plus de contrôle sur le processus de rendu;
- Pour bénéficier du traitement parallèle GPU;
Dessiner du texte est toujours un problème dans la conception de jeux, car vous dessinez des objets, vous ne pouvez donc pas avoir l'apparence d'une activité commune, avec des widgets, etc.
Vous pouvez utiliser un framework pour générer des polices Bitmap à partir de polices TrueType et les rendre. Tous les frameworks que j'ai vus fonctionnent de la même manière: générer les coordonnées de sommet et de texture du texte au moment du dessin. Ce n'est pas l'utilisation la plus efficace d'OpenGL.
Le meilleur moyen est d'allouer des tampons distants (objets de tampon de sommet - VBO) pour les sommets et les textures au début du code, en évitant les opérations de transfert de mémoire paresseux dans le temps de dessin.
Gardez à l'esprit que les joueurs n'aiment pas lire de texte, vous n'écrirez donc pas un long texte généré dynamiquement. Pour les étiquettes, vous pouvez utiliser des textures statiques, laissant du texte dynamique pour le temps et le score, et les deux sont numériques avec quelques caractères.
Donc, ma solution est simple:
- Créer une texture pour les étiquettes et avertissements courants;
- Créez une texture pour les nombres 0-9, ":", "+" et "-". Une texture pour chaque personnage;
- Générez des VBO distants pour toutes les positions de l'écran. Je peux rendre du texte statique ou dynamique dans ces positions, mais les VBO sont statiques;
- Générez un seul VBO Texture, car le texte est toujours rendu dans un sens;
- Au moment du dessin, je rend le texte statique;
- Pour le texte dynamique, je peux jeter un œil à la position VBO, obtenir la texture du personnage et la dessiner, un caractère à la fois.
Les opérations de dessin sont rapides, si vous utilisez des tampons statiques distants.
Je crée un fichier XML avec des positions d'écran (basées sur le pourcentage de diagonale de l'écran) et des textures (statiques et caractères), puis je charge ce XML avant le rendu.
Pour obtenir un taux de FPS élevé, vous devez éviter de générer des VBO au moment du tirage.