BsGLGpuParamBlockBuffer.cpp 1.8 KB

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