2012-12-21 60 views
0

我试图创建一个从IDXGIAdapter设备和swapchain创建的DirectX10 Swapchain和设备。我所有的代码都会成功,直到调用CreateSwapChain,它将返回DXGI_ERROR_INVALID_CALL。通过传递IDXGIAdapter

MSDN说,当DXGI_SWAP_CHAIN_DESC为空或IDXGISwapChain **为空可能发生DXGI_ERROR_INVALID_CALL的回报。

林真的不知道这是什么意思的“IDXGISwapChain **为空”看到它是输出(即时猜测它是当你真正键入NULL。

我swapchain被定义为...

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; 

}; 

回答

0

你试图归零的SwapChainDesc内存分配值过吗?你没有指定结构的所有值,所以除非调零,否则一些参数可能无效。

尝试:

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

SwapChainDesc.BufferCount = 1; 
.... 
+0

这是它!谢谢一堆!我正在全部通过MSDN寻找答案 – user1889523

+0

我只知道这一点,因为这发生在我身上。 – yiding