Передача информации о текстуре в OpenGLES для iPad - последствия? - PullRequest
0 голосов
/ 22 марта 2011

У нас есть готовящийся проект, который потребует от нас передачи информации о текстурном изображении в EAGLView приложения для iPad.Будучи зеленым для OpenGL в целом, есть ли последствия для поверхности ждать информации о текстуре?Что будет делать OpenGL, пока он ожидает данные изображения?Требует ли OpenGL постоянных обновлений своих текстур или он сохранит данные, пока мы не обновим текстуру снова?У нас не будет петли или чего-то еще в представлении, но больше похоже на паттерн наблюдателя.

1 Ответ

1 голос
/ 23 марта 2011

Когда вы загружаете текстуру, вы передаете ее в графический процессор - поэтому копия создается в памяти, к которой у вас нет прямого доступа.Затем его можно рисовать столько раз, сколько вы хотите.Поэтому нет необходимости в постоянных обновлениях.

OpenGL больше ничего не будет делать в ожидании данных изображения, это синхронный API.Вызов для загрузки данных будет занимать столько времени, сколько требуется, объект текстуры не будет иметь предварительно связанный с ним графический объект, а потом будет иметь то, что вы загрузили, связанный с ним позже.

В общем случае объекты OpenGL,включая объекты текстуры, принадлежат определенному контексту, а контексты принадлежат определенному потоку.Тем не менее, в iOS реализовано групп общего доступа , которые позволяют вам помещать несколько контекстов в группу общих ресурсов, позволяя обмениваться объектами между ними, при этом вам нужно быть немного осторожнее с синхронизацией.

iOS предоставляет специальный подкласс CALayer, CAEAGLLayer , который можно использовать для рисования из OpenGL.Это зависит от вас, когда вы рисуете и как часто.Таким образом, ваш подход является более родным, если что-нибудь.Многие образцы обертывают

Очевидно, сначала попробуйте самый простой подход «все в главном потоке».Если вы делаете не так много, то, скорее всего, это будет достаточно быстро и сэкономит ваше обслуживание кода.Однако выгрузка может стоить дороже, чем вы ожидаете, поскольку в OpenGL вы можете указать данные и формат, в котором вы их оставляете, оставляя OpenGL для перестройки по мере необходимости для конкретного графического процессора, на котором вы работаете.Мы говорим о значениях 0,3 второго сорта, а не 30 секунд, но достаточно, чтобы была очевидная пауза, если пользователь нажмет кнопку или попытается переместить ползунок одновременно.

Таким образом, если поддержание адаптивности основного потока доказывает проблему, я думаю, что вы захотите перейти в фоновый поток, создать новый контекст в той же группе общих ресурсов, что и в основном потоке, загрузить, а затем вернуться ксделать фактический рисунок.В этом случае вам будет зависеть, как вы сообщите пользователю, что данные были получены и обрабатываются в отличие от данных, которые еще не были получены, если разрыв достаточно велик, чтобы оправдать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...