#ifndef BUFFERS_H #define BUFFERS_H #include // Объект массива вершин class VAO { public: VAO(); // Создает VAO и активирует его ~VAO(); // Уничтожает VAO void use(); // Активация VAO static void disable(); // Деактивация активного VAO GLuint get_handler(); // возвращает дескриптор private: GLuint handler; // Дескриптор }; // Тип буфера enum BUFFER_TYPE { VERTEX = GL_ARRAY_BUFFER , ELEMENT = GL_ELEMENT_ARRAY_BUFFER , UNIFORM = GL_UNIFORM_BUFFER }; // Объект вершинного буфера class BO { public: BO(BUFFER_TYPE type, void (*attrib_config)() = 0); // Создает пустой буфер, привязывает к активному VAO BO(BUFFER_TYPE type, const void *data, int size, void (*attrib_config)() = 0); // Создает , привязывает к активному VAO и загружает туда данные ~BO(); // Уничтожает буфер void load(const void *data, int size, GLuint mode = GL_STATIC_DRAW); // Загрузка вершин в void use(); protected: GLuint handler; // Дескриптор BUFFER_TYPE type; // Тип буфера }; // Объект uniform-буфера class UBO : public BO { public: UBO(int size, int binding); // Создает пустой uniform-буфер заданного размера с автоматической привязкой UBO(const void *data, int size, int binding); // Создает пустой uniform-буфер заданного размера с автоматической привязкой void rebind(int binding); // Перепривязка void loadSub(const void *data, int size, int offset = 0); // Загрузка с отступом }; #endif // BUFFERS_H