#pragma once #include #include #include #include // ====================================================================== // Blobtree // ====================================================================== // TODO: allows for holding an global transformation, and apply it to all primitives EXTERN_C struct BS_API blobtree_t { using node_type = internal::runtime_node_t; public: hive_mp nodes{}; using iterator = typename hive_mp::iterator; public: iterator push_primitive_node(const primitive* primitive_ptr); iterator push_operation_node(internal::eNodeOperation op, iterator lhs, iterator rhs); void pop_node(iterator node); }; // ====================================================================== // Baked Blobtree // ====================================================================== template struct object_with_index_mapping { T* object_ptr{nullptr}; stl_vector_mp index_mapping{}; }; EXTERN_C struct BS_API baked_blobtree_t { using node_type = internal::node_t; public: stl_vector_mp nodes{}; stl_vector_mp leaf_indices{}; stl_vector_mp> primitives{}; stl_vector_mp> subfaces{}; public: baked_blobtree_t() = default; baked_blobtree_t(const baked_blobtree_t&) = default; baked_blobtree_t(baked_blobtree_t&&) = default; baked_blobtree_t& operator=(const baked_blobtree_t&) = default; baked_blobtree_t& operator=(baked_blobtree_t&&) = default; ~baked_blobtree_t() = default; baked_blobtree_t(const blobtree_t&) noexcept; size_t get_node_count() const noexcept; size_t get_primitive_count() const noexcept; internal::node_t& get_node(uint32_t index) noexcept; primitive* get_primitive(uint32_t index) noexcept; };