Причина, по которой он не работает в Windows 7, но работает в Windows 10, заключается в том, что вы фактически используете Direct3D 11.2 Runtime дополнительная функция: D3D11_FEATURE_DATA_D3D11_OPTIONS1.MapOnDefaultBuffers
.У вас одновременно установлены D3D11_USAGE_DEFAULT
и D3D11_CPU_ACCESS_WRITE
, которые не поддерживаются без этой дополнительной функции и никогда не поддерживаются в Windows 7. Даже в Windows 10 есть устройства, которые также не поддерживают эту функцию, поэтому выне может полагаться на то, что он работает 100% времени.
Чтобы получить доступ к записи CPU, вам нужно использовать D311_USAGE_DYNAMIC
.Это может повлиять на производительность использования этой текстуры для рендеринга, поэтому, как правило, вы используете D3D11_USAGE_DEFAULT
без доступа для записи ЦП.Для инициализации таких текстур вы используете другую текстуру, которая установлена на D3D11_USAGE_STAGING
, которая всегда поддерживает доступ для записи ЦП, а затем копирует в ресурс DEFAULT
, или вы можете использовать UpdateSubresource
.
Для исходного кода C ++.Пример выполнения всего этого, включая автоматическое отображение, см. WICTextureLoader
в Набор инструментов DirectX для DX11
Пакет обновления 1 (SP1) для Windows 7 можно обновить до среды выполнения DirectX 11.1.используя KB2670838 , и на данный момент он довольно широко используется.Существуют некоторые ограничения при работе в Windows 7, перечисленные в MSDN , в первую очередь в том, что она поддерживает только «программные» функции и не «аппаратные» функции, для которых требуются драйверы WDDM 1.2.DirectX 11.2 Runtime или более поздняя версия не поддерживается для Windows 7.