Я пишу игру на Android, и она продвигается достаточно хорошо.Я стараюсь сделать все как можно более эффективным, поэтому я храню как можно больше в объектах буфера вершин, чтобы избежать ненужной загрузки ЦП.Однако простой процесс эффективного рисования множества несвязанных примитивов или даже цепочек спрайтов различной длины (например, рисование текста на экране) ускользает от меня.
Цель этих примитивов - меню и кнопки, так какну как текст.
Для рисования меню я мог бы просто создать массив вершин для каждого элемента (фон меню, кнопки и т. Д.), Но, поскольку все они - просто четырехугольники, это кажется очень неэффективным.Я также мог бы создать своего рода функцию drawQuad (), которая позволит мне просто прозрачно загрузить единственный сохраненный массив вершин с данными для xy / height & width / color / texture / what.Тем не менее, каждый раз перезагружая каждый элемент массива новыми координатами и другими данными, чтобы скопировать его в буфер с плавающей запятой (для ребят из C ++ это особый шаг, который вы должны сделать в Java для передачи данных в GL), поэтомуможет переслать его в графический процессор также чувствует себя неэффективным, хотя я не знаю, как еще я мог бы это сделать.(Одно повышение эффективности, которое я мог видеть, это установка четырехугольных координат в единичный квадрат, а затем использование Uniforms для его масштабирования, но это кажется не масштабируемым).
Для текста это еще хуже, так как я не знаюкак долго будет длиться текст, и не нужно создавать большие буферы для текста большего размера (что приводит к случайному срабатыванию GC позже).Альтернативой является рисование каждой буквы независимой командой рисования, но это также кажется очень неэффективным даже для сотен букв на экране (поскольку я прочитал, что вы должны попытаться использовать как можно меньше команд рисования).
Также возможно, что я слишком глубоко заглядываю в необходимую оптимизацию openGL, но я не хочу заглядывать в угол с каким-то ужасным дизайном в самом начале.