// vulkan_engine.h : Include file for standard system include files, // or project specific include files. #pragma once #include #include "core/vk_descriptors.h" #include #include class VulkanEngine; struct Bounds { glm::vec3 origin; float sphereRadius; glm::vec3 extents; }; struct GLTFMaterial { MaterialInstance data; }; struct GeoSurface { uint32_t startIndex; uint32_t count; Bounds bounds; std::shared_ptr material; }; struct MeshAsset { std::string name; std::vector surfaces; GPUMeshBuffers meshBuffers; }; struct LoadedGLTF : public IRenderable { // storage for all the data on a given gltf file std::unordered_map > meshes; std::unordered_map > nodes; std::unordered_map images; std::unordered_map > materials; // nodes that dont have a parent, for iterating through the file in tree order std::vector > topNodes; std::vector samplers; DescriptorAllocatorGrowable descriptorPool; AllocatedBuffer materialDataBuffer; VulkanEngine *creator; ~LoadedGLTF() { clearAll(); }; void clearMeshes(){ clearAll(); }; virtual void Draw(const glm::mat4 &topMatrix, DrawContext &ctx); private: void clearAll(); }; std::optional > loadGltf(VulkanEngine *engine, std::string_view filePath);