#pragma once #include "MultiRootTree.h" #include "MaterialNode.h" template class LeafMaterialMultiRootTree : public MultiRootTree> { 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>::GetAdditionalBytesPerNode(level); } std::vector GetAdditionalNodeBytes(const Node* node) const override { if (node->GetLevel() == GetMaxLevel()) { auto matNode = (MaterialNode*)node; return matNode->GetMaterial().Serialize(); } else return Tree>::GetAdditionalNodeBytes(node); } void AddLeafNode(glm::uvec3 coordinate, unsigned32 slaveRootID, T material) { MaterialNode* node = MultiRootTree>::AddLeafNode(coordinate, slaveRootID); node->SetMaterial(material); } void AddLeafNode(glm::uvec3 coordinate, T material) { MaterialNode* node = MultiRootTree>::AddLeafNode(coordinate); node->SetMaterial(material); } };