BVB Source Codes

CRYENGINE Show VisAreaCompile.cpp Source code

Return Download CRYENGINE: download VisAreaCompile.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:   VisAreaCompile.cpp
  5. //  Version:     v1.00
  6. //  Created:     28/4/2005 by Vladimir Kajalin
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: visarea node loading/saving
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #include "StdAfx.h"
  15. #include "ObjMan.h"
  16. #include "VisAreas.h"
  17.  
  18. #define VISAREA_NODE_CHUNK_VERSION       2
  19.  
  20. #define VISAREA_FLAG_OCEAN_VISIBLE       BIT(0)
  21. #define VISAREA_FLAG_IGNORE_SKY_COLOR    BIT(1)
  22. #define VISAREA_FLAG_AFFECTEDBYOUTLIGHTS BIT(2)
  23. #define VISAREA_FLAG_SKYONLY             BIT(3)
  24. #define VISAREA_FLAG_DOUBLESIDE          BIT(4)
  25. #define VISAREA_FLAG_USEININDOORS        BIT(5)
  26. #define VISAREA_FLAG_IGNORE_GI           BIT(6)
  27. #define VISAREA_FLAG_IGNORE_OUTDOOR_AO   BIT(7)
  28.  
  29. #define MAX_VIS_AREA_CONNECTIONS_NUM     30
  30.  
  31. struct SVisAreaChunk
  32. {
  33.         // cppcheck-suppress unusedStructMember
  34.         int    nChunkVersion;
  35.         AABB   boxArea, boxStatics;
  36.         // cppcheck-suppress unusedStructMember
  37.         char   sName[32];
  38.         // cppcheck-suppress unusedStructMember
  39.         int    nObjectsBlockSize;
  40.         // cppcheck-suppress unusedStructMember
  41.         int    arrConnectionsId[MAX_VIS_AREA_CONNECTIONS_NUM];
  42.         uint32 dwFlags;
  43.         float  fPortalBlending;
  44.         Vec3   vConnNormals[2];
  45.         // cppcheck-suppress unusedStructMember
  46.         float  fHeight;
  47.         Vec3   vAmbColor;
  48.         // cppcheck-suppress unusedStructMember
  49.         float  fViewDistRatio;
  50.  
  51.         AUTO_STRUCT_INFO_LOCAL;
  52. };
  53.  
  54. #if ENGINE_ENABLE_COMPILATION
  55. int CVisArea::GetData(byte*& pData, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo)
  56. {
  57.         if (m_pObjectsTree)
  58.                 m_pObjectsTree->CleanUpTree();
  59.  
  60.         if (pData)
  61.         {
  62.                 byte* pHead = pData;
  63.                 SaveHeader(pData, nDataSize);
  64.  
  65.                 // save shape points num
  66.                 int nPointsCount = m_lstShapePoints.Count();
  67.                 SwapEndian(nPointsCount, eEndian);
  68.                 memcpy(pData, &nPointsCount, sizeof(nPointsCount));
  69.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, sizeof(nPointsCount));
  70.  
  71.                 // save shape points
  72.                 memcpy(pData, m_lstShapePoints.GetElements(), m_lstShapePoints.GetDataSize());
  73.                 SwapEndian((Vec3*)pData, m_lstShapePoints.Count(), eEndian);
  74.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, m_lstShapePoints.GetDataSize());
  75.  
  76.                 SaveObjetsTree(pData, nDataSize, pStatObjTable, pMatTable, pStatInstGroupTable, eEndian, pExportInfo, pHead, Vec3(ZERO));
  77.         }
  78.         else // just count size
  79.         {
  80.                 nDataSize += sizeof(SVisAreaChunk);
  81.  
  82.                 nDataSize += sizeof(int);
  83.                 nDataSize += m_lstShapePoints.GetDataSize();
  84.  
  85.                 if (m_pObjectsTree)
  86.                         m_pObjectsTree->GetData(pData, nDataSize, NULL, NULL, NULL, eEndian, pExportInfo, Vec3(ZERO));
  87.         }
  88.         return true;
  89. }
  90. #endif
  91.  
  92. int CVisArea::Load(byte*& f, int& nDataSizeLeft, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo)
  93. {
  94.         return Load_T(f, nDataSizeLeft, pStatObjTable, pMatTable, eEndian, pExportInfo);
  95. }
  96.  
  97. int CVisArea::Load(FILE*& f, int& nDataSizeLeft, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo)
  98. {
  99.         return Load_T(f, nDataSizeLeft, pStatObjTable, pMatTable, eEndian, pExportInfo);
  100. }
  101.  
  102. template<class T>
  103. int CVisArea::Load_T(T*& f, int& nDataSizeLeft, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo)
  104. {
  105.         int objBlockSize = 0;
  106.         if (!LoadHeader_T(f, nDataSizeLeft, eEndian, objBlockSize))
  107.                 return 0;
  108.  
  109.         {
  110.                 // get shape points
  111.                 int nPointsCount = 0;
  112.                 if (!CTerrain::LoadDataFromFile(&nPointsCount, 1, f, nDataSizeLeft, eEndian))
  113.                         return 0;
  114.  
  115.                 // get shape points
  116.                 m_lstShapePoints.PreAllocate(nPointsCount, nPointsCount);
  117.                 if (!CTerrain::LoadDataFromFile(m_lstShapePoints.GetElements(), nPointsCount, f, nDataSizeLeft, eEndian))
  118.                         return 0;
  119.  
  120.                 UpdateClipVolume();
  121.         }
  122.  
  123.         if (!LoadObjectsTree_T(f, nDataSizeLeft, 0, pStatObjTable, pMatTable, eEndian, pExportInfo, objBlockSize, Vec3(ZERO)))
  124.                 return 0;
  125.  
  126.         return true;
  127. }
  128.  
  129. const AABB* CVisArea::GetStaticObjectAABBox() const
  130. {
  131.         return &m_boxStatics;
  132. }
  133. #if ENGINE_ENABLE_COMPILATION
  134. int CVisArea::SaveHeader(byte*& pData, int& nDataSize)
  135. {
  136.         // save node info
  137.         SVisAreaChunk* pCunk = (SVisAreaChunk*)pData;
  138.         pCunk->nChunkVersion = VISAREA_NODE_CHUNK_VERSION;
  139.         pCunk->boxArea = m_boxArea;
  140.         UpdateGeometryBBox();
  141.         pCunk->boxStatics = m_boxStatics;
  142.         memset(pCunk->sName, 0, sizeof(pCunk->sName));
  143.         cry_strcpy(pCunk->sName, m_pVisAreaColdData->m_sName);
  144.         memcpy(pCunk->vConnNormals, m_vConnNormals, sizeof(pCunk->vConnNormals));
  145.         pCunk->fHeight = m_fHeight;
  146.         pCunk->vAmbColor = m_vAmbientColor;
  147.         pCunk->fViewDistRatio = m_fViewDistRatio;
  148.         pCunk->fPortalBlending = m_fPortalBlending;
  149.  
  150.         pCunk->dwFlags = 0;
  151.         if (m_bOceanVisible)
  152.                 pCunk->dwFlags |= VISAREA_FLAG_OCEAN_VISIBLE;
  153.         if (m_bIgnoreSky)
  154.                 pCunk->dwFlags |= VISAREA_FLAG_IGNORE_SKY_COLOR;
  155.         if (m_bAffectedByOutLights)
  156.                 pCunk->dwFlags |= VISAREA_FLAG_AFFECTEDBYOUTLIGHTS;
  157.         if (m_bSkyOnly)
  158.                 pCunk->dwFlags |= VISAREA_FLAG_SKYONLY;
  159.         if (m_bDoubleSide)
  160.                 pCunk->dwFlags |= VISAREA_FLAG_DOUBLESIDE;
  161.         if (m_bUseInIndoors)
  162.                 pCunk->dwFlags |= VISAREA_FLAG_USEININDOORS;
  163.         if (m_bIgnoreGI)
  164.                 pCunk->dwFlags |= VISAREA_FLAG_IGNORE_GI;
  165.         if (m_bIgnoreOutdoorAO)
  166.                 pCunk->dwFlags |= VISAREA_FLAG_IGNORE_OUTDOOR_AO;
  167.  
  168.         // transform connections id into pointers
  169.         PodArray<CVisArea*>& rAreas = IsPortal() ? GetVisAreaManager()->m_lstVisAreas : GetVisAreaManager()->m_lstPortals;
  170.         for (int i = 0; i < MAX_VIS_AREA_CONNECTIONS_NUM; i++)
  171.                 pCunk->arrConnectionsId[i] = -1;
  172.         for (int i = 0; i < m_lstConnections.Count() && i < MAX_VIS_AREA_CONNECTIONS_NUM; i++)
  173.         {
  174.                 IVisArea* pArea = m_lstConnections[i];
  175.                 int nId;
  176.                 for (nId = 0; nId < rAreas.Count(); nId++)
  177.                 {
  178.                         if (pArea == rAreas[nId])
  179.                                 break;
  180.                 }
  181.  
  182.                 if (nId < rAreas.Count())
  183.                         pCunk->arrConnectionsId[i] = nId;
  184.                 else
  185.                 {
  186.                         pCunk->arrConnectionsId[i] = -1;
  187.                         assert(!"Undefined connction");
  188.                 }
  189.         }
  190.  
  191.         UPDATE_PTR_AND_SIZE(pData, nDataSize, sizeof(SVisAreaChunk));
  192.  
  193.         return true;
  194. }
  195.  
  196. int CVisArea::SaveObjetsTree(byte*& pData, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, byte* pHead, const Vec3& segmentOffset)
  197. {
  198.         SVisAreaChunk* pCunk = (SVisAreaChunk*)pHead;
  199.  
  200.         // save objects
  201.         pCunk->nObjectsBlockSize = 0;
  202.  
  203.         // get data from objects tree
  204.         if (m_pObjectsTree)
  205.         {
  206.                 byte* pTmp = NULL;
  207.                 m_pObjectsTree->GetData(pTmp, pCunk->nObjectsBlockSize, NULL, NULL, NULL, eEndian, pExportInfo, segmentOffset);
  208.                 m_pObjectsTree->GetData(pData, nDataSize, pStatObjTable, pMatTable, pStatInstGroupTable, eEndian, pExportInfo, segmentOffset); // UPDATE_PTR_AND_SIZE is inside
  209.         }
  210.  
  211.         SwapEndian(*pCunk, eEndian);
  212.  
  213.         return true;
  214. }
  215. #endif
  216. template<class T>
  217. int CVisArea::LoadHeader_T(T*& f, int& nDataSizeLeft, EEndian eEndian, int& objBlockSize)
  218. {
  219.         SVisAreaChunk chunk;
  220.         if (!CTerrain::LoadDataFromFile(&chunk, 1, f, nDataSizeLeft, eEndian))
  221.                 return 0;
  222.  
  223.         assert(chunk.nChunkVersion == VISAREA_NODE_CHUNK_VERSION);
  224.         if (chunk.nChunkVersion != VISAREA_NODE_CHUNK_VERSION)
  225.                 return 0;
  226.  
  227.         // get area info
  228.         m_boxArea = chunk.boxArea;
  229.         m_boxStatics = chunk.boxStatics;
  230.         chunk.sName[sizeof(chunk.sName) - 1] = 0;
  231.         cry_strcpy(m_pVisAreaColdData->m_sName, chunk.sName);
  232.         m_bThisIsPortal = strstr(m_pVisAreaColdData->m_sName, "portal") != 0;
  233.         m_bIgnoreSky = (strstr(m_pVisAreaColdData->m_sName, "ignoresky") != 0) || ((chunk.dwFlags & VISAREA_FLAG_IGNORE_SKY_COLOR) != 0);
  234.         memcpy(m_vConnNormals, chunk.vConnNormals, sizeof(m_vConnNormals));
  235.         m_fHeight = chunk.fHeight;
  236.         m_vAmbientColor = chunk.vAmbColor;
  237.         m_fViewDistRatio = chunk.fViewDistRatio;
  238.         m_fPortalBlending = chunk.fPortalBlending;
  239.  
  240.         if (chunk.dwFlags == uint32(-1))
  241.                 chunk.dwFlags = 0;
  242.         m_bOceanVisible = (chunk.dwFlags & VISAREA_FLAG_OCEAN_VISIBLE) != 0;
  243.  
  244.         m_bAffectedByOutLights = (chunk.dwFlags & VISAREA_FLAG_AFFECTEDBYOUTLIGHTS) != 0;
  245.         m_bSkyOnly = (chunk.dwFlags & VISAREA_FLAG_SKYONLY) != 0;
  246.         m_bDoubleSide = (chunk.dwFlags & VISAREA_FLAG_DOUBLESIDE) != 0;
  247.         m_bUseInIndoors = (chunk.dwFlags & VISAREA_FLAG_USEININDOORS) != 0;
  248.         m_bIgnoreGI = (chunk.dwFlags & VISAREA_FLAG_IGNORE_GI) != 0;
  249.         m_bIgnoreOutdoorAO = (chunk.dwFlags & VISAREA_FLAG_IGNORE_OUTDOOR_AO) != 0;
  250.  
  251.         objBlockSize = chunk.nObjectsBlockSize;
  252.  
  253. #ifndef SEG_WORLD
  254.         // convert connections id into pointers
  255.         PodArray<CVisArea*>& rAreas = IsPortal() ? GetVisAreaManager()->m_lstVisAreas : GetVisAreaManager()->m_lstPortals;
  256.         for (int i = 0; i < MAX_VIS_AREA_CONNECTIONS_NUM && rAreas.Count(); i++)
  257.         {
  258.                 assert(chunk.arrConnectionsId[i] < rAreas.Count());
  259.                 if (chunk.arrConnectionsId[i] >= 0)
  260.                         m_lstConnections.Add(rAreas[chunk.arrConnectionsId[i]]);
  261.         }
  262. #endif
  263.  
  264.         return true;
  265. }
  266.  
  267. template<class T>
  268. int CVisArea::LoadObjectsTree_T(T*& f, int& nDataSizeLeft, int nSID, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, const int objBlockSize, const Vec3& segmentOffset)
  269. {
  270.         // mark tree as invalid since new visarea was just added
  271.         SAFE_DELETE(GetVisAreaManager()->m_pAABBTree);
  272.  
  273.         AABB* pBox = (pExportInfo && !pExportInfo->areaBox.IsReset()) ? &pExportInfo->areaBox : NULL;
  274.  
  275.         // load content of objects tree
  276.         if (!m_bEditor && objBlockSize > 4)
  277.         {
  278.                 int nCurDataSize = nDataSizeLeft;
  279.                 if (nCurDataSize > 0)
  280.                 {
  281.                         if (!m_pObjectsTree)
  282.                         {
  283.                                 m_pObjectsTree = COctreeNode::Create(DEFAULT_SID, m_boxArea, this);
  284.                         }
  285.                         m_pObjectsTree->UpdateVisAreaSID(this, nSID);
  286.  
  287.                         if (pExportInfo != NULL && pExportInfo->pVisibleLayerMask != NULL && pExportInfo->pLayerIdTranslation)
  288.                         {
  289.                                 SLayerVisibility visInfo;
  290.                                 visInfo.pLayerVisibilityMask = pExportInfo->pVisibleLayerMask;
  291.                                 visInfo.pLayerIdTranslation = pExportInfo->pLayerIdTranslation;
  292.                                 m_pObjectsTree->Load(f, nDataSizeLeft, pStatObjTable, pMatTable, eEndian, pBox, &visInfo, segmentOffset);
  293.                         }
  294.                         else
  295.                         {
  296.                                 m_pObjectsTree->Load(f, nDataSizeLeft, pStatObjTable, pMatTable, eEndian, pBox, NULL, segmentOffset);
  297.                         }
  298.  
  299.                         assert(nDataSizeLeft == (nCurDataSize - objBlockSize));
  300.                 }
  301.         }
  302.         else if (objBlockSize > 0)
  303.         {
  304.                 CTerrain::LoadDataFromFile_Seek(objBlockSize, f, nDataSizeLeft, eEndian);
  305.         }
  306.  
  307.         UpdateOcclusionFlagInTerrain();
  308.  
  309.         return true;
  310. }
  311.  
  312. VisAreaGUID CVisArea::GetGUIDFromFile(byte* f, EEndian eEndian)
  313. {
  314.         SVisAreaChunk* pChunk = (SVisAreaChunk*)f;
  315.         SwapEndian(pChunk, sizeof(SVisAreaChunk), eEndian);
  316.  
  317.         assert(pChunk->nChunkVersion == VISAREA_NODE_CHUNK_VERSION);
  318.         if (pChunk->nChunkVersion != VISAREA_NODE_CHUNK_VERSION)
  319.                 return 0;
  320.  
  321.         VisAreaGUID guid = *(VisAreaGUID*)(f + sizeof(SVisAreaChunk));
  322.         SwapEndian(&guid, sizeof(VisAreaGUID), eEndian);
  323.         return guid;
  324. }
  325.  
  326. //////////////////////////////////////////////////////////////////////
  327. // Segmented World
  328. #if ENGINE_ENABLE_COMPILATION
  329. int CVisArea::GetSegmentData(byte*& pData, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, const Vec3& segmentOffset)
  330. {
  331.         if (m_pObjectsTree)
  332.                 m_pObjectsTree->CleanUpTree();
  333.  
  334.         ISegmentsManager* pSM = Get3DEngine()->m_pSegmentsManager;
  335.         assert(pSM);
  336.  
  337.         if (pData)
  338.         {
  339.                 byte* pHead = pData;
  340.                 SaveHeader(pData, nDataSize);
  341.  
  342.                 PodArray<Vec3> lstSegPoints;
  343.                 PodArray<Vec2> lstWorldCoords;
  344.  
  345.                 int nPointsCount = m_lstShapePoints.Count();
  346.  
  347.                 lstSegPoints.PreAllocate(nPointsCount, nPointsCount);
  348.                 lstWorldCoords.PreAllocate(nPointsCount, nPointsCount);
  349.  
  350.                 for (int i = 0; i < nPointsCount; i++)
  351.                 {
  352.                         Vec3 vAbsPos = pSM->LocalToAbsolutePosition(m_lstShapePoints[i]);
  353.                         pSM->WorldVecToGlobalSegVec(vAbsPos, lstSegPoints[i], lstWorldCoords[i]);
  354.                 }
  355.  
  356.                 VisAreaGUID guid = m_nVisGUID;
  357.                 SwapEndian(guid, eEndian);
  358.                 memcpy(pData, &guid, sizeof(VisAreaGUID));
  359.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, sizeof(VisAreaGUID));
  360.  
  361.                 // save shape points num
  362.                 SwapEndian(nPointsCount, eEndian);
  363.                 memcpy(pData, &nPointsCount, sizeof(nPointsCount));
  364.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, sizeof(nPointsCount));
  365.  
  366.                 memcpy(pData, lstSegPoints.GetElements(), lstSegPoints.GetDataSize());
  367.                 SwapEndian((Vec3*)pData, lstSegPoints.Count(), eEndian);
  368.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, lstSegPoints.GetDataSize());
  369.  
  370.                 memcpy(pData, lstWorldCoords.GetElements(), lstWorldCoords.GetDataSize());
  371.                 SwapEndian((Vec2*)pData, lstWorldCoords.Count(), eEndian);
  372.                 UPDATE_PTR_AND_SIZE(pData, nDataSize, lstWorldCoords.GetDataSize());
  373.  
  374.                 SaveObjetsTree(pData, nDataSize, pStatObjTable, pMatTable, pStatInstGroupTable, eEndian, pExportInfo, pHead, segmentOffset);
  375.         }
  376.         else // just count size
  377.         {
  378.                 nDataSize += sizeof(SVisAreaChunk);
  379.  
  380.                 nDataSize += sizeof(VisAreaGUID);
  381.                 nDataSize += sizeof(int);
  382.                 nDataSize += m_lstShapePoints.GetDataSize();
  383.                 nDataSize += sizeof(Vec2i) * m_lstShapePoints.Count();
  384.  
  385.                 if (m_pObjectsTree)
  386.                         m_pObjectsTree->GetData(pData, nDataSize, NULL, NULL, NULL, eEndian, pExportInfo, segmentOffset);
  387.         }
  388.  
  389.         return true;
  390. }
  391. #endif
  392. int CSWVisArea::Load(byte*& f, int& nDataSizeLeft, int nSID, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, const Vec3& segmentOffset, const Vec2& indexOffset)
  393. {
  394.         int objBlockSize = 0;
  395.         if (!LoadHeader_T(f, nDataSizeLeft, eEndian, objBlockSize))
  396.                 return 0;
  397.  
  398.         ISegmentsManager* pSM = Get3DEngine()->m_pSegmentsManager;
  399.         assert(pSM);
  400.  
  401.         if (!CTerrain::LoadDataFromFile(&m_nVisGUID, 1, f, nDataSizeLeft, eEndian))
  402.                 return 0;
  403.  
  404.         {
  405.                 // get shape points
  406.                 int nPointsCount = 0;
  407.                 if (!CTerrain::LoadDataFromFile(&nPointsCount, 1, f, nDataSizeLeft, eEndian))
  408.                         return 0;
  409.  
  410.                 // get shape points
  411.                 m_lstShapePoints.PreAllocate(nPointsCount, nPointsCount);
  412.                 if (!CTerrain::LoadDataFromFile(m_lstShapePoints.GetElements(), nPointsCount, f, nDataSizeLeft, eEndian))
  413.                         return 0;
  414.  
  415.                 PodArray<Vec2> lstWorldCoords;
  416.                 lstWorldCoords.PreAllocate(nPointsCount, nPointsCount);
  417.                 if (!CTerrain::LoadDataFromFile(lstWorldCoords.GetElements(), nPointsCount, f, nDataSizeLeft, eEndian))
  418.                         return 0;
  419.  
  420.                 m_boxArea.max = SetMinBB();
  421.                 m_boxArea.min = SetMaxBB();
  422.                 for (int i = 0; i < nPointsCount; i++)
  423.                 {
  424.                         lstWorldCoords[i] += indexOffset;
  425.                         pSM->GlobalSegVecToLocalSegVec(m_lstShapePoints[i], lstWorldCoords[i], m_lstShapePoints[i]);
  426.  
  427.                         m_boxArea.max.CheckMax(m_lstShapePoints[i]);
  428.                         m_boxArea.min.CheckMin(m_lstShapePoints[i]);
  429.                         m_boxArea.max.CheckMax(m_lstShapePoints[i] + Vec3(0, 0, m_fHeight));
  430.                         m_boxArea.min.CheckMin(m_lstShapePoints[i] + Vec3(0, 0, m_fHeight));
  431.                 }
  432.                 UpdateGeometryBBox();
  433.         }
  434.  
  435.         if (!LoadObjectsTree_T(f, nDataSizeLeft, nSID, pStatObjTable, pMatTable, eEndian, pExportInfo, objBlockSize, segmentOffset))
  436.                 return 0;
  437.  
  438.         return true;
  439. }
  440.  
  441. #include <CryCore/TypeInfo_impl.h>
  442. #include "VisAreaCompile_info.h"
  443.  
downloadVisAreaCompile.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