#pragma once #include #include #include "glad/glad.h" namespace cbt::opengl { enum class buffer_type { vertex = GL_ARRAY_BUFFER, index = GL_ELEMENT_ARRAY_BUFFER, uniform = GL_UNIFORM_BUFFER, storage = GL_SHADER_STORAGE_BUFFER, }; class buffer { GLuint m_id = 0; buffer_type m_type = buffer_type::vertex; public: buffer(); explicit buffer(buffer_type type); ~buffer(); buffer(const buffer&) = delete; buffer& operator=(const buffer&) = delete; buffer(buffer&& other) noexcept; buffer& operator=(buffer&& other) noexcept; auto bind() const -> void; auto unbind() const -> void; auto upload(const void* data, size_t size) -> void; auto upload(std::vector data) -> void; auto upload_dynamic(const void* data, size_t size) -> void; auto id() const -> GLuint; auto valid() const -> bool; }; }