84 lines
3.2 KiB
C++
84 lines
3.2 KiB
C++
#ifndef BUFFERS_H
|
||
#define BUFFERS_H
|
||
|
||
#include <glad/glad.h>
|
||
|
||
|
||
|
||
// Объект массива вершин
|
||
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); // Загрузка с отступом
|
||
};
|
||
|
||
// Объект буфера кадра
|
||
class FBO
|
||
{
|
||
public:
|
||
FBO(GLuint *attachments = 0, int count = 0); // Создает буфер кадра с нужным числом прикреплений текстур
|
||
~FBO(); // Уничтожение буфера
|
||
|
||
void use(GLuint mode = GL_FRAMEBUFFER); // Активирует буфер кадра в заданном режиме
|
||
static void useDefault(GLuint mode = GL_FRAMEBUFFER); // Активирует базовый буфер в заданном режиме
|
||
void assignRenderBuffer(GLuint hander, GLuint attachment = GL_DEPTH_ATTACHMENT); // Привязка рендер буфера
|
||
protected:
|
||
GLuint handler; // Дескриптор
|
||
};
|
||
|
||
// Объект буфера рендера
|
||
class RBO
|
||
{
|
||
public:
|
||
RBO(int w, int h, GLuint component = GL_DEPTH_COMPONENT); // Создает буфер рендера с заданными параметрами размеров и используемых компонент
|
||
~RBO(); // Уничтожение буфера
|
||
|
||
GLuint getHandler(); // Возвращает дескриптор буфера рендера
|
||
protected:
|
||
GLuint handler; // Дескриптор
|
||
};
|
||
|
||
#endif // BUFFERS_H
|