58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
#include "DepthBuffer.h"
|
|
|
|
DepthBuffer::DepthBuffer(ID3D11Device* device, UINT width, UINT height)
|
|
: m_device(device), m_width(width), m_height(height), m_depthBuffer(nullptr), m_depthStencilView(nullptr)
|
|
{
|
|
}
|
|
|
|
DepthBuffer::~DepthBuffer()
|
|
{
|
|
if (m_depthStencilView) m_depthStencilView->Release();
|
|
if (m_depthBuffer) m_depthBuffer->Release();
|
|
}
|
|
|
|
bool DepthBuffer::Initialize()
|
|
{
|
|
// Create a depth buffer with a typeless format
|
|
D3D11_TEXTURE2D_DESC desc = {};
|
|
desc.Width = m_width;
|
|
desc.Height = m_height;
|
|
desc.MipLevels = 1;
|
|
desc.ArraySize = 1;
|
|
desc.Format = DXGI_FORMAT_R32_TYPELESS; // Typeless format
|
|
desc.SampleDesc.Count = 1;
|
|
desc.Usage = D3D11_USAGE_DEFAULT;
|
|
desc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; // Add shader resource binding
|
|
desc.CPUAccessFlags = 0;
|
|
desc.MiscFlags = 0;
|
|
|
|
HRESULT hr = m_device->CreateTexture2D(&desc, nullptr, &m_depthBuffer);
|
|
if (FAILED(hr))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Create DepthStencilView
|
|
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc = {};
|
|
dsvDesc.Format = DXGI_FORMAT_D32_FLOAT; // Depth format
|
|
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
|
|
dsvDesc.Texture2D.MipSlice = 0;
|
|
hr = m_device->CreateDepthStencilView(m_depthBuffer, &dsvDesc, &m_depthStencilView);
|
|
if (FAILED(hr))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
ID3D11Texture2D* DepthBuffer::GetDepthBuffer()
|
|
{
|
|
return m_depthBuffer;
|
|
}
|
|
|
|
ID3D11DepthStencilView* DepthBuffer::GetDepthStencilView()
|
|
{
|
|
return m_depthStencilView;
|
|
}
|