Когда вы загружаете текстуру, вы передаете ее в графический процессор - поэтому копия создается в памяти, к которой у вас нет прямого доступа.Затем его можно рисовать столько раз, сколько вы хотите.Поэтому нет необходимости в постоянных обновлениях.
OpenGL больше ничего не будет делать в ожидании данных изображения, это синхронный API.Вызов для загрузки данных будет занимать столько времени, сколько требуется, объект текстуры не будет иметь предварительно связанный с ним графический объект, а потом будет иметь то, что вы загрузили, связанный с ним позже.
В общем случае объекты OpenGL,включая объекты текстуры, принадлежат определенному контексту, а контексты принадлежат определенному потоку.Тем не менее, в iOS реализовано групп общего доступа , которые позволяют вам помещать несколько контекстов в группу общих ресурсов, позволяя обмениваться объектами между ними, при этом вам нужно быть немного осторожнее с синхронизацией.
iOS предоставляет специальный подкласс CALayer, CAEAGLLayer , который можно использовать для рисования из OpenGL.Это зависит от вас, когда вы рисуете и как часто.Таким образом, ваш подход является более родным, если что-нибудь.Многие образцы обертывают
Очевидно, сначала попробуйте самый простой подход «все в главном потоке».Если вы делаете не так много, то, скорее всего, это будет достаточно быстро и сэкономит ваше обслуживание кода.Однако выгрузка может стоить дороже, чем вы ожидаете, поскольку в OpenGL вы можете указать данные и формат, в котором вы их оставляете, оставляя OpenGL для перестройки по мере необходимости для конкретного графического процессора, на котором вы работаете.Мы говорим о значениях 0,3 второго сорта, а не 30 секунд, но достаточно, чтобы была очевидная пауза, если пользователь нажмет кнопку или попытается переместить ползунок одновременно.
Таким образом, если поддержание адаптивности основного потока доказывает проблему, я думаю, что вы захотите перейти в фоновый поток, создать новый контекст в той же группе общих ресурсов, что и в основном потоке, загрузить, а затем вернуться ксделать фактический рисунок.В этом случае вам будет зависеть, как вы сообщите пользователю, что данные были получены и обрабатываются в отличие от данных, которые еще не были получены, если разрыв достаточно велик, чтобы оправдать это.