#pragma once #include "resource.hpp" #include "resources/shader.hpp" #include #include #include #include #include struct Vertex { glm::vec3 pos; glm::vec3 norm; glm::vec2 uv; }; namespace resources { class Mesh : public Resource { public: Mesh(const std::vector& vertices); Mesh(const std::vector& vertices, const std::vector& indices); Mesh(const std::filesystem::path& resPath); ~Mesh() override; void drawMesh(const Shader& shader); static void invalidate() { s_active_vao = -1; } std::vector m_vertices; std::vector m_indices; private: static int s_active_vao; GLuint m_vao; GLuint m_vbo; GLuint m_ebo; void bindVAO() const; void initMesh(); }; }