*
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#include "render/dx11/ISwapChain11.h"
|
||||
#include <Windows.h>
|
||||
#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<ITexture2D*>(back_buffer);
|
||||
}
|
||||
LifeGraphics::ITexture2D* ISwapChain11::GetDepthBuffer(uint8 id){
|
||||
return static_cast<ITexture2D*>(depth_buffer);
|
||||
}
|
||||
void ISwapChain11::Resize(uint16 width, uint16 height){
|
||||
|
||||
}
|
||||
void ISwapChain11::Present(){
|
||||
swap_chain->Present(0,0);
|
||||
}
|
||||
ISwapChain11::~ISwapChain11(){
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user