// Copyright 2019 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #include "VideoBackends/D3D/SwapChain.h" #include "VideoBackends/D3D/DXTexture.h" namespace DX11 { SwapChain::SwapChain(const WindowSystemInfo& wsi, IDXGIFactory* dxgi_factory, ID3D11Device* d3d_device) : D3DCommon::SwapChain(wsi, dxgi_factory, d3d_device) { } SwapChain::~SwapChain() = default; std::unique_ptr SwapChain::Create(const WindowSystemInfo& wsi) { std::unique_ptr swap_chain = std::make_unique(wsi, D3D::dxgi_factory.Get(), D3D::device.Get()); if (!swap_chain->CreateSwapChain(WantsStereo())) return nullptr; return swap_chain; } bool SwapChain::CreateSwapChainBuffers() { ComPtr texture; HRESULT hr = m_swap_chain->GetBuffer(0, IID_PPV_ARGS(&texture)); CHECK(SUCCEEDED(hr), "Get swap chain buffer"); if (FAILED(hr)) return false; m_texture = DXTexture::CreateAdopted(texture.Get()); if (!m_texture) return false; m_framebuffer = DXFramebuffer::Create(m_texture.get(), nullptr); if (!m_framebuffer) return false; return true; } void SwapChain::DestroySwapChainBuffers() { m_framebuffer.reset(); m_texture.reset(); } } // namespace DX11