Какова точная производительность при смешивании OpenGL с UIKit в iPhone? - PullRequest
1 голос
/ 15 марта 2012

Мне нужно принять решение о том, как подойти к приложению, которому нужно визуализировать несколько трехмерных объектов поверх текстуры изображения. Результат должен быть обработан и сохранен как UIImage. Графический дизайн (клиент) ожидает, что стандартные элементы управления UIKit будут манипулировать трехмерным миром.

Представление OpenGL (слой CAEAGLLayer) должно находиться внутри UIScrollView для дешевой и естественной реализации прокрутки и масштабирования. Есть только несколько дополнительных элементов управления для управления масштабом вращения и переходом нескольких 3D-объектов. Ожидается не так много треугольников (максимум 100-200) и 2-3 текстуры (1 маска). Его даже не нужно постоянно обновлять, только когда изменяются некоторые трансформации и масштабирование. CAEAGLLayer не должен быть непрозрачным.

Я бы пошел с решением Core Animation, но рендеринг 3D-преобразованных CALayers в CGContextRef не поддерживается (и не маскируется).

Какова реальная производительность, если поместить CAEAGLLayer в UIScrollView и смешать его с несколькими представлениями UIKit? Сколько треугольников в секунду можно ожидать при плавной частоте кадров (30 кадров в секунду), чтобы я мог принять наилучшее возможное решение?

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

1 Ответ

8 голосов
/ 15 марта 2012

Согласно Аллану Шафферу, который дает WWDC и WWDC во время выступлений OpenGL, сам OpenGL - не столько особый случай, это то, что все, что из-за изменений приведет к тому, что все поверх него будет перекомпоновано.Я говорил с ним конкретно о приложении с обновленным просмотром видео в режиме реального времени под обновленным представлением OpenGL в режиме реального времени, и он сказал, что подобные вещи - наихудший патологический случай.Как правило, не так дорого бросать несколько довольно статичных представлений сверху, например, использовать UILabel для отображения текущего счета в игре OpenGL.

В вашем случае, я думаю, вы, вероятно, можете в значительной степени избежатьпроблема.Не помещайте представление GL в представление прокрутки, но сделайте представление прокрутки непрозрачным и поместите представление GL позади него.Поймайте scrollViewDidScroll: (и соответствующие сообщения масштабирования) и внесите соответствующие изменения в OpenGL.Я могу говорить из опыта и сказать, что я сделал именно это на iPad 1 без проблем с производительностью.Особенно для той модели, о которой вы говорите, я не представляю проблемы.

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