51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
#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();
|
|
}
|