BVB Source Codes

CRYENGINE Show ObjectsTree_MT.cpp Source code

Return Download CRYENGINE: download ObjectsTree_MT.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "PolygonClipContext.h"
  5. #include "RoadRenderNode.h"
  6. #include "Brush.h"
  7. #include "RenderMeshMerger.h"
  8. #include "DecalManager.h"
  9. #include "VisAreas.h"
  10. #include <CryAnimation/ICryAnimation.h>
  11. #include "LightEntity.h"
  12.  
  13. #ifndef PI
  14.         #define PI 3.14159f
  15. #endif
  16.  
  17. //////////////////////////////////////////////////////////////////////////
  18. void CObjManager::PrepareCullbufferAsync(const CCamera& rCamera)
  19. {
  20.         if (!(gEnv->IsDedicated()))
  21.         {
  22.                 m_CullThread.PrepareCullbufferAsync(rCamera);
  23.         }
  24. }
  25.  
  26. //////////////////////////////////////////////////////////////////////////
  27. void CObjManager::BeginOcclusionCulling(const SRenderingPassInfo& passInfo)
  28. {
  29.         if (!gEnv->IsDedicated())
  30.         {
  31.                 m_CullThread.CullStart(passInfo);
  32.         }
  33. }
  34.  
  35. //////////////////////////////////////////////////////////////////////////
  36. void CObjManager::EndOcclusionCulling()
  37. {
  38.         if (!gEnv->IsDedicated())
  39.         {
  40.                 m_CullThread.CullEnd();
  41.         }
  42. }
  43.  
  44. //////////////////////////////////////////////////////////////////////////
  45. void CObjManager::RenderBufferedRenderMeshes(const SRenderingPassInfo& passInfo)
  46. {
  47.         CRY_PROFILE_REGION(PROFILE_3DENGINE, "3DEngine: RenderBufferedRenderMeshes");
  48.         CRYPROFILE_SCOPE_PROFILE_MARKER("RenderBufferedRenderMeshes");
  49.  
  50.         SCheckOcclusionOutput outputData;
  51.         while (1)
  52.         {
  53.                 // process till we know that no more procers are working
  54.                 if (!GetObjManager()->PopFromCullOutputQueue(&outputData))
  55.                         break;
  56.  
  57.                 switch (outputData.type)
  58.                 {
  59.                 case SCheckOcclusionOutput::ROAD_DECALS:
  60.                         GetObjManager()->RenderDecalAndRoad(outputData.common.pObj,
  61.                                                             outputData.common.pAffectingLights,
  62.                                                             outputData.vAmbColor,
  63.                                                             outputData.objBox,
  64.                                                             outputData.common.fEntDistance,
  65.                                                             outputData.common.bSunOnly,
  66.                                                             outputData.common.bCheckPerObjectOcclusion,
  67.                                                             passInfo);
  68.                         break;
  69.                 case SCheckOcclusionOutput::COMMON:
  70.                         GetObjManager()->RenderObject(outputData.common.pObj,
  71.                                                       outputData.common.pAffectingLights,
  72.                                                       outputData.vAmbColor,
  73.                                                       outputData.objBox,
  74.                                                       outputData.common.fEntDistance,
  75.                                                       outputData.common.bSunOnly,
  76.                                                       outputData.common.pObj->GetRenderNodeType(),
  77.                                                       passInfo);
  78.                         break;
  79.                 case SCheckOcclusionOutput::TERRAIN:
  80.                         GetTerrain()->AddVisSector(outputData.terrain.pTerrainNode);
  81.                         break;
  82.                 case SCheckOcclusionOutput::DEFORMABLE_BRUSH:
  83.                         outputData.deformable_brush.pBrush->m_pDeform->RenderInternalDeform(outputData.deformable_brush.pRenderObject,
  84.                                                                                             outputData.deformable_brush.nLod,
  85.                                                                                             outputData.deformable_brush.pBrush->CBrush::GetBBox(),
  86.                                                                                             passInfo);
  87.                         break;
  88.                 default:
  89.                         CryFatalError("Got Unknown Output type from CheckOcclusion");
  90.                         break;
  91.                 }
  92.         }
  93. #if !defined(_RELEASE)
  94.         if (GetCVars()->e_CoverageBufferDebug)
  95.         {
  96.                 GetObjManager()->CoverageBufferDebugDraw();
  97.         }
  98. #endif
  99. }
  100.  
  101. bool IsValidOccluder(IMaterial* pMat)
  102. {
  103.         CMatInfo* __restrict pMaterial = static_cast<CMatInfo*>(pMat);
  104.         if (!pMaterial)
  105.                 return false;
  106.  
  107.         for (size_t a = 0, S = pMaterial->GetSubMtlCount(); a <= S; a++)
  108.         {
  109.                 IMaterial* pSubMat = a < S ? pMaterial->GetSubMtl(a) : pMaterial;
  110.                 if (!pSubMat)
  111.                         continue;
  112.                 SShaderItem& rShaderItem = pSubMat->GetShaderItem();
  113.                 IShader* pShader = rShaderItem.m_pShader;
  114.                 if (!pShader)
  115.                         continue;
  116.                 if (pShader->GetFlags2() & (EF2_HASALPHATEST | EF2_HASALPHABLEND))
  117.                         return false;
  118.                 if (pShader->GetFlags() & (EF_NODRAW | EF_DECAL))
  119.                         return false;
  120.                 if (pShader->GetShaderType() == eST_Vegetation)
  121.                         return false;
  122.                 else if (!rShaderItem.m_pShaderResources)
  123.                         continue;
  124.                 if (rShaderItem.m_pShaderResources->IsAlphaTested())
  125.                         return false;
  126.                 if (rShaderItem.m_pShaderResources->IsTransparent())
  127.                         return false;
  128.         }
  129.         return true;
  130. }
  131.  
  132. //////////////////////////////////////////////////////////////////////////
  133. void CObjManager::BeginCulling()
  134. {
  135.         m_CheckOcclusionOutputQueue.SetRunningState();
  136. }
  137.  
downloadObjectsTree_MT.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