Список событий графики
Список событий графики, одно из средств диагностики графики в Visual Studio, служит для изучения событий Direct3D, произошедших при отрисовке определенного кадра игры или приложения.
Окно Список событий графики выглядит так:
Примечание
Начиная с Visual Studio 2013 с обновлением 3 окна средств диагностики графики размещаются в отдельной копии среды Visual Studio.В этой специальной среде, которая называется "Анализ графики", нет ненужных меню и параметров, но в остальном список событий графики и рабочий процесс остаются такими же, как и раньше.Подробнее об этом изменении см. в разделе Общие сведения о диагностике графики.
Использование списка событий
Выбор события в списке событий отражается на информации, выводимой другими средствами диагностики графики. Используя список событий в сочетании с другими средствами, можно подробно изучить проблему отрисовки, чтобы определить ее причину. Подробнее о том, как устранять проблемы отрисовки, используя список событий в сочетании с другими средствами диагностики графики, см. в статье Примеры диагностики графики.
Эффективное использование возможностей списка событий — важное условие для решения проблем со сложными кадрами, которые могут содержать тысячи событий. Эффективное использование списка событий предполагает выбор наиболее подходящего вам представления, фильтрацию списка событий с помощью поиска, переход по ссылкам для получения дополнительной информации об объектах Direct3D, связанных с событием, и использование кнопок со стрелками для быстрого перемещения между вызовами Draw.
Представления списка событий
Список событий поддерживает два разных представления, в которых события графики упорядочиваются по-разному в соответствии с рабочим процессом и вашими предпочтениями. Первое из них — это представление вызовов Draw, в котором события и соответствующие состояния упорядочиваются иерархически. Второе — это представление временной шкалы, в котором события упорядочиваются хронологически в виде плоского списка.
Представление Вызовы Draw
Отображает захваченные события и их состояния в виде иерархической структуры. Верхний уровень иерархии состоит из событий, таких как вызовы Draw, события очистки, события Present и события, связанные с представлениями. В списке событий можно развернуть вызов Draw, чтобы увидеть состояние устройства на момент вызова. Далее можно развернуть каждый тип состояния, чтобы увидеть события, которые задали эти значения. На этом уровне также можно увидеть, были ли определенное состояние установлено в предыдущем кадре и были ли оно установлено несколько раз с момента последнего вызова Draw.Представление Временная шкала
Отображает все захваченные события в хронологическом порядке. Такой способ упорядочения списка событий аналогичен использовавшемуся в предыдущих версиях Visual Studio.
Смена режима просмотра для списка событий
- В окне Список событий графики над списком событий в раскрывающемся меню Вид выберите представление Временная шкала или Вызовы Draw.
Фильтрация событий
С помощью поля поиска, расположенного в правом верхнем углу окна Список событий графики, можно отфильтровать список событий, включив в него только те события, в именах которых содержатся определенные ключевые слова. Можно указать одно ключевое слово, например Vertex, как на иллюстрации выше, или несколько ключевых слов в виде списка, разделенного точками с запятой, например Draw;Primitive. Такой список соответствует событиям, в именах которых есть слово Draw или Primitive. При поиске пробелы учитываются, то есть VSSet и VS Set — это разные запросы. Поэтому формируйте запросы внимательно.
Перемещение между вызовами Draw
Так как изучение вызовов Draw имеет особенно важное значение, вы можете использовать кнопки Переход к следующему вызову Draw и Переход к предыдущему вызову Draw, находящиеся в левом верхнем углу окна Список событий графики, для быстрого поиска вызовов Draw и перехода между ними.
Ссылки на графические объекты
Для анализа некоторых событий графики может потребоваться дополнительная информация о текущем состоянии устройства или объектах Direct3D, на которые ссылается событие. Многие события предоставляют ссылки, перейдя по которым, можно получить эту подробную информацию.
Типы событий и маркеров событий
События, которые отображаются в списке событий, организованы в четыре категории: общие события, события Draw, пользовательские группы событий и пользовательские маркеры событий. Каждое событие, кроме общих, отображается вместе со значком, указывающим на категорию, к которой оно относится.
Значок |
Описание события |
---|---|
(без значка) |
|
|
|
|
|
|
Пользовательские события
Пользовательские события относятся к определенному приложению. С их помощью можно сопоставлять важные события, происходящие в приложении, с событиями в списке событий графики. Так, можно создать пользовательские группы событий для упорядочения связанных событий, например служащих для отрисовки пользовательского интерфейса, по группам или иерархиям для более удобного просмотра списка событий или создать маркеры, связанные с отрисовкой объектов определенных типов, чтобы быстро находить соответствующие события в списке событий.
Для создания пользовательских групп и маркеров в приложении используйте те же API, которые Direct3D предоставляет для использования в других средствах Direct3D. В таблице ниже приведены API, которые можно использовать для создания групп и маркеров в разных версиях Direct3D.
Описание API |
ID3D11DeviceContext2 (Direct3D 11,2) |
ID3DUserDefinedAnnotation (Direct3D 11.1) |
Семейство D3DPerf_ API (Direct3D 11.0 и более ранних версий) |
---|---|---|---|
Начало группы событий |
BeginEventInt |
BeginEvent |
D3DPerf_BeginEvent |
Завершение группы событий |
EndEventInt |
EndEvent |
D3DPerf_EndEvent |
Создание маркера события |
SetMarkerInt |
SetMarker |
D3DPerf_SetMarker |
Вы можете использовать любые API, которые поддерживает ваша версия Direct3D. Например, чтобы создать маркер события для API Direct3D 11.1, можно воспользоваться интерфейсом SetMarker или D3DPerf_SetMarker, но не интерфейсом SetMarkerInt, так как он доступен только в Direct3D 11.2. Кроме того, в одном приложении можно использовать сочетание API, поддерживающих различные версии Direct3D.
См. также
Задачи
Пошаговое руководство. Отсутствие объектов вследствие состояния устройства