BVB Source Codes

CRYENGINE Show RoadRenderNode.h Source code

Return Download CRYENGINE: download RoadRenderNode.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #pragma once
  4.  
  5. class CRoadRenderNode : public IRoadRenderNode, public Cry3DEngineBase
  6. {
  7. public:
  8.         // SDynamicData and SData are helpers for serialization
  9.         struct SData
  10.         {
  11.                 float arrTexCoors[2];
  12.                 float arrTexCoorsGlobal[2];
  13.  
  14.                 AABB  worldSpaceBBox;
  15.  
  16.                 // Don't use vtx_idx, we need to keep levels exported on PC loadable on lesser platforms
  17.                 uint32 numVertices;
  18.                 uint32 numIndices;
  19.                 uint32 numTangents;
  20.  
  21.                 uint32 physicsGeometryCount;
  22.  
  23.                 // Number of vertices that can be used to fully rebuild the road data
  24.                 uint32 sourceVertexCount;
  25.  
  26.                 AUTO_STRUCT_INFO;
  27.         };
  28.  
  29.         struct SPhysicsGeometryParams
  30.         {
  31.                 Vec3 size;
  32.                 Vec3 pos;
  33.                 Quat q;
  34.  
  35.                 AUTO_STRUCT_INFO;
  36.         };
  37.  
  38.         struct SDynamicData
  39.         {
  40.                 PodArray<SVF_P3F_C4B_T2S>        vertices;
  41.                 PodArray<vtx_idx>                indices;
  42.                 PodArray<SPipTangents>           tangents;
  43.  
  44.                 PodArray<SPhysicsGeometryParams> physicsGeometry;
  45.         };
  46.  
  47. public:
  48.         CRoadRenderNode();
  49.         virtual ~CRoadRenderNode();
  50.  
  51.         // IRoadRenderNode implementation
  52.         virtual void SetVertices(const Vec3* pVerts, int nVertsNum, float fTexCoordBegin, float fTexCoordEnd, float fTexCoordBeginGlobal, float fTexCoordEndGlobal);
  53.         virtual void SetSortPriority(uint8 sortPrio);
  54.         virtual void SetIgnoreTerrainHoles(bool bVal);
  55.         virtual void SetPhysicalize(bool bVal) { if (m_bPhysicalize != bVal) { m_bPhysicalize = bVal; ScheduleRebuild(false); } }
  56.  
  57.         // IRenderNode implementation
  58.         virtual const char*         GetEntityClassName(void) const { return "RoadObjectClass"; }
  59.         virtual const char*         GetName(void) const            { return "RoadObjectName"; }
  60.         virtual Vec3                GetPos(bool) const;
  61.         virtual void                Render(const SRendParams& RendParams, const SRenderingPassInfo& passInfo);
  62.  
  63.         virtual IPhysicalEntity*    GetPhysics(void) const             { return m_pPhysEnt; }
  64.         virtual void                SetPhysics(IPhysicalEntity* pPhys) { m_pPhysEnt = pPhys; }
  65.  
  66.         virtual void                SetMaterial(IMaterial* pMat);
  67.         virtual IMaterial*          GetMaterial(Vec3* pHitPos = NULL) const;
  68.         virtual IMaterial*          GetMaterialOverride() { return m_pMaterial; }
  69.         virtual float               GetMaxViewDist();
  70.         virtual EERType             GetRenderNodeType();
  71.         virtual struct IRenderMesh* GetRenderMesh(int nLod)     { return nLod == 0 ? m_pRenderMesh.get() : NULL; }
  72.         virtual void                GetMemoryUsage(ICrySizer* pSizer) const;
  73.         virtual const AABB          GetBBox() const             { return m_serializedData.worldSpaceBBox; }
  74.         virtual void                SetBBox(const AABB& WSBBox) { m_serializedData.worldSpaceBBox = WSBBox; }
  75.         virtual void                FillBBox(AABB& aabb);
  76.         virtual void                OffsetPosition(const Vec3& delta);
  77.         virtual void                OnRenderNodeBecomeVisible(const SRenderingPassInfo& passInfo);
  78.         virtual void                GetClipPlanes(Plane* pPlanes, int nPlanesNum, int nVertId);
  79.         virtual void                GetTexCoordInfo(float* pTexCoordInfo);
  80.         virtual uint8               GetSortPriority()           { return m_sortPrio; }
  81.  
  82.         virtual void                SetLayerId(uint16 nLayerId) { m_nLayerId = nLayerId; Get3DEngine()->C3DEngine::UpdateObjectsLayerAABB(this); }
  83.         virtual uint16              GetLayerId()                { return m_nLayerId; }
  84.  
  85.         static bool                 ClipTriangle(PodArray<Vec3>& lstVerts, PodArray<vtx_idx>& lstInds, int nStartIdxId, Plane* pPlanes);
  86.         using IRenderNode::Physicalize;
  87.         virtual void                Dephysicalize(bool bKeepIfReferenced = false);
  88.         void                        Compile();
  89.         void                        ScheduleRebuild(bool bFullRebuild);
  90.         void                        OnTerrainChanged();
  91.  
  92.         _smart_ptr<IRenderMesh> m_pRenderMesh;
  93.         _smart_ptr<IMaterial>   m_pMaterial;
  94.         PodArray<Vec3>          m_arrVerts;
  95.  
  96.         SData                   m_serializedData;
  97.         SDynamicData            m_dynamicData;
  98.  
  99.         // Set when scheduling rebuild, true if the road was changed and we need to recompile it
  100.         bool             m_bRebuildFull;
  101.  
  102.         uint8            m_sortPrio;
  103.         bool             m_bIgnoreTerrainHoles;
  104.         bool             m_bPhysicalize;
  105.  
  106.         IPhysicalEntity* m_pPhysEnt;
  107.  
  108.         uint16           m_nLayerId;
  109.  
  110.         // Temp buffers used during road mesh creation
  111.         static PodArray<Vec3>            s_tempVertexPositions;
  112.         static PodArray<vtx_idx>         s_tempIndices;
  113.  
  114.         static PodArray<SPipTangents>    s_tempTangents;
  115.         static PodArray<SVF_P3F_C4B_T2S> s_tempVertices;
  116.  
  117.         static CPolygonClipContext       s_tmpClipContext;
  118.  
  119.         static void GetMemoryUsageStatic(ICrySizer* pSizer)
  120.         {
  121.                 SIZER_COMPONENT_NAME(pSizer, "RoadRenderNodeStaticData");
  122.  
  123.                 pSizer->AddObject(s_tempVertexPositions);
  124.                 pSizer->AddObject(s_tempIndices);
  125.  
  126.                 pSizer->AddObject(s_tempTangents);
  127.                 pSizer->AddObject(s_tempVertices);
  128.  
  129.                 pSizer->AddObject(s_tmpClipContext);
  130.         }
  131.  
  132.         static void FreeStaticMemoryUsage()
  133.         {
  134.                 s_tempVertexPositions.Reset();
  135.                 s_tempIndices.Reset();
  136.  
  137.                 s_tempTangents.Reset();
  138.                 s_tempVertices.Reset();
  139.  
  140.                 s_tmpClipContext.Reset();
  141.         }
  142. };
downloadRoadRenderNode.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top