BVB Source Codes

CRYENGINE Show VisAreas.h Source code

Return Download CRYENGINE: download VisAreas.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   visareas.h
  5. //  Version:     v1.00
  6. //  Created:     18/12/2002 by Vladimir Kajalin
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: visibility areas header
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #ifndef VisArea_H
  15. #define VisArea_H
  16.  
  17. #include "BasicArea.h"
  18. #include "PolygonClipContext.h"
  19.  
  20. // Unique identifier for each VisArea instance
  21. typedef unsigned int VisAreaId;
  22.  
  23. typedef uint64       VisAreaGUID;
  24.  
  25. #define ReservedVisAreaBytes 384
  26.  
  27. enum EVisAreaColdDataType
  28. {
  29.         eCDT_Generic = 0,
  30.         eCDT_Portal
  31. };
  32.  
  33. struct SGenericColdData
  34. {
  35.         SGenericColdData()
  36.         {
  37.                 m_dataType = eCDT_Generic;
  38.                 m_sName[0] = 0;
  39.         }
  40.  
  41.         ILINE void ResetGenericData()
  42.         {
  43.                 m_dataType = eCDT_Generic;
  44.                 m_sName[0] = 0;
  45.         }
  46.  
  47.         EVisAreaColdDataType m_dataType;
  48.         char                 m_sName[64];
  49. };
  50.  
  51. struct SPortalColdData : public SGenericColdData
  52. {
  53.         SPortalColdData()
  54.         {
  55.                 m_dataType = eCDT_Portal;
  56.         }
  57.  
  58.         ILINE void ResetPortalData()
  59.         {
  60.                 m_dataType = eCDT_Portal;
  61.         }
  62.  
  63.         OcclusionTestClient m_occlusionTestClient;
  64. };
  65.  
  66. struct CVisArea : public IVisArea, public CBasicArea
  67. {
  68.         static void StaticReset();
  69.  
  70.         // editor interface
  71.         virtual void Update(const Vec3* pPoints, int nCount, const char* szName, const SVisAreaInfo& info);
  72.  
  73.         CVisArea();
  74.         CVisArea(VisAreaGUID visGUID);
  75.         virtual ~CVisArea();
  76.  
  77.         bool                    operator==(const CVisArea& v1) const { return &v1 == this; }
  78.  
  79.         void                    Init();
  80.         ILINE SGenericColdData* GetColdData()                               { return m_pVisAreaColdData; }
  81.         ILINE void              SetColdDataPtr(SGenericColdData* pColdData) { m_pVisAreaColdData = pColdData; }
  82.         bool                    IsSphereInsideVisArea(const Vec3& vPos, const f32 fRadius);
  83.         bool                    IsPointInsideVisArea(const Vec3& vPos) const;
  84.         bool                    IsBoxOverlapVisArea(const AABB& objBox);
  85.         bool                    ClipToVisArea(bool bInside, Sphere& sphere, Vec3 const& vNormal);
  86.         bool                    FindVisArea(IVisArea* pAnotherArea, int nMaxRecursion, bool bSkipDisabledPortals);
  87.         bool                    FindVisAreaReqursive(IVisArea* pAnotherArea, int nMaxReqursion, bool bSkipDisabledPortals, StaticDynArray<CVisArea*, 1024>& arrVisitedParents);
  88.         bool                    GetDistanceThruVisAreas(AABB vCurBoxIn, IVisArea* pTargetArea, const AABB& targetBox, int nMaxReqursion, float& fResDist);
  89.         bool                    GetDistanceThruVisAreasReq(AABB vCurBoxIn, float fCurDistIn, IVisArea* pTargetArea, const AABB& targetBox, int nMaxReqursion, float& fResDist, CVisArea* pPrevArea, int nCallID);
  90.         void                    FindSurroundingVisArea(int nMaxReqursion, bool bSkipDisabledPortals, PodArray<IVisArea*>* pVisitedAreas = NULL, int nMaxVisitedAreas = 0, int nDeepness = 0);
  91.         void                    FindSurroundingVisAreaReqursive(int nMaxReqursion, bool bSkipDisabledPortals, PodArray<IVisArea*>* pVisitedAreas, int nMaxVisitedAreas, int nDeepness, PodArray<CVisArea*>* pUnavailableAreas);
  92.         int                     GetVisFrameId();
  93.         Vec3                    GetConnectionNormal(CVisArea* pPortal);
  94.         void                    PreRender(int nReqursionLevel, CCamera CurCamera, CVisArea* pParent, CVisArea* pCurPortal, bool* pbOutdoorVisible, PodArray<CCamera>* plstOutPortCameras, bool* pbSkyVisible, bool* pbOceanVisible, PodArray<CVisArea*>& lstVisibleAreas, const SRenderingPassInfo& passInfo);
  95.         void                    UpdatePortalCameraPlanes(CCamera& cam, Vec3* pVerts, bool bMergeFrustums, const SRenderingPassInfo& passInfo);
  96.         int                     GetVisAreaConnections(IVisArea** pAreas, int nMaxConnNum, bool bSkipDisabledPortals = false);
  97.         int                     GetRealConnections(IVisArea** pAreas, int nMaxConnNum, bool bSkipDisabledPortals = false);
  98.         bool                    IsPortalValid();
  99.         bool                    IsPortalIntersectAreaInValidWay(CVisArea* pPortal);
  100.         bool                    IsPortal() const;
  101.         bool                    IsShapeClockwise();
  102.         bool                    IsAffectedByOutLights() const { return m_bAffectedByOutLights; }
  103.         bool                    IsActive()                    { return m_bActive || (GetCVars()->e_Portals == 4); }
  104.         void                    UpdateGeometryBBox();
  105.         void                    UpdateClipVolume();
  106.         void                    UpdatePortalBlendInfo(const SRenderingPassInfo& passInfo);
  107.         void DrawAreaBoundsIntoCBuffer(class CCullBuffer* pCBuffer);
  108.         void                    ClipPortalVerticesByCameraFrustum(PodArray<Vec3>* pPolygon, const CCamera& cam);
  109.         void                    GetMemoryUsage(ICrySizer* pSizer);
  110.         bool                    IsConnectedToOutdoor() const;
  111.         bool                    IsIgnoringGI() const        { return m_bIgnoreGI; }
  112.         bool                    IsIgnoringOutdoorAO() const { return m_bIgnoreOutdoorAO; }
  113.  
  114.         const char*             GetName()                   { return m_pVisAreaColdData->m_sName; }
  115. #if ENGINE_ENABLE_COMPILATION
  116.         int                     SaveHeader(byte*& pData, int& nDataSize);
  117.         int                     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);
  118.         int                     GetData(byte*& pData, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo);
  119.         int                     GetSegmentData(byte*& pData, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, const Vec3& segmentOffset);
  120. #endif
  121.         template<class T>
  122.         int                LoadHeader_T(T*& f, int& nDataSizeLeft, EEndian eEndian, int& objBlockSize);
  123.         template<class T>
  124.         int                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);
  125.         template<class T>
  126.         int                Load_T(T*& f, int& nDataSize, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo);
  127.         int                Load(byte*& f, int& nDataSizeLeft, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo);
  128.         int                Load(FILE*& f, int& nDataSizeLeft, std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, EEndian eEndian, SHotUpdateInfo* pExportInfo);
  129.         const AABB*        GetAABBox() const;
  130.         const AABB*        GetStaticObjectAABBox() const;
  131.         void               UpdateOcclusionFlagInTerrain();
  132.         void               AddConnectedAreas(PodArray<CVisArea*>& lstAreas, int nMaxRecursion);
  133.         void               GetShapePoints(const Vec3*& pPoints, size_t& nPoints);
  134.         float              GetHeight();
  135.         float              CalcSignedArea();
  136.  
  137.         bool               CalcPortalBlendPlanes(Vec3 camPos);
  138.         virtual void       GetClipVolumeMesh(_smart_ptr<IRenderMesh>& renderMesh, Matrix34& worldTM) const;
  139.         virtual AABB       GetClipVolumeBBox() const                       { return *GetStaticObjectAABBox(); }
  140.         virtual uint8      GetStencilRef() const                           { return m_nStencilRef; }
  141.         virtual uint       GetClipVolumeFlags() const;
  142.         virtual bool       IsPointInsideClipVolume(const Vec3& vPos) const { return IsPointInsideVisArea(vPos); }
  143.  
  144.         void               OffsetPosition(const Vec3& delta);
  145.         static VisAreaGUID GetGUIDFromFile(byte* f, EEndian eEndian);
  146.         VisAreaGUID        GetGUID() const { return m_nVisGUID; }
  147.  
  148.         const Vec3         GetFinalAmbientColor();
  149.  
  150.         static PodArray<CVisArea*>     m_lUnavailableAreas;
  151.         static PodArray<Vec3>          s_tmpLstPortVertsClipped;
  152.         static PodArray<Vec3>          s_tmpLstPortVertsSS;
  153.         static PodArray<Vec3>          s_tmpPolygonA;
  154.         static PodArray<IRenderNode*>  s_tmpLstLights;
  155.         static PodArray<CTerrainNode*> s_tmpLstTerrainNodeResult;
  156.         static CPolygonClipContext     s_tmpClipContext;
  157.         static PodArray<CCamera>       s_tmpCameras;
  158.         static int                     s_nGetDistanceThruVisAreasCallCounter;
  159.  
  160.         VisAreaGUID                    m_nVisGUID;
  161.         PodArray<CVisArea*>            m_lstConnections;
  162.         Vec3                           m_vConnNormals[2];
  163.         int                            m_nRndFrameId;
  164.         float                          m_fGetDistanceThruVisAreasMinDistance;
  165.         int                            m_nGetDistanceThruVisAreasLastCallID;
  166.         float                          m_fPortalBlending;
  167.  
  168.         PodArray<Vec3>                 m_lstShapePoints;
  169.         float                          m_fHeight;
  170.  
  171.         _smart_ptr<IRenderMesh>        m_pClipVolumeMesh;
  172.  
  173.         Vec3                           m_vAmbientColor;
  174.         float                          m_fDistance;
  175.         float                          m_fViewDistRatio;
  176.         CCamera*                       m_arrOcclCamera[MAX_RECURSION_LEVELS];
  177.         int                            m_lstCurCamerasLen;
  178.         int                            m_lstCurCamerasCap;
  179.         int                            m_lstCurCamerasIdx;
  180.         uint8                          m_nStencilRef;
  181.         SGenericColdData*              m_pVisAreaColdData;
  182.         bool                           m_bAffectedByOutLights;
  183.         bool                           m_bSkyOnly;
  184.         bool                           m_bOceanVisible;
  185.         bool                           m_bDoubleSide;
  186.         bool                           m_bUseDeepness;
  187.         bool                           m_bUseInIndoors;
  188.         bool                           m_bThisIsPortal;
  189.         bool                           m_bIgnoreSky;
  190.         bool                           m_bActive;
  191.         bool                           m_bIgnoreGI;
  192.         bool                           m_bIgnoreOutdoorAO;
  193. };
  194.  
  195. struct CSWVisArea : public CVisArea, public _i_reference_target_t
  196. {
  197.         CSWVisArea() : CVisArea(), m_nSlotID(-1) {}
  198.         ~CSWVisArea() {}
  199.  
  200.         void Release()
  201.         {
  202.                 --m_nRefCounter;
  203.                 if (m_nRefCounter < 0)
  204.                 {
  205.                         assert(0);
  206.                         CryFatalError("Deleting Reference Counted Object Twice");
  207.                 }
  208.         }
  209.  
  210.         int 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);
  211.  
  212.         int m_nSlotID;
  213. };
  214.  
  215. struct SAABBTreeNode
  216. {
  217.         SAABBTreeNode(PodArray<CVisArea*>& lstAreas, AABB box, int nMaxRecursion = 0);
  218.         ~SAABBTreeNode();
  219.         CVisArea*      FindVisarea(const Vec3& vPos);
  220.         SAABBTreeNode* GetTopNode(const AABB& box, void** pNodeCache);
  221.         bool           IntersectsVisAreas(const AABB& box);
  222.         int            ClipOutsideVisAreas(Sphere& sphere, Vec3 const& vNormal);
  223.         void           OffsetPosition(const Vec3& delta);
  224.  
  225.         AABB                nodeBox;
  226.         PodArray<CVisArea*> nodeAreas;
  227.         SAABBTreeNode*      arrChilds[2];
  228. };
  229.  
  230. struct TTopologicalSorter;
  231.  
  232. struct CVisAreaSegmentData
  233. {
  234.         // active vis areas in current segment
  235.         std::vector<int> m_visAreaIndices;
  236. };
  237.  
  238. struct CVisAreaManager : public IVisAreaManager, Cry3DEngineBase
  239. {
  240.         CVisArea*                   m_pCurArea, * m_pCurPortal;
  241.         PodArray<CVisArea*>         m_lstActiveEntransePortals;
  242.  
  243.         PodArray<CVisArea*>         m_lstVisAreas;
  244.         PodArray<CVisArea*>         m_lstPortals;
  245.         PodArray<CVisArea*>         m_lstOcclAreas;
  246.         PodArray<CVisArea*>         m_segVisAreas;
  247.         PodArray<CVisArea*>         m_segPortals;
  248.         PodArray<CVisArea*>         m_segOcclAreas;
  249.         PodArray<CVisArea*>         m_lstActiveOcclVolumes;
  250.         PodArray<CVisArea*>         m_lstIndoorActiveOcclVolumes;
  251.         PodArray<CVisArea*>         m_lstVisibleAreas;
  252.         PodArray<CVisArea*>         m_tmpLstUnavailableAreas;
  253.         PodArray<CVisArea*>         m_tmpLstLightBoxAreas;
  254.         bool                        m_bOutdoorVisible;
  255.         bool                        m_bSkyVisible;
  256.         bool                        m_bOceanVisible;
  257.         bool                        m_bSunIsNeeded;
  258.         PodArray<CCamera>           m_lstOutdoorPortalCameras;
  259.         PodArray<IVisAreaCallback*> m_lstCallbacks;
  260.         SAABBTreeNode*              m_pAABBTree;
  261.  
  262.         CVisAreaManager();
  263.         ~CVisAreaManager();
  264.         void                 UpdateAABBTree();
  265.         void                 SetCurAreas(const SRenderingPassInfo& passInfo);
  266.         PodArray<CVisArea*>* GetActiveEntransePortals() { return &m_lstActiveEntransePortals; }
  267.         void                 PortalsDrawDebug();
  268.         bool                 IsEntityVisible(IRenderNode* pEnt);
  269.         bool                 IsOutdoorAreasVisible();
  270.         bool                 IsSkyVisible();
  271.         bool                 IsOceanVisible();
  272.         CVisArea*            CreateVisArea(VisAreaGUID visGUID);
  273.         bool                 DeleteVisArea(CVisArea* pVisArea);
  274.         bool                 SetEntityArea(IRenderNode* pEnt, const AABB& objBox, const float fObjRadiusSqr);
  275.         void                 CheckVis(const SRenderingPassInfo& passInfo);
  276.         void                 DrawVisibleSectors(const SRenderingPassInfo& passInfo);
  277.         void                 ActivatePortal(const Vec3& vPos, bool bActivate, const char* szEntityName);
  278.         void                 UpdateVisArea(CVisArea* pArea, const Vec3* pPoints, int nCount, const char* szName, const SVisAreaInfo& info);
  279.         virtual void         UpdateConnections();
  280.         void                 MoveObjectsIntoList(PodArray<SRNInfo>* plstVisAreasEntities, const AABB& boxArea, bool bRemoveObjects = false);
  281.         IVisArea*            GetVisAreaFromPos(const Vec3& vPos);
  282.         bool                 IntersectsVisAreas(const AABB& box, void** pNodeCache = 0);
  283.         bool                 ClipOutsideVisAreas(Sphere& sphere, Vec3 const& vNormal, void* pNodeCache = 0);
  284.         bool                 IsEntityVisAreaVisible(IRenderNode* pEnt, int nMaxReqursion, const CDLight* pLight, const SRenderingPassInfo& passInfo);
  285.         void                 MakeActiveEntransePortalsList(const CCamera* pCamera, PodArray<CVisArea*>& lstActiveEntransePortals, CVisArea* pThisPortal, const SRenderingPassInfo& passInfo);
  286.         void                 MergeCameras(CCamera& cam, const CCamera& camPlus, const SRenderingPassInfo& passInfo);
  287.         void                 DrawOcclusionAreasIntoCBuffer(const SRenderingPassInfo& passInfo);
  288.         bool                 IsValidVisAreaPointer(CVisArea* pVisArea);
  289.         void                 GetStreamingStatus(int& nLoadedSectors, int& nTotalSectors);
  290.         void                 GetMemoryUsage(ICrySizer* pSizer) const;
  291.         bool                 IsOccludedByOcclVolumes(const AABB& objBox, const SRenderingPassInfo& passInfo, bool bCheckOnlyIndoorVolumes = false);
  292.         void                 GetObjectsAround(Vec3 vExploPos, float fExploRadius, PodArray<SRNInfo>* pEntList, bool bSkip_ERF_NO_DECALNODE_DECALS = false, bool bSkipDynamicObjects = false);
  293.         void                 IntersectWithBox(const AABB& aabbBox, PodArray<CVisArea*>* plstResult, bool bOnlyIfVisible);
  294.         template<class T>
  295.         bool                 Load_T(T*& f, int& nDataSize, struct SVisAreaManChunkHeader* pVisAreaManagerChunkHeader, std::vector<struct IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, bool bHotUpdate, SHotUpdateInfo* pExportInfo);
  296.         virtual bool         Load(FILE*& f, int& nDataSize, struct SVisAreaManChunkHeader* pVisAreaManagerChunkHeader, std::vector<struct IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable);
  297.         virtual bool         SetCompiledData(byte* pData, int nDataSize, std::vector<struct IStatObj*>** ppStatObjTable, std::vector<IMaterial*>** ppMatTable, bool bHotUpdate, SHotUpdateInfo* pExportInfo, const Vec3& vSegmentOrigin);
  298.         virtual bool         GetCompiledData(byte* pData, int nDataSize, std::vector<struct IStatObj*>** ppStatObjTable, std::vector<IMaterial*>** ppMatTable, std::vector<struct IStatInstGroup*>** ppStatInstGroupTable, EEndian eEndian, SHotUpdateInfo* pExportInfo, const Vec3& segmentOffset);
  299.         virtual int          GetCompiledDataSize(SHotUpdateInfo* pExportInfo);
  300.         void                 UnregisterEngineObjectsInArea(const SHotUpdateInfo* pExportInfo, PodArray<IRenderNode*>& arrUnregisteredObjects, bool bOnlyEngineObjects);
  301.         void                 PrecacheLevel(bool bPrecacheAllVisAreas, Vec3* pPrecachePoints, int nPrecachePointsNum);
  302.         void                 AddLightSource(CDLight* pLight, const SRenderingPassInfo& passInfo);
  303.         void                 AddLightSourceReqursive(CDLight* pLight, CVisArea* pArea, const int32 nDeepness, const SRenderingPassInfo& passInfo);
  304.         bool                 IsEntityVisAreaVisibleReqursive(CVisArea* pVisArea, int nMaxReqursion, PodArray<CVisArea*>* pUnavailableAreas, const CDLight* pLight, const SRenderingPassInfo& passInfo);
  305.         bool                 IsAABBVisibleFromPoint(AABB& aabb, Vec3 vPos);
  306.         bool                 FindShortestPathToVisArea(CVisArea* pThisArea, CVisArea* pTargetArea, PodArray<CVisArea*>& arrVisitedAreas, int& nRecursion, const struct Shadowvolume& sv);
  307.  
  308.         int                  GetNumberOfVisArea() const;                            // the function give back the accumlated number of visareas and portals
  309.         IVisArea*            GetVisAreaById(int nID) const;                         // give back the visarea interface based on the id (0..GetNumberOfVisArea()) it can be a visarea or a portal
  310.  
  311.         virtual void         AddListener(IVisAreaCallback* pListener);
  312.         virtual void         RemoveListener(IVisAreaCallback* pListener);
  313.  
  314.         virtual void         CloneRegion(const AABB& region, const Vec3& offset, float zRotation);
  315.         virtual void         ClearRegion(const AABB& region);
  316.  
  317.         void                 MarkAllSectorsAsUncompiled(const IRenderNode* pRenderNode = NULL);
  318.         void                 InitAABBTree();
  319.  
  320.         // -------------------------------------
  321.  
  322.         void         GetObjectsByType(PodArray<IRenderNode*>& lstObjects, EERType objType, const AABB* pBBox, bool* pInstStreamReady = NULL, uint64 dwFlags = ~0);
  323.         void         GetObjectsByFlags(uint dwFlags, PodArray<IRenderNode*>& lstObjects);
  324.         int          GetObjectsCount(EOcTeeNodeListType eListType);
  325.         void         GetStreamedInNodesNum(int& nAllStreamable, int& nReady);
  326.  
  327.         void         GetNearestCubeProbe(float& fMinDistance, int& nMaxPriority, CLightEntity*& pNearestLight, const AABB* pBBox);
  328.  
  329.         void         GetObjects(PodArray<IRenderNode*>& lstObjects, const AABB* pBBox);
  330.         CVisArea*    GetCurVisArea() { return m_pCurArea ? m_pCurArea : m_pCurPortal; }
  331.         void         GenerateStatObjAndMatTables(std::vector<IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<IStatInstGroup*>* pStatInstGroupTable, SHotUpdateInfo* pExportInfo);
  332.         void         OnVisAreaDeleted(IVisArea* pArea);
  333.         void         ActivateObjectsLayer(uint16 nLayerId, bool bActivate, bool bPhys, IGeneralMemoryHeap* pHeap, const AABB& layerBox);
  334.         void         PhysicalizeInBox(const AABB&);
  335.         void         DephysicalizeInBox(const AABB&);
  336.  
  337.         virtual void PrepareSegmentData(const AABB& box);
  338.         virtual void ReleaseInactiveSegments();
  339.         virtual bool CreateSegment(int nSID);
  340.         virtual bool DeleteSegment(int nSID, bool bDeleteNow);
  341.         virtual bool StreamCompiledData(uint8* pData, int nDataSize, int nSID, std::vector<struct IStatObj*>* pStatObjTable, std::vector<IMaterial*>* pMatTable, std::vector<struct IStatInstGroup*>* pStatInstGroupTable, const Vec3& vSegmentOrigin, const Vec2& vIndexOffset);
  342.         virtual void OffsetPosition(const Vec3& delta);
  343.  
  344. private:
  345.         void        DeleteAllVisAreas();
  346.  
  347.         CVisArea*   CreateTypeVisArea();
  348.         CVisArea*   CreateTypePortal();
  349.         CVisArea*   CreateTypeOcclArea();
  350.  
  351.         void        DeleteVisAreaSegment(int nSID, PodArray<CVisAreaSegmentData>& visAreaSegmentData, PodArray<CVisArea*>& lstVisAreas, PodArray<CVisArea*, ReservedVisAreaBytes>& visAreas, PodArray<int>& deletedVisAreas);
  352.         CVisArea*   FindVisAreaByGuid(VisAreaGUID guid, PodArray<CVisArea*>& lstVisAreas);
  353.         CSWVisArea* FindFreeVisAreaFromPool(PodArray<CVisArea*, ReservedVisAreaBytes>& visAreas);
  354.         template<class T>
  355.         CSWVisArea* CreateVisAreaFromPool(PodArray<CVisArea*>& lstVisAreas, PodArray<CVisArea*, ReservedVisAreaBytes>& visAreas, PodArray<T>& visAreaColdData, bool bIsPortal);
  356.         template<class T>
  357.         void        ResetVisAreaList(PodArray<CVisArea*>& lstVisAreas, PodArray<CVisArea*, ReservedVisAreaBytes>& visAreas, PodArray<T>& visAreaColdData);
  358.         template<class T>
  359.         CSWVisArea* CreateTypeArea(PodArray<CVisArea*, ReservedVisAreaBytes>& visAreas, PodArray<T>& visAreaColdData, bool bIsPortal);
  360.  
  361.         PodArray<CVisArea*, ReservedVisAreaBytes> m_portals;
  362.         PodArray<CVisArea*, ReservedVisAreaBytes> m_visAreas;
  363.         PodArray<CVisArea*, ReservedVisAreaBytes> m_occlAreas;
  364.  
  365.         PodArray<SGenericColdData>                m_visAreaColdData;
  366.         PodArray<SPortalColdData>                 m_portalColdData;
  367.         PodArray<SGenericColdData>                m_occlAreaColdData;
  368.  
  369.         PodArray<CVisAreaSegmentData>             m_visAreaSegmentData;
  370.         PodArray<CVisAreaSegmentData>             m_portalSegmentData;
  371.         PodArray<CVisAreaSegmentData>             m_occlAreaSegmentData;
  372.  
  373.         PodArray<int>                             m_arrDeletedVisArea;
  374.         PodArray<int>                             m_arrDeletedPortal;
  375.         PodArray<int>                             m_arrDeletedOcclArea;
  376.  
  377.         struct SActiveVerts
  378.         {
  379.                 Vec3 arrvActiveVerts[4];
  380.         };
  381.  
  382. #if defined(OCCLUSIONCULLER_W)
  383.         std::vector<SActiveVerts> m_allActiveVerts;
  384. #endif
  385. };
  386.  
  387. #endif // VisArea_H
  388.  
downloadVisAreas.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