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;
};
}