#include "Buffers.h" // Создает VAO и активирует его VAO::VAO() { glGenVertexArrays(1, &handler); // Генерация одного объекта массива вершин glBindVertexArray(handler); // Привязка для использования } // Уничтожает VAO VAO::~VAO() { glDeleteVertexArrays(1, &handler); } // Активация VAO void VAO::use() { glBindVertexArray(handler); // Привязка VAO для использования } // Деактивация активного VAO void VAO::disable() { glBindVertexArray(0); // Отключение VAO } // возвращает дескриптор GLuint VAO::get_handler() { return handler; } // Создает пустой буфер, привязывает к активному VAO, если нужно конфигурирует атрибуты BO::BO(BUFFER_TYPE t, void (*attrib_config)()) : type(t) { glGenBuffers(1, &handler); // Генерация одного объекта буфера вершин glBindBuffer(type, handler); // Привязка элементного буфера if (attrib_config) attrib_config(); } // Создает буфер, привязывает к активному VAO и загружает туда данные, если нужно конфигурирует атрибуты BO::BO(BUFFER_TYPE t, const void *data, int size, void (*attrib_config)()) : BO(t, attrib_config) { load(data, size); } // Уничтожает буфер BO::~BO() { glDeleteBuffers(1, &handler); } // Загрузка вершин в буфер void BO::load(const void *data, int size, GLuint mode) { use(); glBufferData(type, size, data, mode); } void BO::use() { glBindBuffer(type, handler); // Привязка элементного буфера } // Создает пустой uniform-буфер заданного размера с автоматической привязкой UBO::UBO(int size, int binding) : BO(UNIFORM, 0, size, 0) { rebind(binding); } // Создает пустой uniform-буфер заданного размера с автоматической привязкой UBO::UBO(const void *data, int size, int binding) : BO(UNIFORM, data, size, 0) { rebind(binding); } // перепривязка void UBO::rebind(int binding) { glBindBufferBase(type, binding, handler); } // Загрузка с отступом void UBO::loadSub(const void *data, int size, int offset) { use(); glBufferSubData(type, offset, size, data); }