Получение экземпляра GL10 в отдельном потоке на Android - PullRequest
3 голосов
/ 17 января 2011

Я создаю игру и создал отдельный поток для загрузки ресурсов, 3d-моделей и т. Д., Чтобы поток пользовательского интерфейса не блокировался во время загрузки. Однако для загрузки потока необходим экземпляр GL10, чтобы правильно загрузить и отобразить текстуры.

Вот краткий обзор проблемы, чтобы вы могли лучше понять мое затруднительное положение:
1. Мой класс Renderer создает и запускает поток «загрузки».
2. Загрузочный поток загружает модели и текстуры из ресурсов
3. 'glGenTextures' требуется для загрузки текстур, , но поток загрузки не имеет экземпляра GL10

Я пытался просто передать потоку загрузки экземпляр GL10, предоставленный методом Renderers onSurfaceCreated, но он не работает (я думаю, он будет удален или испорчен, или что-то еще, когда функция закончена)

Итак, как бы я мог передать рабочий экземпляр GL10 в мой поток загрузки?

Ответы [ 2 ]

5 голосов
/ 17 января 2011

Ответ: ты не можешь.

В opengl android объект / контекст gl существуют только в цикле рендеринга. Насколько мне известно, вы не можете использовать функции gl вне этой темы.

причина проста: opengl - конечный автомат, который не защищен от потоков - одна из основных причин заключается в том, что это замедлит рендеринг, если вы добавите тест - быть конечным автоматом, что происходит, когда вы хотите что-то нарисовать и одновременно изменить состояние, например, blend -...

Что вы хотите сделать, так это выполнить всю работу, не связанную с gl, в вашем потоке (открыть файлы точечных рисунков для чтения растровых изображений ...) в цикле рендеринга вы добавляете if (что-то связанное с gl должно быть сделано) {...} и когда ваш поток будет готов, измените флаг, чтобы позволить циклу рендеринга знать, что вы хотите загрузить что-то

0 голосов
/ 29 июня 2012

Это вполне выполнимо на iOS и OSX, и до тех пор, пока вы синхронизируете свой доступ к конечному автомату GL, теоретических проблем не будет, если Android не создаст ограничений в своей реализации. Я только что попытался загрузить текстуру, пока я воздерживался от обработки изображений, и все не работает. Как я уже сказал, эта техника отлично работает все остальные ...

...