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