Запись графических сведений
Графическую информацию можно захватывать из приложений DirectX для использования инструментов диагностики графики Visual Studio, помогающих выявлять проблемы отрисовки.
Способы захвата
В Windows 8,1 среда выполнения DirectX 11.2 может захватывать графические данные на внутреннем уровне от имени средств отладки, таких как модуль диагностики графики. Это называется надежным захватом. До того как поддержка этой возможности была добавлена в среду выполнения DirectX, графические данные захватывались путем перехвата вызовов определенных функций DirectX и записи их аргументов и другой информации, после чего вызовы перенаправлялись в DirectX для выполнения. Такой процесс называется устаревшим режимом захвата.
Так как в Windows 8,1 среда выполнения DirectX полностью отвечает за захват графических данных, модернизировать устаревший режим захвата для поддержки DirectX 11.2 не требуется и использовать его не рекомендуется. Однако, поскольку среда выполнения DirectX 11.2 не поддерживает версии Windows, предшествующие Windows 8,1, Visual Studio 2013 по-прежнему поддерживает устаревший режим захвата для приложений, предназначенных для Windows 8 и Windows 7.
Оба метода записывают одинаковые данные, и от них не зависит процедура захвата графических данных или использования средств диагностики графики.
Надежный захват
Надежный захват поддерживает диагностику графики Visual Studio 2013 в Windows 8,1, Windows RT 8.1 и Windows Phone 8.1. Он поддерживает версии DirectX от 10.0 до 11.2 и позволяет захватывать графические данные для новых функций Direct3D 11.2, например плиточных ресурсов. Однако он не полностью поддерживает все функции Direct3D 11.2. Например, он не позволяет отладить шейдер HLSL, созданный с помощью функции компоновки шейдеров HLSL. Для надежного захвата используется новый API захвата, поддерживающий сценарии программного захвата.
Устаревший режим захвата
Устаревший режим захвата поддерживает диагностику графики Visual Studio 2013 и Visual Studio 2012 в Windows 8, Windows RT 8 и Windows 7. Он поддерживает версии DirectX с 10.0 по 11.1. Устаревший режим захвата не поддерживает функции Direct3D 11.2, и его рекомендуется использовать только в сценариях, в которых надежный режим недоступен. Режим устаревшего захвата использует API захвата, определенный в файле заголовка vsgcapture.h, для поддержки сценариев программного захвата. Этот способ программного захвата также рекомендуется использовать только в ситуациях, в которых надежный захват недоступен.
Захват графической информации
Захват графической информации представляет собой двухэтапный процесс. На первом этапе приложение запускается в режиме диагностики графики и указываются один или более кадров для захвата подробной графической информации.
Запуск приложения в режиме диагностики графики
В строке меню выберите Отладка, Графика, Начать диагностику. (Сочетание клавиш: Alt+F5)
На панели инструментов Диагностика графики нажмите кнопку Начать диагностику.
Во время выполнения приложения в режиме диагностики графики постоянно записывается определенная графическая информация; она включает настройку устройства, создания цепочки буферов, создание графических объектов и ресурсов и другие важные события, влияющие более чем на один кадр. В то же время можно записать подробные сведения об определенных кадрах; к ним относятся вызовы рисования и операции вычислительного шейдера, а также объекты Direct3D и поддерживающие их ресурсы.
Захват кадра
В Visual Studio на панели инструментов Диагностика графики нажмите кнопку Захватить кадр
.
На клавиатуре нажмите клавишу PRINT SCREEN.
Примечание
Во время выполнения приложения в режиме Диагностика графика клавишу PRINT SCREEN можно использовать только для захвата кадра графических данных; она не выполняет свою обычную функцию.Это продолжается до завершения захвата графической информации (как правило, в результате остановки отладки или выхода из приложения обычным образом), даже если в фокусе находится другое приложение.
В Visual Studio 2013 с обновлением 3 интерфейс для захвата кадров был изменен. В интерфейсе захвата Visual Studio нажмите кнопку Захват кадра над временной шкалой Диагностический сеанс или нажмите большую кнопку Захват кадра под дорожкой Кадров в секунду справа от ранее захваченных кадров. Обе кнопки выделены на рисунке ниже.
Когда все будет готово для проверки захваченных кадров, запустите оболочку Visual Studio Graphics Analysis, перейдя по ссылке Кадр... над эскизами или дважды щелкнув эскиз.
Могут захватываться только целые кадры, поэтому при запуске захвата фактически записывается только графическая информация из следующего кадра. Запись начинается сразу после вывода кадра, на котором был запущен захват, и заканчивается после вывода захваченного кадра. Во время работы приложения в режиме диагностики графики можно захватить любое количество кадров. Если никакие кадры не захватываются, журнал графики очищается.
При первом захвате кадра в Visual Studio отображается окно документа журнала графики (.vsglog). Если закрыть окно журнала графики, остановить отладку или закрыть приложение, записать в этот журнал новые кадры будет невозможно. Чтобы получить больше графической информации, необходимо снова запустить приложение в режиме диагностики графики и начать новый журнал графики.
Параметры захвата диагностики графики
Вы можете настроить функцию захвата так, чтобы собирались стеки вызовов для всех событий графики или только для ограниченного их подмножества, отключить HUD захвата и включить или отключить режим совместимости захвата.
Настройка параметров захвата диагностики графики
В строке меню выберите Сервис, Параметры. Откроется диалоговое окно Параметры.
В списке категорий параметров слева выберите пункт Диагностика графики, а затем настройте необходимые параметры для Диагностика графики.
Сбор стеков вызовов во время захвата (захват замедляется)
Чтобы осуществлять сбор стеков вызовов, установите этот флажок. По умолчанию стеки вызовов собираются, и выбран вариант для вызовов Draw, Dispatch, Present и маркеров производительности. Для захвата стеков вызовов для всех событий выберите для всех. Чтобы не собирать стеки вызовов, снимите флажок Сбор стеков вызовов во время захвата (захват замедляется).Отключить HUD в игре во время захвата
Установите этот флажок, чтобы отключить наложение HUD, которое обычно отображается в приложении, находящемся в режиме диагностики графики. Чтобы отображать наложение HUD, снимите этот флажок.Захват в режиме совместимости
Установите этот флажок, чтобы захватывать графические данные в режиме совместимости. По умолчанию захват выполняется в режиме совместимости. В режиме совместимости Direct3D не будет сообщать о том, что GPU поддерживает дополнительные функции помимо тех, которые определены на базовом функциональном уровне. Это позволяет предотвратить использование в приложении, в котором выполняется захват, специфичных для оборудования расширений GPU и обеспечивает возможность воспроизведения журнала графики с помощью любого GPU, поддерживающего тот же или более высокий функциональный уровень. Чтобы отключить режим совместимости, снимите этот флажок. Журналы, захваченные при отключенном режиме совместимости, не удастся воспроизвести на GPU, который не поддерживает дополнительные функции, использовавшиеся приложением во время захвата.
Удаленный захват графической информации
Графическую информацию можно захватывать из приложения, работающего на локальном компьютере или на удаленном компьютере или устройстве. Удаленный захват поддерживается для компьютеров с Windows 8,1 и устройств Windows RT 8.1. Чтобы захватить графическую информацию из приложения, выполняющегося удаленно, настройте проект для удаленной отладки, а затем запустите приложение в режиме диагностики графики, как было описано выше. Приложение будет выполняться на удаленном компьютере, а захваченная графическая информация будет собираться на компьютере разработки.
Настройка проекта для удаленной отладки зависит от типа разрабатываемого приложения и используемого языка программирования. Сведения о настройке удаленной отладки приложений для Магазина Windows см. в разделе Запуск приложений для Магазина Windows на удаленном компьютере из Visual Studio. Сведения о настройке удаленной отладки классических приложений для Windows см. в разделе Настройка удаленной отладки для проекта Visual Studio.
Впоследствии удаленный компьютер или устройство можно использовать для воспроизведения графической информации независимо от того, где она была захвачена. Для получения дополнительной информации см. Практическое руководство. Изменение машины воспроизведения диагностики графики.
Захват графических данных из командной строки
С помощью программы командной строки можно захватывать графические данные из любых приложений. Программа DXCap.exe позволяет быстро захватывать и воспроизводить графические данные без использования Visual Studio или программного захвата. В частности, программу DXCap.exe можно использовать для автоматизации или в тестовой среде. Подробнее о программе DXCap.exe см. в разделе Программа командной строки для захвата.