#pragma once #ifndef _NB_OGL_OBJECTS #define _NB_OGL_OBJECTS #include "GLLoad.hpp" #include namespace nb { class OGLError : public Error { using Base = Error; public: using Base::Base; enum Codes : unsigned int { UNDEFINED, HANGING_OBJECT }; static const std::string type; static const ErrorCodeMap ErrorMessages; }; class OpenGLObject { public: OpenGLObject(const OpenGLObject&) = delete; OpenGLObject& operator=(const OpenGLObject&) = delete; ~OpenGLObject() { remove(); } virtual void bind() const = 0; virtual void unbind() const = 0; GLuint id() const { return _id; } protected: OpenGLObject() = default; virtual GLuint declare() = 0; virtual void remove() { this->remove(); }; GLuint _id; }; } // namespace nb #endif // _NB_OGL_OBJECTS