Загрузка текстур в произвольном месте - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь загрузить все игровые данные одновременно в конструкторе моей игровой сцены. Но это терпит неудачу, потому что загрузка текстуры работает только в контексте opengl, как если бы метод загрузки вызывался из рисованной рамки или изменялся. Но я думаю, что некрасиво загружать текстуры, когда вызывается drawframe или что-то подобное. Так возможно ли как-то отделить мою загрузочную часть от функций opengl?

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

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

После этого в следующий раз, когда мой рендерер вызывает bind () (что-то вроде glBindTexture), я проверяю, есть ли данные для загрузки, и, если они существуют, я просто создаю новую текстуру и загружаю данные.

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

Но если вы хотите предварительно загрузить все текстуры, вы можете просто сделать это в onSurfaceCreated или onSurfaceChanged

То же самое относится и к буферам.

Другой подход заключается в использовании нативной активности (посмотрите пример NDK). В этом случае вы можете обрабатывать контекст вручную, но для этого требуется уровень API 9.

1 голос
/ 14 ноября 2011

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

Фактически отложенная загрузка текстур является наиболее элегантным методом.Это один из ключевых компонентов для игр, которые позволяют путешествовать по миру, не прерывая загрузочные экраны.Только не пытайтесь загрузить весь мир сразу, а загружайте вещи, как только они станут видимыми.Используйте объекты Pixel Buffer для асинхронного выполнения действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...