UBO
This commit is contained in:
parent
05c6dfe4c3
commit
07a4d7d2cc
@ -24,6 +24,7 @@ class VAO
|
|||||||
// Тип буфера
|
// Тип буфера
|
||||||
enum BUFFER_TYPE { VERTEX = GL_ARRAY_BUFFER
|
enum BUFFER_TYPE { VERTEX = GL_ARRAY_BUFFER
|
||||||
, ELEMENT = GL_ELEMENT_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 load(const void *data, int size, GLuint mode = GL_STATIC_DRAW); // Загрузка вершин в
|
||||||
void use();
|
void use();
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
GLuint handler; // Дескриптор
|
GLuint handler; // Дескриптор
|
||||||
BUFFER_TYPE type; // Тип буфера
|
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
|
#endif // BUFFERS_H
|
||||||
|
@ -56,6 +56,7 @@ BO::~BO()
|
|||||||
// Загрузка вершин в буфер
|
// Загрузка вершин в буфер
|
||||||
void BO::load(const void *data, int size, GLuint mode)
|
void BO::load(const void *data, int size, GLuint mode)
|
||||||
{
|
{
|
||||||
|
use();
|
||||||
glBufferData(type, size, data, mode);
|
glBufferData(type, size, data, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,3 +64,28 @@ void BO::use()
|
|||||||
{
|
{
|
||||||
glBindBuffer(type, handler); // Привязка элементного буфера
|
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);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user