!I integrate from //ce/main...
[CRYENGINE.git] / Code / CryEngine / Cry3DEngine / terrain_water.h
blob4dcd5f80192282cd0d2562f3f71ffd46ab840c36
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
4 #include <CryRenderer/RenderElements/CREWaterVolume.h>
6 #define CYCLE_BUFFERS_NUM 4
8 class COcean final : public IRenderNode, public Cry3DEngineBase
10 public:
11 COcean(IMaterial* pMat);
12 ~COcean();
14 void Create(const SRenderingPassInfo& passInfo);
15 void Update(const SRenderingPassInfo& passInfo);
16 void Render(const SRenderingPassInfo& passInfo);
18 bool IsVisible(const SRenderingPassInfo& passInfo);
20 void SetLastFov(float fLastFov) { m_fLastFov = fLastFov; }
21 static void SetTimer(ITimer* pTimer);
23 static float GetWave(const Vec3& pPosition, int32 nFrameID);
24 static uint32 GetVisiblePixelsCount();
25 int32 GetMemoryUsage();
27 // fake IRenderNode implementation
28 virtual EERType GetRenderNodeType() const override { return eERType_WaterVolume; }
29 virtual const char* GetEntityClassName(void) const override { return "Ocean"; }
30 virtual const char* GetName(void) const override { return "Ocean"; }
31 virtual Vec3 GetPos(bool) const override;
32 virtual void Render(const SRendParams&, const SRenderingPassInfo& passInfo) override {}
33 virtual IPhysicalEntity* GetPhysics(void) const override { return 0; }
34 virtual void SetPhysics(IPhysicalEntity*) override {}
35 virtual void SetMaterial(IMaterial* pMat) override { m_pMaterial = pMat; }
36 virtual IMaterial* GetMaterial(Vec3* pHitPos = NULL) const override;
37 virtual IMaterial* GetMaterialOverride() const override { return m_pMaterial; }
38 virtual float GetMaxViewDist() const override { return 1000000.f; }
39 virtual void GetMemoryUsage(ICrySizer* pSizer) const override {}
40 virtual const AABB GetBBox() const override { return AABB(Vec3(-1000000.f, -1000000.f, -1000000.f), Vec3(1000000.f, 1000000.f, 1000000.f)); }
41 virtual void SetBBox(const AABB& WSBBox) override {}
42 virtual void FillBBox(AABB& aabb) const override { aabb = GetBBox(); }
43 virtual void OffsetPosition(const Vec3& delta) override;
45 private:
47 void RenderFog(const SRenderingPassInfo& passInfo);
48 void RenderBottomCap(const SRenderingPassInfo& passInfo);
50 private:
52 // Ocean data
53 IMaterial* m_pMaterial;
55 int32 m_nPrevGridDim;
56 uint32 m_nVertsCount;
57 uint32 m_nIndicesCount;
59 int32 m_nTessellationType;
60 int32 m_nTessellationTiles;
62 // Ocean bottom cap data
63 _smart_ptr<IMaterial> m_pBottomCapMaterial;
64 _smart_ptr<IRenderMesh> m_pBottomCapRenderMesh;
66 PodArray<SVF_P3F_C4B_T2F> m_pBottomCapVerts;
67 PodArray<vtx_idx> m_pBottomCapIndices;
69 // Visibility data
70 CCamera m_Camera;
71 class CREOcclusionQuery* m_pREOcclusionQueries[CYCLE_BUFFERS_NUM];
72 IShader* m_pShaderOcclusionQuery;
73 float m_fLastFov;
74 float m_fLastVisibleFrameTime;
75 int32 m_nLastVisibleFrameId;
76 static uint32 m_nVisiblePixelsCount;
78 float m_fRECustomData[12]; // used for passing data to renderer
79 float m_fREOceanBottomCustomData[8]; // used for passing data to renderer
80 bool m_bOceanFFT;
82 // Ocean fog related members
83 CREWaterVolume::SParams m_wvParams[RT_COMMAND_BUF_COUNT];
84 CREWaterVolume::SOceanParams m_wvoParams[RT_COMMAND_BUF_COUNT];
86 _smart_ptr<IMaterial> m_pFogIntoMat;
87 _smart_ptr<IMaterial> m_pFogOutofMat;
88 _smart_ptr<IMaterial> m_pFogIntoMatLowSpec;
89 _smart_ptr<IMaterial> m_pFogOutofMatLowSpec;
91 CREWaterVolume* m_pWVRE[RT_COMMAND_BUF_COUNT];
92 std::vector<SVF_P3F_C4B_T2F> m_wvVertices[RT_COMMAND_BUF_COUNT];
93 std::vector<uint16> m_wvIndices[RT_COMMAND_BUF_COUNT];
95 static ITimer* m_pOceanTimer;
96 static CREWaterOcean* m_pOceanRE;