Загрузка структур в OpenGL Android Приложение ES

Я задавался вопросом, мог ли кто-либо консультировать по вопросам хорошего шаблона для загрузки структур в приложении Android Java & OpenGL ES.

Мое первое беспокойство определяет, сколько структура называет для выделения и как я могу эффективно пойти о выполнении этого до рендеринга моих вершин.

Мое второе беспокойство находится в загрузке структур, я должен вывести структуру, которая будет загружена на основе моих игровых данных. Это означает, что я буду играть вокруг со строками, которые я понимаю, что-то, что я действительно не должен делать в своем потоке GL.

В целом я понимаю то, что происходит при загрузке структур, я просто хочу вытащить лучший жизненный цикл из него. Есть ли какие-либо другие вещи, которые я должен рассматривать?

6
задан Alexander Trauzzi 23 March 2010 в 15:36
поделиться

1 ответ

1) Вы должны выделить столько имен текстур, сколько вам нужно. По одному для каждой используемой текстуры.

Загрузка текстуры - очень тяжелая операция, которая останавливает конвейер рендеринга. Таким образом, вы никогда не должны загружать текстуры внутри игрового цикла. У вас должно быть состояние загрузки перед состоянием приложения, в котором вы визуализируете текстуры. Состояние загрузки отвечает за загрузку всех текстур, необходимых для рендеринга. Поэтому, когда вам нужно отрендерить свою геометрию, у вас будут загружены все текстуры, и вам больше не нужно об этом беспокоиться.

Обратите внимание, что после того, как текстуры вам больше не нужны, вы должны удалить их с помощью glDeleteTextures.

2) Если вы имеете в виду, что вам нужны разные текстуры для разных уровней или что-то подобное, тогда вы должны обработать данные уровня в состоянии загрузки и решить, какие текстуры необходимо загрузить.

С другой стороны, если вам нужно нарисовать текст (например, текущий счет), тогда в OpenGL все усложняется. У вас будут следующие варианты: выполнить предварительную визуализацию необходимого текста в текстуры (легко), реализовать собственный движок растровых шрифтов (сложнее) или использовать пару Bitmap и Canvas для генерации текстур на лету (медленно).

Если у вас ограниченный набор сообщений, отображаемых во время игры, то я, скорее всего, пререндирую их в текстуры, поскольку реализация довольно тривиальна.

Для текущего счета достаточно иметь текстуру с глифом для чисел от 0 до 9 и использовать ее для рендеринга произвольных значений. Реализация будет довольно простой.

Если вам нужны более длинные локализованные тексты, вам нужно подумать о создании текстур на лету. По сути, вы должны создать растровое изображение, в котором вы визуализируете текст с помощью Canvas. Затем вы загружаете его как текстуру и визуализируете как любую другую текстуру. После того, как он вам больше не понадобится, вы удалите его. Это медленный вариант, и его следует избегать внутри цикла приложения.

3) Что касается текстур и чтобы получить максимальную отдачу от GPU, вы должны держать в уме как минимум следующие вещи (эти вещи станут немного более продвинутыми, и вам следует возиться с ними только после того, как вы запустите приложение. и работает, и если вам нужно оптимизировать частоту кадров):

  • Минимизируйте изменения текстуры, так как это медленная операция. Оптимально вы должны рендерить все объекты, используя одну и ту же текстуру в пакете. Затем измените текстуру и визуализируйте объекты , которые в этом нуждаются, и так далее.
  • Используйте атласы текстур, чтобы минимизировать количество текстур (и изменений текстур).
  • Если у вас много текстур, вам может потребоваться использовать другую битовую глубину, чем 8888, чтобы все ваши текстуры уместились в памяти. Использование более низкой битовой глубины также может улучшить производительность.
14
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: