Я пытаюсь инициализировать Direct3D11 в C ++. На машинах, на которых установлена Visual Studio (все они работают в Windows 10), он работает нормально.
На других компьютерах (без установленной Visual Studio, Windows 10 и 7) возвращается E_INVALIDARG.
Флаг P_FeatureLevelsSupported говорит 0 на этих компьютерах. По моему это говорит D3D_FEATURE_LEVEL_11_1.
Так что я думаю, что это как-то связано с установкой DirectX или, возможно, из-за отсутствия SDK (но разве это не странно?: D)
Запустив dxdiag, я знаю, что эти машины поддерживают DirectX11_0.
Что-то мне нужно установить?
Программное обеспечение должно работать на ПК наших клиентов.
Код, который вызывает ошибку:
const D3D_FEATURE_LEVEL lvl[] = { D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1,
};
D3D_FEATURE_LEVEL P_FeatureLevelsSupported;//see microsoft documentation, we use 11_1 or 11_0 if 11_1 is not supported by the client machine
//https://docs.microsoft.com/en-us/windows/desktop/direct3d11/overviews-direct3d-11-devices-initialize
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_DEBUG, lvl, _countof(lvl), D3D11_SDK_VERSION, &swapChainDesc, &swapChain, &device, &P_FeatureLevelsSupported, &deviceContext);
if(result == E_INVALIDARG) //check with FEATURE_LEVEL_11_0
D3D11CreateDeviceAndSwapChain(NULL,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_DEBUG,
&lvl[1],
_countof(lvl) - 1,
D3D11_SDK_VERSION,
&swapChainDesc,
&swapChain,
&device,
&P_FeatureLevelsSupported,
&deviceContext);
Заранее спасибо 🙂
Вы просите создать отлаживать устройство, передав в D3D11_CREATE_DEVICE_DEBUG
, Для этого вам необходимо иметь D3D11 * SDKLayers.dll установленный у вас, вероятно, на ваших машинах разработчика. Увидеть Вот для деталей, которые включают в себя:
Уровень отладки Уровень отладки предоставляет обширный дополнительный параметр
и проверка согласованности (например, проверка связи шейдеров и
привязка ресурсов, проверка согласованности параметров и создание отчетов
описания ошибок).Чтобы создать устройство, поддерживающее уровень отладки, необходимо установить
DirectX SDK (чтобы получить D3D11SDKLayers.dll), а затем укажите
Флаг D3D11_CREATE_DEVICE_DEBUG при вызове D3D11CreateDevice
функция или функция D3D11CreateDeviceAndSwapChain. Если вы бежите
ваше приложение с включенным слоем отладки, приложение будет
существенно медленнее. Но, чтобы убедиться, что ваше приложение очищено от
ошибки и предупреждения, прежде чем отправить его, используйте слой отладки. Для большего
info, см. Использование слоя отладки для отладки приложений.Заметка
Для Windows 8, чтобы создать устройство, которое поддерживает уровень отладки,
установить Windows Software Development Kit (SDK) для Windows 8, чтобы
получить D3D11_1SDKLayers.dll.
Если вам не нужно отладочное устройство на компьютере клиента, просто удалите этот флаг.
Других решений пока нет …