This commit is contained in:
Ковалев Роман Евгеньевич 2022-11-14 20:16:23 +03:00 committed by R.E. Kovalev
parent 05c6dfe4c3
commit 07a4d7d2cc
2 changed files with 39 additions and 1 deletions

View File

@ -24,6 +24,7 @@ class VAO
// Тип буфера
enum BUFFER_TYPE { VERTEX = GL_ARRAY_BUFFER
, ELEMENT = GL_ELEMENT_ARRAY_BUFFER
, UNIFORM = GL_UNIFORM_BUFFER
};
// Объект вершинного буфера
@ -37,9 +38,20 @@ class BO
void load(const void *data, int size, GLuint mode = GL_STATIC_DRAW); // Загрузка вершин в
void use();
private:
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

View File

@ -56,6 +56,7 @@ BO::~BO()
// Загрузка вершин в буфер
void BO::load(const void *data, int size, GLuint mode)
{
use();
glBufferData(type, size, data, mode);
}
@ -63,3 +64,28 @@ 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);
}