0

IDXGIAdapterからデバイスとスワップチェーンを作成しようとしています。DXGI_ERROR_INVALID_CALLを返すCreateSwapChainが呼び出されるまで、すべてのコードは成功します。

MSDNによると、DXGI_ERROR_INVALID_CALLが返されるのは、DXGI_SWAP_CHAIN_DESCがnullの場合、またはIDXGISwapChain**がnullの場合です。

「IDXGISwapChain**is null」が出力であるため、それが何を意味するのかよくわかりません(実際にNULLと入力した場合だと思います。

私のスワップチェーンは次のように定義されています...

IDXGISwapChain* m_pSwapChain;

そして私の他のコードは...

IDXGIAdapter * pPrimaryAdapter = m_vAdapters.at(0); 

HRESULT hr = D3D10CreateDevice(pPrimaryAdapter,
                                D3D10_DRIVER_TYPE_HARDWARE,
                                NULL,
                                NULL,//D3D10_CREATE_DEVICE_SINGLETHREADED
                                D3D10_SDK_VERSION,
                                &m_pD3DDevice);


if(hr != S_OK)
{
    MessageBox(NULL, L"Error ###: Creation of Direct3D10 Device Failed", 0, 0);
    return false;
}

//m_pDXGIFactory->MakeWindowAssociation(hWnd, DXGI_MWA_NO_ALT_ENTER ); 
if(FAILED(m_pDXGIFactory->MakeWindowAssociation(hWnd, 0 )))
{
    MessageBox(0, L"Error ###: MakeWindowAssociation Failed", 0,0);
    return false;
}

IDXGIDevice * pDXGIDevice;
if(FAILED(m_pD3DDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice)))
{
    MessageBox(0, L"QueryInterface pDXGIDevice Failed", 0,0);
    return false;
}




DXGI_SWAP_CHAIN_DESC SwapChainDesc;

    SwapChainDesc.BufferCount = 1;
    SwapChainDesc.BufferDesc.Width = 800;
    SwapChainDesc.BufferDesc.Height = 600;
    SwapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    SwapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    SwapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    SwapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    SwapChainDesc.OutputWindow = hWnd;
    SwapChainDesc.SampleDesc.Count = 1;
    SwapChainDesc.SampleDesc.Quality = 0;
    SwapChainDesc.Windowed = TRUE;



hr = m_pDXGIFactory->CreateSwapChain(pDXGIDevice, &SwapChainDesc, &m_pSwapChain);

switch(hr)
{
case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE:
    {
        MessageBox(NULL, L"CreateSwapChainFailure: DXGI_ERROR_NOT_CURRENTLY_AVAILABLE", 0,0);
        return false;
    }break;
case DXGI_ERROR_INVALID_CALL:
    {
        MessageBox(NULL, L"CreateSwapChainFailure: DXGI_ERROR_INVALID_CALL", 0, 0);
        return false;
    }break;

};
4

1 に答える 1

0

SwapChainDesc値を割り当てる前にメモリをゼロにしてみましたか? 構造体のすべての値を指定したわけではないため、ゼロに設定しない限り、一部のパラメーターが無効になる可能性があります。

試す:

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

SwapChainDesc.BufferCount = 1;
....
于 2012-12-21T05:48:59.100 に答える