2026-08-20 08:12:55 -05:00

48 lines
1021 B
C++

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