!B (CE-17243) (Shaders) Adjusted MAX_CLIPVOLUMES constant to be in sync with the...
[CRYENGINE.git] / Code / CryEngine / RenderDll / XRenderD3D9 / GraphicsPipeline / ClipVolumes.h
blobb11255d58431ae7f04c7e2e53561b1e703975320
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include "Common/GraphicsPipelineStage.h"
6 #include "Common/PrimitiveRenderPass.h"
7 #include "Common/FullscreenPass.h"
8 //#include "Common/UtilityPasses.h"
10 #if !CRY_PLATFORM_ORBIS
11 #define FEATURE_RENDER_CLIPVOLUME_GEOMETRY_SHADER
12 #endif
14 class CClipVolumesStage : public CGraphicsPipelineStage
16 public:
17 static const uint32 MaxDeferredClipVolumes = BIT_STENCIL_INSIDE_CLIPVOLUME - 1; // Keep in sync with MAX_CLIPVOLUMES in DeferredShading.cfx / ShadowBlur.cfx
19 public:
20 CClipVolumesStage();
21 virtual ~CClipVolumesStage();
23 CGpuBuffer* GetClipVolumeInfoBuffer () { return &m_clipVolumeInfoBuf; }
24 CTexture* GetClipVolumeStencilVolumeTexture() const { return m_pClipVolumeStencilVolumeTex; }
26 bool IsOutdoorVisible() const { CRY_ASSERT(m_bClipVolumesValid); return m_bOutdoorVisible; }
28 void Init();
29 void Destroy();
30 void Update() final;
31 bool IsStageActive(EShaderRenderingFlags flags) const final
33 if (flags & EShaderRenderingFlags::SHDF_FORWARD_MINIMAL)
34 return false;
36 return true;
39 void Prepare();
40 void Execute();
42 public:
43 struct SClipVolumeInfo
45 float data;
48 void GenerateClipVolumeInfo();
50 private:
51 void PrepareVolumetricFog();
52 void ExecuteVolumetricFog();
54 private:
55 CPrimitiveRenderPass m_stencilPass;
56 CPrimitiveRenderPass m_blendValuesPass;
57 CFullscreenPass m_stencilResolvePass;
59 #ifdef FEATURE_RENDER_CLIPVOLUME_GEOMETRY_SHADER
60 CPrimitiveRenderPass m_volumetricStencilPass;
61 #else
62 std::vector<std::unique_ptr<CPrimitiveRenderPass>> m_volumetricStencilPassArray;
63 std::vector<std::unique_ptr<CFullscreenPass>> m_resolveVolumetricStencilPassArray;
64 #endif
65 std::vector<std::unique_ptr<CFullscreenPass>> m_jitteredDepthPassArray;
67 CRenderPrimitive m_stencilPrimitives[MaxDeferredClipVolumes * 2];
68 CRenderPrimitive m_blendPrimitives[MaxDeferredClipVolumes];
69 #ifdef FEATURE_RENDER_CLIPVOLUME_GEOMETRY_SHADER
70 CRenderPrimitive m_stencilPrimitivesVolFog[MaxDeferredClipVolumes * 2];
71 #endif
73 CRY_ALIGN(16) Vec4 m_clipVolumeShaderParams[MaxDeferredClipVolumes];
74 uint32 m_nShaderParamCount;
76 CGpuBuffer m_clipVolumeInfoBuf;
78 CTexture* m_pBlendValuesRT;
79 CTexture* m_pDepthTarget;
81 CTexture* m_pClipVolumeStencilVolumeTex;
82 #ifdef FEATURE_RENDER_CLIPVOLUME_GEOMETRY_SHADER
83 CTexture* m_depthTargetVolFog;
84 #else
85 std::vector<CTexture*> m_pClipVolumeStencilVolumeTexArray;
86 #endif
87 std::vector<ResourceViewHandle> m_depthTargetArrayVolFog;
89 int32 m_cleared;
90 float m_nearDepth;
91 float m_raymarchDistance;
93 bool m_bClipVolumesValid;
94 bool m_bBlendPassReady;
95 bool m_bOutdoorVisible;