2
0

BsGLGpuParamBlockBuffer.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "BsGLGpuParamBlockBuffer.h"
  2. #include "BsRenderStats.h"
  3. #include "BsException.h"
  4. namespace BansheeEngine
  5. {
  6. GLGpuParamBlockBufferCore::GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
  7. :GpuParamBlockBufferCore(size, usage), mGLHandle(0)
  8. {
  9. }
  10. GLGpuParamBlockBufferCore::~GLGpuParamBlockBufferCore()
  11. {
  12. glDeleteBuffers(1, &mGLHandle);
  13. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
  14. }
  15. void GLGpuParamBlockBufferCore::initialize()
  16. {
  17. glGenBuffers(1, &mGLHandle);
  18. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  19. if(mUsage == GPBU_STATIC)
  20. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_STATIC_DRAW);
  21. else if(mUsage == GPBU_DYNAMIC)
  22. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_DYNAMIC_DRAW);
  23. else
  24. BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  25. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  26. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_GpuParamBuffer);
  27. GpuParamBlockBufferCore::initialize();
  28. }
  29. void GLGpuParamBlockBufferCore::writeToGPU(const UINT8* data)
  30. {
  31. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  32. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
  33. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  34. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
  35. }
  36. void GLGpuParamBlockBufferCore::readFromGPU(UINT8* data) const
  37. {
  38. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  39. glGetBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, (GLvoid*)data);
  40. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  41. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_GpuParamBuffer);
  42. }
  43. }