aboutsummaryrefslogtreecommitdiff
path: root/NvCloth/samples/SampleBase/renderer/RendererShadow.h
blob: d8d027bddefcc980a0aa157e39fea0a3779ff684 (plain) (blame)
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