Program Listing for File Mesh.hpp

↰ Return to documentation for file (engine/include/Cacao/Mesh.hpp)

#pragma once

#include "DllHelper.hpp"
#include "Asset.hpp"

#include <memory>
#include <vector>

#include "glm/glm.hpp"

namespace Cacao {
    struct CACAO_API Vertex {
        glm::vec3 position;
        glm::vec2 texCoords;
        glm::vec3 normal;
        glm::vec4 tangent;

        Vertex(const glm::vec3& position, const glm::vec2& texCoords = glm::vec2(0.0f), const glm::vec3& normal = glm::vec3(0.0f), const glm::vec4& tangent = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f))
          : position(position), texCoords(texCoords), normal(normal), tangent(tangent) {}
    };

    class CACAO_API Mesh final : public Asset {
      public:
        static std::shared_ptr<Mesh> Create(std::vector<Vertex>&& vtx, std::vector<glm::uvec3>&& idx, const std::string& addr);

        Mesh(const Mesh&) = delete;
        Mesh(Mesh&&);
        Mesh& operator=(const Mesh&) = delete;
        Mesh& operator=(Mesh&&);

        void Bake() override;

        void Discard() override;

        class Impl;

        ~Mesh();

      private:
        Mesh(std::vector<Vertex>&& vtx, std::vector<glm::uvec3>&& idx, const std::string& addr);
        friend class ResourceManager;
        friend class PAL;

        std::unique_ptr<Impl> impl;
        friend class ImplAccessor;
    };
}