#pragma once #include #include #include #include #include struct Model { struct Primitive { uint32_t first_idx; uint32_t idx_count; uint32_t mat_idx; }; using Mesh = std::vector; struct Node { Node* parent; std::vector children; Mesh mesh; glm::mat4 mat; ~Node() { for(auto& n : children) delete n; } }; Model(vk::PhysicalDevice phys_dev, vk::Device dev, const std::string& fname); std::shared_ptr model; void initVertices(Node*, const tinygltf::Primitive&); std::unique_ptr vertex_buffer; std::unique_ptr index_buffer; std::vector vertices; std::vector indices; /* recusively initialize nodes with an accumulative vertex and index buffer collector */ void initNode(const tinygltf::Node& node, Node* parent, int level = 0); std::vector nodes; ~Model() { for(auto& n : nodes) delete n; vertex_buffer.reset(); index_buffer.reset(); } };