ИМХО есть три причины использовать OpenGL ES в игре:
- Избегайте различий между мобильными платформами, используя открытый стандарт;
- Чтобы иметь больший контроль над процессом рендеринга;
- Чтобы извлечь выгоду из параллельной обработки GPU;
Рисование текста всегда является проблемой в игровом дизайне, потому что вы рисуете предметы, поэтому у вас не может быть общего вида деятельности с виджетами и так далее.
Вы можете использовать платформу для создания растровых шрифтов из шрифтов TrueType и их рендеринга. Все структуры, которые я видел, работают одинаково: генерируют координаты вершин и текстуры для текста во время рисования. Это не самое эффективное использование OpenGL.
Лучший способ - выделить удаленные буферы (объекты буфера вершин - VBO) для вершин и текстур на ранней стадии кода, избегая операций ленивого переноса памяти во время отрисовки.
Имейте в виду, что игроки не любят читать текст, поэтому вы не будете писать длинный динамически генерируемый текст. Для этикеток вы можете использовать статические текстуры, оставив динамический текст для времени и счета, и оба они числовые и состоят из нескольких символов.
Итак, мое решение простое:
- Создавайте текстуры для общих надписей и предупреждений;
- Создайте текстуру для чисел 0-9, «:», «+» и «-». Одна текстура для каждого персонажа;
- Сгенерируйте удаленные VBO для всех позиций на экране. Я могу отображать статический или динамический текст в этих позициях, но VBO статичны;
- Создайте только один VBO текстуры, так как текст всегда отображается в одном направлении;
- Во время рисования я визуализирую статический текст;
- Для динамического текста я могу заглянуть в позицию VBO, получить текстуру символа и нарисовать ее, по символу за раз.
Операции рисования выполняются быстро, если вы используете удаленные статические буферы.
Я создаю XML-файл с позициями экрана (на основе процента диагонали экрана) и текстурами (статическими и символами), а затем загружаю этот XML перед рендерингом.
Чтобы получить высокий FPS, вам следует избегать создания VBO во время отрисовки.