BVB Source Codes

CRYENGINE Show SceneTreeManager.cpp Source code

Return Download CRYENGINE: download SceneTreeManager.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   3dengine.cpp
  5. //  Version:     v1.00
  6. //  Created:     28/5/2001 by Vladimir Kajalin
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: Implementation of I3DEngine interface methods
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #include "StdAfx.h"
  15.  
  16. #if defined(FEATURE_SVO_GI)
  17.  
  18.         #include "VoxelSegment.h"
  19.         #include "SceneTree.h"
  20.         #include "SceneTreeManager.h"
  21.  
  22. extern CSvoEnv* gSvoEnv;
  23.  
  24. void CSvoManager::CheckAllocateGlobalCloud()
  25. {
  26.         if (!gSvoEnv && Cry3DEngineBase::GetCVars()->e_svoEnabled)
  27.         {
  28.                 float fMapSize = (float)Cry3DEngineBase::Get3DEngine()->GetTerrainSize();
  29.                 AABB areaBox(Vec3(0, 0, 0), Vec3(fMapSize, fMapSize, fMapSize));
  30.                 gSvoEnv = new CSvoEnv(areaBox);
  31.         }
  32. }
  33.  
  34. char* CSvoManager::GetStatusString(int nLine)
  35. {
  36.         static char szText[256] = "";
  37.  
  38.         int nSlot = 0;
  39.  
  40.         if (nLine == (nSlot++) && (CVoxelSegment::m_nAddPolygonToSceneCounter || GetCVars()->e_svoEnabled))
  41.         {
  42.                 int nAll = nAtlasDimBriXY * nAtlasDimBriXY * nAtlasDimBriZ;
  43.                 cry_sprintf(szText, "SVO pool: %2d of %dMB x %d, %3d/%3d of %4d = %.1f Async: %2d, Post: %2d, Loaded: %4d",
  44.                             CVoxelSegment::m_nPoolUsageBytes / 1024 / 1024,
  45.                             int(CVoxelSegment::nVoxTexPoolDimXY * CVoxelSegment::nVoxTexPoolDimXY * CVoxelSegment::nVoxTexPoolDimZ / 1024 / 1024) * (gSvoEnv->m_nVoxTexFormat == eTF_BC3 ? 1 : 4),
  46.                             CVoxelSegment::m_nSvoDataPoolsCounter,
  47.                             CVoxelSegment::m_nAddPolygonToSceneCounter, CVoxelSegment::m_nPoolUsageItems, nAll,
  48.                             (float)CVoxelSegment::m_nPoolUsageItems / nAll,
  49.                             CVoxelSegment::m_nStreamingTasksInProgress, CVoxelSegment::m_nPostponedCounter, CVoxelSegment::m_arrLoadedSegments.Count());
  50.                 return szText;
  51.         }
  52.  
  53.         static ICVar* pDisplayInfo = GetConsole()->GetCVar("r_DisplayInfo");
  54.         if (pDisplayInfo->GetIVal() < 2)
  55.                 return NULL;
  56.  
  57.         if (nLine == (nSlot++))
  58.         {
  59.                 static int nTexUpdatesInProgressLast = 0;
  60.                 nTexUpdatesInProgressLast = max(nTexUpdatesInProgressLast, CVoxelSegment::m_nUpdatesInProgressTex);
  61.  
  62.                 static int nBriUpdatesInProgressLast = 0;
  63.                 nBriUpdatesInProgressLast = max(nBriUpdatesInProgressLast, CVoxelSegment::m_nUpdatesInProgressBri);
  64.  
  65.                 cry_sprintf(szText, "Brick updates: %2d / %3d, bs: %d  GPU nodes: %2d / %2d",
  66.                             nBriUpdatesInProgressLast, nTexUpdatesInProgressLast, nVoxTexMaxDim,
  67.                             gSvoEnv->m_nDynNodeCounter, gSvoEnv->m_nDynNodeCounter_DYNL);
  68.  
  69.                 float fCurTime = Cry3DEngineBase::Get3DEngine()->GetCurTimeSec();
  70.                 static float fLastTime = Cry3DEngineBase::Get3DEngine()->GetCurTimeSec();
  71.                 if (fCurTime > fLastTime + 0.1f)
  72.                 {
  73.                         if (nTexUpdatesInProgressLast)
  74.                                 nTexUpdatesInProgressLast -= 4;
  75.  
  76.                         if (nBriUpdatesInProgressLast)
  77.                                 nBriUpdatesInProgressLast--;
  78.  
  79.                         fLastTime = fCurTime;
  80.                 }
  81.  
  82.                 return szText;
  83.         }
  84.  
  85.         if (nLine == (nSlot++))
  86.         {
  87.                 cry_sprintf(szText, "cpu bricks pool: el = %d of %d, %d MB",
  88.                             gSvoEnv->m_cpuBricksAllocator.GetCount(),
  89.                             gSvoEnv->m_cpuBricksAllocator.GetCapacity(),
  90.                             gSvoEnv->m_cpuBricksAllocator.GetCapacityBytes() / 1024 / 1024);
  91.                 return szText;
  92.         }
  93.  
  94.         if (nLine == (nSlot++))
  95.         {
  96.                 cry_sprintf(szText, "cpu node pool: el = %d of %d, %d KB",
  97.                             gSvoEnv->m_nodeAllocator.GetCount(),
  98.                             gSvoEnv->m_nodeAllocator.GetCapacity(),
  99.                             gSvoEnv->m_nodeAllocator.GetCapacityBytes() / 1024);
  100.                 return szText;
  101.         }
  102.  
  103.         if (gSvoEnv->m_pSvoRoot && nLine == (nSlot++))
  104.         {
  105.                 int nTrisCount = 0, nVertCount = 0, nTrisBytes = 0, nVertBytes = 0, nMaxVertPerArea = 0, nMatsCount = 0;
  106.                 gSvoEnv->m_pSvoRoot->GetTrisInAreaStats(nTrisCount, nVertCount, nTrisBytes, nVertBytes, nMaxVertPerArea, nMatsCount);
  107.  
  108.                 int nVoxSegAllocatedBytes = 0;
  109.                 gSvoEnv->m_pSvoRoot->GetVoxSegMemUsage(nVoxSegAllocatedBytes);
  110.  
  111.                 cry_sprintf(szText, "VoxSeg: %d MB, Tris/Verts %d / %d K, %d / %d MB, avmax %d K, Mats %d",
  112.                             nVoxSegAllocatedBytes / 1024 / 1024,
  113.                             nTrisCount / 1000, nVertCount / 1000, nTrisBytes / 1024 / 1024, nVertBytes / 1024 / 1024, nMaxVertPerArea / 1000, nMatsCount);
  114.                 return szText;
  115.         }
  116.  
  117.         #ifdef FEATURE_SVO_GI_USE_MESH_RT
  118.         if (nLine == (nSlot++) && gSvoEnv->m_arrRTPoolInds.Count())
  119.         {
  120.                 cry_sprintf(szText, "RT pools: tex %.2f, verts %.2f, inds %.2f",
  121.                             (float)gSvoEnv->m_arrRTPoolTexs.Count() / max((float)gSvoEnv->m_arrRTPoolTexs.capacity(), 1.f),
  122.                             (float)gSvoEnv->m_arrRTPoolTris.Count() / max((float)gSvoEnv->m_arrRTPoolTris.capacity(), 1.f),
  123.                             (float)gSvoEnv->m_arrRTPoolInds.Count() / max((float)gSvoEnv->m_arrRTPoolInds.capacity(), 1.f));
  124.                 return szText;
  125.         }
  126.         #endif
  127.  
  128.         return NULL;
  129. }
  130.  
  131. void CSvoManager::Update(const SRenderingPassInfo& passInfo, CCamera& newCam)
  132. {
  133.         if (/*Get3DEngine()->GetRenderFramesSinceLevelStart()>30 && */ passInfo.IsGeneralPass())
  134.         {
  135.                 CSvoManager::UpdateSubSystems(passInfo.GetCamera(), newCam);
  136.         }
  137. }
  138.  
  139. void CSvoManager::UpdateSubSystems(const CCamera& _newCam, CCamera& newCam)
  140. {
  141.  
  142. }
  143.  
  144. void CSvoManager::OnFrameStart(const SRenderingPassInfo& passInfo)
  145. {
  146.         CVoxelSegment::m_nCurrPassMainFrameID = passInfo.GetMainFrameID();
  147.         //      if(GetCVars()->e_rsMode != RS_RENDERFARM)
  148.         CVoxelSegment::SetVoxCamera(passInfo.GetCamera());
  149.  
  150.         CVoxelSegment::m_pCurrPassInfo = (SRenderingPassInfo*)&passInfo;
  151. }
  152.  
  153. void CSvoManager::OnFrameComplete()
  154. {
  155.         //      if(gSSRSystem)
  156.         //      gSSRSystem->OnFrameComplete();
  157.         CVoxelSegment::m_pCurrPassInfo = 0;
  158. }
  159.  
  160. void CSvoManager::Release()
  161. {
  162.         SAFE_DELETE(gSvoEnv);
  163. }
  164.  
  165. void CSvoManager::Render()
  166. {
  167.         if (GetCVars()->e_svoTI_Apply && (!m_bLevelLoadingInProgress || gEnv->IsEditor()) && !GetCVars()->e_svoTI_Active)
  168.         {
  169.                 GetCVars()->e_svoTI_Active = 1;
  170.                 GetCVars()->e_svoLoadTree = 1;
  171.                 GetCVars()->e_svoRender = 1;
  172.  
  173.                 if (GetCVars()->e_svoTI_Troposphere_Active)
  174.                 {
  175.                         GetCVars()->e_Clouds = 0;
  176.                         if (ICVar* pV = gEnv->pConsole->GetCVar("r_UseAlphaBlend"))
  177.                                 pV->Set(0);
  178.                 }
  179.         }
  180.  
  181.         if (GetCVars()->e_svoLoadTree)
  182.         {
  183.                 SAFE_DELETE(gSvoEnv);
  184.  
  185.                 GetCVars()->e_svoEnabled = 1;
  186.  
  187.                 float fMapSize = (float)Cry3DEngineBase::Get3DEngine()->GetTerrainSize();
  188.                 AABB areaBox(Vec3(0, 0, 0), Vec3(fMapSize, fMapSize, fMapSize));
  189.                 gSvoEnv = new CSvoEnv(areaBox);
  190.                 gSvoEnv->ReconstructTree(0 /*m_pGamePlayArea && (m_pGamePlayArea->GetPoints().Count()>0)*/);
  191.  
  192.                 GetCVars()->e_svoLoadTree = 0;
  193.         }
  194.  
  195.         if (GetCVars()->e_svoEnabled && GetCVars()->e_svoRender)
  196.         {
  197.                 CheckAllocateGlobalCloud();
  198.  
  199.                 if (gSvoEnv)
  200.                 {
  201.                         if (gSvoEnv->m_bFirst_SvoFreezeTime)
  202.                                 gSvoEnv->m_fSvoFreezeTime = gEnv->pTimer->GetAsyncCurTime();
  203.                         gSvoEnv->m_bFirst_SvoFreezeTime = false;
  204.  
  205.                         if (gSvoEnv->m_fSvoFreezeTime > 0)
  206.                         {
  207.                                 while (gSvoEnv->m_fSvoFreezeTime > 0)
  208.                                 {
  209.                                         gSvoEnv->Render();
  210.                                         CrySleep(5);
  211.                                 }
  212.  
  213.                                 gSvoEnv->m_fSvoFreezeTime = -1;
  214.                         }
  215.                         else
  216.                         {
  217.                                 gSvoEnv->Render();
  218.                         }
  219.                 }
  220.         }
  221. }
  222.  
  223. void CSvoManager::OnDisplayInfo(float& fTextPosX, float& fTextPosY, float& fTextStepY, float fTextScale)
  224. {
  225.         ICVar* pr_HDRRendering = GetConsole()->GetCVar("r_HDRRendering");
  226.  
  227.         if (GetCVars()->e_svoEnabled && pr_HDRRendering->GetIVal())
  228.         {
  229.                 int nLine = 0;
  230.                 while (char* szStatus = CSvoManager::GetStatusString(nLine))
  231.                 {
  232.                         Get3DEngine()->DrawTextRightAligned(fTextPosX, fTextPosY += fTextStepY, fTextScale, ColorF(0.5f, 1.0f, 1.0f), szStatus);
  233.                         nLine++;
  234.                 }
  235.         }
  236. }
  237.  
  238. bool CSvoManager::GetSvoStaticTextures(I3DEngine::SSvoStaticTexInfo& svoInfo, PodArray<I3DEngine::SLightTI>* pLightsTI_S, PodArray<I3DEngine::SLightTI>* pLightsTI_D)
  239. {
  240.         return gSvoEnv ? gSvoEnv->GetSvoStaticTextures(svoInfo, pLightsTI_S, pLightsTI_D) : false;
  241. }
  242.  
  243. void CSvoManager::GetSvoBricksForUpdate(PodArray<I3DEngine::SSvoNodeInfo>& arrNodeInfo, float fNodeSize, PodArray<SVF_P3F_C4B_T2F>* pVertsOut)
  244. {
  245.         if (gSvoEnv)
  246.                 gSvoEnv->GetSvoBricksForUpdate(arrNodeInfo, fNodeSize, pVertsOut);
  247. }
  248.  
  249. void CSvoManager::RegisterMovement(const AABB& objBox)
  250. {
  251.         if (gSvoEnv && gSvoEnv->m_pSvoRoot)
  252.                 gSvoEnv->m_pSvoRoot->RegisterMovement(objBox);
  253. }
  254.  
  255. #endif
  256.  
downloadSceneTreeManager.cpp 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