Профилирование приложения OpenGL ES на iOS - PullRequest
3 голосов
/ 31 марта 2012

Я смотрю на игру, над которой я работаю, в шаблоне "Драйвер OpenGL ES" в Инструментах. Пример показывает, что я почти все свое время провожу в функции под названием gfxODataGetNewSurface с деревом вызовов, которое выглядит следующим образом:

  • gfxIODataGetNewSurface
  • gliGetNewIOSurfaceES
  • _ZL29native_window_begin_iosurfaceP23_EAGLNativeWindowObject
  • usleep
  • __semwait_signal

(извините за странное форматирование, сафари или переполнение стека, которые поглощают мои разрывы строк)

Игра набирает всего около 40 FPS (на iPhone 4), хотя я не считаю, что это большая нагрузка, которая заставляет меня думать, что я делаю что-то патологическое с моим кодом OpenGL.

Кто-нибудь знает, что делает gliGetNewIOSurfaceES / gfxIODataGetNewSurface? И это указывает на то, что происходит в моем приложении. Это постоянно создает новые рендербуферы или что-то в этом роде?

РЕДАКТИРОВАТЬ: Новая информация ...

Я обнаружил это с помощью следующего пиксельного шейдера:

varying vec2 texcoord;

uniform sampler2D sampler ; 
const vec4 color = vec4(...);

void main()                 
{                           
    gl_FragColor = color*texture2D(sampler,texcoord);               
}

(опять же мое форматирование искажается!)

Если я изменю const 'color' на #define, при использовании полноэкранного (960x640) спрайта на экране использование рендерера падает с 75% до 35%. На самом деле я хочу, чтобы этот цвет был интерполированным «варьирующимся» количеством от вершинного шейдера, но если сделать его глобальной константой, убивающей производительность, я не могу себе представить, что есть надежда, что «меняющаяся» версия будет лучше.

...