Я задавался вопросом, мог ли кто-либо консультировать по вопросам хорошего шаблона для загрузки структур в приложении Android Java & OpenGL ES.
Мое первое беспокойство определяет, сколько структура называет для выделения и как я могу эффективно пойти о выполнении этого до рендеринга моих вершин.
Мое второе беспокойство находится в загрузке структур, я должен вывести структуру, которая будет загружена на основе моих игровых данных. Это означает, что я буду играть вокруг со строками, которые я понимаю, что-то, что я действительно не должен делать в своем потоке GL.
В целом я понимаю то, что происходит при загрузке структур, я просто хочу вытащить лучший жизненный цикл из него. Есть ли какие-либо другие вещи, которые я должен рассматривать?
1) Вы должны выделить столько имен текстур, сколько вам нужно. По одному для каждой используемой текстуры.
Загрузка текстуры - очень тяжелая операция, которая останавливает конвейер рендеринга. Таким образом, вы никогда не должны загружать текстуры внутри игрового цикла. У вас должно быть состояние загрузки перед состоянием приложения, в котором вы визуализируете текстуры. Состояние загрузки отвечает за загрузку всех текстур, необходимых для рендеринга. Поэтому, когда вам нужно отрендерить свою геометрию, у вас будут загружены все текстуры, и вам больше не нужно об этом беспокоиться.
Обратите внимание, что после того, как текстуры вам больше не нужны, вы должны удалить их с помощью glDeleteTextures.
2) Если вы имеете в виду, что вам нужны разные текстуры для разных уровней или что-то подобное, тогда вы должны обработать данные уровня в состоянии загрузки и решить, какие текстуры необходимо загрузить.
С другой стороны, если вам нужно нарисовать текст (например, текущий счет), тогда в OpenGL все усложняется. У вас будут следующие варианты: выполнить предварительную визуализацию необходимого текста в текстуры (легко), реализовать собственный движок растровых шрифтов (сложнее) или использовать пару Bitmap и Canvas для генерации текстур на лету (медленно).
Если у вас ограниченный набор сообщений, отображаемых во время игры, то я, скорее всего, пререндирую их в текстуры, поскольку реализация довольно тривиальна.
Для текущего счета достаточно иметь текстуру с глифом для чисел от 0 до 9 и использовать ее для рендеринга произвольных значений. Реализация будет довольно простой.
Если вам нужны более длинные локализованные тексты, вам нужно подумать о создании текстур на лету. По сути, вы должны создать растровое изображение, в котором вы визуализируете текст с помощью Canvas. Затем вы загружаете его как текстуру и визуализируете как любую другую текстуру. После того, как он вам больше не понадобится, вы удалите его. Это медленный вариант, и его следует избегать внутри цикла приложения.
3) Что касается текстур и чтобы получить максимальную отдачу от GPU, вы должны держать в уме как минимум следующие вещи (эти вещи станут немного более продвинутыми, и вам следует возиться с ними только после того, как вы запустите приложение. и работает, и если вам нужно оптимизировать частоту кадров):