iPhone OpenGL ES: Какой режим текстур самый быстрый? - PullRequest
1 голос
/ 11 мая 2011

Итак, я работаю над игрой для iPhone 3D, с обычным разрешением 320x480 (не сетчатка).

Я тестировал его производительность с помощью инструментов, и он сообщает, что% использования рендерера составляет 64%, тогда как% использования тайлера - 9%. Это означает, что снижение производительности связано с текстурами, смешиванием и т. Д.

Следующее, что я попробовал, было удалить все рисунки, кроме скайбокса. Рендеринг скайбокса заставил рендерер подскочить на 40% с экрана меню, который был на уровне 20%.

Что может происходить? Я попытался отключить GL_BLEND и установить GL_NEAREST для текстурных фильтров mag, но средство визуализации% все еще довольно плохо.

Я попытался включить дисплей сетчатки (в четыре раза больше разрешения), а частота кадров просто взорвалась.

Что еще можно сделать, чтобы уменьшить накладные расходы на рендере? Я полагаю, что-то должно быть, учитывая, что RAGE для iPhone работает на скорости 60 кадров в секунду при разрешении сетчатки (на самом деле я этого не подтверждал).

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Используйте 16-битный кадровый буфер, если вам не нужны альфа-чтения. Отключить альфа-тестирование и Alphablending. Не забудьте отключить тестирование освещения и z-буфера, если оно вам не нужно. При запуске нового кадра всегда очищайте framebuffer / zbuffer и / или убедитесь, что вы полностью перезаписываете его без альфа-смешивания и тестирования при рисовании скайбокса или фона. Используйте mipmapping, но не трилинейный, если вы сжимаете текстуры ниже их исходного размера. Вы можете попробовать отключить билинейную фильтрацию. Обычно это бесплатно, но при минимизации текстур без mipmapping, это (вероятно) может быть несколько медленнее. Используйте 16-битный или PVR сжатый формат для текстур. Даже не рассматривайте другие сжатые форматы, они не поддерживаются аппаратно. Не переключайте текстуры часто, попробуйте поместить все в текстурный атлас (ы). Кроме того, простой метод обновления экрана на основе NSTimer может быть неоптимальным. Я слышал, что некоторые приложения, такие как порт iPhone Doom, выполняют рендеринг в отдельном потоке.

1 голос
/ 12 мая 2011

Какова глубина цвета ваших текстур? Во многих случаях глубина 32 бита может быть легко уменьшена до 16 (с формата 8888 до 4444) без значительной потери качества. И, конечно же, самые быстрые текстуры - это pvrtc. Также не забывайте про текстурные атласы.

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

Однако, как сказал Брэд Ларсон, вам лучше запустить OpenGL ES Analyzer и посмотреть, что он говорит.

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