Я пытаюсь инициализировать 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);
Заранее спасибо:)