8#include <unordered_map>
33 static constexpr uint32_t kNoSet = 0xFFFFFFFFu;
36 bool HasDynamicTable()
const;
39 int32_t FindCell(glm::vec3 point)
const;
40 uint32_t GetCellSetIndex(int32_t cell)
const;
41 const uint32_t* GetSet(int32_t cell)
const;
42 bool IsVisible(
const uint32_t* set, uint32_t occludeeIndex)
const;
45 const uint32_t* GetCoarseSet(int32_t cell)
const;
46 bool IsCoarseCellVisible(
const uint32_t* coarseSet, uint32_t coarseIndex)
const;
48 uint32_t
GetNumUniqueCoarseSets()
const {
return mWordsPerCoarseSet > 0 ? uint32_t(mCoarseSetPool.size() / mWordsPerCoarseSet) : 0; }
52 bool IsBoxVisibleDynamic(int32_t cell,
const AABB& box)
const;
54 uint32_t
GetNumCells()
const {
return mDimX * mDimY * mDimZ; }
55 uint32_t
GetNumUniqueSets()
const {
return mWordsPerSet > 0 ? uint32_t(mSetPool.size() / mWordsPerSet) : 0; }
56 AABB GetCellAABB(int32_t cell)
const;
57 AABB GetVolumeAABB()
const;
58 size_t GetMemoryBytes()
const;
59 size_t GetStaticTableBytes()
const;
60 size_t GetDynamicTableBytes()
const;
64 void SetCellSetIndices(
const std::vector<uint32_t>& cellToSet);
65 void SetCellCoarseSetIndices(
const std::vector<uint32_t>& cellToSet);
67 void SaveStream(
Stream& stream)
const;
68 void LoadStream(
Stream& stream, uint32_t version);
70 static const uint32_t kMaxDynamicCoarseCells = 64;
73 float mCellSize = 4.0f;
77 uint32_t mWordsPerSet = 0;
80 uint32_t mBakeAlgorithm = 0;
89 uint32_t mCoarseFactor = 0;
90 uint32_t mCoarseDimX = 0;
91 uint32_t mCoarseDimY = 0;
92 uint32_t mCoarseDimZ = 0;
93 uint32_t mWordsPerCoarseSet = 0;
100 uint32_t GetCoarseSetIndex(int32_t cell)
const;
112 void Build(
const std::vector<OcclusionEntry>& entries,
float cellSize);
113 int32_t Find(glm::vec3 center, glm::vec3 extents)
const;
117 uint64_t Key(glm::vec3 p)
const;
119 const std::vector<OcclusionEntry>* mEntries =
nullptr;
120 float mCellSize = 1.0f;
121 float mBucketSize = 1.0f;
122 std::unordered_map<uint64_t, std::vector<uint32_t>> mBuckets;
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition OcclusionData.h:30
std::vector< uint32_t > mCellToSet32
Definition OcclusionData.h:85
uint32_t GetNumCoarseCells() const
Definition OcclusionData.h:47
std::vector< uint32_t > mSetPool
Definition OcclusionData.h:86
std::vector< uint16_t > mCellToSet16
Definition OcclusionData.h:84
std::vector< OcclusionEntry > mOccluders
Definition OcclusionData.h:83
uint32_t GetNumCells() const
Definition OcclusionData.h:54
std::vector< uint32_t > mCoarseSetPool
Definition OcclusionData.h:96
uint32_t GetNumUniqueSets() const
Definition OcclusionData.h:55
std::vector< OcclusionEntry > mOccludees
Definition OcclusionData.h:82
std::vector< uint32_t > mCellToCoarseSet32
Definition OcclusionData.h:95
uint32_t GetNumUniqueCoarseSets() const
Definition OcclusionData.h:48
std::vector< uint16_t > mCellToCoarseSet16
Definition OcclusionData.h:94
Definition OcclusionData.h:109
Definition EngineTypes.h:213
Definition OcclusionData.h:16
glm::vec3 mCenter
Definition OcclusionData.h:17
glm::vec3 mExtents
Definition OcclusionData.h:18