/* * 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; unsigned int m_Size; unsigned int m_Offset; }; class VertexBuffer { private: unsigned int m_ID, m_DataStride; std::vector m_VertexAttribs; public: REMOVE_COPY(VertexBuffer); VertexBuffer(VertexBuffer&& 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; } VertexBuffer(const std::vector& data, unsigned int stride); ~VertexBuffer(); void Bind() const; void Unbind() const; void AddVertexAttribPointer(unsigned int index, unsigned int coordinateSize, unsigned int offset); void BindVertexAttribs() const; }; class VertexArray { private: unsigned int m_ID, m_VertexCount; std::vector m_VertexBuffers; //use to destroy vbos when become unused public: REMOVE_COPY(VertexArray); VertexArray(VertexArray&& other) { m_ID = other.m_ID; m_VertexCount = other.m_VertexCount; m_VertexBuffers = std::move(other.m_VertexBuffers); other.m_VertexCount = 0; other.m_ID = 0; } VertexArray(unsigned int vertexCount); ~VertexArray(); unsigned int GetVertexCount() const { return m_VertexCount; } void BindVertexBuffer(VertexBuffer& vbo); void Bind() const; void Unbind() const; }; }