Загрузите представление OpenGl в фоновом режиме. iPhone - PullRequest
1 голос
/ 03 сентября 2010

У меня есть представление OpenGL, которое отображает 3D-модель.Это базовая модификация на яблоках EAGLView.Это представление добавляется в .view контроллера и отображается с presentModalViewController:.Я хотел бы выполнить всю загрузку модели и настройку состояния OpenGL в фоновом потоке при запуске приложения, прежде чем пользователь решит отобразить представление.Это возможно?Могу ли я загрузить текстуры, настроить освещение и вообще просто подготовить все для рендеринга в фоновом потоке?Я боюсь, что сенсорные части приложения Cocoa в основном будут манипулировать состоянием OpenGL, пока я настраиваю рендерер в фоновом режиме.Контроллер будет отображаться из основного потока, конечно.С таким уровнем понимания OpenGl-ES я не часто сталкиваюсь, поэтому, пожалуйста, будьте осторожны, если мой вопрос как-то странен :)

1 Ответ

1 голос
/ 11 ноября 2010

Вы абсолютно можете сделать фоновую загрузку в потоке.Некоторые из ключевых моментов: - Вероятно, выигрыш в переносе настройки состояния OGL в фоновый поток не так уж и велик - общий объем изменений, которые вы бы вызвали в контексте до начала первого розыгрыша, не суммируется стонна времени.Фоновая загрузка полезна для текстур и VBO, а также для времени загрузки, которое должно произойти в первую очередь, чтобы получить данные для подачи в GL.- Вам нужно будет отсоединить контекст от основного потока и переместить его в рабочий поток.Мы делаем это, используя pthreads, чтобы «отправить» контекст работнику.- При нашем использовании мы скрываем представление GL, чтобы гарантировать, что его не нужно рисовать в состоянии загрузки.(Честно говоря, во время загрузки он может не содержать ничего полезного.) Таким образом, во время асинхронной загрузки весь видимый пользовательский интерфейс не является GL-какао.

Этот подход сложнее, чем на рабочем столе: просто делитесь объектамив двух контекстах (так что вы можете загружать и рисовать одновременно).Когда мы рассматривали этот подход более года назад, это было невозможно на IOS;сейчас это возможно, я не знаю.

...