CmGLGpuParamBlock.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "CmGLGpuParamBlock.h"
  2. #include "CmException.h"
  3. namespace CamelotEngine
  4. {
  5. GLGpuParamBlockBuffer::GLGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  6. :GpuParamBlockBuffer(size, usage)
  7. {
  8. glGenBuffers(1, &mGLHandle);
  9. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  10. if(mUsage == GPBU_STATIC)
  11. glBufferData(GL_UNIFORM_BUFFER, mSize, (GLvoid*)mData, GL_STATIC_DRAW);
  12. else if(mUsage == GPBU_DYNAMIC)
  13. glBufferData(GL_UNIFORM_BUFFER, mSize, (GLvoid*)mData, GL_DYNAMIC_DRAW);
  14. else
  15. CM_EXCEPT(InternalErrorException, "Invalid gpu param block usage.");
  16. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  17. }
  18. GLGpuParamBlockBuffer::~GLGpuParamBlockBuffer()
  19. {
  20. glDeleteBuffers(1, &mGLHandle);
  21. }
  22. void GLGpuParamBlockBuffer::writeAll(const void* data)
  23. {
  24. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  25. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, data);
  26. glBindBuffer(GL_UNIFORM_BUFFER, 0);
  27. GpuParamBlockBuffer::writeAll(data);
  28. }
  29. GpuParamBlockBuffer* GLGpuParamBlock::createBuffer() const
  30. {
  31. return CM_NEW(GLGpuParamBlockBuffer, PoolAlloc) GLGpuParamBlockBuffer(mSize, mUsage);
  32. }
  33. }