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
Вы должны заменить аргументы пару 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
Спасибо за подсказку! – Rakete1111
Для любых поздних пользователей CreateSwapChain также не работает, если вы пытаетесь быть слишком умными с объявлением формата, когда внутри класса, объявив формат как статический const в заголовке класса, вы немного почесываете голову. – Phill