Buffer.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "Buffer.hpp"
  2. Buffer::~Buffer()
  3. {
  4. release();
  5. }
  6. void Buffer::create()
  7. {
  8. glGenBuffers(1, &m_buffer);
  9. }
  10. void Buffer::release()
  11. {
  12. glDeleteBuffers(1, &m_buffer);
  13. }
  14. void Buffer::set(void const *data, size_t count, size_t size)
  15. {
  16. bind();
  17. glBufferData(GL_SHADER_STORAGE_BUFFER, count * size, data, GL_STATIC_DRAW);
  18. unbind();
  19. }
  20. void Buffer::unbind()
  21. {
  22. glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
  23. }
  24. void Buffer::bind()
  25. {
  26. glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer);
  27. }
  28. void Buffer::bindBase(GLint program, char const *name, int binding)
  29. {
  30. bind();
  31. GLuint block_index = glGetProgramResourceIndex(program, GL_SHADER_STORAGE_BLOCK, name);
  32. if(block_index == GL_INVALID_INDEX){
  33. std::cout << "bindBase failed" << std::endl;
  34. }
  35. glShaderStorageBlockBinding(program, block_index, binding);
  36. glBindBufferBase(GL_SHADER_STORAGE_BUFFER, binding, m_buffer);
  37. unbind();
  38. }
  39. void Buffer::get(void *data, size_t count, size_t size)
  40. {
  41. bind();
  42. glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, count * size, data);
  43. unbind();
  44. }