HRESULT WrappedIDXGIFactory2::staticCreateSwapChainForCoreWindow( IDXGIFactory2 *factory, IUnknown *pDevice, IUnknown *pWindow, const DXGI_SWAP_CHAIN_DESC1 *pDesc, IDXGIOutput *pRestrictToOutput, IDXGISwapChain1 **ppSwapChain) { if(WrappedID3D11Device::IsAlloc(pDevice) || WrappedIDXGIDevice::IsAlloc(pDevice) || WrappedIDXGIDevice1::IsAlloc(pDevice) || WrappedIDXGIDevice2::IsAlloc(pDevice) || WrappedIDXGIDevice3::IsAlloc(pDevice) ) { WrappedID3D11Device *wrapDevice = (WrappedID3D11Device *)pDevice; if(WrappedIDXGIDevice::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice *)(IDXGIDevice *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice1::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice1 *)(IDXGIDevice1 *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice2::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice2 *)(IDXGIDevice2 *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice3::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice3 *)(IDXGIDevice3 *)pDevice)->GetD3DDevice(); if(!RenderDoc::Inst().GetCaptureOptions().AllowFullscreen) { RDCWARN("Impossible to disallow fullscreen on call to CreateSwapChainForCoreWindow"); } HRESULT ret = factory->CreateSwapChainForCoreWindow(wrapDevice->GetReal(), pWindow, pDesc, pRestrictToOutput, ppSwapChain); if(SUCCEEDED(ret)) { HWND wnd = NULL; (*ppSwapChain)->GetHwnd(&wnd); *ppSwapChain = new WrappedIDXGISwapChain2(*ppSwapChain, wnd, wrapDevice); } return ret; } else { RDCERR("Creating swap chain with non-hooked device!"); } return factory->CreateSwapChainForCoreWindow(pDevice, pWindow, pDesc, pRestrictToOutput, ppSwapChain); }
HRESULT WrappedIDXGIFactory::staticCreateSwapChain(IDXGIFactory *factory, IUnknown *pDevice, DXGI_SWAP_CHAIN_DESC *pDesc, IDXGISwapChain **ppSwapChain) { if(WrappedID3D11Device::IsAlloc(pDevice) || WrappedIDXGIDevice::IsAlloc(pDevice) || WrappedIDXGIDevice1::IsAlloc(pDevice) #if defined(INCLUDE_DXGI_1_2) || WrappedIDXGIDevice2::IsAlloc(pDevice) || WrappedIDXGIDevice3::IsAlloc(pDevice) #endif ) { WrappedID3D11Device *wrapDevice = (WrappedID3D11Device *)pDevice; if(WrappedIDXGIDevice::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice *)(IDXGIDevice *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice1::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice1 *)(IDXGIDevice1 *)pDevice)->GetD3DDevice(); #if defined(INCLUDE_DXGI_1_2) if(WrappedIDXGIDevice2::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice2 *)(IDXGIDevice2 *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice3::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice3 *)(IDXGIDevice3 *)pDevice)->GetD3DDevice(); #endif if(!RenderDoc::Inst().GetCaptureOptions().AllowFullscreen && pDesc) { pDesc->Windowed = TRUE; } HRESULT ret = factory->CreateSwapChain(wrapDevice->GetReal(), pDesc, ppSwapChain); if(SUCCEEDED(ret)) *ppSwapChain = new WrappedIDXGISwapChain2(*ppSwapChain, pDesc ? pDesc->OutputWindow : NULL, wrapDevice); return ret; } else { RDCERR("Creating swap chain with non-hooked device!"); } return factory->CreateSwapChain(pDevice, pDesc, ppSwapChain); }
HRESULT WrappedIDXGIFactory2::staticCreateSwapChainForHwnd( IDXGIFactory2 *factory, IUnknown *pDevice, HWND hWnd, const DXGI_SWAP_CHAIN_DESC1 *pDesc, const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, IDXGIOutput *pRestrictToOutput, IDXGISwapChain1 **ppSwapChain) { if(WrappedID3D11Device::IsAlloc(pDevice) || WrappedIDXGIDevice::IsAlloc(pDevice) || WrappedIDXGIDevice1::IsAlloc(pDevice) || WrappedIDXGIDevice2::IsAlloc(pDevice) || WrappedIDXGIDevice3::IsAlloc(pDevice) ) { WrappedID3D11Device *wrapDevice = (WrappedID3D11Device *)pDevice; if(WrappedIDXGIDevice::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice *)(IDXGIDevice *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice1::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice1 *)(IDXGIDevice1 *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice2::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice2 *)(IDXGIDevice2 *)pDevice)->GetD3DDevice(); if(WrappedIDXGIDevice3::IsAlloc(pDevice)) wrapDevice = (WrappedID3D11Device *)((WrappedIDXGIDevice3 *)(IDXGIDevice3 *)pDevice)->GetD3DDevice(); if(!RenderDoc::Inst().GetCaptureOptions().AllowFullscreen && pFullscreenDesc) { pFullscreenDesc = NULL; } HRESULT ret = factory->CreateSwapChainForHwnd(wrapDevice->GetReal(), hWnd, pDesc, pFullscreenDesc, pRestrictToOutput, ppSwapChain); if(SUCCEEDED(ret)) *ppSwapChain = new WrappedIDXGISwapChain2(*ppSwapChain, hWnd, wrapDevice); return ret; } else { RDCERR("Creating swap chain with non-hooked device!"); } return factory->CreateSwapChainForHwnd(pDevice, hWnd, pDesc, pFullscreenDesc, pRestrictToOutput, ppSwapChain); }