BsGLGpuParamBlockBuffer.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsGLGpuParamBlockBuffer.h"
  4. #include "Profiling/BsRenderStats.h"
  5. #include "Error/BsException.h"
  6. namespace bs { namespace ct
  7. {
  8. GLGpuParamBlockBuffer::GLGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
  9. :GpuParamBlockBuffer(size, usage, deviceMask), mGLHandle(0)
  10. {
  11. assert((deviceMask == GDF_DEFAULT || deviceMask == GDF_PRIMARY) && "Multiple GPUs not supported natively on OpenGL.");
  12. }
  13. GLGpuParamBlockBuffer::~GLGpuParamBlockBuffer()
  14. {
  15. glDeleteBuffers(1, &mGLHandle);
  16. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_GpuParamBuffer);
  17. }
  18. void GLGpuParamBlockBuffer::initialize()
  19. {
  20. glGenBuffers(1, &mGLHandle);
  21. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  22. if(mUsage == GPBU_STATIC)
  23. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_STATIC_DRAW);
  24. else if(mUsage == GPBU_DYNAMIC)
  25. glBufferData(GL_UNIFORM_BUFFER, mSize, nullptr, GL_DYNAMIC_DRAW);
  26. else
  27. BS_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  28. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  29. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_GpuParamBuffer);
  30. GpuParamBlockBuffer::initialize();
  31. }
  32. void GLGpuParamBlockBuffer::writeToGPU(const UINT8* data, UINT32 queueIdx)
  33. {
  34. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  35. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
  36. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  37. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_GpuParamBuffer);
  38. }
  39. }}