Files
2025-05-13 02:46:21 +03:00

45 lines
1.4 KiB
C++

#include "CustomSwapChain.h"
namespace LifeGraphics
{
CustomSwapChain::CustomSwapChain(uint16 width, uint16 height, uint16 buffer_cnt, LifeGraphics::IRenderer* host, IDataFormat format)
:back_buffer(nullptr), depth_buffer(nullptr){
if(!host){
sc_width = sc_height = sc_buffers = 0;
return;
}
sc_width = width;
sc_height = height;
sc_buffers = buffer_cnt;
sc_format = format;
sc_renderer = host;
RebuildBuffers();
}
LifeGraphics::ITexture2D* CustomSwapChain::GetBackBuffer(uint8 id){
return back_buffer;
}
LifeGraphics::ITexture2D* CustomSwapChain::GetDepthBuffer(uint8 id){
return depth_buffer;
}
void CustomSwapChain::Resize(uint16 width, uint16 height){
if(width != sc_width || height != sc_height){
sc_width = width;
sc_height = height;
RebuildBuffers();
Event_Resized.Invoke(this);
}
}
void CustomSwapChain::Present(){
Event_Presented.Invoke(this);
}
void CustomSwapChain::RebuildBuffers(){
if(back_buffer)
back_buffer->Release();
if(depth_buffer)
depth_buffer->Release();
back_buffer = sc_renderer->CreateRenderTarget(sc_width, sc_height, sc_format);
depth_buffer = sc_renderer->CreateDepthTarget(sc_width, sc_height, FORMAT_D24_UNORM_S8_UINT);
}
}