CmGLGpuParamBlock.cpp 884 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "CmGLGpuParamBlock.h"
  2. namespace CamelotEngine
  3. {
  4. GLGpuParamBlock::GLGpuParamBlock(const GpuParamBlockDesc& desc)
  5. :GpuParamBlock(desc), mBufferInitialized(false), mGLHandle(0)
  6. {
  7. }
  8. GLGpuParamBlock::~GLGpuParamBlock()
  9. {
  10. }
  11. void GLGpuParamBlock::updateIfDirty()
  12. {
  13. if(mDirty)
  14. {
  15. if(!mBufferInitialized)
  16. {
  17. glGenBuffers(1, &mGLHandle);
  18. glBindBuffer(GL_UNIFORM_BUFFER, mGLHandle);
  19. glBufferData(mGLHandle, mSize, mData, GL_WRITE_ONLY);
  20. }
  21. else
  22. glBufferSubData(GL_UNIFORM_BUFFER, 0 , mSize, mData);
  23. }
  24. GpuParamBlock::updateIfDirty();
  25. }
  26. GpuParamBlockPtr GLGpuParamBlock::clone() const
  27. {
  28. std::shared_ptr<GLGpuParamBlock> clonedParamBlock(new GLGpuParamBlock(*this));
  29. clonedParamBlock->mData = new UINT8[mSize];
  30. memcpy(clonedParamBlock->mData, mData, mSize);
  31. return clonedParamBlock;
  32. }
  33. }