diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-07-18 02:53:29 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-07-18 02:53:29 +0000 |
| commit | 3889adf35dc5473112e8bb8042a772d9b0289e0f (patch) | |
| tree | 89c52a3180931984251022f1552d52b3a853e4de /Components/interface/ShadowMapManager.h | |
| parent | Shadows: improved blending between cascades (diff) | |
| download | DiligentFX-3889adf35dc5473112e8bb8042a772d9b0289e0f.tar.gz DiligentFX-3889adf35dc5473112e8bb8042a772d9b0289e0f.zip | |
Shadows: added VSM mode
Diffstat (limited to 'Components/interface/ShadowMapManager.h')
| -rw-r--r-- | Components/interface/ShadowMapManager.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/Components/interface/ShadowMapManager.h b/Components/interface/ShadowMapManager.h index 14937bb..4cbe182 100644 --- a/Components/interface/ShadowMapManager.h +++ b/Components/interface/ShadowMapManager.h @@ -23,6 +23,7 @@ #include <vector> #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/RenderDevice.h" +#include "../../../DiligentCore/Graphics/GraphicsEngine/interface/DeviceContext.h" #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/Texture.h" #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/TextureView.h" #include "../../../DiligentCore/Common/interface/RefCntAutoPtr.h" @@ -40,15 +41,19 @@ public: struct InitInfo { - TEXTURE_FORMAT Fmt = TEX_FORMAT_UNKNOWN; - Uint32 Resolution = 0; - Uint32 NumCascades = 0; - ISampler* pComparisonSampler = nullptr; + TEXTURE_FORMAT Fmt = TEX_FORMAT_UNKNOWN; + Uint32 Resolution = 0; + Uint32 NumCascades = 0; + ISampler* pComparisonSampler = nullptr; + ISampler* pFilterableShadowMapSampler = nullptr; + int ShadowMode = 0; + bool Is32BitFilterableFmt = false; }; void Initialize(IRenderDevice* pDevice, const InitInfo& initInfo); ITextureView* GetSRV() { return m_pShadowMapSRV; } ITextureView* GetCascadeDSV(Uint32 Cascade){ return m_pShadowMapDSVs[Cascade]; } + ITextureView* GetFilterableSRV() { return m_pFilterableShadowMapSRV; } struct DistributeCascadeInfo { @@ -84,13 +89,29 @@ public: void DistributeCascades(const DistributeCascadeInfo& Info, ShadowMapAttribs& shadowMapAttribs); + void ConvertToFilterable(IDeviceContext* pCtx, const ShadowMapAttribs& ShadowAttribs); + const CascadeTransforms& GetCascadeTranform(Uint32 Cascade) const {return m_CascadeTransforms[Cascade];} private: + void InitializeConversionTechniques(TEXTURE_FORMAT FilterableShadowMapFmt); + void InitializeResourceBindings(); + + int m_ShadowMode = 0; RefCntAutoPtr<IRenderDevice> m_pDevice; RefCntAutoPtr<ITextureView> m_pShadowMapSRV; std::vector<RefCntAutoPtr<ITextureView>> m_pShadowMapDSVs; + RefCntAutoPtr<ITextureView> m_pFilterableShadowMapSRV; + std::vector<RefCntAutoPtr<ITextureView>> m_pFilterableShadowMapRTVs; + RefCntAutoPtr<IBuffer> m_pConversionAttribsBuffer; std::vector<CascadeTransforms> m_CascadeTransforms; + struct ShadowConversionTechnique + { + RefCntAutoPtr<IPipelineState> HorzPassPSO; + RefCntAutoPtr<IPipelineState> VertPassPSO; + RefCntAutoPtr<IShaderResourceBinding> SRB; + }; + ShadowConversionTechnique m_ConversionTech[SHADOW_MODE_EVSM4]; }; } |
