Files
LifeProject/LifeGraphics/render/dx11/ISwapChain11.cpp
T

85 lines
3.2 KiB
C++
Raw Normal View History

2025-05-13 02:46:21 +03:00
#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(){
}
}