UBO
This commit is contained in:
parent
248379e49e
commit
c13e49282a
|
@ -25,6 +25,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
|
||||||
};
|
};
|
||||||
|
|
||||||
// Объект вершинного буфера
|
// Объект вершинного буфера
|
||||||
|
@ -47,4 +48,15 @@ class BO
|
||||||
static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
|
static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BUFFERS_H
|
// Объект 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); // Привязка элементного буфера
|
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