BVB Source Codes

CRYENGINE Show SceneTree.h Source code

Return Download CRYENGINE: download SceneTree.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __SCENETREE_H__
  4. #define __SCENETREE_H__
  5.  
  6. #if defined(FEATURE_SVO_GI)
  7.  
  8.         #pragma pack(push,4)
  9.  
  10.         #define SCENE_SCAN_FILE_VERSION     2
  11.         #define SVO_FILE_VERSION            1
  12.         #define GLOBAL_CLOUD_TREE_FILE_NAME "TREE.DAT"
  13.         #define GLOBAL_CLOUD_MESH_FILE_NAME "CCM.DAT"
  14.         #define GLOBAL_CLOUD_PVS_FILE_NAME  "PVS.DAT"
  15.  
  16. typedef std::unordered_map<uint64, std::pair<byte, byte>> PvsMap;
  17. typedef std::set<class CVoxelSegment*>                    VsSet;
  18.  
  19. const int nVoxStreamQueueMaxSize = 12;
  20. const float fMaxScanDistance = 256;
  21.  
  22. template<class T, int nMaxElemsInChunk> class CCustomSVOPoolAllocator
  23. {
  24. public:
  25.         CCustomSVOPoolAllocator() { m_nCounter = 0; }
  26.  
  27.         ~CCustomSVOPoolAllocator()
  28.         {
  29.                 Reset();
  30.         }
  31.  
  32.         void Reset()
  33.         {
  34.                 for (int i = 0; i < m_Pools.Count(); i++)
  35.                 {
  36.                         delete[](byte*)m_Pools[i];
  37.                         m_Pools[i] = NULL;
  38.                 }
  39.                 m_nCounter = 0;
  40.         }
  41.  
  42.         void ReleaseElement(T* pElem)
  43.         {
  44.                 if (pElem)
  45.                         m_FreeElements.Add(pElem);
  46.         }
  47.  
  48.         T* GetNewElement()
  49.         {
  50.                 if (m_FreeElements.Count())
  51.                 {
  52.                         T* pPtr = m_FreeElements.Last();
  53.                         m_FreeElements.DeleteLast();
  54.                         return pPtr;
  55.                 }
  56.  
  57.                 int nPoolId = m_nCounter / nMaxElemsInChunk;
  58.                 int nElemId = m_nCounter - nPoolId * nMaxElemsInChunk;
  59.                 m_Pools.PreAllocate(nPoolId + 1, nPoolId + 1);
  60.                 if (!m_Pools[nPoolId])
  61.                         m_Pools[nPoolId] = (T*)new byte[nMaxElemsInChunk * sizeof(T)];
  62.                 m_nCounter++;
  63.                 return &m_Pools[nPoolId][nElemId];
  64.         }
  65.  
  66.         int GetCount()         { return m_nCounter - m_FreeElements.Count(); }
  67.         int GetCapacity()      { return m_Pools.Count() * nMaxElemsInChunk; }
  68.         int GetCapacityBytes() { return GetCapacity() * sizeof(T); }
  69.  
  70. private:
  71.  
  72.         int          m_nCounter;
  73.         PodArray<T*> m_Pools;
  74.         PodArray<T*> m_FreeElements;
  75. };
  76.  
  77. class CSvoNode
  78. {
  79. public:
  80.  
  81.         CSvoNode(const AABB& box, CSvoNode* pParent);
  82.         ~CSvoNode();
  83.  
  84.         static void*         operator new(size_t);
  85.         static void          operator delete(void* ptr);
  86.  
  87.         void                 CheckAllocateChilds();
  88.         void                 DeleteChilds();
  89.         void                 Render(PodArray<struct SPvsItem>* pSortedPVS, uint64 nNodeKey, CRenderObject* pObj, int nTreeLevel, PodArray<SVF_P3F_C4B_T2F>& arrVertsOut, PodArray<class CVoxelSegment*> arrForStreaming[nVoxStreamQueueMaxSize][nVoxStreamQueueMaxSize]);
  90.         bool                 IsStreamingInProgress();
  91.         void                 GetTrisInAreaStats(int& nTrisCount, int& nVertCount, int& nTrisBytes, int& nVertBytes, int& nMaxVertPerArea, int& nMatsCount);
  92.         void                 GetVoxSegMemUsage(int& nAllocated);
  93.         AABB                 GetChildBBox(int nChildId);
  94.         bool                 TryInsertPoint(const Vec3& vPos, const ColorB& vNormalB, float fAmbFactor, const ColorB& vColor, int32& nInserted, float fDot, PodArray<Vec3>& arrScanPoints, bool bImportDVB = false);
  95.         void                 CheckAllocateSegment(int nLod);
  96.         void                 RayTrace(Lineseg& rLS, Vec3 vLineDir, VsSet& visitedNodes, ColorB& hitColor, ColorB& hitNormal);
  97.         void                 OnStatLightsChanged(const AABB& objBox);
  98.         class CVoxelSegment* AllocateSegment(int nCloudId, int nStationId, int nLod, EFileStreamingStatus eStreamingStatus, bool bDroppedOnDisk);
  99.         void                 ExportRenderData(int& nNodesProcessed, int nNodesAll, FILE* pFileToWrite, const int nTreeLevel, const int nTreeLevelToExport);
  100.         void                 TestRefCount(int& nLeaks);
  101.         void                 Load(int*& pData, int& nNodesCreated, CSvoNode* pParent, AABB* pAreaBox);
  102.         void                 Save(PodArray<int>& arrData, AABB* pAreaBox);
  103.         void                 CutChilds();
  104.         bool                 CheckReadyForRendering(int nTreeLevel, PodArray<CVoxelSegment*> arrForStreaming[nVoxStreamQueueMaxSize][nVoxStreamQueueMaxSize]);
  105.         void                 CollectResetVisNodes(PvsMap& arrNodes, uint64 nNodeKey);
  106.         void                 StartBuildAOTasks(int& nNodesProcessed, int nNodesAll);
  107.         void                 ComputeAO(int nTID);
  108.         void                 Task_Compute(int nTID)      { ComputeAO(nTID); }
  109.         void                 Task_Store();
  110.         static void          Task_OnTaskConveyorFinish() {}
  111.         void                 BuildMips(int& nNodesProcessed, int nNodesAll);
  112.         void                 BuildParentMips();
  113.         void                 FixGaps(int& nNodesProcessed, int nNodesAll);
  114.         void                 FixSeams(int& nNodesProcessed, int nNodesAll, int nTreeLevelCur);
  115.         void                 FixSeamsFromNeigbours(int nTreeLevelCur);
  116.         CSvoNode*            FindNodeByPosition(const Vec3& vPosWS, int nTreeLevelToFind, int nTreeLevelCur);
  117.         void                 FixGapsInChilds();
  118.         bool                 IsNodeGoodForExport();
  119.         void                 UpdateNodeRenderDataPtrs();
  120.         void                 RegisterMovement(const AABB& objBox);
  121.         Vec3i                GetStatGeomCheckSumm();
  122.         CSvoNode*            FindNodeByPoolAffset(int nAllocatedAtlasOffset);
  123.  
  124.         AABB           m_nodeBox;
  125.         CSvoNode**     m_ppChilds;
  126.         CSvoNode*      m_pParent;
  127.         CVoxelSegment* m_pSeg;
  128.         uint           m_nRequestSegmentUpdateFrametId;
  129.         bool           m_arrChildNotNeeded[8];
  130.         bool           m_bForceRecreate;
  131. };
  132.  
  133. class CPointTreeNode
  134. {
  135. public:
  136.         bool TryInsertPoint(int nId, const Vec3& vPos, const AABB& nodeBox, int nRecursionLevel = 0);
  137.         bool IsThereAnyPointInTheBox(const AABB& testBox, const AABB& nodeBox);
  138.         bool GetAllPointsInTheBox(const AABB& testBox, const AABB& nodeBox, PodArray<int>& arrIds);
  139.         AABB GetChildBBox(int nChildId, const AABB& nodeBox);
  140.         void Clear();
  141.         CPointTreeNode() { m_ppChilds = 0; m_pPoints = 0; }
  142.         ~CPointTreeNode() { Clear(); }
  143.  
  144.         struct SPointInfo
  145.         { Vec3 vPos; int nId; };
  146.         PodArray<SPointInfo>* m_pPoints;
  147.         CPointTreeNode**      m_ppChilds;
  148. };
  149.  
  150. class CSvoEnv : public Cry3DEngineBase
  151. {
  152. public:
  153.  
  154.         CSvoEnv(const AABB& worldBox);
  155.         ~CSvoEnv();
  156.         bool GetSvoStaticTextures(I3DEngine::SSvoStaticTexInfo& svoInfo, PodArray<I3DEngine::SLightTI>* pLightsTI_S, PodArray<I3DEngine::SLightTI>* pLightsTI_D);
  157.         void GetSvoBricksForUpdate(PodArray<I3DEngine::SSvoNodeInfo>& arrNodeInfo, float fNodeSize, PodArray<SVF_P3F_C4B_T2F>* pVertsOut);
  158.         bool Render();
  159.         void ProcessSvoRootTeleport();
  160.         void CheckUpdateMeshPools();
  161.         int  GetWorstPointInSubSet(const int nStart, const int eEnd);
  162.         void StartupStreamingTimeTest(bool bDone);
  163.         void OnLevelGeometryChanged();
  164.         void DrawLightProbeDebug(Vec3 vPos, int nTexId);
  165.         void ReconstructTree(bool bMultiPoint);
  166.         void LoadTree(int& nNodesCreated);
  167.         void DetectMovement_StaticGeom();
  168.         void DetectMovement_StatLights();
  169.         void CollectLights();
  170.         void CollectAnalyticalOccluders();
  171.  
  172.         PodArray<I3DEngine::SLightTI>            m_lightsTI_S, m_lightsTI_D;
  173.         PodArray<I3DEngine::SAnalyticalOccluder> m_AnalyticalOccluders[2];
  174.         Vec4 m_vSvoOriginAndSize;
  175.         AABB m_aabbLightsTI_D;
  176.         ITexture*                                m_pGlobalSpecCM;
  177.         float m_fGlobalSpecCM_Mult;
  178.         CSvoNode*                                m_pSvoRoot;
  179.         bool m_bReady;
  180.         PodArray<CVoxelSegment*>                 m_arrForStreaming[nVoxStreamQueueMaxSize][nVoxStreamQueueMaxSize];
  181.         int                       m_nDebugDrawVoxelsCounter;
  182.         int                       m_nNodeCounter;
  183.         int                       m_nDynNodeCounter;
  184.         int                       m_nDynNodeCounter_DYNL;
  185.         PodArray<CVoxelSegment*>  m_arrForBrickUpdate[16];
  186.         CryCriticalSection        m_csLockTree;
  187.         float                     m_fStreamingStartTime;
  188.         float                     m_fSvoFreezeTime;
  189.         int                       m_arrVoxelizeMeshesCounter[2];
  190.         Matrix44                  m_matDvrTm;
  191.         AABB                      m_worldBox;
  192.         PodArray<SVF_P3F_C4B_T2F> m_arrSvoProxyVertices;
  193.         double                    m_prevCheckVal;
  194.         bool                      m_bFirst_SvoFreezeTime;
  195.         bool                      m_bFirst_StartStreaming;
  196.         bool                      m_bStreamingDonePrev;
  197.  
  198.         int                       m_nTexOpasPoolId;
  199.         int                       m_nTexNodePoolId;
  200.  
  201.         #ifdef FEATURE_SVO_GI_ALLOW_HQ
  202.                 #ifdef FEATURE_SVO_GI_USE_MESH_RT
  203.         int m_nTexTrisPoolId;
  204.                 #endif
  205.         int m_nTexRgb0PoolId;
  206.         int m_nTexRgb1PoolId;
  207.         int m_nTexDynlPoolId;
  208.         int m_nTexRgb2PoolId;
  209.         int m_nTexRgb3PoolId;
  210.         int m_nTexRgb4PoolId;
  211.         int m_nTexNormPoolId;
  212.         int m_nTexAldiPoolId;
  213.         #endif
  214.  
  215.         ETEX_Format                                        m_nVoxTexFormat;
  216.         TDoublyLinkedList<CVoxelSegment>                   m_arrSegForUnload;
  217.         CCustomSVOPoolAllocator<struct SCpuBrickItem, 128> m_cpuBricksAllocator;
  218.         CCustomSVOPoolAllocator<CSvoNode, 128>             m_nodeAllocator;
  219.  
  220.         #ifdef FEATURE_SVO_GI_ALLOW_HQ
  221.         PodArrayRT<ColorB> m_arrRTPoolTexs;
  222.         PodArrayRT<Vec4>   m_arrRTPoolTris;
  223.         PodArrayRT<ColorB> m_arrRTPoolInds;
  224.         #endif
  225. };
  226.  
  227.         #pragma pack(pop)
  228.  
  229. #endif
  230.  
  231. #endif
  232.  
downloadSceneTree.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