OpenGLES предварительно загружает текстуры в другой поток

3 andre [2011-07-01 12:53:00]

Мне нужно предварительно загрузить некоторые текстуры в не основной поток приложения OpenGLES. Я читал это: Невозможно вызвать glGenTextures в многопоточном приложении для Android, но это скорее версия Java, в которой я нуждаюсь. Как сообщить моей загрузке Thread для загрузки/создания текстуры в основной цикл? Я кое-что прочитал о создании контекста и поделился им с основным контекстом. Как?

java c++ android android-ndk opengl-es-2.0


1 ответ


3 Josh [2011-07-01 16:01:00]

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

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

Второй шаг - вызвать glGenTextures, который должен выполняться в потоке GL. Итак, в начале вашего метода drawFrame() проверьте размер этого массива ArrayList, который вы сохраняете в растровых изображениях, и если размер больше 0, выполните некоторые вызовы glGenTexures и удалите и повторно обработайте растровые изображения из массива.