Initial commit: Final state of the master project
This commit is contained in:
41
Research/scene/Octree/LeafMaterialMultiRootTree.h
Normal file
41
Research/scene/Octree/LeafMaterialMultiRootTree.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
#include "MultiRootTree.h"
|
||||
#include "MaterialNode.h"
|
||||
|
||||
template<typename T>
|
||||
class LeafMaterialMultiRootTree : public MultiRootTree<MaterialNode<T>>
|
||||
{
|
||||
public:
|
||||
LeafMaterialMultiRootTree(unsigned8 maxLevel, unsigned32 slaveRootCount)
|
||||
: MultiRootTree(maxLevel, slaveRootCount) { mLeafsAreEqual = false; }
|
||||
|
||||
~LeafMaterialMultiRootTree() override {}
|
||||
|
||||
unsigned8 GetAdditionalBytesPerNode(unsigned8 level) const override
|
||||
{
|
||||
if (level == GetMaxLevel()) return sizeof(T);
|
||||
else return Tree<MaterialNode<T>>::GetAdditionalBytesPerNode(level);
|
||||
}
|
||||
std::vector<unsigned8> GetAdditionalNodeBytes(const Node* node) const override
|
||||
{
|
||||
if (node->GetLevel() == GetMaxLevel())
|
||||
{
|
||||
auto matNode = (MaterialNode<T>*)node;
|
||||
return matNode->GetMaterial().Serialize();
|
||||
}
|
||||
else
|
||||
return Tree<MaterialNode<T>>::GetAdditionalNodeBytes(node);
|
||||
}
|
||||
|
||||
void AddLeafNode(glm::uvec3 coordinate, unsigned32 slaveRootID, T material)
|
||||
{
|
||||
MaterialNode<T>* node = MultiRootTree<MaterialNode<T>>::AddLeafNode(coordinate, slaveRootID);
|
||||
node->SetMaterial(material);
|
||||
}
|
||||
|
||||
void AddLeafNode(glm::uvec3 coordinate, T material)
|
||||
{
|
||||
MaterialNode<T>* node = MultiRootTree<MaterialNode<T>>::AddLeafNode(coordinate);
|
||||
node->SetMaterial(material);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user