| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #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();
- }
|