XCode OpenGL обзор инструментов ES

Инструменты XCode для отладки, анализа и настройки OpenGL приложения ES полезны во время всех этапов развития. Прибор Отладки FPS и отчет GPU суммируют производительность GPU Вашего приложения каждый раз, когда Вы выполняете его от XCode, таким образом, можно быстро определить проблемы производительности при разработке и создании средства рендеринга. Как только Вы нашли горячую точку, получаете кадр и используете интерфейс OpenGL ES Frame Debugger XCode, чтобы точно определить проблемы рендеринга и решить проблемы производительности.

Эффективно использование функций Xcode OpenGL ES требует некоторого знакомства с интерфейсом отладки XCode. Для справочной информации считайте Обзор XCode.

Используя прибор отладки FPS и отчет GPU

Прибор отладки FPS и сопроводительный отчет GPU, показанный на рисунке b-1, обеспечивают высокоуровневую сводку OpenGL Вашего приложения производительность ES, в то время как это работает. Путем контроля этих дисплеев при разработке приложения можно обнаружить проблемы производительности, как они возникают и рассматривают, где фокусировать настраивающие усилия.

Рисунок b-1  прибор отладки FPS и отчет GPU

Прибор отладки и отчет содержат следующие дисплеи:

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

Получение и анализ OpenGL кадр ES

Для подробного взгляда на OpenGL Вашего приложения использование ES получите последовательность команд OpenGL ES, используемых для рендеринга единственного кадра анимации. XCode предлагает несколько способов начать получение кадра:

После того, как XCode получил кадр, он показывает интерфейс OpenGL ES Frame Debugger. Используйте этот интерфейс для проверки последовательности команд OpenGL ES, представляющих кадр и исследующих OpenGL ресурсы ES, как обсуждено в Туризме по OpenGL Отладчик Кадра ES.

Кроме того, XCode может выполнить автоматизированный анализ OpenGL Вашего приложения использование ES для определения, какие части средства рендеринга и архитектуры программы построения теней могут получить преимущества больше всего от оптимизации производительности. Для использования этой опции нажмите кнопку Analyze наверху отчета GPU (показанный в верхнем правом на рисунке b-1).

При нажатии кнопки Analyze XCode получает кадр (если Вы уже не были получены), то выполнения код рендеринга через ряд экспериментов с помощью присоединенного устройства на iOS. Например, чтобы видеть, ограничивается ли Ваша скорость рендеринга размерами текстуры, XCode выполняет полученную последовательность команд OpenGL ES и с данными текстуры Ваше приложение, представленное GPU и с сокращенным до размера набором текстуры. После того, как XCode заканчивает свой анализ, проблемы и область Solutions отчета GPU перечисляет любые проблемы, которые это нашло и предложения для возможных повышений производительности.

Туризм по OpenGL отладчик кадра ES

После того, как XCode получает кадр, он автоматически реконфигурировал свой интерфейс для OpenGL отладка ES. Интерфейс OpenGL ES Frame Debugger изменяет несколько областей окна рабочей области XCode для предоставления информации о OpenGL процесс рендеринга ES, как показано на рисунке b-3 и рисунке b-4 и полученный в итоге ниже. (Отладчик кадра не использует инспектора или области библиотеки, таким образом, можно хотеть скрыть служебную область XCode во время OpenGL отладка ES.)

  Исследование отладчика Кадра рисунка b-3 рисует вызовы и
  отладчик Кадра resourcesFigure B-4, исследующий производительность программы программы построения теней и результаты анализа

Область навигатора

В OpenGL интерфейс отладчика кадра ES навигатор отладки заменяется OpenGL , ES структурирует навигатора. Этот навигатор показывает команды OpenGL ES, представляющие полученный кадр, организованный последовательно или согласно их связанной программе программы построения теней. Используйте всплывающее меню Frame View Options наверху навигатора кадра для переключения между стилями представления.

  Всплывающее меню View Frame By рисунка b-5 в навигаторе

Кадр представления вызовом

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

Можно добавить структуру к этому списку при помощи glPushGroupMarkerEXT и glPopGroupMarkerEXT функции для аннотирования групп команд OpenGL ES — эти группы появляются как папки, которые можно развернуть или упасть в обморок для показа более или менее подробности. (Для получения дополнительной информации посмотрите, Аннотируют Ваш OpenGL Код ES для Информативной Отладки и Профилирования.) Можно также развернуть команду OpenGL ES для показа отслеживания стека, указывающего, где в коде приложения была дана команда.

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

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

Кадр представления программой

Просмотрите полученный кадр программой, когда Вы захотите проанализировать время GPU, проведенное на каждой программе программы построения теней и нарисовать команду.

Разверните перечисление для программы для наблюдения вклада времени из каждой программы построения теней в программе, и каждый рисует вызов. Разверните перечисление для вызова получения для показа отслеживания стека, указывающего, где в коде приложения, что была дана команда.

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

Щелчок по программе или программе построения теней показывает соответствующий исходный код GLSL в основном редакторе. Щелчок по команде OpenGL ES перешел к той точке в последовательности получения кадра.

Область редактора

При работе с получением кадра Вы используете основного редактора для предварительного просмотра кадрового буфера, представляемого к, и заместитель редактора, чтобы исследовать OpenGL ресурсы ES и отредактировать программы программы построения теней GLSL. По умолчанию заместитель редактора показывает графический обзор всех ресурсов, в настоящее время принадлежащих OpenGL контекст ES, как показано на рисунке b-3. Используйте панель перехода заместителя редактора, чтобы показать только те ресурсы, направляющиеся в использование с вызова, выбранного в навигаторе кадра или выбрать отдельный ресурс для дальнейшей проверки. Можно также дважды щелкнуть по ресурсу в обзоре для проверки его. Когда Вы выбираете ресурс, заместитель редактора изменяется на формат, которому удовлетворяют для задач, надлежащих типу того ресурса.

Предварительный просмотр содержания кадрового буфера

Основной редактор показывает содержание кадрового буфера, как представлено вызовом получения, в настоящее время выбираемым в навигаторе кадра. (Если выбранная команда OpenGL ES в навигаторе кадра не является командой рисования — например, команда, устанавливающая состояние такой как glUseProgram— кадровый буфер отражает рендеринг, сделанный новым вызовом получения до выбора.) Можно также переместиться по последовательности команд OpenGL ES с помощью панели перехода наверху основного редактора.

  Информационная легкая сдоба Кадрового буфера рисунка b-6

Редактор показывает предварительный просмотр для каждого присоединения кадрового буфера, в настоящее время направляющегося в рисование. Например, большинство подходов к 3D рендерингу использует кадровый буфер с присоединениями и для цвета и для глубины, как проиллюстрировано в. Используйте средства управления в нижнем левом из редактора для выбора, какие присоединения кадрового буфера в настоящее время показываются. Нажатие информационной кнопки, оставленной каждого имени присоединения кадрового буфера, показывает легкую сдобу, детализирующую свойства присоединения, как показано на рисунке b-6. Нажмите кнопку настроек, право на имя присоединения кадрового буфера, для показа легкой сдобы со средствами управления, корректирующими изображение предварительного просмотра. Например, можно использовать эти средства управления для создания определенного диапазона значений Z в буфере глубины более видимым в его просмотре в оттенках серого, как показано на рисунке b-7.

  Легкая сдоба настроек Framebuffer рисунка b-7

Каждый присоединяемый предварительный просмотр кадрового буфера также показывает зеленый каркас, выделяющий эффект текущего вызова получения (как проиллюстрировано на рисунке b-3). Используйте контекстное меню в изображении предварительного просмотра, чтобы выбрать, появляется ли выделение в предварительном просмотре или на дисплее подключенного устройства.

Редактирование программ программы построения теней

Когда Вы выбираете программу программы построения теней в панели перехода заместителя редактора или обзор ресурса, заместитель редактора показывает исходный код GLSL для программы построения теней фрагмента той программы (как показано на рисунке b-8). При выборе программы в навигаторе кадра (см. Кадр Представления Программой), основной редактор показывает программу построения теней фрагмента программы, и заместитель редактора показывает ее вершинный шейдер. В любом редакторе, показывающем программу построения теней фрагмента, можно использовать панель перехода для переключения на ее вершинный шейдер дубликата, и наоборот.

Рисунок b-8  редактор исходного кода программы построения теней GLSL с кнопкой обновления

Каждая строка исходного кода шейдера выделяется в правом поле с панелью, представляющей ее относительный вклад в рендеринг времени. Используйте их для фокусирования усилий по оптимизации программы построения теней — если несколько строк составляют большую долю рендеринга времени, изучают более быстрые альтернативы для тех строк. (Для подсказок по производительности программы построения теней посмотрите Методы наиболее успешной практики для Программ построения теней.)

Можно внести изменения в исходный код шейдера в редакторе. Затем нажмите кнопку Update ниже редактора (показанный на рисунке b-8), чтобы перекомпилировать программу программы построения теней и видеть ее эффекты на полученный кадр. При компиляции результатов программы построения теней по ошибке или предупреждающих сообщений от компилятора GLSL, XCode аннотирует исходный код шейдера для каждой проблемы. Перекомпилированная программа программы построения теней остается в использовании на устройстве, таким образом, можно продолжить выполнять приложение. Нажмите кнопку Continue в панели отладки для наблюдения изменений программы построения теней в действии.

Проверка данных вершины

Когда Вы проверяете буфер массива, заместитель редактора показывает содержание буфера (см. рисунок b-9). Поскольку буфер в OpenGL , память ES не имеет никакого определенного формата, Вы используете всплывающие меню у основания редактора, чтобы выбрать, как его содержание появляется (например, как 32-разрядные целые числа или значения с плавающей точкой, или как вдвое больше 16-разрядных целых чисел или значений полуплавающих), и сколько использования столбцов Xcode для отображения данных.

  Заместитель редактора рисунка b-9, предварительно просматривающий содержимое буфера массива

Объект массива вершины (VAO) инкапсулирует один или несколько буферов данных в OpenGL память ES и привязка атрибута, используемая для того, чтобы снабдить данными вершины от буферов до программы программы построения теней. (Для получения дополнительной информации при использовании VAOs, посмотрите, Консолидируют Изменения Состояния массива Вершины Используя Объекты Массива Вершины.), Поскольку привязка VAO включает информацию о формате содержания буферов, проверяя VAO, показывает его содержание, как интерпретируется OpenGL ES (см. рисунок B-10).

  Заместитель редактора рисунка B-10, предварительно просматривающий вершину, выстраивает объект

Просмотр Textures или Renderbuffers

Когда Вы проверяете текстуру или renderbuffer, заместитель редактора показывает просмотр изображения его содержания. Можно использовать те же средства управления, которые, как находят в основном редакторе, получили больше информации об объекте текстуры или renderbuffer и скорректировать просмотр изображения. Для текстур можно использовать дополнительное управление в левом нижнем углу заместителя редактора для предварительного просмотра каждого, множественно отображают уровень текстуры и (если применимо) каждой поверхности текстуры карты куба (как показано на рисунке B-11).

  Заместитель редактора рисунка B-11, предварительно просматривающий куб, отображает текстуру

Область отладки

Панель отладки обеспечивает многократные средства управления для навигации по полученной последовательности команд OpenGL ES (показанный на рисунке B-12). Можно использовать его меню, чтобы следовать за иерархией, показанной в навигаторе кадра и выбрать команду, или можно использовать стрелки и ползунок для движений вперед-назад в последовательности. Нажмите кнопку Continue, чтобы закончить отладку кадра и возвратиться к запуску Вашего приложения.

Рисунок B-12  OpenGL ES отлаживает панель

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

Все представление объектов GL

Представление All GL Objects, подобное представлению Bound GL Objects, показанному справа на рисунке B-13, перечисляет тот же OpenGL ресурсы ES как графический обзор в заместителе редактора. В отличие от графического обзора, однако, это представление может обеспечить более подробную информацию о ресурсе при расширении его треугольника раскрытия. Например, расширение перечисления для кадрового буфера или буферного объекта показывает информацию, иначе доступную только через OpenGL функции запроса ES такой как glGetBufferParameter и glGetFramebufferAttachmentParameter. Расширение перечисления для программы программы построения теней показывает свое состояние, привязку атрибута и в настоящее время связанное значение для каждой универсальной переменной.

Связанное представление объектов GL

Представление Bound GL Objects, показанное справа на рисунке B-13, ведет себя тождественно к представлению All GL Objects, но перечисляет только ресурсы, в настоящее время направляющиеся в использование с выбранной команды OpenGL ES в навигаторе кадра.

  Область B-13 Debug иллюстрации с Контекстом GL и Связанными представлениями Объектов GL

Представление контекста GL

Представление GL Context, показанное слева на рисунке B-13, перечисляет весь вектор состояния OpenGL средство рендеринга ES, организованное в функциональные группы. Когда Вы выбираете вызов в навигаторе кадра, изменяющем OpenGL состояние ES, измененные значения кажутся выделенными. Например, вызов glCullFace или glFrontFace функционируйте изменения и значения выделений в разделе Culling списка состояния. Включение смешивающийся с glEnable(GL_BLEND) вызовите или изменяющий смешивающиеся параметры с glBlendFunc функционируйте изменения и значения выделений в разделе Blending списка состояния.

Информационное представление контекста

Представление Context Info, показанное справа на рисунке B-14, перечисляет статическую информацию о OpenGL средство рендеринга ES в использовании: имя, версия, возможности, расширения и подобные данные. Можно просмотреть эти данные вместо того, чтобы писать собственный код для запросов атрибутов средства рендеринга такой как GL_MAX_TEXTURE_IMAGE_UNITS и GL_EXTENSIONS.

  Область B-14 Debug иллюстрации с Автоматическим и Информационными представлениями Контекста

Автоматическое представление

Представление Auto, показанное слева на рисунке B-14, автоматически перечисляет подмножество элементов, обычно найденных в других представлениях переменных и другой информации, надлежащей выбранному вызову в навигаторе кадра. Например:

  • Если выбранный вызов приводит к OpenGL ошибка ES, или если XCode идентифицировал возможные проблемы производительности с выбранным вызовом, представление перечисляет ошибки или предупреждения и предложенные исправления для каждого.

  •  . если часть изменений выбранного вызова OpenGL соответствующие элементы от представления GL Context, состояние контекста ES, или его поведение зависит от состояния контекста, представление автоматически перечисляет

  • Если выбранный вызов связывает ресурс или использует связанные ресурсы, такие как объекты массива вершины, программы или текстуры, представление автоматически перечисляет соответствующие элементы от представления Bound GL Objects.

  • Если вызов получения выбран, представление перечисляет информацию о производительности программы, включая общее время, проведенное в каждой программе построения теней во время того вызова получения и, если Вы изменили и перекомпилировали программы построения теней начиная с получения кадра, различия с базового времени, проведенного в каждой программе построения теней. (Информация о производительности программы только доступна при отладке на OpenGL ES способное к 3.0 устройство.)

Кроме того, это представление перечисляет совокупную статистику о производительности рендеринга кадра, включая число вызовов получения и частоты кадров.