En mi humilde opinión, hay tres razones para usar OpenGL ES en un juego:
- Evite las diferencias entre plataformas móviles mediante el uso de un estándar abierto;
- Para tener más control del proceso de renderizado;
- Para beneficiarse del procesamiento paralelo de GPU;
Dibujar texto siempre es un problema en el diseño del juego, porque estás dibujando cosas, por lo que no puedes tener la apariencia de una actividad común, con widgets, etc.
Puede usar un marco para generar fuentes de mapa de bits a partir de fuentes TrueType y representarlas. Todos los marcos que he visto funcionan de la misma manera: generan las coordenadas de vértice y textura para el texto en tiempo de dibujo. Este no es el uso más eficiente de OpenGL.
La mejor manera es asignar memorias intermedias remotas (objetos de memoria intermedia de vértices - VBO) para los vértices y texturas al principio del código, evitando las operaciones de transferencia de memoria diferida en tiempo de extracción.
Ten en cuenta que a los jugadores no les gusta leer texto, por lo que no escribirás un texto largo generado dinámicamente. Para las etiquetas, puede usar texturas estáticas, dejando texto dinámico para tiempo y puntaje, y ambos son numéricos con algunos caracteres de longitud.
Entonces, mi solución es simple:
- Crear textura para etiquetas y advertencias comunes;
- Cree textura para los números 0-9, ":", "+" y "-". Una textura para cada personaje;
- Genere VBO remotos para todas las posiciones en la pantalla. Puedo representar texto estático o dinámico en esas posiciones, pero los VBO son estáticos;
- Genere solo un VBO de textura, ya que el texto siempre se representa de una manera;
- En tiempo de sorteo, renderizo el texto estático;
- Para texto dinámico, puedo mirar la posición VBO, obtener la textura del personaje y dibujarlo, un personaje a la vez.
Las operaciones de dibujo son rápidas, si usa buffers estáticos remotos.
Creo un archivo XML con posiciones de pantalla (basado en el porcentaje diagonal de la pantalla) y texturas (estática y caracteres), y luego cargo este XML antes de renderizar.
Para obtener una alta tasa de FPS, debe evitar generar VBO en el momento del sorteo.