Не удалось инициализировать Direct3d

Я пытаюсь запустить exe с этого учебного веб-сайта Directx-11: tutorial5 (exe в конце страницы), но я получаю сообщение об ошибке «Не удалось инициализировать Direct3d».

Я получаю ту же ошибку, когда загружаю решение и запускаю его в Visual Studio 2013 или Visual Studio 2010.

Что мне не хватает? Как я могу запускать приложения Directx-11 на моем компьютере?

Спасибо!


person recursion1212    schedule 02.05.2014    source источник


Ответы (1)


Здесь произошла ошибка, вы должны проверить результат функции Initialize, чтобы узнать, в чем ошибка.

// Initialize the Direct3D object.
result = m_D3D->Initialize(screenWidth, screenHeight, VSYNC_ENABLED, hwnd, FULL_SCREEN, SCREEN_DEPTH, SCREEN_NEAR);
if(!result)
{
    MessageBox(hwnd, L"Could not initialize Direct3D.", L"Error", MB_OK);
    return false;
}

Еще один полезный совет - включить режим DEBUG при создании цепочки устройств и подкачки. Попробуйте использовать следующий код для включения режима отладки при создании устройства (в d3dclass.cpp добавьте следующий код перед вызовом D3D11CreateDeviceAndSwapChain и не забудьте установить для третьего параметра этой функции значение flags)

    UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

#if defined( DEBUG ) || defined( _DEBUG )
    flags |= D3D11_CREATE_DEVICE_DEBUG;
#endif 

// Create the swap chain, Direct3D device, and Direct3D device context.
    result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, flags, 0, &featureLevel, 1, 
        D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);
    if(FAILED(result))
    {
        return false;
    }

Скомпилируйте и запустите программу в режиме отладки и посмотрите результат в окне вывода VS.

person zdd    schedule 02.05.2014
comment
Спасибо за ваш быстрый ответ! Я попробую это и посмотрю, что говорит VS. - person recursion1212; 03.05.2014
comment
Привет, я попытался включить DEBUG и установить четвертый параметр на flags, как вы предложили. Результат возвращается как ложь в обоих местах. ScreenWidth = 1280, screenHeight = 800. Это то, что я вижу в окне вывода (последние 2 строки): Engine.exe: выгружено, C: \ Windows \ SysWOW64 \ cfgmgr32.dll, Engine.exe: загружено C: \ Program Files (x86) \ Internet Download Manager \ idmmkb.dll ', не удается найти или открыть файл PDB - person recursion1212; 03.05.2014
comment
Вы должны установить флаги в качестве третьего параметра. - person zdd; 03.05.2014
comment
Когда я делаю это третьим аргументом, я получаю сообщение об ошибке: для преобразования целочисленного типа в тип указателя требуется reinterpret_cast, приведение в стиле C или приведение в стиле функции. Прототип функции HRESULT WINAPI D3D11CreateDeviceAndSwapChain (IDXGIAdapter * pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Флаги, (FeatureLevels) ФИКС D3D_FEATURE_LEVEL * pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, ПОСТ DXGI_SWAP_CHAIN_DESC * pSwapChainDesc, IDXGISwapChain ** ppSwapChain, ID3D11Device ** ppDevice, D3D_FEATURE_LEVEL * pFeatureLevel, ID3D11DeviceContext ** ppImmediateContext); - person recursion1212; 04.05.2014
comment
Можете ли вы установить точку останова для этой функции и выполнить пошаговую отладку, чтобы увидеть вывод из окна вывода Visual Studio? - person zdd; 04.05.2014
comment
Я не мог войти в функцию D3D11CreateDeviceAndSwapChain. Однако в результате он вернул значение -2005270524. Несмотря на то, что я нахожусь в режиме отладки, единственное, что я вижу в окне вывода, - это (последние 3 строки) 'Engine.exe': выгружено 'C: \ Windows \ SysWOW64 \ setupapi.dll' 'Engine.exe': выгружено ' C: \ Windows \ SysWOW64 \ DevObj.dll 'Engine.exe': выгружен 'C: \ Windows \ SysWOW64 \ cfgmgr32.dll' - person recursion1212; 04.05.2014
comment
позвольте нам продолжить обсуждение в чате - person zdd; 04.05.2014
comment
Пожалуйста, дайте скриншот окна вывода вашего VS 2013, я хочу взглянуть. - person zdd; 04.05.2014
comment
Я понятия не имею, кажется, что уровень отладки не работает. В сеансе отладки вы можете навести указатель мыши на результат переменной, чтобы увидеть строку ошибки? - person zdd; 04.05.2014
comment
Строка ошибки не появляется, я получаю только код ошибки или какое-то случайное отрицательное значение. - person recursion1212; 05.05.2014