#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); } // Создает буфер кадра с нужным числом прикреплений текстур FBO::FBO(GLuint *attachments, int count) { glGenFramebuffers(1, &handler); use(); glDrawBuffers(count, attachments); } // Уничтожение буфера FBO::~FBO() { glDeleteFramebuffers(1, &handler); } // Активирует буфер кадра в заданном режиме void FBO::use(GLuint mode) { glBindFramebuffer(mode, handler); } // Активирует базовый буфер в заданном режиме void FBO::useDefault(GLuint mode) { glBindFramebuffer(mode, 0); } // Привязка рендер буфера void FBO::assignRenderBuffer(GLuint hander, GLuint attachment) { glFramebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, hander); } // Создает буфер рендера с заданными параметрами размеров и используемых компонент RBO::RBO(int w, int h, GLuint component) { glGenRenderbuffers(1, &handler); glBindRenderbuffer(GL_RENDERBUFFER, handler); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h); } // Уничтожение буфера RBO::~RBO() { glDeleteRenderbuffers(1, &handler); } // Возвращает дескриптор буфера рендера GLuint RBO::getHandler() { return handler; }