Как повысить уровень функций directx

Обновлено: 04.07.2024

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

Цель: настройка ресурсов DirectX в приложении универсальной платформы Windows (UWP) на языке C++ и отображение одного цвета.

Предварительные требования

Предполагается, что вы знакомы с C++. Также вы должны быть знакомы с основными принципами программирования графики.

Время выполнения: 20 минут.

Instructions

1. Объявление переменных интерфейса Direct3D с помощью ComPtr

Мы объявляем переменные интерфейса Direct3D по шаблону смарт-указателя ComPtr из библиотеки шаблонов C++ для среды выполнения Windows (WRL), поэтому можно безопасно управлять временем существования этих переменных. В таком случае мы можем использовать эти переменные, чтобы получить доступ к классу ComPtr class и его членам. Вот несколько примеров.

Если объявить ID3D11RenderTargetView с помощью ComPtr, то можно использовать метод GetAddressOf ComPtr, чтобы получить адрес указателя на ID3D11RenderTargetView ( * * ID3D11RenderTargetView) для передачи в ссылку ID3D11DeviceContext:: омсетрендертаржетс. OMSetRenderTargets привязывает однобуферную прорисовку к стадии слияния вывода, чтобы указать однобуферную прорисовку в качестве цели вывода.

После запуска образец приложения инициализируется, загружается и затем готов к выполнению.

2. Создание устройства Direct3D

Чтобы использовать API Direct3D для обработки сцены, необходимо сначала создать устройство Direct3D, представляющее видеоадаптер. Чтобы создать устройство Direct3D, необходимо вызвать функцию D3D11CreateDevice. Мы указываем уровни 9,1 – 11,1 в массиве значений _ _ уровня компонента D3D . Direct3D по порядку проходит через массив и возвращает высший уровень поддерживаемого компонента. Таким образом, чтобы получить самый высокий уровень функций, мы перечислите записи в массиве _ _ уровня функций D3D от самого высокого до самого низкого. Мы передаем флаг _ поддержки D3D11 Create _ Device _ BGRA _ в параметр flags , чтобы обеспечить взаимодействие ресурсов Direct3D с Direct2D. Если мы используем отладочную сборку, мы также передаем флаг D3D11 _ Create _ Device _ Debug . Дополнительные сведения о приложениях отладки см. в разделе Отладка приложений с помощью уровня отладки.

Мы получаем устройство Direct3D 11.1 (ID3D11Device1) и контекст устройства (ID3D11DeviceContext1) с помощью запроса устройства Direct3D 11 и его контекста, возвращаемые D3D11CreateDevice.

3. Создание цепочки буферов

Затем мы создаем цепочку буферов, используемую устройством для визуализации и отображения. Мы объявляем и инициализирую структуру _ _ _ DESC1 цепочки буфера DXGI для описания цепочки буферов обмена. Затем мы настроили цепочку подкачки в качестве перевернутой модели (т. е. цепочки буферов, в которой имеется _ _ _ повернутое _ последовательное значение, заданное в элементе SwapEffect ), и задайте для элемента Format _ Формат DXGI _ B8G8R8A8 _ UNORM. Мы устанавливаем элемент Count _ образца _ DESC Sample , который элемент Сампледеск указывает на 1, а элемент Quality _ примера _ DESC — на нуль, поскольку функция переворот-Model не поддерживает несколько образцов сглаживания (MSAA). Мы присваиваем члену BufferCount значение 2, и поэтому цепочки буферов могут использовать кадровый буфер для предоставления видеоадаптеру и задний буфер для однобуферной прорисовки.

Мы получаем базовое устройство DXGI, опрашивая устройство Direct3D 11.1. Чтобы свести к минимуму потребление энергии, что важно для устройств, работающих от аккумулятора, например ноутбуков и планшетов, необходимо вызвать метод IDXGIDevice1::SetMaximumFrameLatency, указав 1 как максимальное количество кадров заднего буфера, которое DXGI может поместить в очередь. Благодаря этому приложение обрабатывается только после выдержки интервала между кадрами.

Для окончательного создания цепочки буферов мы должны получить родительское производство от устройства DXGI. Мы вызываем метод IDXGIDevice::GetAdapter, чтобы получить адаптер для устройства, а затем вызывает метод IDXGIObject::GetParent на адаптере для получения родительского производства (IDXGIFactory2). Для создания цепочки буферов мы вызываем метод IDXGIFactory2::CreateSwapChainForCoreWindow с дескриптором цепочки буферов и основное окно приложения.

4. Создание представления однобуферной обработки

Для преобразования графики для просмотра в окне мы должны создать представление однобуферной обработки. Мы вызываем метод IDXGISwapChain::GetBuffer, чтобы получить задний буфер цепочки буферов и использовать его при создании представления однобуферной прорисовки. Мы указываем задний буфер в качестве 2D-текстуры (ID3D11Texture2D). Чтобы создать представление однобуферной прорисовки, мы вызываем метод ID3D11Device::CreateRenderTargetView с задним буфером цепочки буферов. Необходимо указать, чтобы нарисовать во всем окне ядра, указав порт представления (_ окно просмотра D3D11) в качестве полного размера заднего буфера цепочки буферов. Мы используем порт представления в обращении к методу ID3D11DeviceContext::RSSetViewports для связывания порта представления и стадии растеризатора конвейера. Стадия растеризатора преобразует векторную информацию в растровое изображение. В данном случае преобразование нам не нужно, так как мы просто отображаем сплошной цвет.

5. Представление обработанного изображения

Для непрерывной обработки и вывода сцены на экран мы воспользуемся бесконечным циклом.

В этом примере мы вызываем следующие методы:

    — чтобы указать однобуферную прорисовку в качестве цели вывода. — чтобы очистить однобуферную прорисовку до сплошного цвета. — чтобы представить отрисованное изображение в окне.

Так как мы ранее определили максимальное значение задержки кадра как 1, Windows обычно замедляет цикл обработки до частоты обновления экрана, как правило, около 60 Гц. Windows замедляет цикл отрисовки, переводя приложение в спящий режим при вызове метода Present. Windows переводит приложение в спящий режим до обновления экрана.

6. Изменение размеров окна приложения и буфера цепочки буферов

Если изменяется размер окна приложения, приложение должно изменить размеры буферов цепочки буферов, повторно создать представление однобуферной обработки, а затем представить преобразованное изображение с измененными размерами. Чтобы изменить размеры буферов цепочки буферов, мы вызываем метод IDXGISwapChain::ResizeBuffers. В этом вызове мы оставляем число буферов и формат буферов без изменений (параметр BufferCount имеет значение Two, а параметр невформат — в _ формате DXGI _ B8G8R8A8 _ UNORM). Мы делаем размер заднего буфера цепочки буферов таким же, как измененный размер окна. Изменив размеры буферов цепочки буферов, мы создаем новую однобуферную прорисовку и представляем новое обработанное изображение, как при его инициализации.

Сводка и дальнейшие действия

Мы создали устройство Direct3D, цепочку буферов и представление целевого объекта обработки, а также представили обработанное изображение для отображения.

Что такое DirectX?

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

Многие API-интерфейсы, присутствующие в подсистеме DirectX, являются обязательными и должны рассматриваться как необходимые для всего: от простого воспроизведения видео до требовательных 3D-видеоигр.

DirectX Runtime vs Direct3D Hardware Feature Feature

Многие пользователи путают DirectX runtime среда с Аппаратный уровень Direct3D. DirectX Runtime описывает версию DirectX, которую может поддерживать программное обеспечение ОС. С другой стороны, Аппаратный уровень Direct3d описывает поддержку, которую обеспечивает ваше видеооборудование (GPU).

Имея это в виду, наличие на ПК последней установленной среды выполнения DirectX не означает, что ваше оборудование способно поддерживать Функциональные возможности Direct3D 10.0. Даже если ваша версия Windows оборудована для работы с последними API DirectX, ваша видеокарта может не поддерживать требуемую уровни функций. Это часто имеет место со старыми или интегрированными графическими процессорами.

Как узнать, установлен ли DirectX

Если у вас есть Windows 10, DirectX 12.0 Runtime был автоматически установлен вместе с операционной системой (при условии, что у вас установлены последние обновления Windows). Но чтобы использовать новые DirectX API, ваша видеокарта должна их поддерживать.

Чтобы подтвердить это и проверить, какая версия DirectX поддерживается вашей ОС, вам необходимо запустить Инструмент диагностики DirectX (dxdiag). Этот встроенный инструмент Windows доступен в любой версии Windows, открыв окно «Выполнить» (Windows ключ + R) и набрав «DXDIAG«.


Вы можете просмотреть свою версию DirectX в разделе Системная информация в система Вкладка.


Чтобы увидеть, способен ли ваш графический процессор поддерживать требуемые уровни функций, перейдите к дисплей вкладка под Драйверы и посмотрим, какие Уровни функций поддерживаются вашей видеокартой.


Если вы найдете это уровень возможностей 10_0 (10,0) не отображается среди Уровни функций записи внутри DirectX Диагностический инструмент, это один из следующих сценариев:

  • Ваша видеокарта (GPU) работает с устаревшими драйверами, которые необходимо обновить. Если ваша система не имеет драйвера, который инструктирует графическое оборудование о том, как использовать соответствующий уровень функций, она не будет продаваться в средстве диагностики DirectX.
  • Ваша ОС требует дополнительного обновления платформы. Применимо только для пользователей Windows 7 и Windows XP.
  • Ваша видеокарта не поддерживает Уровень возможностей 10.0. В этом случае применимым исправлением будет покупка новой видеокарты (GPU).

Исправление ошибки «для работы двигателя необходим уровень 10.0 DX11»

Ниже представлен набор решений, которые пользователи сочли полезными для исправления «Для работы двигателя необходим уровень функциональности DX11 10.0» ошибка. Пожалуйста, следуйте каждому методу по порядку, пока не найдете исправление, которое работает для вас.

Замечания: Приведенные ниже методы применимы только в том случае, если вы уверены, что ваш графический процессор поддерживает Уровень возможностей 10.0. Перед тем, как попробовать какое-либо из исправлений, рекомендуется провести некоторое исследование спецификаций видеокарты, чтобы выяснить, поддерживает ли она Direct3D Feature Level 10.0.

Способ 1: запуск приложения с выделенным графическим процессором

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


Метод 2: Обновление драйвера вашей видеокарты

Очевидное место для начала, чтобы решить «Для работы двигателя необходим уровень функциональности DX11 10.0» ошибка заключается в обновлении драйверов видеокарты. Есть несколько способов сделать это, но идеальный способ сделать это зависит от производителя видеокарты.

В последних версиях Windows (Windows 10 и Windows 8) должна автоматически устанавливаться программный драйвер, необходимый для вашей видеокарты. Но даже если ваша ОС автоматически загружает и устанавливает драйвер для вашего графического процессора, скорее всего, это не самая последняя доступная версия. Ваша система может сообщить об этой ошибке, потому что графический процессор не знает, как использовать Уровень возможностей 10.0 несмотря на наличие вспомогательного оборудования.

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

Установка графического драйвера через диспетчер устройств

Ниже у вас есть шаги по обновлению вашего графического драйвера через Диспетчер устройств. Это хорошее место для начала, но оно использует Центр обновления Windows для поиска соответствующего драйвера в Интернете. Если этот метод не обновляет драйвер графического процессора, ознакомьтесь со следующими руководствами, которые относятся к наиболее популярным производителям видеокарт.

Пользователи с видеокартами Nvidia

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

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

Пользователи с видеокартами ATI

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

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

Пользователи с интегрированной графикой Intel

До сих пор ATI выпускала только интегрированные видеокарты. В большинстве случаев драйвер успешно обновляется из диспетчера устройств (первое руководство по этому методу). Однако, если вы не можете выполнить обновление оттуда, вы можете загрузить его из центра загрузки Intel (здесь).


Способ 3: восстановление среды выполнения DirectX

API, включенные в пакет DirectX, редко ломаются, но, как известно, это происходит. К сожалению, вы не можете действительно удалить DirectX эффективно. Среда выполнения DirectX 11.3 и 12 включена в Windows 10, а любые обновления / исправления обрабатываются Центром обновления Windows. Для этих версий DirectX нет отдельного пакета.

Однако вы можете восстановить все файлы DirectX (кроме файлов из DX12), используя Веб-установщик среды выполнения DirectX для конечных пользователей а также DirectX Redist (июнь 2010 г.).

Начните с загрузки DirectX Конечный пользователь Runtime Web Installer (Вот). Вам нужно будет щелкнуть правой кнопкой мыши исполняемый файл и выбрать Запустить от имени администратора предоставить повышенные привилегии. Затем следуйте инструкциям на экране, чтобы убедиться, что все ваши файлы DirectX 9.0c не повреждены.


Затем загрузите RedX Redist (июнь 2010) по этой ссылке (здесь). Откройте пакет и извлеките DirectX SDK где-то доступно. Затем перейдите к извлеченным файлам и откройте DXSetup исполняемый файл. Следуйте инструкциям на экране, чтобы переустановить компоненты DirectX.


После завершения установки перезагрузите систему и посмотрите, решена ли проблема.

Способ 4: установка обновления платформы KB2670838 (только для Windows 7)

В отличие от Windows 8 и Windows 10, Windows 7 требует дополнительного обновления платформы (KB2670838) для того, чтобы включить DX 11 Feature Level 10.0. Он помечен как дополнительное обновление, поэтому вы могли его пропустить, даже если считаете, что ваш WU обновлен.

Чтобы узнать, является ли это причиной ошибки, примените все ожидающие необязательные обновления или перейдите по этой ссылке Microsoft (здесь) и загрузите KB2670838 обновление платформы. После установки обновления перезагрузите компьютер и посмотрите, решило ли оно проблему.

Что означает ошибка DX11 feature level 10.0 is required to run the engine и почему она возникает

Ошибка DX11 feature level 10.o is required to run the engine при запуске игр в Windows 11 и Windows 10 не означает, что у вас отсутствует нужная версия DirectX, а сообщает буквально следующее: у вас отсутствует поддержка feature level 10.0 (или 11.0 если указывается этот номер). Отсутствовать она может даже если у вас установлен DirectX 12. Под feature level здесь подразумевается уровень поддержки функций Direct3D (компонент в составе DirectX), а поддерживаемый уровень зависит от трёх составляющих в совокупности:

  • Версии DirectX
  • Модели видеокарты
  • Установленных драйверов видеокарты
  1. Если у вас DirectX 11 — DX11 feature level 10.0 будут поддерживать видеокарты NVIDIA GeForce GTX 400 и новее, Radeon HD серии 5000/6000/7300-7600/8300-8400, R5 210-235 и новее, интегрированные адаптеры Intel HD Graphics 2500/4000 (Ivy Bridge и новее).
  2. Feature Level 11.0 при DirectX 11 будут поддерживают видеокарты NVIDIA начиная с GTX 600-й серии, AMD HD 7790/8770, RX 260/290 и новее, Intel HD Graphics 4200-5200 (Haswell и новее).
  3. Если у вас DirectX 12 — DX11 feature level 10 и 11 будут поддерживать видеокарты начиная с NVIDIA GTX 400, AMD HD 7700-7900, RX 240, Intel HD Graphics 4200-5200 (Haswell и новее).
  4. Обратите внимание: информации по поддержки feature level 10 и 11 не GTX, а GT видеокарт от NVIDIA я не нашел, хотя предполагаю, что должна быть в рамках указанных выше серий видеоадаптеров адаптеров.

Понимая причины ошибки и возможные несоответствия нашей системы, мы можем более уверенно приступать к решению проблемы. Не забывайте, что речь идет о Windows 10, 8.1 (8) и Windows 7, на более старых версиях системы игру вы вероятнее всего не запустите.

Прежде чем приступать к возможным методам решения проблемы, проверьте версию DirectX на вашем компьютере и версию WDDM, для этого нажмите клавиши Win+R на клавиатуре (Win — клавиша с эмблемой Windows), введите dxdiag и нажмите Enter, согласитесь на проверку цифровых подписей и дождитесь окончания сбора информации. Обратите внимание на пункт «Версия DirectX», она должна быть не ниже 11.

Версия DirectX в dxdiag

Уровни функций feature levels в dxdiag

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

В этом случае можно попробовать отключить более старую видеокарту в диспетчере устройств. Для выключения видеокарты:

  1. Важно: в случае ПК, предварительно выключите компьютер и подключите монитор к той видеокарте, которая останется включенной, например к интегрированному выходу видео на материнской плате — в противном случае при выключении видеокарты мы останемся без изображения. На некоторых (редко) конфигурациях ноутбуков с интегрированным и дискретным видеоадаптерами отключение одной из видеокарт может выключить монитор — не прибегайте к методу, если не уверены в способности решить проблему в случае появления.
  2. Нажмите клавиши Win+R на клавиатуре, введите devmgmt.msc и нажмите Enter.
  3. Внимание: если в разделе «Видеоадаптеры только одна видеокарта, не выполняйте этот и все остальные шаги, они вам не походят.
  4. В разделе «Видеоадаптеры» выберите отключаемую видеокарту, нажмите по ней правой кнопкой мыши и выберите пункт «Отключить устройство».
  5. Подтвердите отключение устройства.

После этого снова попробуйте запустить игру — теперь при запуске игра сможет использовать только тот GPU (видеокарту), которая осталась включенной и, если она поддерживает DX11 Feature Level 10 или Feature Level 11, игра запустится.

Возможен сценарий, когда совокупность характеристик из модели видеокарты и версии DirectX, даже при последних версиях драйверов не позволяет запускать игры с требуемым Feature Level, в этом случае устранить ошибку DX11 feature level 10.0/11.0 is required to run the engine (или to run the game) получится лишь заменив видеокарту (или систему, в случае старых версий DirectX на не поддерживаемых ОС).

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

Настройка DirectX на производительность

В современных ОС, таких, как Windows 7 – 10, отсутствует возможность настройки непосредственно самих компонентов DirectX, так как они уже не являются отдельным программным обеспечением, в отличие от XP. Повысить производительность видеокарты в некоторых играх (если требуется) можно, настроив параметры в специальном ПО, которое поставляется вместе с драйверами. У «зеленых» это Панель управления NVIDIA, а у AMD – Catalyst Control Center.

Для старичка «Хрюши» (Win XP) компания Microsoft разработала вспомогательную программу, которая также может работать, как апплет «Панели управления». Называется софт «Microsoft DirectX Control Panel 9.0c». Поскольку официальная поддержка XP закончилась, то эту панель настроек DirectX на официальном сайте отыскать довольно проблематично. Благо, есть сторонние сайты, на которых ее еще можно скачать. Для поиска просто наберите в Яндексе или Гугле название, которое приведено выше.

  1. После скачивания мы получим архив с двумя файлами: для х64 и х86 систем. Выбираем один, соответствующий разрядности нашей ОС, и копируем его в подпапку «system32», находящуюся в директории «Windows». Архив распаковывать не обязательно (по желанию).

На самом деле, подавляющее большинство настроек практически не влияют на игровой процесс. Здесь есть только один параметр, который необходимо поменять. Переходим на вкладку «DirectDraw», находим пункт «Use Hardware Acceleration» («Использовать аппаратное ускорение»), снимаем галку напротив и жмем «Применить».

Заключение

После прочтения данной статьи Вы должны уяснить следующее: DirectX, как компонент операционной системы, не имеет изменяемых параметров (в Windows 7 – 10), так как не нуждается в настройке. Если необходимо повысить производительность в играх, то воспользуйтесь настройкой видеодрайвера. В том случае, если результат Вас не устроит, то самым правильным решением будет покупка новой, более мощной, видеокарты.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: