/* * GLLoader.h * * Created on: 4 nov. 2020 * Author: simon */ #pragma once #include #define REMOVE_COPY(className) \ className(const className &) = delete;\ className& operator=(const className &) = delete namespace GL{ struct VertexAttribPointer{ unsigned int m_Index, m_Size; int m_Offset; }; class VBO{ private: unsigned int m_ID, m_DataStride; std::vector m_VertexAttribs; public: REMOVE_COPY(VBO); VBO(VBO&& other){ m_VertexAttribs = std::move(other.m_VertexAttribs); m_ID = other.m_ID; m_DataStride = other.m_DataStride; other.m_ID = 0; other.m_DataStride = 0; } VBO(const std::vector& data, unsigned int stride); ~VBO(); void bind() const; void unbind() const; void addVertexAttribPointer(unsigned int index, unsigned int coordinateSize, unsigned int offset); void bindVertexAttribs() const; }; class VAO{ private: unsigned int m_ID, m_VertexCount; std::vector m_Vbos; //use to destroy vbos when become unused public: REMOVE_COPY(VAO); VAO(VAO&& other){ m_ID = other.m_ID; m_VertexCount = other.m_VertexCount; m_Vbos = std::move(other.m_Vbos); other.m_VertexCount = 0; other.m_ID = 0; } VAO(unsigned int vertexCount); ~VAO(); unsigned int getVertexCount() const {return m_VertexCount;} void bindVBO(VBO& vbo); void bind() const; void unbind() const; }; }