MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / Initialize

Method Initialize

Components/src/ShadowMapManager.cpp:46–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

44}
45
46void ShadowMapManager::Initialize(IRenderDevice* pDevice, IRenderStateCache* pStateCache, const InitInfo& initInfo)
47{
48 VERIFY_EXPR(pDevice != nullptr);
49 VERIFY(initInfo.Format != TEX_FORMAT_UNKNOWN, "Undefined shadow map format");
50 VERIFY(initInfo.NumCascades != 0, "Number of cascades must not be zero");
51 VERIFY(initInfo.Resolution != 0, "Shadow map resolution must not be zero");
52 VERIFY(initInfo.ShadowMode != 0, "Shadow mode is not specified");
53
54 m_pDevice = pDevice;
55 m_pStateCache = pStateCache;
56 m_ShadowMode = initInfo.ShadowMode;
57
58 TextureDesc ShadowMapDesc;
59 ShadowMapDesc.Name = "Shadow map SRV";
60 ShadowMapDesc.Type = RESOURCE_DIM_TEX_2D_ARRAY;
61 ShadowMapDesc.Width = initInfo.Resolution;
62 ShadowMapDesc.Height = initInfo.Resolution;
63 ShadowMapDesc.MipLevels = 1;
64 ShadowMapDesc.ArraySize = initInfo.NumCascades;
65 ShadowMapDesc.Format = initInfo.Format;
66 ShadowMapDesc.BindFlags = BIND_SHADER_RESOURCE | BIND_DEPTH_STENCIL;
67
68 RefCntAutoPtr<ITexture> ptex2DShadowMap;
69 pDevice->CreateTexture(ShadowMapDesc, nullptr, &ptex2DShadowMap);
70
71 m_pShadowMapSRV.Release();
72 m_pShadowMapSRV = ptex2DShadowMap->GetDefaultView(TEXTURE_VIEW_SHADER_RESOURCE);
73 if (initInfo.pComparisonSampler != nullptr)
74 m_pShadowMapSRV->SetSampler(initInfo.pComparisonSampler);
75
76 m_pShadowMapDSVs.clear();
77 m_pShadowMapDSVs.resize(ShadowMapDesc.ArraySize);
78 for (Uint32 iArrSlice = 0; iArrSlice < ShadowMapDesc.ArraySize; iArrSlice++)
79 {
80 TextureViewDesc ShadowMapDSVDesc;
81 ShadowMapDSVDesc.Name = "Shadow map cascade DSV";
82 ShadowMapDSVDesc.ViewType = TEXTURE_VIEW_DEPTH_STENCIL;
83 ShadowMapDSVDesc.FirstArraySlice = iArrSlice;
84 ShadowMapDSVDesc.NumArraySlices = 1;
85 ptex2DShadowMap->CreateView(ShadowMapDSVDesc, &m_pShadowMapDSVs[iArrSlice]);
86 }
87
88 m_pFilterableShadowMapSRV.Release();
89 m_pFilterableShadowMapRTVs.clear();
90 m_pIntermediateSRV.Release();
91 m_pIntermediateRTV.Release();
92 if (initInfo.ShadowMode == SHADOW_MODE_VSM ||
93 initInfo.ShadowMode == SHADOW_MODE_EVSM2 ||
94 initInfo.ShadowMode == SHADOW_MODE_EVSM4)
95 {
96 ShadowMapDesc.BindFlags = BIND_SHADER_RESOURCE | BIND_RENDER_TARGET;
97 if (initInfo.ShadowMode == SHADOW_MODE_VSM)
98 ShadowMapDesc.Format = initInfo.Is32BitFilterableFmt ? TEX_FORMAT_RG32_FLOAT : TEX_FORMAT_RG16_UNORM;
99 else if (initInfo.ShadowMode == SHADOW_MODE_EVSM2)
100 ShadowMapDesc.Format = initInfo.Is32BitFilterableFmt ? TEX_FORMAT_RG32_FLOAT : TEX_FORMAT_RG16_FLOAT;
101 else if (initInfo.ShadowMode == SHADOW_MODE_EVSM4)
102 ShadowMapDesc.Format = initInfo.Is32BitFilterableFmt ? TEX_FORMAT_RGBA32_FLOAT : TEX_FORMAT_RGBA16_FLOAT;
103

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected