!I (1670409):
[CRYENGINE.git] / Code / CryEngine / RenderDll / XRenderD3D9 / GraphicsPipeline / WaterRipples.h
blob04e86f75ac53974c39de7837f8a5ac7d4a63c787
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include "Common/GraphicsPipelineStage.h"
6 #include "Common/FullscreenPass.h"
7 #include "Common/UtilityPasses.h"
9 class CWaterRipplesStage : public CGraphicsPipelineStage
11 public:
12 CWaterRipplesStage();
13 ~CWaterRipplesStage();
15 void Init() final;
16 void Update() final;
18 void Execute();
20 Vec4 GetWaterRippleLookupParam() const
22 return m_lookupParam;
25 CTexture* GetWaterRippleTex() const;
27 bool IsVisible() const;
29 private:
30 bool RefreshParameters();
31 void ExecuteWaterRipples(CTexture* pTargetTex, const D3DViewPort& viewport);
32 void UpdateAndDrawDebugInfo();
34 private:
35 static const int32 sVertexCount = 4;
36 static const int32 sTotalVertexCount = sVertexCount * SWaterRippleInfo::MaxWaterRipplesInScene;
37 static const EDefaultInputLayouts::PreDefs sVertexFormat = EDefaultInputLayouts::P3F_C4B_T2F;
38 static const size_t sVertexStride = sizeof(SVF_P3F_C4B_T2F);
40 typedef SVF_P3F_C4B_T2F SVertex;
42 struct SWaterRippleRecord
44 SWaterRippleInfo info;
45 float lifetime;
47 SWaterRippleRecord(const SWaterRippleInfo& srcInfo, float srcLifetime)
48 : info(srcInfo)
49 , lifetime(srcLifetime)
53 struct SWaterRippleConstants
55 Vec4 params;
58 private:
59 _smart_ptr<CTexture> m_pTexWaterRipplesDDN; // xy: wave propagation normals, z: frame t-2, w: frame t-1
60 _smart_ptr<CTexture> m_pTempTexture;
62 CTypedConstantBuffer<SWaterRippleConstants, 256> m_constants;
64 CFullscreenPass m_passSnapToCenter;
65 CStretchRectPass m_passCopy;
66 CFullscreenPass m_passWaterWavePropagation;
67 CPrimitiveRenderPass m_passAddWaterRipples;
68 CMipmapGenPass m_passMipmapGen;
70 CRenderPrimitive m_ripplePrimitive[SWaterRippleInfo::MaxWaterRipplesInScene];
71 buffer_handle_t m_vertexBuffer; // stored all ripples' vertices.
73 SResourceRegionMapping m_TempCopyParams;
75 ICVar* m_pCVarWaterRipplesDebug;
77 CCryNameTSCRC m_ripplesGenTechName;
78 CCryNameTSCRC m_ripplesHitTechName;
80 int32 m_frameID;
82 float m_lastSpawnTime;
83 float m_lastUpdateTime;
85 float m_simGridSnapRange;
86 Vec2 m_simOrigin;
88 int32 m_updateMask;
89 Vec4 m_shaderParam;
90 Vec4 m_lookupParam;
92 bool m_bInitializeSim;
93 bool m_bSnapToCenter;
95 std::vector<SWaterRippleInfo> m_waterRipples;
96 std::vector<SWaterRippleInfo> m_waterRipplesMGPU;
98 #if !defined(_RELEASE)
99 std::vector<SWaterRippleRecord> m_debugRippleInfos;
100 #endif