BsGLGpuParamBlockBuffer.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "BsGLGpuParamBlockBuffer.h"
  2. #include "BsException.h"
  3. namespace BansheeEngine
  4. {
  5. GLGpuParamBlockBuffer::GLGpuParamBlockBuffer()
  6. :mGLHandle(0)
  7. {
  8. }
  9. void GLGpuParamBlockBuffer::initialize_internal()
  10. {
  11. glGenBuffers(1, &mGLHandle);
  12. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  13. if(mUsage == GPBU_STATIC)
  14. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_STATIC_DRAW);
  15. else if(mUsage == GPBU_DYNAMIC)
  16. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_DYNAMIC_DRAW);
  17. else
  18. BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  19. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  20. GpuParamBlockBuffer::initialize_internal();
  21. }
  22. void GLGpuParamBlockBuffer::destroy_internal()
  23. {
  24. glDeleteBuffers(1, &mGLHandle);
  25. GpuParamBlockBuffer::destroy_internal();
  26. }
  27. void GLGpuParamBlockBuffer::writeData(const UINT8* data)
  28. {
  29. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  30. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
  31. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  32. }
  33. void GLGpuParamBlockBuffer::readData(UINT8* data) const
  34. {
  35. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  36. glGetBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, (GLvoid*)data);
  37. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  38. }
  39. }