`E_FAIL` при создании DirectX 10 Device and Swap Chain - _com_error - PullRequest
0 голосов
/ 31 марта 2012

Я работаю над некоторыми простыми учебными пособиями по DX и наткнулся на раннюю загадку.Я работаю как на старом ноутбуке, так и на новом ПК, поэтому я использую d3d10_1.lib, который позволяет мне использовать 9 функций.ПК, тем не менее, поддерживает все, вплоть до DX11, так что с этим ничего не должно быть проблемой.

Итак, вот функция, которая дает сбой:

bool DirectX9Renderer::Initialise(HWND* handle)
{
    //window handle
    hWnd = handle;

    //get window dimensions
    RECT rc;
    GetClientRect( *hWnd, &rc );
    UINT width = rc.right - rc.left;
    UINT height = rc.bottom - rc.top;

    DXGI_SWAP_CHAIN_DESC swapChainDesc;
    ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

    //set buffer dimensions and format
    swapChainDesc.BufferCount = 2;
    swapChainDesc.BufferDesc.Width = width;
    swapChainDesc.BufferDesc.Height = height;
    swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;;

    //set refresh rate
    swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;

    //sampling settings
    swapChainDesc.SampleDesc.Quality = 0;
    swapChainDesc.SampleDesc.Count = 1;

    //output window handle
    swapChainDesc.OutputWindow = *hWnd;
    swapChainDesc.Windowed = true;    

    HRESULT result = D3D10CreateDeviceAndSwapChain1( // this is line 57
        NULL, 
        D3D10_DRIVER_TYPE_HARDWARE,
        NULL, 
        D3D10_CREATE_DEVICE_SINGLETHREADED | D3D10_CREATE_DEVICE_DEBUG,
        D3D10_FEATURE_LEVEL_9_1,
        D3D10_1_SDK_VERSION,
        &swapChainDesc, 
        &pSwapChain,
        &pD3DDevice
    );
    if(FAILED(result))
    {
        return FatalError("D3D device creation failed");
    }

            // there's more stuff after this, but I don't get that far
    }

Итак, вызов D3D10CreateDeviceAndSwapChain1 завершается с менее полезным кодом ошибки E_FAIL.

В выводе отладки также есть строка:

First-chance exception at 0x770f56c4 in TileTest.exe: Microsoft C++ exception: _com_error at memory location 0x00b6e8d4..

Я пытался использовать D3D10_DRIVER_TYPE_REFERENCE и другие D3D10_FEATURE_LEVEL_xx значения, но это не похоже на работу.

Ответы [ 2 ]

0 голосов
/ 23 марта 2014

Я пытался создать устройство внутри виртуальной машины VMware. Сбой (устройство оставалось NULL), пока я не изменил запрошенную FEATURE_LEVEL с D3D10_FEATURE_LEVEL_10_1 на D3D10_FEATURE_LEVEL_9_3. Я слышал, что это также помогает другим компьютерам с реальным оборудованием.

0 голосов
/ 31 марта 2012

Я думаю, что проблема, возможно, была связана с D3D10_CREATE_DEVICE_FLAG, который я послал. Я изменил D3D10_CREATE_DEVICE_SINGLETHREADED | D3D10_CREATE_DEVICE_DEBUG на 0, и теперь он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...