SwapChain::SwapChain(Device& device, Window& window) : device_(device), window_(window) { MEMBER_LOG_STRING_TAG(L"SwapChain"); MEMBER_LOG << L"Initializing for window: " << window_.GetWindowProperties().name; dxgiSwapChainDesc_.BufferDesc.Width = window.GetWindowProperties().dimensions.GetHeight(); dxgiSwapChainDesc_.BufferDesc.Height = window.GetWindowProperties().dimensions.GetWidth(); // TODO: Add custom refresh rate dxgiSwapChainDesc_.BufferDesc.RefreshRate.Numerator = 0; dxgiSwapChainDesc_.BufferDesc.RefreshRate.Denominator = 0; // TODO: Add custom formatting dxgiSwapChainDesc_.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; dxgiSwapChainDesc_.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; dxgiSwapChainDesc_.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; // TODO: Add multi sampling options dxgiSwapChainDesc_.SampleDesc.Count = 1; dxgiSwapChainDesc_.SampleDesc.Quality = 0; dxgiSwapChainDesc_.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; dxgiSwapChainDesc_.BufferCount = 2; dxgiSwapChainDesc_.OutputWindow = window.GetHWnd(); // Set this to true now, change actual fullscreen state on resize dxgiSwapChainDesc_.Windowed = TRUE; dxgiSwapChainDesc_.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; dxgiSwapChainDesc_.Flags = 0; e_throw_com_ret_error(device.GetDXGIFactory() .CreateSwapChain(&device.GetD3DDevice(), &dxgiSwapChainDesc_, ReceiveCOM(dxgiSwapChain_)), "IDXGIFactory::CreateSwapChain"); // Finish setup in Resize Resize(window.GetWindowProperties().dimensions); }