#pragma once #include #include "Mesh.hpp" namespace MC::GFX { class BindableMesh { public: void bind() const; void unbind() const; bool has_indices() const; size_t size() const; private: BindableMesh( uint32_t vao, size_t vertex_count, size_t attribute_count ) : m_vao(vao), m_vertex_count(vertex_count), m_has_indices(vertex_count > 0), m_attribute_count(attribute_count) {}; uint32_t m_vao; size_t m_vertex_count; bool m_has_indices; size_t m_attribute_count; friend class Binder; }; class Binder { public: Binder() = default;; static BindableMesh load(Mesh& mesh); private: static uint32_t create_vao(); static void unbind_vao(); static void store_in_attribute_list(uint32_t attribute, int attribute_size, int type_size, void* data, long data_size); static void store_indices(uint32_t* indices, size_t indices_size); }; }