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, в то время как это работает. Путем контроля этих дисплеев при разработке приложения можно обнаружить проблемы производительности, как они возникают и рассматривают, где фокусировать настраивающие усилия.
Прибор отладки и отчет содержат следующие дисплеи:
Прибор FPS. Показывает уровень текущей анимации Вашего приложения, в кадрах в секунду (FPS) и новейшей истории чтений FPS. Щелкните по этому прибору для отображения отчета GPU в основном редакторе XCode.
Кадры в секунду. Показывает текущую частоту кадров, относительно целевой частоты кадров, установленной Вашим приложением (часто 30 или 60 футов в секунду). Синяя дуга указывает недавний диапазон чтений FPS.
Использование. Показывает три панели, ломая использование Вашего приложения различных ресурсов обработки на GPU и указании возможных расположений узких мест производительности в Вашем использовании аппаратного обеспечения машинной графики.
Панель Tiler измеряет использование ресурсов обработки геометрии GPU’s. Высокое использование фермера может указать узкие места производительности в вершине и примитивных стадиях обработки OpenGL конвейер ES, таких как использование неэффективного кода вершинного шейдера или рисование чрезмерного числа вершин или примитивов каждый кадр.
Панель Средства рендеринга измеряет использование пиксельных ресурсов обработки GPU’s. Высокое использование средства рендеринга может указать узкие места производительности во фрагменте и пиксельных стадиях обработки OpenGL конвейер ES, таких как использование неэффективного кода программы построения теней фрагмента или обработка дополнительных фрагментов каждый кадр для смешения цветов.
Панель Устройства показывает полное использование GPU, соединяясь и фермера и использование средства рендеринга.
Время кадра. Показывает, что время потратило обработку каждого кадра и на CPU и на GPU. Этот график может указать, делает ли Ваше приложение эффективное использование параллелизма CPU/GPU.
Если Ваше приложение проводит больше времени в обработке CPU, можно быть в состоянии улучшить производительность путем перемещения работы в GPU. Например, если каждый кадр требует многих подобных
glDrawArrays
илиglDrawElements
вызовы, можно использовать аппаратное инстанцирование для сокращения CPU наверху. (Для получения дополнительной информации посмотрите Использование, Инстанцированное Получение для Минимизации Рисует Вызовы.)Если Ваше приложение проводит больше времени в обработке GPU, можно быть в состоянии улучшить производительность путем перемещения работы в CPU. Например, если программа построения теней выполняет то же вычисление с тем же результатом для каждой вершины или фрагмента во время определенного вызова получения, можно выполнить то вычисление один раз на CPU и передать его результат программе построения теней в универсальной переменной. (См. Универсальные формы Использования или Константы Вместо того, чтобы Вычислить Значения в Программе построения теней.)
Производительность программы. Только появляется после получения кадра (см. Получение и Анализ OpenGL Кадр ES ниже), показывая время, проведенное в каждой программе программы построения теней при рендеринге полученного кадра, и в миллисекундах и как процент общего времени рендеринга кадра. Расширение перечисления для программы показывает, что вызовы получения сделали использование что программа и вклад времени рендеринга от каждого. Выберите программу в списке, чтобы просмотреть его исходный код шейдера в заместителе редактора или щелкнуть по значку стрелки рядом с вызовом получения для выбора того вызова в навигаторе кадра (см. область Навигатора ниже).
При настройке приложения можно использовать этот график для нахождения возможностей для оптимизации. Например, если одна программа берет 50% времени рендеринга кадра, Вы получаете больше производительности путем оптимизации его, чем путем улучшения скорости программы, составляющей только 10% времени кадра. Хотя это представление организует время кадра программой программы построения теней, помните, что улучшение Ваших алгоритмов программы построения теней не является единственным способом оптимизировать производительность Вашего приложения — например, можно также сократить количество вызовов получения, использующих дорогостоящую программу программы построения теней или сокращающих количество фрагментов, обработанных медленной программой построения теней фрагмента.
Проблемы и Решения. Только появляется после того, как XCode анализирует получение кадра (см. Получение и Анализ OpenGL Кадр ES), эта область перечисляет возможные проблемы, найденные во время анализа и рекомендаций для улучшения производительности.
При внесении изменений в программу программы построения теней GLSL в полученном кадре (см. Программы Программы построения теней Редактирования ниже), графики Производительности Времени и Программы Кадра расширяются для показа и базового времени рендеринга кадра, как первоначально получено и текущее время рендеринга с помощью отредактированных программ построения теней.
Получение и анализ OpenGL кадр ES
Для подробного взгляда на OpenGL Вашего приложения использование ES получите последовательность команд OpenGL ES, используемых для рендеринга единственного кадра анимации. XCode предлагает несколько способов начать получение кадра:
Ручное получение. При выполнении приложения в XCode щелкните по значку камеры в панели отладки (показанный на рисунке b-2) или выберите Capture OpenGL ES Frame из меню Debug.
Действие точки останова. Выберите Capture OpenGL ES Frame в качестве действия для любой точки останова. Когда отладчик достигает точки останова с этим действием, XCode автоматически получает кадр. (См. Действия Точки останова Установки и Опции.) При использовании этого действия с OpenGL Точка прерывания при ошибке ES при разработке приложения (см. Добавление OpenGL Точка прерывания при ошибке ES), можно использовать OpenGL Отладчик Кадра ES для исследования причин OpenGL ошибки ES каждый раз, когда они происходят.
Маркер события OpenGL ES. Программно инициируйте получение кадра путем вставки маркера события в поток команды OpenGL ES. Следующая команда вставляет такой маркер:
glInsertEventMarkerEXT(0, "com.apple.GPUTools.event.debug-frame")
То, когда 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.)
Область навигатора
В OpenGL интерфейс отладчика кадра ES навигатор отладки заменяется OpenGL , ES структурирует навигатора. Этот навигатор показывает команды OpenGL ES, представляющие полученный кадр, организованный последовательно или согласно их связанной программе программы построения теней. Используйте всплывающее меню Frame View Options наверху навигатора кадра для переключения между стилями представления.
Кадр представления вызовом
Просмотрите полученный кадр вызовом, когда Вы захотите изучить команды 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 с помощью панели перехода наверху основного редактора.
Редактор показывает предварительный просмотр для каждого присоединения кадрового буфера, в настоящее время направляющегося в рисование. Например, большинство подходов к 3D рендерингу использует кадровый буфер с присоединениями и для цвета и для глубины, как проиллюстрировано в. Используйте средства управления в нижнем левом из редактора для выбора, какие присоединения кадрового буфера в настоящее время показываются. Нажатие информационной кнопки, оставленной каждого имени присоединения кадрового буфера, показывает легкую сдобу, детализирующую свойства присоединения, как показано на рисунке b-6. Нажмите кнопку настроек, право на имя присоединения кадрового буфера, для показа легкой сдобы со средствами управления, корректирующими изображение предварительного просмотра. Например, можно использовать эти средства управления для создания определенного диапазона значений Z в буфере глубины более видимым в его просмотре в оттенках серого, как показано на рисунке b-7.
Каждый присоединяемый предварительный просмотр кадрового буфера также показывает зеленый каркас, выделяющий эффект текущего вызова получения (как проиллюстрировано на рисунке b-3). Используйте контекстное меню в изображении предварительного просмотра, чтобы выбрать, появляется ли выделение в предварительном просмотре или на дисплее подключенного устройства.
Редактирование программ программы построения теней
Когда Вы выбираете программу программы построения теней в панели перехода заместителя редактора или обзор ресурса, заместитель редактора показывает исходный код GLSL для программы построения теней фрагмента той программы (как показано на рисунке b-8). При выборе программы в навигаторе кадра (см. Кадр Представления Программой), основной редактор показывает программу построения теней фрагмента программы, и заместитель редактора показывает ее вершинный шейдер. В любом редакторе, показывающем программу построения теней фрагмента, можно использовать панель перехода для переключения на ее вершинный шейдер дубликата, и наоборот.
Каждая строка исходного кода шейдера выделяется в правом поле с панелью, представляющей ее относительный вклад в рендеринг времени. Используйте их для фокусирования усилий по оптимизации программы построения теней — если несколько строк составляют большую долю рендеринга времени, изучают более быстрые альтернативы для тех строк. (Для подсказок по производительности программы построения теней посмотрите Методы наиболее успешной практики для Программ построения теней.)
Можно внести изменения в исходный код шейдера в редакторе. Затем нажмите кнопку Update ниже редактора (показанный на рисунке b-8), чтобы перекомпилировать программу программы построения теней и видеть ее эффекты на полученный кадр. При компиляции результатов программы построения теней по ошибке или предупреждающих сообщений от компилятора GLSL, XCode аннотирует исходный код шейдера для каждой проблемы. Перекомпилированная программа программы построения теней остается в использовании на устройстве, таким образом, можно продолжить выполнять приложение. Нажмите кнопку Continue в панели отладки для наблюдения изменений программы построения теней в действии.
Проверка данных вершины
Когда Вы проверяете буфер массива, заместитель редактора показывает содержание буфера (см. рисунок b-9). Поскольку буфер в OpenGL , память ES не имеет никакого определенного формата, Вы используете всплывающие меню у основания редактора, чтобы выбрать, как его содержание появляется (например, как 32-разрядные целые числа или значения с плавающей точкой, или как вдвое больше 16-разрядных целых чисел или значений полуплавающих), и сколько использования столбцов Xcode для отображения данных.
Объект массива вершины (VAO) инкапсулирует один или несколько буферов данных в OpenGL память ES и привязка атрибута, используемая для того, чтобы снабдить данными вершины от буферов до программы программы построения теней. (Для получения дополнительной информации при использовании VAOs, посмотрите, Консолидируют Изменения Состояния массива Вершины Используя Объекты Массива Вершины.), Поскольку привязка VAO включает информацию о формате содержания буферов, проверяя VAO, показывает его содержание, как интерпретируется OpenGL ES (см. рисунок B-10).
Просмотр Textures или Renderbuffers
Когда Вы проверяете текстуру или renderbuffer, заместитель редактора показывает просмотр изображения его содержания. Можно использовать те же средства управления, которые, как находят в основном редакторе, получили больше информации об объекте текстуры или renderbuffer и скорректировать просмотр изображения. Для текстур можно использовать дополнительное управление в левом нижнем углу заместителя редактора для предварительного просмотра каждого, множественно отображают уровень текстуры и (если применимо) каждой поверхности текстуры карты куба (как показано на рисунке B-11).
Область отладки
Панель отладки обеспечивает многократные средства управления для навигации по полученной последовательности команд OpenGL ES (показанный на рисунке B-12). Можно использовать его меню, чтобы следовать за иерархией, показанной в навигаторе кадра и выбрать команду, или можно использовать стрелки и ползунок для движений вперед-назад в последовательности. Нажмите кнопку Continue, чтобы закончить отладку кадра и возвратиться к запуску Вашего приложения.
Отладчик кадра не имеет никакой консоли отладки. Вместо этого 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 в навигаторе кадра.
Представление контекста 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
.
Автоматическое представление
Представление Auto, показанное слева на рисунке B-14, автоматически перечисляет подмножество элементов, обычно найденных в других представлениях переменных и другой информации, надлежащей выбранному вызову в навигаторе кадра. Например:
Если выбранный вызов приводит к OpenGL ошибка ES, или если XCode идентифицировал возможные проблемы производительности с выбранным вызовом, представление перечисляет ошибки или предупреждения и предложенные исправления для каждого.
. если часть изменений выбранного вызова OpenGL соответствующие элементы от представления GL Context, состояние контекста ES, или его поведение зависит от состояния контекста, представление автоматически перечисляет
Если выбранный вызов связывает ресурс или использует связанные ресурсы, такие как объекты массива вершины, программы или текстуры, представление автоматически перечисляет соответствующие элементы от представления Bound GL Objects.
Если вызов получения выбран, представление перечисляет информацию о производительности программы, включая общее время, проведенное в каждой программе построения теней во время того вызова получения и, если Вы изменили и перекомпилировали программы построения теней начиная с получения кадра, различия с базового времени, проведенного в каждой программе построения теней. (Информация о производительности программы только доступна при отладке на OpenGL ES способное к 3.0 устройство.)
Кроме того, это представление перечисляет совокупную статистику о производительности рендеринга кадра, включая число вызовов получения и частоты кадров.