Какое влияние на производительность оказывает использование мультисэмплинного сглаживания в iOS? - PullRequest
4 голосов
/ 17 января 2011

Я экспериментировал с использованием мультисэмплинга для полного сглаживания сцены на iPhone и iPad на iOS 4. Общий механизм использует расширение Apple APPLE_framebuffer_multisample (http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt) и описано в ответе на это вопрос: Как активировать мультисэмплинг в OpenGL ES на iPhone? и задокументировано Apple в их Руководстве по программированию OpenGL ES.

Это работает, как описано, но производительность рисования моего тестового приложения снижается примерно на 50%, когда я устанавливаю количество образцов равным 2. Я в основном тестирую на iPhone 4, используя приложение без поддержки сетчатки , Я использую другие предложения по производительности, предложенные Apple в их документации (используя glDiscardFramebufferEXT для отбрасывания буферов рендеринга, присоединенных к мультисэмпловому кадровому буферу, используя glClear для очистки всего кадрового буфера в начале кадра и т. Д.).

Повышение производительности при включении мультисэмплирования таким образом кажется мне удивительно большим. Ребята, вы видите похожие результаты или это говорит о том, что я что-то делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Вы упомянули, что запускаете это на iPhone 4. Является ли рендеринг слоя OpenGL ES с полным масштабным коэффициентом 2X Retina? То есть вы установили contentScaleFactor на уровне хостинга OpenGL ES на [[UIScreen mainScreen] scale]? Если это так, вы нажимаете большое количество пикселей для начала.

Ограничена ли скорость заполнения перед применением мультисэмплированного сглаживания? Чтобы проверить, используйте инструмент OpenGL ES в Инструментах против вашего запущенного приложения и включите статистику использования Tiler Utilization и Renderer. Если ваше приложение показывает высокий коэффициент использования Renderer без включенного MSAA, для вас начальная скорость заполнения ограничена. Кроме того, добавление MSAA может значительно снизить частоту кадров из-за этого узкого места.

В приложении, которое у меня было, которое было ограничено геометрией, а не ограничено скоростью заполнения, я не видел такого большого замедления при использовании 4X MSAA в нем на iPhone 4. Я предполагаю, что узкое место в вашем приложении находится в толчке пикселей на экран.

1 голос
/ 27 января 2011

Не удивительно, что ваша производительность страдает примерно на 50%, когда вы устанавливаете количество сэмплов равным 2: вы рисуете в два раза больше сэмплов! Мультисэмплирование означает, что вы, по сути, рисуете свою сцену с более высоким разрешением, чем экран, в внеэкранный буфер, а затем вы используете алгоритмы фильтрации для уменьшения буфера мультисэмплирования с более высоким разрешением до разрешения экрана, надеюсь, с меньшим количеством артефактов сглаживания, потому что финальный На самом деле картинка содержит больше деталей (отфильтрованный вывод с более высоким разрешением), чем версия с одиночной выборкой.

Это очень распространенная (если не самая распространенная) проблема производительности графики: чем больше сэмплов вы рисуете, тем медленнее вы работаете.

...