#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; }