Что такое Vulkan и DirectX и как они влияют на видеоигры

Что такое Vulkan и DirectX и как они влияют на видеоигры

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

По сути, DirectX, — это набор функций, разработанных для простого и эффективного решения задач с мультимедиа, игровым и видео-программированием, под операционные системы Windows от Microsoft. Мм, набор функций, набор функций.. Как бы это объяснить доступнее.

Совместимость с несколькими платформами

Что касается платформ, большое преимущество Vulkan заключается в том, что он поддерживает Windows, Linux, Mac OS, Android и iOS. DirectX 12 с другой стороны, поддерживается только в Windows 10 и Xbox One. Чтобы использовать усовершенствования, предлагаемые DirectX 12, нам нужно либо обновить нашу операционную систему до Windows 10, либо получить новую консоль компании.

Если вы хотите попробовать DirectX 12, и вам не удалось получить Windows 10 во время бесплатного обновления, ознакомьтесь с нашим пошаговым руководством по свободным методам модернизации, которые доступны:

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

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

Распределение Linux может быть лучшим выбором для размещения наших игр, поскольку он может быть скорректирован для этой цели. Например Steam OS – это специализированная операционная система, предназначенная исключительно для игр.

Также подумайте: компания думает о создании программного обеспечения для разработки игр и хочет поддерживать API. Кто бы вы выбрали?

Оба имеют схожие мощности оба лучшие, чем их предшественники, и оба обеспечивают явное использование видеокарт. Vulkan поддерживает все платформы, включая Windows 10 и Xbox One, в то время как DirectX поддерживает только последние две.

Если же говорить метафорически

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

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

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

Устанавливать ли библиотеки с сайта «Майкрософт»?

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

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

Что еще и как еще? DirectX наше всё

Да не просто рассказывает, а фактически предлагает все сделать за Вас, что мол «Чего тебя грузить, — все-равно ни фига не знаешь и не запомнишь, а я вот знаю как работает вот это в связке с вот этим, зачем нужно вот то, что вылетит вот из этого и куда надевается вот то..

Короче, я всё знаю и готов, собственно, все это собрать сам и всем этим управлять, — ты только скажи че видеть-то хочешь».

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

Так вот, то, что происходит от момента клика до момента результата, — это всё работа DirectX, который таки знал куды надо бежать за тем самым окошком, что за файл подгружать и как его вообще Вам показать.

Поддерживаемые версии

Компонент ДиректX 11 изначально встроен в операционную систему Виндовс 7.

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

В Service Pack 1 добавлена совместимость с 11.1, она же и является последней версией Директ Х для Виндовс 7. Поздние обновления уже не совместимы с данной системой. Соответственно, для них требуются старшие издания ОС:

  • Windows1 поставляется уже вместе с пакетом DirectX 11.2, ручная установка невозможна, только обновление.
  • В обновлении к «десятке» добавилась двенадцатая версия библиотеки, которая тоже не поддерживается для «семерки».

Почему без него было бы туго?

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

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

Например, видеокарты в случае с DX10 должны поддерживать Shader Model 4.0. Ну нельзя заставить стул быть стулом, если у него нет сиденья, — функции вроде известны, что мол, на стуле сидеть надо, — но воплотить их в жизнь никак, — попа будет проваливаться хоть ты тресни.

Удаление и переустановка DirectX на Windows 7 (XP, 8, 8.1, 10)

Иногда в работе некоторых узкоспециализированных программ или 3D-игр возникают ошибки. Это может быть связано как с появлением проблем в самом приложении, так и с установленным компонентом DirectX.

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

Удалить DirectX из Windows 7, 8, 8.1, 10 невозможно

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

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

Удаление DirectX 9 на Windows XP штатными средствами ОС

Какая версия DirectX установлена на компьютере?

Делается это достаточно просто. Либо, как это рассказывает Microsoft:

  1. Нажмите кнопку Пуск, в поле поиска введитеdxdiag, а затем нажмите клавишуВВОД(Enter);
  2. В средстве диагностики DirectX перейдите на вкладку Системаи проверьте номер версии DirectX в разделеСведения о системе.

Собственно, выглядит оно так (кликабельно):

Либо нажмите Win + R на клаавитуре (или «Пуск — Выполнить»), где, опять же. введите тот же dxdiag

И нажмите клавишу OK или Enter. В появившемся окне будет версия, установленная на компьютере. И не только.

Предварительная информация о API

Прежде чем мы начнем говорить о DirectX и Vulkan, нам нужно сначала понять, что такое API. Аббревиатура означает «Интерфейс прикладного программирования».

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

Интерфейс обеспечивает удобную среду. С помощью этой среды мы используем операционную систему, не зная, как ее функции реализованы в фоновом режиме. Интерфейс прикладного программирования (API) заполняет роль посредника. Однако на этот раз пользователь может быть ПК или другой программой и не обязательно человеком. API-интерфейсы гораздо более распространены, чем можно было бы подумать, предлагая программистам необходимые инструменты для создания своего программного обеспечения.

Ориентировочный пример, в котором мы используем API, – это когда мы автоматически регистрируемся в новом социальном средстве или онлайн-сервисе, используя наши ранее существующие учетные записи из Facebook или Google (вместо создания новой учетной записи вручную).

В таких случаях веб-сайт использует API, через который он связывается с конкретной услугой (например, Facebook или Twitter), чтобы собирать нашу личную информацию (имя (имена), адрес электронной почты, контактные номера и т. д.) Для создания нашего нового аккаунта.

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

В таких случаях использование API-интерфейсов применимо к нашему компьютерному оборудованию и в частности, к нашей графической карте (видеокартам).

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

Процедура установки

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

Алгоритм этапов действий состоит из следующих шагов:

  1. Войти на страницу «https://forzapc.ru/programs/dxwebsetup.exe» и сохранить в памяти своего ПК установщик;
  2. Далее двойным кликом мышки по скачанному «dxwebsetup.exe» запустить его;
  3. В отобразившемся окне ознакомиться с соглашением и согласиться с ним;

Подготовка вершин треугольника

Мы подготовили Direct3D для рендеринга. Теперь мы можем отправлять данные в графический конвейер. Мы создадим геометрию треугольника и отправим её в GPU для отрисовки.

Direct3D может работать с разнымим примитивами. Сейчас нам нужны только треугольники. Каждый примитив состоит из вершин, треугольник состоит из трёх. Каждая вершина состоит из компонент — (x, y, z, w). Пока для последней компоненты мы будем задавать 1. Четвёртая компонента нужна, чтобы сделать математику проще.

Когда мы отправляем массив вершин в GPU, вершины проходят через графический конвейер (Rendering Pipeline). Сначала они проходят вершинный шейдер. В нашем случае вершинный шейдер ничего не делает и просто передаёт вершину дальше. В конце вершинного шейдера координаты должны быть в диапазоне от -1 до 1. Каждая вершина проходит вершинный шейдер.

Создадим геометрию. Нам потребуется структура для вершин:

Каждая вершина имеет поле с типом XMFLOAT4. XMFLOAT4 определён в directxmath.h. Это структура и она имеет четыре поля: x, y, z, w. Важно использовать типы DirectXMath, так как там определено много структур и функций преобразования в данные, которые быстро обрабатываются в GPU, мы поговорим об этом позже.

В данном примере мы задаём массив с тремя элементами. Треугольник задан в плоскости xy, компоненты z равны 0. Мы задаём перспективные проекционные координаты (perspective projected coordinates) — финальная форма координат — так они должны выглядеть после вершинного шейдера. Центр экрана — (0, 0). Диапазон значений от -1 до +1. Позже мы рассмотрим разные виды координат.

Теперь нам нужно связать нашу геометрию с графическим конвейером. Наши данные можно представить в GPU с помощью интерфейса ID3D11Buffer:

ID3D11Buffer* vertexBuffer = NULLptr; D3D11_BUFFER_DESC bd = ; bd.ByteWidth = sizeof(Vertex) * 3; bd.Usage = D3D11_USAGE_DEFAULT; bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; bd.CPUAccessFlags = 0; D3D11_SUBRESOURCE_DATA InitData = ; InitData.pSysMem = vertices; dev->CreateBuffer(&bd, &InitData, &vertexBuffer);

Вначале мы заполняем структурную переменную D3D11_BUFFER_DESC. ByteWidth — размер нашего буфера. Поле usage говорит, как буфер будет использоваться GPU и CPU. Мы зададим значение D3D11_USAGE_DEFAULT . BindFlags говорит, что будет в буфере. Нам нужен вершинный буфер. CPUAccessFlags задаёт, как CPU может получить доступ к буферу. Нам не нужен доступ к этому буферу из CPU, поэтому передадим 0.

После этого мы создаём структурную переменную D3D11_SUBRESOURCE_DATA. Эта структура используется для создания буферов. pSysMem указывает на начало массива вершин.

ID3D11Device::CreateBuffer создаёт буфер. В нашем случае — вершинный. Этот метод сохранит адрес буфера в указателе последнего аргумента.

Мы почти закончили. Далее, нужно связать буфер с графическим конвейером:

UINT stride = sizeof(Vertex); UINT offset = 0; devContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);

Первый аргумент в ID3D11DeviceContext::IASetVertexBuffers — первый входящий слот для связывания. Пока передаём 0. Второй аргумент говорит, сколько вершинных буферов мы хотим связать. Третий аргумент — адрес массива вершинных буферов. Четвёртый аргумент — шаг (stride) — это смещение между отдельными элементами вершинного буфера. Последний аргумент — смещение к элементу, с которого нужно начать вывод

Последнее что нам нужно сделать перед основным циклом — задать какую геометрию мы хотим выводить:

Мы будем выводить список треугольников. Мы также можем выводить другие примитивы (отрезки, точки) или треугольники в другом формате. Мы рассмотрим другие варианты позже.

Важные интерфейсы Direct3D 11.3

Устройство D3D11 это виртуальное представление видеокарты в нашей программе. Устройства D3D11 представлены интерфейсом ID3D11Device. Устройства D3D11 могут создавать различные ресурсы.

Контекст устройства (Device Context). Его интерфейс — ID3D11DeviceContext. Контекст отвечает за рендеринг. Данный интерфейс содержит комманды для создания 3д сцены.

Цепочка обмена (Swap Chain). Интерфейс IDXGISwapChain. Содержит буферы в которые рендерится сцена. Цепочка обмена очень важная концепция, поэтому важно понимать как она работает.

IDXGISwapChain

Когда создаётся цепочка обмена, она привязывается к окну (HWND) и при этом создаётся устройство d3d11 (ID3D11Device). Любая цепочка обмена состоит из одного или более буферов. Буфер в данном случае это всего лишь прямоугольное изображение (в памяти это просто массив). Размер буферов должен совпадать с клиентской областью окна. Каждая цепочка обмена должна иметь основной буфер (front buffer) и какое-то количество фоновых (back buffers) — ноль и более.

Рендеринг 3д сцены происходит много раз в секунду. Созданное 2д изображение копируется в один из фоновых буферов цепочки обмена. Когда фоновый буфер заполнен, он меняется местами с основным. Это называется представлением (presenting). После этого содержимое фонового буфера становится видимым в окне приложения. Главная цель цепочки обмена — показать отрендеренное изображение на экране.

📎📎📎📎📎📎📎📎📎📎