BVB Source Codes

CRYENGINE Show VisibleRenderNodeManager.h Source code

Return Download CRYENGINE: download VisibleRenderNodeManager.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. #include <CryMemory/PoolAllocator.h>
  6.  
  7. struct SRenderNodeTempData
  8. {
  9.         struct SUserData
  10.         {
  11.                 int                             lastSeenFrame[MAX_RECURSION_LEVELS]; // must be first, see IRenderNode::SetDrawFrame()
  12.                 int                             lastSeenShadowFrame;                 // When was last rendered to shadow
  13.                 CRenderObject*                  arrPermanentRenderObjects[MAX_STATOBJ_LODS_NUM];
  14.                 float                                                                                                           arrLodLastTimeUsed[MAX_STATOBJ_LODS_NUM];
  15.                 Matrix34                        objMat;
  16.                 OcclusionTestClient             m_OcclState;
  17.                 struct IFoliage*                m_pFoliage;
  18.                 struct IClipVolume*             m_pClipVolume;
  19.  
  20.                 Vec4                            vEnvironmentProbeMults;
  21.                 uint32                          nCubeMapId                  : 16;
  22.                 uint32                          nCubeMapIdCacheClearCounter : 16;
  23.                 uint32                          nWantedLod                  : 8;
  24.                 uint32                          bToDelete                   : 1;
  25.                 uint32                          bTerrainColorWasUsed        : 1;
  26.                 volatile int                    permanentObjectCreateLock;
  27.                 IRenderNode*                    pOwnerNode;
  28.                 uint32                          nStatObjLastModificationId;
  29.         };
  30.  
  31. public:
  32.         SUserData userData;
  33.  
  34. public:
  35.         SRenderNodeTempData() { ZeroStruct(*this); assert((void*)this == (void*)&this->userData); }
  36.         ~SRenderNodeTempData() { Free(); };
  37.  
  38.         void Free();
  39.         void FreeRenderObjects();
  40.         void InvalidateRenderObjectsInstanceData();
  41.  
  42.         void OffsetPosition(const Vec3& delta)
  43.         {
  44.                 userData.objMat.SetTranslation(userData.objMat.GetTranslation() + delta);
  45.         }
  46.         bool IsValid() const { return !userData.bToDelete; }
  47.  
  48.         void MarkForDelete()
  49.         {
  50.                 userData.bToDelete = true;
  51.                 userData.pOwnerNode = 0;
  52.         }
  53. };
  54.  
  55. // Class responsible for managing potentially visible render nodes.
  56. class CVisibleRenderNodesManager
  57. {
  58. public:
  59.         static int const MAX_NODES_CHECK_PER_FRAME = 500;
  60.         static int const MAX_DELETE_BUFFERS = 3;
  61.  
  62.         struct Statistics
  63.         {
  64.                 int numFree;
  65.                 int numUsed;
  66.         };
  67.  
  68. public:
  69.         CVisibleRenderNodesManager();
  70.         ~CVisibleRenderNodesManager();
  71.  
  72.         SRenderNodeTempData* AllocateTempData(int lastSeenFrame);
  73.  
  74.         // Set last frame for this rendering pass.
  75.         // Return if last frame changed and rendering should be done this frame for this pass.
  76.         bool SetLastSeenFrame(SRenderNodeTempData* pTempData, const SRenderingPassInfo& passInfo);
  77.  
  78.         // Iteratively update array of visible nodes checking if they are expired
  79.         void       UpdateVisibleNodes(int currentFrame, int maxNodesToCheck = MAX_NODES_CHECK_PER_FRAME);
  80.         void       InvalidateAll();
  81.  
  82.         Statistics GetStatistics() const;
  83.  
  84.         void       ClearAll();
  85.  
  86. private:
  87.         std::vector<SRenderNodeTempData*> m_visibleNodes;
  88.         int                               m_lastStartUpdateNode;
  89.  
  90.         int                               m_currentNodesToDelete;
  91.         std::vector<SRenderNodeTempData*> m_toDeleteNodes[MAX_DELETE_BUFFERS];
  92.  
  93.         int                               m_lastUpdateFrame;
  94.  
  95.         struct PoolSyncCriticalSection
  96.         {
  97.                 void Lock()   { m_cs.Lock(); }
  98.                 void Unlock() { m_cs.Unlock(); }
  99.                 CryCriticalSectionNonRecursive m_cs;
  100.         };
  101.         stl::TPoolAllocator<SRenderNodeTempData, PoolSyncCriticalSection> m_pool;
  102.  
  103.         CryCriticalSectionNonRecursive m_accessLock;
  104. };
  105.  
downloadVisibleRenderNodeManager.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