92 QSSGMeshBVH() =
default;
95 [[nodiscard]] QSSGMeshBVHNode::Handle newHandle()
97 m_nodes.emplace_back();
98 return {
this, m_nodes.size() - 1 };
101 [[nodiscard]]
const QSSGMeshBVHTriangles &triangles()
const {
return m_triangles; }
102 [[nodiscard]]
const QSSGMeshBVHRoots &roots()
const {
return m_roots; }
103 [[nodiscard]]
const QSSGMeshBVHNodes &nodes()
const {
return m_nodes; }
106 friend class QSSGMeshBVHNode::Handle;
107 friend class QSSGMeshBVHBuilder;
108 using FallbackIndex = QSSGMeshBVHNode::FallbackIndex;
109 size_t getNodeIndex(size_t idx, FallbackIndex op)
const
111 const bool valid = (idx >= size_t(FallbackIndex::Count) && idx < m_nodes.size());
112 return (valid * idx) + (!valid * size_t(op));
115 QSSGMeshBVHNode &mutableValue(qsizetype idx)
117 return m_nodes[getNodeIndex(idx, FallbackIndex::InvalidWrite)];
120 const QSSGMeshBVHNode &value(qsizetype idx)
const
122 return m_nodes[getNodeIndex(idx, FallbackIndex::InvalidRead)];
125 QSSGMeshBVHRoots m_roots;
126 QSSGMeshBVHNodes m_nodes { { }, { } };
127 QSSGMeshBVHTriangles m_triangles;