Готовый перевод Practical Rendering and Computation with Direct3D 11 / Практика рендеринга и вычислений в Direct3D 11: [1.1] – Direct3D Framework / Платформа Direct3D
1.1 Платформа Direct3D
Direct3D 11 – это нативный интерфейс прикладного программирования (API), который используется для связи и управлением видеооборудованием компьютера для создания выводимого изображения.
Термин "нативный" указывает, что API предназначен для работы с языками C/C++, а не с управляемыми языков.
Так что самый непосредственный способ использовать API – это использовать его в приложении, написанном на C/C++.
Несмотря на то, что существует целый ряд различных нативных оконных фреймворков, мы будем работать с Win32 API, просто чтобы уменьшить количество дополнительных программных технологий, необходимых для настройки и запуска Direct3D 11.
Несмотря на то, что они прозрачны для приложения, существует целый ряд различных программных слоев, которые находятся ниже Direct3D, и составляющих вместе общую графическую архитектуру, используемую в клиентской среде ОС Windows.
В этом разделе мы обсудим, как приложение и Direct3D вписывается в эту общую архитектуру и поймем, для чего же используются другие компоненты, чтобы обеспечить всесторонне представление о том, что мы на самом деле делаем при работе с API.
1.1.1 Графическая архитектура
Рисунок 1.1. Различные компоненты графических подсистем, используемых вместе с Direct3D
Общая графическая архитектура, используемая в Windows, показана на рисунке 1.1.
На этой диаграмме мы видим, что приложение находится на самом высоком уровне, и в основном взаимодействует с Direct3D.
В нижеследующем слое, среда выполнения Direct3D взаимодействует с драйвером видеооборудования пользовательского режима, для выполнения команд, сгенерированных приложением.
Затем драйвер взаимодействует с подсистемой DXGI, которая отвечает за выполнение низкоуровневой связи с драйвером режима ядра и управление доступными аппаратными ресурсами.
При таком множестве различных слоев и интерфейсов, может быть довольно сложно понять, за что каждый из них отвечает.
Тем не менее, мы кратко пробежим по каждому из слоев, чтобы получить понимание того, какие операции каждый из них выполняет.
Приложение контролирует содержимое, которое в конечном счете будет представлено пользователю в окне приложения.
Любые двумерные или трехмерные объекты, изображения, текст, анимация или другое высокоуровневое содержимое предоставляется приложением; оно, как правило, зависит от конкретных потребностей каждого приложения.
Direct3D предоставляет набор API-функций, которые можно использовать для преобразования высокоуровневого содержимого приложения в формат, который может быть интерпретирован драйвером пользовательского режима.
Содержимое, требуемое приложением, должно быть отформатировано в соответствии с правилами Direct3D.
Для этого используется не только фактическое форматирование данных, но также последовательность вызовов функций.
Пока приложение следует правилам использования Direct3D, оно может быть уверено, что выполняется внутри графической архитектуры.
После того, как Direct3D получает ряд вызовов функций из приложения, он начинает взаимодействовать с драйвером пользовательского режима, для получения команд, которые будут выполняются на GPU.
Результаты этих действий, передаются в интерфейс DXGI для манипулирования содержимым аппаратных ресурсов.
DXGI обрабатывает аппаратные интерфейсы низкого уровня, например, предоставляя интерфейс "адаптер" для каждой видеокарты, установленной в компьютере.
И именно DXGI обеспечивает доступ к так называемым цепочкам свопинга, инкапсулирующим фактические буферы, которые могут использоваться для выводимого содержимого в окне.
Хотя это и не показано на рисунке 1.1, но вполне вероятно, что несколько приложений одновременно будут использовать среду выполнения Direct3D.
Одно из преимуществ новой архитектуры графических драйверов Windows WDDM состоит в том, что видеоресурсы являются виртуальными и общими для всех приложений.
Приложения не должны волноваться о получении доступа к GPU, так как он доступен для всех приложений одновременно.
Конечно, когда пользователь выполняет очень графически интенсивные операции, например, играет в next-gen игры, то, скорее всего, будет запущено меньше приложений, нагружающих графический процессор, и, следовательно, больше его вычислительной мощности могут быть направлены для игры.
Эта архитектура драйверов отлична от использовавшейся в Windows XP (XPDM), которая не виртуализирует доступ к GPU явно.
1.1.2 Преимущества абстракций
Поскольку приложение взаимодействует с API Direct3D, а не напрямую с драйвером, ему нужно научиться правилам взаимодействия только с одним API для получения желаемых выходных данных вместо того, чтобы адаптироваться ко всем различным устройствам, которые пользователь может установить.
Это перекладывает бремя создания единой системы рендеринга, с которой необходимо взаимодействовать, на проиводителей видеокарт – они должны придерживаться стандарта Direct3D, в отличие от приложений, которые пытаются реализовать свою собственную "стандартную" систему рендеринга.
Видеосистема современных компьютеров, как правило, содержит специализированное оборудование, предназначенное для выполнения графических операций.
Тем не менее, вполне возможно, что на компьютере начального уровня не установлено Direct3D-совместимое оборудование, или оно поддерживает лишь часть требуемых возможностей для конкретного приложения.
К счастью, Direct3D 11 предоставляет программный драйвер, которое может использоваться при отсутствии Direct3D-совместимого оборудования (вплоть до уровня функций Direct3D 10.1).
Установлено такое аппаратное обеспечение или нет, этот факт полностью абстрагирован от разработчика с помощью Direct3D.
Обе эти ситуации приносят большую пользу разработчику.
Пока приложение правильно взаимодействовует с Direct3D 11, оно будет иметь доступ к стандартизированной системе рендеринга, а также поддержке всеми устройствами, присутствующими в системе, независимо от того, являются ли они они аппаратными или программными.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется
Переведено на Нотабеноиде
http://notabenoid.org/book/53905/233714
Переводчики: alex_pakh
Настройки
Готово:
