Почему бы не скомпилировать шейдеры в фоновом потоке? - PullRequest
1 голос
/ 20 сентября 2011

Я изучал особенности OpenGL ES 2.0 / GLSL и связанных с ними iOS, просматривая код и видео разработчиков, и заметил, что никогда не упоминается об асинхронной компиляции шейдеров. Помимо инструкторов, писателей или продавцов (то есть инженеров), которые беспокоятся о том, чтобы усложнить свои примеры, есть ли причина для этого?

Например, большинство учебных пособий по поиску веб-данных подчеркивают необходимость выполнения каких-либо упражнений (pthreads, NSOperation, GCD, запеченных в методах асинхронных экземпляров и т. Д.), Чтобы не блокировать основной поток - зачем блокировать запуск приложения считать приемлемым?

1 Ответ

1 голос
/ 20 сентября 2011

Может быть немного сложно синхронизировать два EAGLContext, кроме того, нет ничего против загрузки такого рода вещей в фоновом режиме (как правило, загрузки всех видов ресурсов, текстур, шейдеров и т. Д.).

Вероятно, настоящие причины заключаются в том, что большинство людей считают OpenGL (ES) чем-то монолитным, работающим только в одном потоке, или у них никогда не возникало проблем со временем загрузки, из-за которых стоило бы загружать вещи в фоновом потоке, или они просто не волнует (для некоторых людей, вероятно, все вместе).

На ваш последний вопрос: Сеть может добавить ОГРОМНОЕ время ожидания и с «может», я имею в виду «будет». Загрузка ресурсов не так проблематична, по сравнению с доступом к сети, загрузка шейдера или текстуры занимает гораздо меньше времени, и заранее известно, сколько времени это займет в обычном случае. Кроме того, люди привыкли загружать экраны в игре, в то время как они не хотят видеть экраны загрузки при прокрутке табличного представления просто для того, чтобы ваше приложение могло извлечь изображение с сервера, который не отвечает.

...