#ifndef __PVS_H #define __PVS_H #include "common.h" #include "Bvh.h" namespace CHCDemoEngine { class BvhNode; class Bvh; /** Class representing the Potentially Visible Set (PVS) from a view cell. */ class Pvs { public: void Clear(); bool Empty() const; void AddEntry(Bvh *bvh, BvhNode *node); int GetSize() const; inline SceneEntity *GetEntry(int i) const; inline void AddEntry(SceneEntity *ent, float timeStamp = 0.0f); protected: /// vector of PVS entries SceneEntityContainer mEntries; std::vector mTimeStamps; static bool sStoreTimeStamps; }; inline SceneEntity *Pvs::GetEntry(int i) const { return mEntries[i]; } inline void Pvs::AddEntry(SceneEntity *ent, float timeStamp) { mEntries.push_back(ent); if (sStoreTimeStamps) { mTimeStamps.push_back(timeStamp); } } inline int Pvs::GetSize() const { return (int)mEntries.size(); } inline void Pvs::AddEntry(Bvh *bvh, BvhNode *node) { int geometrySize; SceneEntity **entities; entities = bvh->GetGeometry(node, geometrySize); for (int i = 0; i < geometrySize; ++ i) { AddEntry(entities[i]); } } } #endif