#include "Buffer.hpp" Buffer::~Buffer() { release(); } void Buffer::create() { glGenBuffers(1, &m_buffer); } void Buffer::release() { glDeleteBuffers(1, &m_buffer); } void Buffer::set(void const *data, size_t count, size_t size) { bind(); glBufferData(GL_SHADER_STORAGE_BUFFER, count * size, data, GL_STATIC_DRAW); unbind(); } void Buffer::unbind() { glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); } void Buffer::bind() { glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer); } void Buffer::bindBase(GLint program, char const *name, int binding) { bind(); GLuint block_index = glGetProgramResourceIndex(program, GL_SHADER_STORAGE_BLOCK, name); if(block_index == GL_INVALID_INDEX){ std::cout << "bindBase failed" << std::endl; } glShaderStorageBlockBinding(program, block_index, binding); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, binding, m_buffer); unbind(); } void Buffer::get(void *data, size_t count, size_t size) { bind(); glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, count * size, data); unbind(); }