#include "ShadowMapBuffer.h" ShadowMapBuffer::ShadowMapBuffer(ID3D11Device *device, UINT width, UINT height) : m_device(device), m_width(width), m_height(height), m_shaderResourceView(nullptr), m_depthBuffer(device, width, height), m_samplerState(device) { } ShadowMapBuffer::~ShadowMapBuffer() { if (m_shaderResourceView) m_shaderResourceView->Release(); } bool ShadowMapBuffer::Initialize() { if (!m_depthBuffer.Initialize()) { return false; } if (!m_samplerState.Initialize()) { return false; } // Create ShaderResourceView for the depth buffer D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; srvDesc.Format = DXGI_FORMAT_R32_FLOAT; // Shader-readable format srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MipLevels = 1; srvDesc.Texture2D.MostDetailedMip = 0; HRESULT hr = m_device->CreateShaderResourceView(m_depthBuffer.GetDepthBuffer(), &srvDesc, &m_shaderResourceView); if (FAILED(hr)) { OutputDebugStringA("Failed to create ShaderResourceView for ShadowMapBuffer.\n"); return false; } return true; } void ShadowMapBuffer::SetRenderTarget(ID3D11DeviceContext *deviceContext) { deviceContext->OMSetRenderTargets(0, nullptr, m_depthBuffer.GetDepthStencilView()); } void ShadowMapBuffer::ResetRenderTarget(ID3D11DeviceContext *deviceContext) { ID3D11RenderTargetView *nullRTV = nullptr; deviceContext->OMSetRenderTargets(1, &nullRTV, nullptr); } ID3D11DepthStencilView *ShadowMapBuffer::GetDepthStencilView() { return m_depthBuffer.GetDepthStencilView(); }