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;
};
这是它!谢谢一堆!我正在全部通过MSDN寻找答案 – user1889523
我只知道这一点,因为这发生在我身上。 – yiding