42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#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);
|
|
}
|
|
};
|