BsGLGpuParamBlockBuffer.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsGLGpuParamBlockBuffer.h"
  5. #include "BsRenderStats.h"
  6. #include "BsException.h"
  7. namespace BansheeEngine
  8. {
  9. GLGpuParamBlockBuffer::GLGpuParamBlockBuffer()
  10. :mGLHandle(0)
  11. {
  12. }
  13. void GLGpuParamBlockBuffer::initialize_internal()
  14. {
  15. glGenBuffers(1, &mGLHandle);
  16. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  17. if(mUsage == GPBU_STATIC)
  18. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_STATIC_DRAW);
  19. else if(mUsage == GPBU_DYNAMIC)
  20. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_DYNAMIC_DRAW);
  21. else
  22. BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  23. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  24. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_GpuParamBuffer);
  25. GpuParamBlockBuffer::initialize_internal();
  26. }
  27. void GLGpuParamBlockBuffer::destroy_internal()
  28. {
  29. glDeleteBuffers(1, &mGLHandle);
  30. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
  31. GpuParamBlockBuffer::destroy_internal();
  32. }
  33. void GLGpuParamBlockBuffer::writeData(const UINT8* data)
  34. {
  35. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  36. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
  37. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  38. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
  39. }
  40. void GLGpuParamBlockBuffer::readData(UINT8* data) const
  41. {
  42. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  43. glGetBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, (GLvoid*)data);
  44. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  45. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_GpuParamBuffer);
  46. }
  47. }