From c13e49282a92da83c6c9db2f97f022430ca73ac3 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Mon, 14 Nov 2022 20:16:23 +0300 Subject: [PATCH] UBO --- include/Buffers.h | 14 +++++++++++++- src/Buffers.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/include/Buffers.h b/include/Buffers.h index 999dba4..903246c 100644 --- a/include/Buffers.h +++ b/include/Buffers.h @@ -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 handler_count; // Счетчик использований дескриптора }; -#endif // BUFFERS_H \ No newline at end of file +// Объект 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 diff --git a/src/Buffers.cpp b/src/Buffers.cpp index cb47cd2..2e9eebb 100644 --- a/src/Buffers.cpp +++ b/src/Buffers.cpp @@ -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); +}