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