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 и удалите и повторно обработайте растровые изображения из массива.