UBO
This commit is contained in:
parent
248379e49e
commit
c13e49282a
|
@ -25,6 +25,7 @@ class VAO
|
|||
// Тип буфера
|
||||
enum BUFFER_TYPE { VERTEX = GL_ARRAY_BUFFER
|
||||
, ELEMENT = GL_ELEMENT_ARRAY_BUFFER
|
||||
, UNIFORM = GL_UNIFORM_BUFFER
|
||||
};
|
||||
|
||||
// Объект вершинного буфера
|
||||
|
@ -47,4 +48,15 @@ class BO
|
|||
static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
|
||||
};
|
||||
|
||||
// Объект 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
|
|
@ -117,3 +117,28 @@ void BO::use()
|
|||
{
|
||||
glBindBuffer(type, handler); // Привязка элементного буфера
|
||||
}
|
||||
|
||||
// Создает пустой uniform-буфер заданного размера с автоматической привязкой
|
||||
UBO::UBO(int size, int binding) : BO(UNIFORM, 0, size)
|
||||
{
|
||||
rebind(binding);
|
||||
}
|
||||
|
||||
// Создает пустой uniform-буфер заданного размера с автоматической привязкой
|
||||
UBO::UBO(const void *data, int size, int binding) : BO(UNIFORM, data, size)
|
||||
{
|
||||
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…
Reference in New Issue