Program Listing for File ModelLoader.hpp

Return to documentation for file (include/Ramus/Assets/Loaders/ModelLoader.hpp)

#pragma once

#include "Ramus/Assets/Loaders/AssetLoader.hpp"
#include "Ramus/Assets/Model.hpp"
#include "Ramus/Graphics/Geometry/Mesh.hpp"

#include <memory>
#include <vector>

struct aiScene;
struct aiMesh;
struct aiNode;

namespace ramus
{

    class ModelLoader : public AssetLoader<Model>
    {
    public:
        ModelLoader() = default;
        ~ModelLoader() = default;

        std::shared_ptr<Model> Load(const std::string& path) override;

    private:
        void ProcessNode(aiNode* node, const aiScene* scene, Model& model);
        std::unique_ptr<Mesh> ProcessMesh(aiMesh* mesh, const aiScene* scene);

        std::vector<Vertex> ExtractVertices(aiMesh* mesh);
        std::vector<uint32_t> ExtractIndices(aiMesh* mesh);
    };

}