Чем отличается DirectX 9 от 11

Чем отличается DirectX 9 от DirectX 11?

Чем отличается DirectX 9 от 11

О DirectX наверняка слышали почти все любители компьютерных игр, однако, что это такое, как работает, для чего нужно и в чем заключается разница версий, знают единица, а иногда эти знания не совсем верные. Именно поэтому в данной статье будет проведено сравнение версий DirectX 9 и 11, а также сделан вывод о том стоит ли покупать новую дорогую видеокарту с поддержкой последней версии.

Что такое DirectX?

DirectX – это набор команд для Windows, которые позволяют решать две задачи.

Пользователи за счет работы этих библиотек получают возможность насладиться всей вычислительной способностью своего ПК, а именно великолепными спецэффектами, для разработчиков – это возможность получить все привилегии работы с видеокартой на аппаратном уровне. Иными словами DirectX необходим для создания реалистичной и эффективной картинки в играх.

Данный пакет команд появился в 1994 году, когда компания Microsoft готовилась выпустить на рынок новую версию ОС – Windows 95, однако, ее коммерческий потенциал был весьма сомнителен, так как из-за защиты и оптимизации работы многие разработчики не могли получить полноценный доступ к видеокарте, а значит использовать все ее ресурсы. Именно тогда родилась идеи написать пакет приложений способных дать такую возможность программистам. Это вывело удобство работы с данной ОС на принципиальной новый уровень, который стал конкурентоспособным с написанием игр под DOS.

В настоящее время существует несколько версий DirectX, все они работоспособные и по большому счету игроки могут пользоваться той, которая поддерживается их видеокартой. Как правило, новая версия DirectX выпускается совместно с новыми играми и влечет за собой замену видеокарты на более мощную и современную.

Однако, стоит ли новая версия таких затрат или можно обойтись старым железом. Если говорить коротко, то новая версия пакета всегда дает программистам новые возможности, что для пользователя выливается в более красивые спецэффекты.

Стоит сразу отметить, что отсутствие DirectX может иметь два последствия:

  • Игра будет без каких-либо спецэффектов.
  • Игра не запустится, а пользователь будет видеть на экране ошибку.

Стоит помнить, что DirectX устанавливается непосредственно с ОС, поэтому не быть ее попросту не может, если она не была удалена принудительно.

Однако стандартный пакет несет лишь минимум возможностей и для достижения более высокого качества картинки и использования всех ресурсов видеокарты, DirectX необходимо обновить.

Как правило, при установке игры пользователю сразу предлагает установить DirectX, но можно вполне это сделать и самостоятельно скачав с официального сайта Microsoft.

DirectX 9 появился в 2002 году и стал по-своему революционным, разработчики вложили в него поддержку шейдеров, что в итоге дало великолепную графику для своего времени.

Ярким прим DirectX ером тому может служить игра Need For Speed, выпущенная в 2003 году, где пользователь могли видеть мельчайшие блики на стекле автомобиля, наслаждаться вылетающими из-под колес кусками грязи и снега, а также удивлялись детализации окружающего мира.

Все разработчики делали свои игры с учетом этой версии DirectX и так продолжалось до 2006 года, пока вместе с Windows Vista не появился DirectX версии 10.

Интересным фактом стало то, что данная версия не получила широкого распространения, так как сама операционка для которой она было создана не пошла в массы.

Многие геймеры и просто пользователи предпочли остаться на более старой ОС и, соответственно, необходимости в обновлении пакета DirectX до 10 версии не было.

DirectX 11

В 2009 году на рынок выходит новая версия Windows под номером 7, а с ней и DirectX 11. Принципиальным отличием данной версии от более старых стало:

  • Поток видеоданных стал лучше обрабатываться за счет увеличения их числа.
  • Взаимодействие с многоядерными видеокартами стал на порядок лучше.
  • Увеличился КПД в целом средних и слабых видеокарт, на одних и тех же настройках видеокарта стала с одной и той же задачей справляться лучше, без лишнего нагрева и усиления работы кулера.
Читайте также  Обнаружено что дополнительные средства аудио вызывают неполадки

Вышеописанные процессы стали важны для разработчиков, а для игроков это вылилось в улучшение картинки и детализации.

Необходимость перехода

Выше было описано, что улучшилось при появлении DirectX версии 11, однако, многие игроки не смогли это заметить в старых играх. Этому есть вполне логичное обоснование.

Разработчики создают свои продукты под ту версию, которая существует в данный момент, поэтому более старые игры просто не несут в себе данных, которые могли бы быть использованы DirectX 11.

Чтобы ощутить все возможности этого пакета необходимо скачать новые игры или игры, которые были выпущены с учетом нового DirectX.

Из этого следует логичный вывод, что смысл менять видеокарту и обновлять DirectX есть только для тех, кто действительно любит играть и следит за новинками рынка.

Только в них можно увидеть разницу и насладиться ею.

Те, кто предпочитают играть в определенный набор стандартных игр могут продолжать использовать старое железо и ПО, при этом они практически ничего не потеряют.

Почему многие игры кажутся недостаточно проработанными даже на новых видеокартах с новой версией DirectX.

Все дело в том, что большинство производителей в целях экономии ресурсов предпочитают выпускать игры сразу на несколько разных платформ, например, ПК, PlayStation и Xbox.

Консоли даже последних поколений не могут сравниться производительностью с мощными игровыми ПК, поэтому производители закладывают в свои игры максимум для консолей, что для персонального компьютера может быть лишь на уровне среднего использования. Только игры, выпущенные эксклюзивно под ПК или специально адаптированные под него, как это было с GTA 5, могут похвастаться отличным изображением и использование всей мощи видеокарты.

Источник: https://vchemraznica.ru/chem-otlichaetsya-directx-9-ot-directx-11/

Важные изменения в Direct3D11 по сравнению с Direct3D9

  • 02/08/2017
  • Время чтения: 7 мин
  • Соавторы

Краткий обзор

В этом разделе представлены общие отличия между DirectX 9 и DirectX 11.

Direct3D11 — это по сути тот же тип API, что и Direct3D9, а именно виртуализованный интерфейс нижнего уровня для взаимодействия с графическим оборудованием. Он также по-прежнему позволяет выполнять графические операции в разнообразных аппаратных реализациях.

Структура графического API изменилась по сравнению с Direct3D9; идея контекста устройства была расширена. Также был добавлен специальный API для графической инфраструктуры.

Ресурсы, хранящиеся на устройстве Direct3D, получили принципиально новый механизм для полиморфизма данных — представление ресурсов.

Базовые функции API

В Direct3D 9, прежде чем использовать интерфейс для взаимодействия с API Direct3D, его приходилось создавать. В играх UWP с использованием Direct3D11 вы вызываете статическую функцию D3D11CreateDevice для создания устройства и контекста устройства.

Устройства и контекст устройства

Устройство Direct3D11 представляет собой виртуализованный графический адаптер.

Оно используется для создания ресурсов в видеопамяти, например для отправки текстур графическому процессору (GPU), создания представлений на основе ресурсов текстуры и цепочек буферов и для создания дискретизаторов текстур.

Полный перечень способов использования интерфейса устройства Direct3D11 приведен в разделах ID3D11Device и ID3D11Device1.

Контекст устройства Direct3D 11 используется для настройки состояния конвейера и создания команд отрисовки. Например, цепочка отрисовки Direct3D11 использует контекст устройства для настройки цепочки отрисовки и рисования сцены (см. ниже).

Контекст устройства применяется для доступа к видеопамяти (сопоставления), которую используют ресурсы устройства Direct3D, а также для обновления данных подресурсов, например данных буфера констант.

Полный перечень способов использования контекста устройства Direct3D11 приведен в разделах ID3D11DeviceContext и ID3D11DeviceContext1.

Обратите внимание, что большинство наших образцов используют мгновенный контекст для обработки напрямую на устройстве, но Direct3D11 также поддерживает и отложенные контексты устройств, которые применяются преимущественно для многопоточности.

Чтобы получить маркер устройства и маркер контекста устройства, в Direct3D11 вызывается D3D11CreateDevice.

В этом методе также запрашивается определенный набор аппаратных функций и извлекаются сведения об уровнях компонентов Direct3D, которые поддерживает графический адаптер.

Дополнительные сведения об устройствах, контекстах устройств и потоковой модели см. в разделе Вводные сведения об устройстве в Direct3D11.

Читайте также  Флешка не показывает содержимое что делать

Инфраструктура устройства, буферы кадров и представления однобуферной прорисовки

В Direct3D11 для настройки адаптера устройств и конфигурации оборудования применяется API DirectX Graphics Infrastructure (DXGI) с использованием COM-интерфейсов IDXGIAdapter и IDXGIDevice1. Буферы и другие ресурсы окон (видимые и закадровые) создаются и настраиваются при помощи определенных интерфейсов DXGI. Реализация шаблона фабрики IDXGIFactory2 получает ресурсы DXGI, такие как буфер кадров. Поскольку DXGI принадлежит цепочка буферов, интерфейс DXGI используется для представления кадров на экране. Дополнительные сведения об этом см. в IDXGISwapChain1.

Используйте IDXGIFactory2 для создания цепочки буферов, совместимой с вашей игрой. Необходимо создать цепочку буферов не для HWND, а для основного окна или для композиции (взаимодействие с XAML).

Ресурсы устройств и представления ресурсов

Direct3D11 поддерживает дополнительный уровень полиморфизма для ресурсов видеопамяти — для представлений.

По сути там, где раньше был один объект Direct3D9 для текстуры, теперь есть два объекта: ресурс текстуры, где хранятся данные, и представление ресурсов, которое определяет способ использования представления для отрисовки.

Представление на основе ресурса позволяет использовать ресурс для определенной цели.

Например, ресурс двухмерной текстуры создается в форме ID3D11Texture2D, затем на его основе создается представление ресурсов шейдера (ID3D11ShaderResourceView), и его можно использовать как текстуру в шейдере.

Представление однобуферной прорисовки (ID3D11RenderTargetView) можно также создать на основе того же ресурса двухмерной текстуры и использовать его как поверхность рисования. В другом примере те же пиксельные данные представлены в двух разных форматах пикселей с использованием двух отдельных представлений на основе одного ресурса текстуры.

Основной ресурс необходимо создать со свойствами, совместимыми с типом представлений, которые будут созданы из него.

Например, если ID3D11RenderTargetView применяется к поверхности, ее нужно создать с флагом D3D11_BIND_RENDER_TARGET.

Формат поверхности DXGI должен быть совместим с отрисовкой (см. DXGI_FORMAT).

Большинство ресурсов, которые вы используете для отрисовки, унаследованы от интерфейса ID3D11Resource, в свою очередь унаследованного от ID3D11DeviceChild.

Буферы вершин, буферы индексов, буферы констант и шейдеры — все это ресурсы Direct3D11. Входные макеты и состояния дискретизатора унаследованы напрямую от ID3D11DeviceChild.

Представления ресурсов используют значение перечисления DXGI_FORMAT для указания формата пикселей. Не каждый D3DFMT поддерживается как DXGI_FORMAT. Например, в DXGI не существует формата RGB 24 бита на пиксель, эквивалентного D3DFMT_R8G8B8.

Также эквиваленты BGR существуют не для каждого формата RGB (DXGI_FORMAT_R10G10B10A2_UNORM эквивалентен D3DFMT_A2B10G10R10, но прямого эквивалента D3DFMT_A2R10G10B10 нет). Во время сборки следует преобразовать содержимое в этих устаревших форматах в поддерживаемые форматы.

Полный перечень форматов DXGI см. в перечислении DXGI_FORMAT.

Ресурсы устройств Direct3D (и представления ресурсов) создаются до обработки сцены. Контексты устройств используются для настройки цепочки отрисовки, как описано ниже.

Контекст устройства и цепочка отрисовки

В Direct3D9 и Direct3D10.x был единственный объект устройства Direct3D, который управлял созданием ресурсов, состоянием и рисованием.

В Direct3D11 интерфейс устройства Direct3D также управляет созданием ресурсов, но для управления состоянием и операциями рисования используется контекст устройства Direct3D.

Вот пример использования контекста устройства (интерфейса ID3D11DeviceContext1) для настройки цепочки отрисовки:

  • Настройка и очистка представлений однобуферной прорисовки (и представления трафарета глубины)
  • Настройка буфера вершин, буфера индексов и входного макета для этапа сборщика входных данных (этапа IA)
  • Привязка вершинного и обычного построителей текстуры к конвейеру
  • Привязка буферов констант к шейдерам
  • Привязка представлений текстуры и дискретизаторов к построителю текстуры
  • Рисование сцены

Когда вызван один из методов ID3D11DeviceContext::Draw, рисуется сцена в представлении однобуферной прорисовки. По завершении рисования адаптер DXGI используется для представления законченного кадра вызовом IDXGISwapChain1::Present1.

Управление состоянием

В Direct3D 9 для управления параметрами состояния использовался большой набор отдельных переключателей, которые настраивались с помощью методов SetRenderState, SetSamplerState и SetTextureStageState.

Поскольку Direct3D11 не поддерживает устаревший конвейер с фиксированной функцией, метод SetTextureStageState заменен написанием построителей текстуры (PS). Не существует эквивалента блоку состояний Direct3D9.

Читайте также  Pup optional opencandy что это

В Direct3D 11 для управления состоянием используются 4 вида объектов состояния, что упрощает группировку состояний отрисовки.

Например, вместо использования метода SetRenderState с D3DRS_ZENABLE вы создаете объект DepthStencilState с этим и другими связанными параметрами состояния и используете его для изменения состояния в процессе отрисовки.

При переносе приложений Direct3D9 в объекты состояния учитывайте, что различные комбинации состояний представлены в виде неизменяемых объектов состояния. Их следует создать один раз и многократно использовать, пока они остаются действительными.

Уровни функций Direct3D

В Direct3D появился новый механизм определения аппаратной поддержки — уровни функций. Благодаря уровням функций становится проще узнать о возможностях графического адаптера, поскольку можно запросить четко определенный набор функций GPU.

Например, уровень функций 9_1 реализует функции графических адаптеров Direct3D9, включая модель шейдера 2.x.

Так как 9_1 — самый нижний уровень функций, можно предположить, что все устройства будут поддерживать вершинный и обычный построители текстуры — те же этапы, которые поддерживала программируемая модель шейдера Direct3D9.

Ваша игра будет использовать D3D11CreateDevice для создания устройства и контекста устройства Direct3D. Вызывая эту функцию, вы предоставляете список уровней функций, которые поддерживает ваша игра.

На основе этого списка функция вернет самый высокий поддерживаемый уровень функций.

Например, если ваша игра может использовать текстуры BC4/BC5 (функцию оборудования DirectX10), следует включить в список поддерживаемых уровней функций как минимум уровни 9_1 и 10_0.

Если игра работает на оборудовании DirectX9 и текстуры BC4/BC5 использовать нельзя, то D3D11CreateDevice вернет 9_1. Затем ваша игра может переключиться на другой формат текстур (и более мелкие текстуры).

Если вы решили расширить игру Direct3D9, добавив поддержку более высоких уровней функций Direct3D, лучше сначала закончить перенос существующего графического кода Direct3D9. После переноса игры в Direct3D11 будет проще добавить дополнительные пути отрисовки с более сложной графикой.

Подробное объяснение поддержки уровней функций см. в разделе Уровни функций Direct3D. Полный перечень функций Direct3D 11 см. в разделах Функции Direct3D 11 и Функции Direct3D 11.1.

Уровни функций и программируемый конвейер

С момента появления Direct3D9 оборудование непрерывно совершенствовалось, и в программируемый графический конвейер было добавлено несколько новых дополнительных этапов.

Набор параметров для графического конвейера зависит от уровня функций 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. Direct3D11 использует буферы констант, которые представляют собой ресурсы, аналогичные буферу вершин или буферу индексов.

Буферы констант эффективно обновляются благодаря своей структуре. Вам не нужно размещать все константы шейдера в одном глобальном массиве. Вместо этого вы объединяете константы в логические группы и управляете ими при помощи одного или нескольких буферов констант.

При переносе игры Direct3D9 в Direct3D11 запланируйте такую организацию буферов констант, чтобы можно было обновлять их соответствующим образом. Например, сгруппируйте константы шейдера, которые не обновляются с каждым кадром, в отдельный буфер констант.

Тогда вам не придется постоянно отправлять эти данные графическому адаптеру вместе с более динамическими константами шейдера.

Примечание большинство приложений Direct3D 9 широко использовали шейдеры, но иногда в комбинации с традиционной фиксированной функции.

Обратите внимание, что Direct3D11 использует только программируемую модель шейдеров.

Устаревшие компоненты Direct3D9 с фиксированными функциями использовать не рекомендуется.

Источник: https://docs.microsoft.com/ru-ru/windows/uwp/gaming/understand-direct3d-11-1-concepts

Понравилась статья? Поделить с друзьями: