Создание Swapchain и устройства DirectX10 путем передачи IDXGIAdapter

Я пытаюсь создать устройство и цепочку обмена из IDXGIAdapter. Весь мой код успешно выполняется до вызова CreateSwapChain, который возвращает DXGI_ERROR_INVALID_CALL.

MSDN сообщает, что возврат DXGI_ERROR_INVALID_CALL может произойти, когда DXGI_SWAP_CHAIN_DESC равен нулю или IDXGISwapChain ** равен нулю.

Я не совсем уверен, что значит «IDXGISwapChain ** is null», поскольку он является выходным (я предполагаю, что это когда вы на самом деле набираете 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]