Поделиться через


API графики в Windows

Windows Vista включает поддержку совершенно новой модели драйвера дисплея, которая представляет собой основную редакцию в проектировании видео драйверов с момента внедрения модели драйвера Windows (WDM) для Windows 98. Эта переработанная модель отражает эволюцию видео аппаратного обеспечения от мира двухмерных операций растровых операций и приложений GDI до трехмерных игр с графическим оборудованием фиксированной функции и, наконец, до современной программируемой графической единицы обработки (GPU), которая поддерживает широкий спектр высокопроизводительных графических приложений. Windows 7 и Windows 8 создаются в графической инфраструктуре Windows Vista, предоставляя дополнительные графические функции и API. В этой статье рассматриваются функции графики Windows и API.

Общие сведения

Основной API для программирования графики с ранних дней Windows был графическим интерфейсом устройств (GDI). Этот API был разработан для обработки многочисленных 2D-выходных устройств, и он сформировал основу для пользовательского интерфейса Windows. DirectDraw и Direct3D были представлены в качестве альтернативных API для поддержки полноэкранных игр и трехмерной отрисовки в качестве расширений к существующему оборудованию времени. Взаимодействие с GDI было сложным. Эффективное взаимодействие традиционных элементов GDI с элементами Direct3D было ограничено этой структурой. Версия WDM Windows XP, известная как XPDM, отражает параллельный характер GDI и Direct3D (см. рис. 1).

Рисунок 1. Графические API в Windows XP

xpdm

На протяжении многих лет мощность трехмерных видеокарточек резко выросла до точки, где подавляющее большинство оборудования посвящено этой функции. Новая модель драйвера Windows Display Driver Model (WDDM) позволяет gpu и Direct3D на передний план, что позволяет создавать совершенно новый интерфейс, трехмерный рабочий стол, который легко сочетает 2D-мир GDI с мощностью современных программируемых GPU. С помощью WDDM видео оборудование полностью управляется Direct3D, а все остальные графические интерфейсы взаимодействуют с видео оборудованием с помощью новой модели драйвера Direct3D (см. рис. 2).

Рисунок 2. Api графики в Windows Vista

wddm

Дополнительные сведения о WDDM см . в руководстве по проектированию модели драйвера WDDM в Windows Vista.

Direct3D 9

Версия 9 DirectX была впервые выпущена для Windows в 2002 году с последующими обновлениями в 2003 и 2004 годах. Этот API представляет десятилетие эволюции технологий DirectX, введение более мощных моделей программирования шейдеров для Direct3D и зрелость, поддерживаемая тысячами названий доставки. Direct3D 9 является основным графическим интерфейсом в Windows Vista. Он остается идеальным API для написания трехмерных игр и приложений, которые должны работать в широком спектре существующих выпусков оборудования и Windows. Сведения о новой модели драйверов скрыты от приложений с помощью интерфейсов Direct3D 9, но за кулисами операционной системы используются все новые возможности для обеспечения истинной многозадачности GPU, более эффективного управления ресурсами и надежной производительности.

Чтобы обеспечить полную совместимость со старыми версиями Windows, некоторые причуды старой модели драйвера должны эмулироваться даже с новой моделью драйвера для отображения Windows Vista. Например, когда полноэкранное приложение теряет фокус, он должен предположить, что он потерял все ресурсы в памяти видео (VRAM) и перезагрузить их, созданные как неуправляемые ресурсы, даже если новая модель драйвера обрабатывает ресурсы прозрачно, не вытесняя их из контекста устройства. Даже концепция управляемого типа ресурсов и типа ресурсов по умолчанию зависит от старой модели драйвера. Другим примером является ожидание сбоя при выделении неуправляемых (по умолчанию пулов) ресурсов, превышающих доступное количество виртуальных кадров, даже если новая модель драйвера может обеспечить почти неограниченное количество виртуальной памяти видео. Из-за этих требований приложения Direct3D, работающие в Windows Vista, по-прежнему получат эти условия ошибки. Таким образом, они ограничены в их способности использовать базовые интерфейсы Direct3D 9 для полного использования некоторых функций новой модели драйверов.

В то время как новые системы доставки с Windows Vista будут включать видеокарты с драйверами WDDM, а новые драйверы для ряда популярных видеокарт включены в поле, Windows Vista продолжает поддерживать возможность использования старых драйверов XPDM для обновлений и корпоративных выпусков. В системах, использующих старую модель драйвера, необходимо использовать Direct3D 9 и более старые интерфейсы, а операция графической системы очень похожа на систему Windows XP (рис. 1). WDDM требуется для приложений для использования Direct3D 9Ex, Direct3D 10 и более поздних версий.

Direct3D 9Ex

Интерфейс Direct3D 9Ex предоставляет доступ к небольшому расширению стандартного API Direct3D 9, который предоставляет виртуализированное выделение ресурсов, новую семантику потерянного устройства и некоторые другие новые функции, доступные во время работы в Windows Vista. Создавая этот расширенный объект, API Direct3D 9 использует новую семантику, поэтому приложению требуется использовать другую логику (и, следовательно, различные пути кода) для создания ресурсов, управления и обработки ошибок для новых видов условий. Этот API доступен только в Windows Vista и требует драйверов WDDM. Так как Direct3D 9Ex использует отдельный путь к API и коду драйвера, чем Direct3D 9, поддержка этого API требует дополнительных тестовых вариантов для приложения.

Основной причиной создания нового API Direct3D 9Ex было разрешение полного доступа к новым возможностям WDDM при сохранении совместимости для существующих приложений Direct3D. Новые трехмерные настольные компьютеры и многие приложения windows Vista используют эту версию Direct3D 9, но они не работают при работе с более старыми драйверами XPDM. Так как API Direct3D 9Ex никогда не будет отображаться в более ранних версиях Windows из-за отсутствия поддержки WDDM, стандартные интерфейсы Direct3D 9 охватывают гораздо более широкий набор систем. Для высокопроизводительных приложений, которые могут воспользоваться следующим поколением видео аппаратного обеспечения, полностью новая версия 10 Direct3D предоставляет множество новых возможностей, не предоставляемых Direct3D 9Ex. В результате для игр и большинства других приложений, Direct3D 9 или Direct3D 10 является рекомендуемыми API.

Примечание.

Пакет SDK DirectX не предоставляет примеры, заголовки или библиотеки для интерфейса Direct3D 9Ex. Дополнительные сведения о Direct3D 9Ex см . в разделе DirectX для Windows Vista.

Direct3D 10

Чтобы полностью реализовать потенциал новой модели драйвера Windows Vista и оборудования следующего поколения, была создана полностью новая версия API Direct3D. Хотя WDDM устраняет некоторые ограничения производительности в существующей графической системе, Direct3D 10 продолжается путем удаления узких мест конструктора в существующем API Direct3D и значительно упрощает задачу программирования GPU.

Новый API полностью устраняет все, кроме нескольких аспектов фиксированной функции, заменяя их программируемыми конструкциями и значительно упрощая внутреннюю реализацию. Сотни битов возможностей в предыдущих версиях Direct3D были полностью устранены и заменены хорошо определенным и инклюзивным набором функциональных возможностей, которые имеют только несколько дополнительных сценариев использования для определенных форматов ресурсов. Создание и проверка ресурсов с большим объемом ЦП теперь имеют явную семантику в новом API. Это обеспечивает гораздо более прогнозируемую производительность и значительно снижает затраты на рисование. Ресурсы можно перенастроить в несколько форм, чтобы обеспечить эффективное использование на различных этапах, а набор функций накладывает гораздо меньше ограничений на сценарии использования для форматов. Существуют также новые форматы текстур сжатой обычной картой.

В новом API константы шейдера и состояние устройства являются явными ресурсами, что позволяет гораздо эффективнее кэширования на оборудовании и значительно упрощенной проверке драйверов. Программируемая модель шейдера была унифицирована как в вершинах, так и в шейдерах пикселей, а также была более четко выражена с четко определенной вычислительной моделью и набором операторов. Кроме того, добавлен новый этап шейдера геометрии для работы с примитивами после этапа шейдера вершин. Результаты работы GPU на этапах вершины и геометрического шейдера конвейера можно передавать в видеозагрузку для повторного использования, что позволяет обеспечить возможность чрезвычайно сложных многопроходных операций GPU с минимальным взаимодействием С ЦП.

Все эти улучшения позволяют технологии графики следующего поколения и расширяют возможности приложений для выключения нагрузки на GPU. Разгрузка позволяет более сложные методы обработки символов на основе GPU, ускоренные методы трансформации, создание теневого тома и экструзии, частицы и физические системы, которые полностью основаны на GPU, более сложные материалы, объединенные в эффективные крупные пакеты, процедурные детализированные, сопоставление перемещения с помощью лучей в режиме реального времени, однопроходное создание куб-карты и многое другое— при освобождении ресурсов ЦП для более сложных приложений.

Чтобы обеспечить этот уровень инноваций в Direct3D 10, старое оборудование нельзя выразить как частичную реализацию нового интерфейса. Видеокарта может поддерживать все новые функции или не является картой Direct3D 10. Таким образом, в то время как Direct3D 9 может управлять оборудованием DirectX7 с множеством отсутствующих битов возможностей и ограничений использования, Direct3D 10 работает только на новом поколении видеокарт. Чтобы приложение поддерживало старое видео оборудование, оно также должно поддерживать интерфейсы Direct3D 9. Будущие версии Direct3D будут создаваться на основе версии 10, расширяя его до новых версий API, обеспечивая строгий супермножество функций Direct3D 10.

Дополнительные сведения о Direct3D 10 см. в разделе Direct3D 10.

Direct3D 10.1

Пакет обновления 1 (SP1) Windows Vista расширяет API Direct3D 10 с Direct3D 10.1, который добавляет дополнительные интерфейсы и дополнительную модель шейдера для поддержки новых аппаратных функций видеоадаптеров, поддерживающих Direct3D 10.1. Все оборудование, которое поддерживает Direct3D 10.1, также полностью поддерживает все функции Direct3D 10, а разработчики игр могут использовать дополнительные функции Direct3D 10.1 при наличии.

Примечание.

Direct3D 10.1 — это графический API, используемый рабочим столом Windows 7.

 

Примечание.

Обновление Windows 7 и Windows Vista добавляют поддержку для уровней функций DXGI 1.1, 10level9 и устройства WARP10 в существующий API Direct3D 10.1.

 

Direct3D 11

Windows 7 поддерживает новую версию Direct3D, Direct3D 11, основанную на проектировании API Direct3D 10.1. Новые функции API включают многопоточное отрисовка и создание ресурсов, вычисление шейдера, поддержку уровней функций 10level9 и устройство отрисовки программного обеспечения WARP10, а также новые аппаратные функции Класса Direct3D 11, такие как тесселлирование с помощью шейдеров корпуса и доменных шейдеров, форматов сжатия текстур BC6H и BC7, шейдер модели 5.0 и динамической компоновки шейдеров. Новый API может использовать существующие видеокарты класса Direct3D 10 и 10.1, некоторые карточки Direct3D 9 через уровни функций 10level9 с ограниченной поддержкой функций, а также последние версии видеокарточек класса Direct3D 11.

Помимо API Direct3D 11, Windows 7 включает DXGI 1.1, Direct2D, DirectWrite и поддержку драйверов WDDM 1.1.

Примечание.

Api Direct3D 11 и связанные с ним API также доступны в качестве обновления до Windows Vista (см . инструкции по установке последней версии DirectX).

 

Direct3D 11.1

Windows 8 расширяет API Direct3D 11 с Direct3D 11.1. Direct3D 11.1 поддерживает все существующее оборудование , которое поддерживает уровни 11, 10_x и поддержку 9_x, а также новый уровень компонентов 11_1.

Помимо API Direct3D 11.1, Windows 8 включает DXGI 1.2, контексты устройств Direct2D и поддержку драйверов WDDM 1.2.

Примечание.

Если вы хотите, чтобы приложения Магазина Windows программировали трехмерную графику с помощью DirectX, вы можете использовать API Direct3D 11.1. Дополнительные сведения о программировании трехмерной графики с помощью DirectX см. в статье "Общие сведения о трехмерной графике с помощью DirectX".

 

Обновление платформы для Windows 7. Для API Direct3D 11.1 в Windows 7 или Windows Server 2008 R2 доступна частичная поддержка с установленным обновлением платформы для Windows 7. Дополнительные сведения об обновлении платформы для Windows 7 см. в разделе "Обновление платформы" для Windows 7.

OpenGL

Windows Vista, Windows 7 и Windows 8 обеспечивают ту же поддержку, что и Windows XP для OpenGL, что позволяет производить видеоадаптер для предоставления устанавливаемого драйвера клиента (ICD) для OpenGL, который обеспечивает аппаратно-ускоренную поддержку. Обратите внимание, что для полной поддержки Windows Vista или Windows 7 или Windows 8 требуются более новые версии таких ICD. Если ICD не установлен, в большинстве случаев система будет возвращаться на уровень программного обеспечения OpenGL версии 1.1.

Совместимость приложений, GDI и более старые версии Direct3D

Графические системы Windows Vista, Windows 7 и Windows 8 предназначены для поддержки широкого спектра сценариев оборудования и использования, чтобы обеспечить поддержку существующих систем. Существующие графические интерфейсы, такие как GDI, GDI+, и более старые версии Direct3D, продолжают работать в Windows Vista и Windows 7, но внутренне перенаправляются по возможности. Это означает, что большинство существующих приложений Windows будут продолжать работать.

Windows Vista, Windows 7 и Windows 8 продолжают поддерживать те же интерфейсы Direct3D и DirectDraw, что и Windows XP, обратно в версию 3 DirectX (за исключением режима хранения Direct3D, который был удален). Так же, как и в Windows XP Professional x64 Edition, 64-разрядные собственные приложения в более новых версиях Windows ограничены Direct3D9, DirectDraw7 или более новыми интерфейсами. Высокопроизводительные приложения должны использовать Direct3D 9 или более поздней версии, чтобы обеспечить их ближайшее соответствие возможностям оборудования.

Рекомендации

При выборе API для графического приложения следует учитывать следующие рекомендации.

  • Используйте Direct3D 9, если приложение должно поддерживать Windows XP или более раннюю версию Windows.
  • Используйте Direct3D 9, если вы хотите поддерживать Windows Vista или Windows 7 с драйверами XPDM. Для систем Windows Vista или Windows 7, которые не имеют оборудования Direct3D 10 или более эффективного видео, можно использовать существующий путь кода Windows XP Direct3D 9 или использовать уровни функций 10level9 через API Direct3D 10.1 или Direct3D 11.
  • Используйте Direct3D 11, чтобы воспользоваться преимуществами следующего поколения видеоустройства в Windows Vista, Windows 7 и Windows 8. Приложения Магазина Windows должны использовать Direct3D 11 или более поздней версии.