2015-09-06 6 views
0

Я создаю мой Swapchain как этотIDXGIFactory4 :: CreateSwapChain возвращает DXGI_ERROR_INVALID_CALL

ComPtr<IDXGIFactory4> factory; 
CreateDXGIFactory1(__uuidof(IDXGIFactory4), (void**)&factory); 

DXGI_SWAP_CHAIN_DESC scd; 
ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC)); 
scd.BufferCount = 2; 
scd.BufferDesc.Width = mWidth; 
scd.BufferDesc.Height = mHeight; 
scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
scd.OutputWindow = mHwnd; 
scd.Windowed = true; 
scd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; 
scd.SampleDesc.Count = 1; 
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; 

ComPtr<IDXGISwapChain> swapchain; 
factory->CreateSwapChain(mQueue.Get(), &scd, &swapchain); 

В режиме отладки, это работает отлично, но в версии (как в x86 или x64), CreateSwapChain возвращает DXGI_ERROR_INVALID_CALL.

Может кто-нибудь объяснить мне, почему это работает в режиме отладки, но не в режиме деблокирования?

Спасибо!

Примечание: я использую Direct3D 12

+1

Вы должны заменить аргументы пару UUID-PTR с [ 'IID_PPV_ARGS'] (https://msdn.microsoft.com/en-us /library/windows/desktop/ee330727(v=vs.85).aspx). Таким образом, вы избегаете случайного несоответствия объявленному типу. Так что это будет 'CreateDXGIFactory1 (IID_PPV_ARGS (& factory));' – MooseBoys

+0

Спасибо за подсказку! – Rakete1111

+0

Для любых поздних пользователей CreateSwapChain также не работает, если вы пытаетесь быть слишком умными с объявлением формата, когда внутри класса, объявив формат как статический const в заголовке класса, вы немного почесываете голову. – Phill

ответ

0

Я нашел решение! Yay :)

Я забыл связать эти библиотеки DX12 ....