#include "render/dx11/ISwapChain11.h" #include #include "render/dx11/ITexture2D11.h" namespace LifeGraphics { ISwapChain11::ISwapChain11(ID3D11Device* device, LifeCore::IRenderWindow* wnd){ IDXGIDevice* dxgi_dev; IDXGIAdapter* dxgi_adapter; IDXGIFactory* gxgi_factory; DXGI_SWAP_CHAIN_DESC sd; ZeroMemory(&sd, sizeof(sd)); //fill swap chain description parameters sd.BufferCount = 1; sd.BufferDesc.Width = wnd->GetWidth(); sd.BufferDesc.Height = wnd->GetHeight(); sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = (HWND)wnd->GetWindowHandle(); sd.Windowed = true; sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; device->QueryInterface(__uuidof(IDXGIDevice), (void**)(&dxgi_dev)); dxgi_dev->GetParent(__uuidof(IDXGIAdapter), (void**)(&dxgi_adapter)); dxgi_adapter->GetParent(__uuidof(IDXGIFactory), (void**)(&gxgi_factory)); // dxgi_adapter->EnumOutputs(0, &pDXGIOutput); gxgi_factory->CreateSwapChain(device, &sd, &swap_chain); gxgi_factory->MakeWindowAssociation((HWND)wnd->GetWindowHandle(), DXGI_MWA_NO_ALT_ENTER | DXGI_MWA_NO_WINDOW_CHANGES); ID3D11Texture2D* back_buffer_raw; ID3D11RenderTargetView* back_buffer_rtv; swap_chain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&back_buffer_raw); device->CreateRenderTargetView(back_buffer_raw, NULL, &back_buffer_rtv); back_buffer = new LifeGraphics::ITexture2D11(device); back_buffer->FromTexture(back_buffer_raw); back_buffer->addRenderTargetView(new LifeGraphics::IRenderTargetView11(back_buffer_rtv)); D3D11_TEXTURE2D_DESC dDesc = {0}; dDesc.ArraySize = 1; dDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; dDesc.CPUAccessFlags = 0; dDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; dDesc.MipLevels = 1; dDesc.SampleDesc.Count = 1; dDesc.SampleDesc.Quality = 0; dDesc.Usage = D3D11_USAGE_DEFAULT; dDesc.Width = wnd->GetWidth(); dDesc.Height = wnd->GetHeight(); ID3D11Texture2D* depth_buffer_raw; ID3D11DepthStencilView* depth_buffer_raw_dsv; device->CreateTexture2D(&dDesc, NULL, &depth_buffer_raw); device->CreateDepthStencilView(depth_buffer_raw,NULL, &depth_buffer_raw_dsv); depth_buffer = new LifeGraphics::ITexture2D11(device); depth_buffer->FromTexture(depth_buffer_raw); depth_buffer->addDepthStencilView(depth_buffer_raw_dsv); } LifeGraphics::ITexture2D* ISwapChain11::GetBackBuffer(uint8 id){ return static_cast(back_buffer); } LifeGraphics::ITexture2D* ISwapChain11::GetDepthBuffer(uint8 id){ return static_cast(depth_buffer); } void ISwapChain11::Resize(uint16 width, uint16 height){ } void ISwapChain11::Present(){ swap_chain->Present(0,0); } ISwapChain11::~ISwapChain11(){ } }