Чем отличается directx 9 от 11
DirectX обеспечивает стабильную работу аппаратных устройств компьютера, в том числе видеокарты – API компании Microsoft влияет на индустрию геймдева самым прямым образом, во многом задавая стандарты разработки видеоигр. Программное обеспечение распространяется бесплатно. Для раскрытия потенциала современных видеокарт и повышения производительности системы в играх рекомендуется установить последнюю версию DirectX, которая совместима с операционной системой, установленной на вашем ПК.
Замена DirectSound на XAudio2 (и фоновый звук)
DirectSound не поддерживается для UWP:
- Используйте XAudio2, чтобы добавить в игру звуковые эффекты.
Сопоставление форматов поверхностей
Используйте следующую таблицу, чтобы преобразовать форматы Direct3D 9 в форматы DXGI.
Примечание . Используйте. r свиззле в шейдере для дублирования красного в другие компоненты, чтобы получить поведение Direct3D 9.
Примечание . Используйте свиззле. рррг в шейдере для дублирования красного цвета и перемещения зеленого цвета в альфа-компоненты для получения поведения Direct3D 9.
Примечание . В Direct3D 9 данные были масштабированы с помощью 255.0 f, но это может быть обработано в шейдере.
Примечание . В Direct3D 9 данные были масштабированы с помощью 255.0 f, но это может быть обработано в шейдере.
Примечание . DXT1 и DXT2 одинаковы с точки зрения API и оборудования. Единственная разница заключается в том, использовалось ли предварительно умноженное альфа-значение, которое может отследить приложение и которому не требуется отдельный формат.
Примечание . DXT3 и DXT4 одинаковы с точки зрения API и оборудования. Единственная разница заключается в том, использовалось ли предварительно умноженное альфа-значение, которое может отследить приложение и которому не требуется отдельный формат.
Примечание . Используйте. r свиззле в шейдере для дублирования красного в другие компоненты, чтобы получить поведение D3D9.
Примечание . Шейдер получает значения UINT, но если требуется целочисленный плавающий стиль Direct3D 9 (0,0 f, 1,0 f. 255. f), значение UINT можно просто преобразовать в значение float32 в шейдере.
Примечание . Шейдер получает значения Синт, но если требуется целочисленное число с плавающей запятой в стиле Direct3D 9, то параметр Синт можно просто преобразовать в тип float32 в шейдере.
Примечание . Шейдер получает значения Синт, но если требуется целочисленное число с плавающей запятой в стиле Direct3D 9, то параметр Синт можно просто преобразовать в тип float32 в шейдере.
замена директинпут интерфейсами api ксинпут и среда выполнения Windows
DirectInput не поддерживается для UWP:
- Используйте обратные вызовы событий ввода CoreWindow для мыши, клавиатуры и сенсорного ввода.
- Используйте XInput 1.4 для поддержки игрового устройства управления (и его гарнитуры). Если вы используете общую базу кода для рабочего стола и UWP, вы найдете сведения об обратной совместимости в разделе о версиях XInput.
- Подпишитесь на события EdgeGesture, если вашей игре нужно использовать панель приложения.
Переход с Direct2D 9 на Direct2D 11
Direct2D (Windows) по-прежнему является важной частью графики DirectX и Windows. Вы все еще можете использовать Direct2D для отрисовки двухмерных игр и наложений (HUD) на Direct3D.
Direct2D работает на базе Direct3D; двухмерные игры можно реализовать с помощью любого API. Например, при реализации двухмерной игры с помощью Direct3D можно использовать ортогональную проекцию, установить значения Z для управления порядком отрисовки примитивов и использовать построитель текстуры для добавления специальных эффектов.
Так как Direct2D основан на Direct3D, он также использует DXGI и контексты устройств. См. раздел Обзор API Direct2D.
API DirectWrite добавляет поддержку отформатированного текста с помощью Direct2D. См. раздел Введение в DirectWrite.
Замена XNAMath и D3DXMath
Код, использующий XNAMath (или D3DXMath), необходимо перенести на DirectXMath. DirectXMath включает типы, переносимые на x86, x64 и ARM. См. раздел Перенос кода из библиотеки XNA Math.
Обратите внимание, что типы чисел с плавающей точкой DirectXMath удобно использовать с шейдерами. Например, XMFLOAT4 и XMFLOAT4X4 обеспечивают удобное выравнивание данных для буферов констант.
DirectX 11
В 2009 году на рынок выходит новая версия Windows под номером 7, а с ней и DirectX 11. Принципиальным отличием данной версии от более старых стало:
- Поток видеоданных стал лучше обрабатываться за счет увеличения их числа.
- Взаимодействие с многоядерными видеокартами стал на порядок лучше.
- Увеличился КПД в целом средних и слабых видеокарт, на одних и тех же настройках видеокарта стала с одной и той же задачей справляться лучше, без лишнего нагрева и усиления работы кулера.
Вышеописанные процессы стали важны для разработчиков, а для игроков это вылилось в улучшение картинки и детализации.
Ресурсы устройств и представления ресурсов
Direct3D 11 поддерживает дополнительный уровень полиморфизма для ресурсов видеопамяти — для представлений. По сути там, где раньше был один объект Direct3D 9 для текстуры, теперь есть два объекта: ресурс текстуры, где хранятся данные, и представление ресурсов, которое определяет способ использования представления для отрисовки. Представление на основе ресурса позволяет использовать ресурс для определенной цели. Например, ресурс двухмерной текстуры создается в форме ID3D11Texture2D, затем на его основе создается представление ресурсов шейдера (ID3D11ShaderResourceView), и его можно использовать как текстуру в шейдере. Представление однобуферной прорисовки (ID3D11RenderTargetView) можно также создать на основе того же ресурса двухмерной текстуры и использовать его как поверхность рисования. В другом примере те же пиксельные данные представлены в двух разных форматах пикселей с использованием двух отдельных представлений на основе одного ресурса текстуры.
Основной ресурс необходимо создать со свойствами, совместимыми с типом представлений, которые будут созданы из него. Например, если к поверхности применяется ID3D11RenderTargetView , эта поверхность создается с флагом D3D11_BIND_RENDER_TARGET . Поверхность также должна иметь формат поверхности DXGI, совместимый с отрисовкой (см. DXGI_FORMAT).
В представлениях ресурсов используется DXGI_FORMATое значение перечисления для указания формата пикселей. Не все D3DFMT поддерживаются в качестве DXGI_FORMAT. Например, в DXGI отсутствует формат 24 RGB, эквивалентный D3DFMT_R8G8B8. Также не BGR эквиваленты для каждого формата RGB (DXGI_FORMAT_R10G10B10A2_UNORM эквивалентен D3DFMT_A2B10G10R10, но нет прямого эквивалента D3DFMT_A2R10G10B10). Во время сборки следует преобразовать содержимое в этих устаревших форматах в поддерживаемые форматы. Полный список форматов DXGI см. в разделе Перечисление DXGI_FORMAT .
Ресурсы устройств Direct3D (и представления ресурсов) создаются до обработки сцены. Контексты устройств используются для настройки цепочки отрисовки, как описано ниже.
Сопоставление функций
Используйте следующую таблицу, чтобы преобразовать код из Direct3D 9 в Direct3D 11. Это также поможет понять разницу между устройством и контекстом устройства.
Этапы графического конвейера описаны в статье Графический конвейер.
Вызовите IDXGISwapChain1::Present1 с установленным флагом DXGI_PRESENT_TEST.
Нет прямого эквивалента
Используйте стандартные API курсора.
LOST (состояние устройства) и POOL_MANAGED более не существуют. IDXGISwapChain1::Present1 может завершиться сбоем и возвратить значение DXGI_ERROR_DEVICE_REMOVED.
Конвейер фиксированной функции устарел.
Биты возможностей заменяются уровнями функций. Только некоторые сценарии использования форматов и компонентов являются необязательными для любого отдельно взятого уровня компонентов. Это можно проверить с помощью ID3D11Device::CheckFeatureSupport и ID3D11Device::CheckFormatSupport.
Замена устаревших вспомогательных библиотек
D3DX и DXUT являются нерекомендуемыми и не могут использоваться играми UWP. Эти вспомогательные библиотеки предоставляли ресурсы для таких задач, как загрузка текстуры и сетки.
- В пошаговом руководстве Простой перенос из Direct3D 9 на UWP показано, как настроить окно, инициализировать Direct3D и выполнить базовую трехмерную отрисовку.
- В пошаговом руководстве Простая игра UWP с использованием DirectX демонстрируются стандартные задачи, возникающие при программировании игры, включая графику, загрузку файлов, пользовательский интерфейс, элементы управления и звук.
- Сообщество DirectX Tool Kit (Набор инструментов DirectX) предлагает вспомогательные классы для использования с Direct3D 11 и приложениями UWP.
DirectX 9 VS DirectX 11
В DirectX 11 нагрузка на GPU многоядерных видеокарт распределяется равномерно. Производительность видеоплат класса middle-end и low-end значительно увеличилась, если сравнивать с девятой версией API, при условии запуска игры с аналогичными настройками графики. В играх появились новые спецэффекты, в целом, качество графики значительно улучшилось, в том числе и за счет поддержки шейдеров 5.0 (В DX9 только 2.0). Также разработчики позаботились о совместимости мультимедйиного контента, включая видеоигры, с форматом 16:9, который окончательно вытеснил с рынка устаревшие форм-факторы 5:4 и 4:3.
К сожалению, DirectX 11 имеет определенные недостатки, которых нет у девятой версии. Во-первых, повысилось энергопотребление при выполнении вычислительных операций, которые не связаны с обработкой трехмерной графики. Во-вторых, пользователям пришлось переходить на Windows 7 – пакет DirectX 11 несовместим с более ранними версиями ОС. Кроме того, в некоторых играх отмечалось снижение четкости текстур при максимально высоком уровне сглаживания, например, в Dark Souls 2 (на некоторых видеокартах). Впрочем, на фоне преимуществ DirectX 11 недостатки кажутся несущественными.
DirectX 9
DirectX 9 появился в 2002 году и стал по-своему революционным, разработчики вложили в него поддержку шейдеров, что в итоге дало великолепную графику для своего времени. Ярким прим DirectX ером тому может служить игра Need For Speed, выпущенная в 2003 году, где пользователь могли видеть мельчайшие блики на стекле автомобиля, наслаждаться вылетающими из-под колес кусками грязи и снега, а также удивлялись детализации окружающего мира. Все разработчики делали свои игры с учетом этой версии DirectX и так продолжалось до 2006 года, пока вместе с Windows Vista не появился DirectX версии 10.
Интересным фактом стало то, что данная версия не получила широкого распространения, так как сама операционка для которой она было создана не пошла в массы. Многие геймеры и просто пользователи предпочли остаться на более старой ОС и, соответственно, необходимости в обновлении пакета DirectX до 10 версии не было.
Перенос программ-шейдеров с FX на HLSL
Мы не рекомендуем использовать библиотеку подпрограмм D3DX (D3DX 9, D3DX 10 и D3DX 11), включая эффекты, для UWP. Все игры UWP с DirectX реализует графический конвейер с помощью HLSL без эффектов.
Visual Studio по-прежнему использует FXC для компиляции объектов шейдера. Шейдеры игр UWP компилируются заранее. Байт-код загружается во время выполнения, затем каждый ресурс шейдера привязывается к графическому конвейеру во время соответствующего этапа отрисовки. Шейдеры необходимо переместить в их собственные HLSL-файлы, а методы отрисовки следует реализовать в коде C++.
Чтобы взглянуть на загрузку ресурсов шейдера, см. раздел Простое портирование с Direct3D 9 на UWP.
В Direct3D 11 появилась модель шейдера 5, для которой требуется уровень функций Direct3D 11_0 (или выше). См. раздел Компоненты модели 5 шейдера HLSL для Direct3D 11.
Что такое DirectX?
DirectX – это набор команд для Windows, которые позволяют решать две задачи. Пользователи за счет работы этих библиотек получают возможность насладиться всей вычислительной способностью своего ПК, а именно великолепными спецэффектами, для разработчиков – это возможность получить все привилегии работы с видеокартой на аппаратном уровне. Иными словами DirectX необходим для создания реалистичной и эффективной картинки в играх.
Данный пакет команд появился в 1994 году, когда компания Microsoft готовилась выпустить на рынок новую версию ОС – Windows 95, однако, ее коммерческий потенциал был весьма сомнителен, так как из-за защиты и оптимизации работы многие разработчики не могли получить полноценный доступ к видеокарте, а значит использовать все ее ресурсы. Именно тогда родилась идеи написать пакет приложений способных дать такую возможность программистам. Это вывело удобство работы с данной ОС на принципиальной новый уровень, который стал конкурентоспособным с написанием игр под DOS.
В настоящее время существует несколько версий DirectX, все они работоспособные и по большому счету игроки могут пользоваться той, которая поддерживается их видеокартой. Как правило, новая версия DirectX выпускается совместно с новыми играми и влечет за собой замену видеокарты на более мощную и современную. Однако, стоит ли новая версия таких затрат или можно обойтись старым железом. Если говорить коротко, то новая версия пакета всегда дает программистам новые возможности, что для пользователя выливается в более красивые спецэффекты. Стоит сразу отметить, что отсутствие DirectX может иметь два последствия:
- Игра будет без каких-либо спецэффектов.
- Игра не запустится, а пользователь будет видеть на экране ошибку.
Стоит помнить, что DirectX устанавливается непосредственно с ОС, поэтому не быть ее попросту не может, если она не была удалена принудительно. Однако стандартный пакет несет лишь минимум возможностей и для достижения более высокого качества картинки и использования всех ресурсов видеокарты, DirectX необходимо обновить. Как правило, при установке игры пользователю сразу предлагает установить DirectX, но можно вполне это сделать и самостоятельно скачав с официального сайта Microsoft.
Устройства и контекст устройства
Устройство Direct3D 11 представляет собой виртуализованный графический адаптер. Оно используется для создания ресурсов в видеопамяти, например для отправки текстур графическому процессору (GPU), создания представлений на основе ресурсов текстуры и цепочек буферов и для создания дискретизаторов текстур. Полный перечень способов использования интерфейса устройства Direct3D 11 приведен в разделах ID3D11Device и ID3D11Device1.
Контекст устройства Direct3D 11 используется для настройки состояния конвейера и создания команд отрисовки. Например, цепочка отрисовки Direct3D 11 использует контекст устройства для настройки цепочки отрисовки и рисования сцены (см. ниже). Контекст устройства применяется для доступа к видеопамяти (сопоставления), которую используют ресурсы устройства Direct3D, а также для обновления данных подресурсов, например данных буфера констант. Полный перечень способов использования контекста устройства Direct3D 11 приведен в разделах ID3D11DeviceContext и ID3D11DeviceContext1. Обратите внимание, что большинство наших образцов используют мгновенный контекст для обработки напрямую на устройстве, но Direct3D 11 также поддерживает и отложенные контексты устройств, которые применяются преимущественно для многопоточности.
Чтобы получить маркер устройства и маркер контекста устройства, в Direct3D 11 вызывается D3D11CreateDevice. В этом методе также запрашивается определенный набор аппаратных функций и извлекаются сведения об уровнях компонентов Direct3D, которые поддерживает графический адаптер. Дополнительные сведения об устройствах, контекстах устройств и потоковой модели см. в разделе Вводные сведения об устройстве в Direct3D 11.
DirectX 11
Интерфейс DirectX 11 был представлен в 2009 году вместе с операционной системой Windows 7 и тут же «принят на вооружение» как производителями видеокарт, так и разработчиками компьютерных игр. Причина такой популярности очень проста – многопоточность.
Одиннадцатое поколение принесло расширенную поддержку многопоточных вычислений. Теперь видеоданные разделялись на несколько отдельных потоков, каждый из которых обрабатывался на отдельном ядре. Благодаря этому взаимодействие с многоядерными видеокартами стало намного лучше.
После реализации этого интерфейса многоядерные видеокарты стали производиться чаще и активнее. Например, у NVIDIA в последних моделях графических ускорителей вычислительный блок может состоять из 3-4 тысяч ядер CUDA! Благодаря этому скорость обработки визуальной информации увеличивается многократно.
В целом, главными преимуществами одиннадцатой версии интерфейса стали:
Поддержка многопоточности на многоядерных графических ускорителях;
Увеличение КПД одноядерных и старых видеокарт;
Снижение интенсивности нагрева графических ускорителей.
Кроме того, это API принесло нативную поддержку «вытянутых» мониторов формата 16:9. Благодаря этому внешний вид операционной системы в целом и рабочего стола в частности стал намного привлекательнее. Иконки перестали наезжать друг на друга!
Однако для работы DX11 требуется больше ресурсов. Поэтому в некоторых случаях на старых играх производительность с DX11 будет ниже, чем с DX9 – если, конечно, игра позволяет выбрать интерфейс, через который будет взаимодействовать.
Достоинства
Повышенная производительность при использовании многоядерных видеокарт;
Повышение КПД при работе со старыми и слабыми графическими ускорителями;
Поддержка новых визуальных эффектов.
Недостатки
Повышенное потребление ресурсов компьютера, не связанных с графической подсистемой – например, процессора или оперативной памяти;
Отсутствие обратной совместимости – предыдущие версии «винды» не поддерживают одиннадцатое поколение даже после установки распространяемого пакета.
Преемником DX11 стал DirectX 12. Этот интерфейс был представлен вместе с операционной системой Windows 10 в 2005 году и принёс поддержку шейдерной модели 5.1, которая обеспечивала ещё большую реалистичность при отображении текстур, теней и свечения.
Базовые функции API
В Direct3D 9, прежде чем использовать интерфейс для взаимодействия с API Direct3D, его приходилось создавать. В играх UWP с использованием Direct3D 11 вы вызываете статическую функцию D3D11CreateDevice для создания устройства и контекста устройства.
Контекст устройства и цепочка отрисовки
В Direct3D 9 и Direct3D 10.x был единственный объект устройства Direct3D, который управлял созданием ресурсов, состоянием и рисованием. В Direct3D 11 интерфейс устройства Direct3D также управляет созданием ресурсов, но для управления состоянием и операциями рисования используется контекст устройства Direct3D. Вот пример использования контекста устройства (интерфейса ID3D11DeviceContext1) для настройки цепочки отрисовки:
- Настройка и очистка представлений однобуферной прорисовки (и представления трафарета глубины)
- Настройка буфера вершин, буфера индексов и входного макета для этапа сборщика входных данных (этапа IA)
- Привязка вершинного и обычного построителей текстуры к конвейеру
- Привязка буферов констант к шейдерам
- Привязка представлений текстуры и дискретизаторов к построителю текстуры
- Рисование сцены
Когда вызван один из методов ID3D11DeviceContext::Draw, рисуется сцена в представлении однобуферной прорисовки. По завершении рисования адаптер DXGI используется для представления законченного кадра вызовом IDXGISwapChain1::Present1.
Уровни функций Direct3D
В Direct3D появился новый механизм определения аппаратной поддержки — уровни функций. Благодаря уровням функций становится проще узнать о возможностях графического адаптера, поскольку можно запросить четко определенный набор функций GPU. Например, на уровне функций 9_1 реализованы функции графических адаптеров Direct3D 9, включая Shader Model 2. x. Так как 9_1 является самым низким уровнем функций, можно рассчитывать, что все устройства поддерживают шейдер вершин и шейдер пикселей, которые были теми же этапами, что и программируемая модель шейдера Direct3D 9.
Ваша игра будет использовать D3D11CreateDevice для создания устройства и контекста устройства Direct3D. Вызывая эту функцию, вы предоставляете список уровней функций, которые поддерживает ваша игра. На основе этого списка функция вернет самый высокий поддерживаемый уровень функций. Например, если в игре можно использовать текстуры BC4/BC5 (компонент оборудования DirectX 10), в список поддерживаемых функций необходимо включить по крайней мере 9_1 и 10_0. Если игра выполняется на устройствах с DirectX 9 и BC4/BC5, то D3D11CreateDevice вернет 9_1. Затем ваша игра может переключиться на другой формат текстур (и более мелкие текстуры).
Если вы решили расширить игру Direct3D 9, добавив поддержку более высоких уровней функций Direct3D, лучше сначала закончить перенос существующего графического кода Direct3D 9. После переноса игры в Direct3D 11 будет проще добавить дополнительные пути отрисовки с более сложной графикой.
Подробное объяснение поддержки уровней функций см. в разделе Уровни функций Direct3D. Полный перечень функций Direct3D 11 см. в разделах Функции Direct3D 11 и Функции Direct3D 11.1.
Использование Microsoft Media Foundation вместо DirectShow
DirectShow больше не является частью API DirectX (или API Windows). Microsoft Media Foundation предоставляет видеосодержимое интерфейсу Direct3D посредством общих поверхностей. См. раздел API видео Direct3D 11.
Инфраструктура устройства, буферы кадров и представления однобуферной прорисовки
В Direct3D 11 для настройки адаптера устройств и конфигурации оборудования применяется API DirectX Graphics Infrastructure (DXGI) с использованием COM-интерфейсов IDXGIAdapter и IDXGIDevice1. Буферы и другие ресурсы окон (видимые и закадровые) создаются и настраиваются при помощи определенных интерфейсов DXGI. Реализация шаблона фабрики IDXGIFactory2 получает ресурсы DXGI, такие как буфер кадров. Поскольку DXGI принадлежит цепочка буферов, интерфейс DXGI используется для представления кадров на экране. Дополнительные сведения об этом см. в IDXGISwapChain1.
Используйте IDXGIFactory2 для создания цепочки буферов, совместимой с вашей игрой. Необходимо создать цепочку буферов не для HWND, а для основного окна или для композиции (взаимодействие с XAML).
Сопоставление Direct3D 9 и API DirectX 11
Direct3D по-прежнему является основой графики DirectX, но после DirectX 9 изменились API.
- Для установки графических адаптеров используется Microsoft DirectX Graphics Infrastructure (DXGI). Используйте DXGI для выбора форматов буферов, создания цепочек буферов, представления кадров и создания общих ресурсов. См. общие сведения о DXGI.
- Контекст устройства Direct3D используется для установки состояния конвейера и генерирования команд отрисовки. Во многих наших примерах используется немедленный контекст для прямой отрисовки на устройстве. Direct3D 11 также поддерживает многопотоковую отрисовку, в этом случае используются отложенные контексты. См. раздел Введение в устройство в Direct3D 11.
- Некоторые компоненты устарели, наиболее заметно усовершенствован функциональный конвейер. См. раздел Устаревшие компоненты.
Замена DirectPlay на сетевой код
Microsoft DirectPlay устарел. Если ваша игра использует сетевые службы, вам нужно предоставить сетевой код, соответствующий требованиям сертификации UWP. Используйте следующие API:
Следующие статьи помогут вам добавить сетевые возможности и объявить поддержку сети в манифесте пакета приложения.
Обратите внимание, что все приложения UWP (включая игры) используют специфические типы фоновых задач для поддержки подключения, когда приложение приостановлено. Если вашей игре необходимо поддерживать подключенное состояние во время приостановки, см. раздел Основы работы в сети.
Уровни функций и программируемый конвейер
С момента появления Direct3D 9 оборудование непрерывно совершенствовалось, и в программируемый графический конвейер было добавлено несколько новых дополнительных этапов. Набор параметров для графического конвейера зависит от уровня функций Direct3D. Уровень функций 10.0 включает этап геометрического построителя текстуры с дополнительным потоковым выводом для многопроходной отрисовки на GPU. Уровень компонентов 11_0 включает шейдер поверхности и шейдер домена для использования с тесселяцией оборудования. Уровень компонентов 11_0 также включает полную поддержку шейдеров DirectCompute, а уровни функций 10. x включают поддержку ограниченного вида DirectCompute.
Все шейдеры написаны на языке HLSL с использованием профиля шейдеров, соответствующего уровню функций Direct3D. Профили шейдеров поддерживают обратную совместимость, поэтому Шейдер HLSL, компилируемый с помощью vs_4_0_level_9_1 или ps_4_0_level_9_1, будет работать на всех устройствах. Профили шейдеров не совместимы с предыдущими версиями, поэтому шейдер, скомпилированный с помощью vs_4_1, будет работать только на устройствах 10_1, 11_0 или 11_1 уровня компонентов.
В Direct3D 9 для управления константами шейдеров использовался общий массив с методами SetVertexShaderConstant и SetPixelShaderConstant. Direct3D 11 использует буферы констант, которые представляют собой ресурсы, аналогичные буферу вершин или буферу индексов. Буферы констант эффективно обновляются благодаря своей структуре. Вам не нужно размещать все константы шейдера в одном глобальном массиве. Вместо этого вы объединяете константы в логические группы и управляете ими при помощи одного или нескольких буферов констант. При переносе игры Direct3D 9 в Direct3D 11 запланируйте такую организацию буферов констант, чтобы можно было обновлять их соответствующим образом. Например, сгруппируйте константы шейдера, которые не обновляются с каждым кадром, в отдельный буфер констант. Тогда вам не придется постоянно отправлять эти данные графическому адаптеру вместе с более динамическими константами шейдера.
Примечание . Большинство приложений Direct3D 9 сделали широкое использование шейдеров, но иногда они используют устаревшее поведение фиксированной функции. Обратите внимание, что Direct3D 11 использует только программируемую модель шейдеров. Устаревшие компоненты Direct3D 9 с фиксированными функциями использовать не рекомендуется.
Прочитав этот раздел, вы поймете, как компоненты, которые использует ваша игра с Direct3D 9, будут перенесены в Direct3D 11 и на универсальную платформу Windows (UWP).
Дополнительные сведения о сопоставлении
- IDirect3DDevice9:: сеткурсорпоситион заменяется на сеткурсорпос.
- IDirect3DDevice9:: сеткурсорпропертиес заменяется на сеткурсор.
- IDirect3DDevice9:: сетиндицес заменяется ссылку ID3D11DeviceContext:: иасетиндексбуффер.
- IDirect3DDevice9:: сетрендертаржет заменяется ссылку ID3D11DeviceContext:: омсетрендертаржетс.
- IDirect3DDevice9:: сетсЦиссоррект заменяется ссылку ID3D11DeviceContext:: рссетсЦиссорректс.
- IDirect3DDevice9:: сетстреамсаурце заменяется ссылку ID3D11DeviceContext:: иасетвертексбуфферс.
- IDirect3DDevice9:: сетвертексдекларатион заменяется ссылку ID3D11DeviceContext:: иасетинпутлайаут.
- IDirect3DDevice9:: сетвиевпорт заменяется ссылку ID3D11DeviceContext:: рссетвиевпортс.
- IDirect3DDevice9:: шовкурсор заменяется на шовкурсор.
Управление аппаратным пандусом видеоадаптера с помощью IDirect3DDevice9:: сетгаммарамп заменяется Идксгиаутпут:: сетгаммаконтрол. См. раздел Использование гамма-коррекции.
IDirect3DDevice9::P роцессвертицес заменяется Stream-Output функциональными возможностями шейдеров Geometry. См. раздел Приступая к работе с этапом Stream-Output.
Метод IDirect3DDevice9:: сетклипплане для задания пользовательских клипов-плоскостей был заменен на семантику выходных данных шейдера HLSL SV_ClipDistance (см. семантику), доступна в VS_4_0 и выше или в новом атрибуте функции HLSL клиппланес (см. раздел Пользовательские ролики в оборудовании на уровне компонентов 9).
IDirect3DDevice9:: сетпалеттинтриес и IDirect3DDevice9:: сеткурренттекстурепалетте являются устаревшими. Замените их на шейдер пикселей, который ищет цвета в текстуре R8G8B8A8 256x1.
Не рекомендуется использовать функции тесселяции с фиксированными функциями, такие как дравректпатч, дравтрипатч, сетнпатчмодеи делетепатч . Замените их программируемыми шейдерами тесселяции конвейера SM 5.0 (если оборудование поддерживает шейдеры тесселяции).
IDirect3DDevice9:: сетфвфи коды фвф больше не поддерживаются. Перед переносом в макеты D3D11 необходимо перенести из D3D8/D3D9 ФВФ в D3D9 объявления вершин.
Все типы D3DDECLTYPE , которые не поддерживаются напрямую, могут эмулироваться достаточно эффективно с небольшим количеством побитовых операций в начале шейдера вершин в VS_4_0 и выше.
О DirectX наверняка слышали почти все любители компьютерных игр, однако, что это такое, как работает, для чего нужно и в чем заключается разница версий, знают единица, а иногда эти знания не совсем верные. Именно поэтому в данной статье будет проведено сравнение версий DirectX 9 и 11, а также сделан вывод о том стоит ли покупать новую дорогую видеокарту с поддержкой последней версии.
DirectX 9
Интерфейс DirectX 9 был представлен одновременно с операционной системой Windows Server 2003 и входит в неё в качество основного API взаимодействия с графическим и звуковым оборудованием.
Главным достоинством интерфейса стала поддержка шейдеров. Шейдеры – это специальные подпрограммы, которые необходимы для определения геометрических свойств объекта. Так, благодаря ним предметы в играх могут отбрасывать реалистичные тени, в них могут отражаться другие вещи и так далее. Шейдеры делают игры более красивыми и кинематографичными, виртуальные миры кажутся более натуральными.
Пока не особо понятно, почему компания Microsoft решила имплементировать DX9.0 в серверную операционную систему. Однако в 2004 году она же выпустила Windows XP SP2, и этот API входил в неё. Именно так и началось распространение DX9.0 среди домашних пользователей.
По сути, все игры, выпущены в период с 2004 года по 2009 год, ориентированы на использование DirectX 9. Это же справедливо и для видеокарт. Как настольные, так и мобильные (предназначенные для ноутбуков), они предназначены для работы именно с этим интерфейсом.
Достоинства
Повышенная производительность на очень старых компьютерах.
Недостатки
Сравнительно узкое распространение (нативно встроен только в Windows XP SP2);
Ограниченная производительность за счёт не самой правильной работы с многопоточностью.
Кстати! Казалось бы, куда делся DirectX 10? А он никуда и не девался, он есть. Десятая версия интерфейса вышла в 2006 году вместе с операционной системой Windows Vista. Но сама эта среда была настолько «тормознутой» и «глючной», что о ней предпочли побыстрее забыть и создатели, и разработчики игр.
Влияние Директ Икс на игры
DirectX позволяет разработчикам видеоигр создавать красивую графику, применяя самые современные технологии визуализации. Реалистичное динамическое освещение, насыщенные тени, тесселяция, различные виды сглаживания и другие инструменты API используются для создания различных проектов: шутеров, квестов, стратегий, RPG и др. Благодаря DirectX игроки видят на экранах мониторов:
- объемное динамическое освещение;
- высокополигональные объекты;
- эффекты глубины резкости;
- размытие в движении;
- высокодетализированные текстуры;
- реалистичные отражения на металлических поверхностях и в воде;
- густой дым и другие спецэффекты.
Благодаря DirectX игры получают доступ к аппаратным возможностям видеокарт. Компания Microsoft поставляет API в архиве, установка происходит автоматически – пользователю достаточно запустить инсталлятор и подтвердить принятие лицензионного соглашения. Большая часть файлов DirectX хранится в папке System32. Библиотеки активируются приложениями без участия пользователя – просто запустите игру и наслаждайтесь красивой графикой!
Различия между DirectX 9 и DirectX 11 – и что выбрать
Итак, основным различием между DX9 и DX11 стала поддержка многопоточных вычислений. Впрочем, этим разница не ограничивается.
В этом разделе представлены общие отличия между DirectX 9 и DirectX 11.
Direct3D 11 — это по сути тот же тип API, что и Direct3D 9, а именно виртуализованный интерфейс нижнего уровня для взаимодействия с графическим оборудованием. Он также по-прежнему позволяет выполнять графические операции в разнообразных аппаратных реализациях. Структура графического API изменилась по сравнению с Direct3D 9; идея контекста устройства была расширена. Также был добавлен специальный API для графической инфраструктуры. Ресурсы, хранящиеся на устройстве Direct3D, получили принципиально новый механизм для полиморфизма данных — представление ресурсов.
Необходимость перехода
Выше было описано, что улучшилось при появлении DirectX версии 11, однако, многие игроки не смогли это заметить в старых играх. Этому есть вполне логичное обоснование. Разработчики создают свои продукты под ту версию, которая существует в данный момент, поэтому более старые игры просто не несут в себе данных, которые могли бы быть использованы DirectX 11. Чтобы ощутить все возможности этого пакета необходимо скачать новые игры или игры, которые были выпущены с учетом нового DirectX.
Из этого следует логичный вывод, что смысл менять видеокарту и обновлять DirectX есть только для тех, кто действительно любит играть и следит за новинками рынка. Только в них можно увидеть разницу и насладиться ею. Те, кто предпочитают играть в определенный набор стандартных игр могут продолжать использовать старое железо и ПО, при этом они практически ничего не потеряют.
Почему многие игры кажутся недостаточно проработанными даже на новых видеокартах с новой версией DirectX. Все дело в том, что большинство производителей в целях экономии ресурсов предпочитают выпускать игры сразу на несколько разных платформ, например, ПК, PlayStation и Xbox. Консоли даже последних поколений не могут сравниться производительностью с мощными игровыми ПК, поэтому производители закладывают в свои игры максимум для консолей, что для персонального компьютера может быть лишь на уровне среднего использования. Только игры, выпущенные эксклюзивно под ПК или специально адаптированные под него, как это было с GTA 5, могут похвастаться отличным изображением и использование всей мощи видеокарты.
Управление состоянием
В Direct3D 9 для управления параметрами состояния использовался большой набор отдельных переключателей, которые настраивались с помощью методов SetRenderState, SetSamplerState и SetTextureStageState. Поскольку Direct3D 11 не поддерживает устаревший конвейер с фиксированной функцией, метод SetTextureStageState заменен написанием построителей текстуры (PS). Не существует эквивалента блоку состояний Direct3D 9. В Direct3D 11 для управления состоянием используются 4 вида объектов состояния, что упрощает группировку состояний отрисовки.
Например, вместо использования Сетрендерстате с D3DRS_ZENABLE можно создать объект ДепсстенЦилстате с этим и другими связанными параметрами состояния и использовать его для изменения состояния во время подготовки к просмотру.
При переносе приложений Direct3D 9 в объекты состояния учитывайте, что различные комбинации состояний представлены в виде неизменяемых объектов состояния. Их следует создать один раз и многократно использовать, пока они остаются действительными.
DirectX 11 VS DirectX 12
DirectX 12 поддерживает технологию обработки лучей RTX – в некоторых играх включение трассировки существенно улучшает графику, например, в Control. В двенадцатой версии пакета возможно использование нескольких видеокарт от AMD и NVIDIA одновременно. Потоки данных распределяются по ядрам процессора равномерно. Кроме того, в DirectX 12 улучшены спецэффекты.
В сценах с небольшим количеством объектов и производительность выше с DirectX 11 (если для обработки данных достаточно одного ядра CPU). Выигрыш в производительности при использовании многопоточной технологии больше заметен на процессорах AMD, нежели на Intel – эта особенность обусловлена большим числом ядер. Из-за сложностей в программировании раскрыть все возможности движка на DirectX 12 не удастся, если изначально разработка велась под DirectX 11. Технология RTX может значительно снизить производительность системы – пользоваться главной особенностью двенадцатого Директ Икса смогут только обладатели очень мощных видеокарт.
Даже покупаемые «для учёбы» компьютеры то и дело используются для игр. И разработчики операционной системы Windows прекрасно это понимают, интегрируя прямо в код ядра библиотеки и механизмы взаимодействия с видеокартой. И DirectX – как раз такой инструмент.
Вообще, DirectX – это набор интерфейсов прикладного программирования, которые предназначены для взаимодействия приложений с «железом». Например, входящий в него пакет алгоритмов Graphics нужен для работы с видеокартой, а DirectMusic – со звуковой картой. В целом, в него входят девять пакетов интерфейсов, направленных на воспроизведение и вывод различного мультимедийного контента.
DirectX развивается одновременно с операционной системой Windows. Каждые 1-3 года выходят новые его версии, направленные на улучшение работы периферийного оборудования. И поэтому многим начинающим геймерам может быть непонятно, чем отличается одна итерация от другой.
Разберёмся, чем отличается Direct 9 от DirectX 11 и других версий.
Читайте также: