1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/*
* Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved.
*
* NVIDIA CORPORATION and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto. Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA CORPORATION is strictly prohibited.
*/
#ifndef RENDERER_SHADOW_H
#define RENDERER_SHADOW_H
#include <DirectXMath.h>
#include "Utils.h"
#include "gfsdk_shadowlib.h"
#include <string>
class CFirstPersonCamera;
class Renderer;
class RendererShadow
{
public:
RendererShadow();
~RendererShadow();
void createResources(ID3D11Device *pd3dDevice, ID3D11DeviceContext* context, CFirstPersonCamera* camera);
void setScreenResolution(float FovyRad, UINT Width, UINT Height, UINT uSampleCount, ID3D11DepthStencilView* pReadOnlyDSV);
void changeShadowSettings(UINT Width, UINT Height, UINT uSampleCount, ID3D11DepthStencilView* pReadOnlyDSV);
void renderShadowMaps(Renderer* renderer);
void renderShadowBuffer(ID3D11ShaderResourceView* pDepthStencilSRV, ID3D11ShaderResourceView* pResolvedDepthStencilSRV);
void modulateShadowBuffer(ID3D11RenderTargetView* pOutputRTV);
void displayShadowMaps(ID3D11RenderTargetView* pOutputRTV, UINT Width, UINT Height);
void displayMapFrustums(ID3D11RenderTargetView* pOutputRTV, ID3D11DepthStencilView* pDSV);
void displayShadowBuffer(ID3D11RenderTargetView* pOutputRTV);
void toggleDisplayCascades(bool bToggle);
void drawUI();
private:
void reloadBuffers();
void ReleaseResources();
GFSDK_ShadowLib_Context* m_shadowLibContext;
GFSDK_ShadowLib_ShaderResourceView m_shadowBufferSRV;
GFSDK_ShadowLib_Map* m_shadowMapHandle;
GFSDK_ShadowLib_MapDesc m_SMDesc;
GFSDK_ShadowLib_BufferDesc m_SBDesc;
GFSDK_ShadowLib_MapRenderParams m_SMRenderParams;
GFSDK_ShadowLib_Buffer* m_shadowBufferHandle;
GFSDK_ShadowLib_BufferRenderParams m_SBRenderParams;
GFSDK_ShadowLib_TempResources m_tempResources;
GFSDK_ShadowLib_Texture2D m_downsampledShadowMap;
CFirstPersonCamera* m_camera;
// params
bool m_PCSSEnabled;
float m_lightSize;
DirectX::XMFLOAT3 m_lightPos;
DirectX::XMFLOAT3 m_lightLookAt;
DirectX::XMFLOAT3 m_shadowColor;
GFSDK_ShadowLib_PCSSPenumbraParams m_PCSSParams;
float m_softShadowTestScale;
gfsdk_float3 m_worldSpaceBBox0;
gfsdk_float3 m_worldSpaceBBox1;
};
#endif
|