2
0

CmGpuParamBlock.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "CmGpuParamBlock.h"
  2. #include "CmGpuParamDesc.h"
  3. #include "CmGpuParamBlockBuffer.h"
  4. #include "CmHardwareBufferManager.h"
  5. #include "CmException.h"
  6. namespace CamelotFramework
  7. {
  8. GpuParamBlock::GpuParamBlock(UINT32 size)
  9. :mDirty(true), mData(nullptr), mSize(size)
  10. {
  11. mData = CM_NEW_BYTES(mSize, ScratchAlloc);
  12. memset(mData, 0, mSize);
  13. }
  14. GpuParamBlock::GpuParamBlock(GpuParamBlock* otherBlock)
  15. {
  16. mSize = otherBlock->mSize;
  17. mData = CM_NEW_BYTES(mSize, ScratchAlloc);
  18. write(0, otherBlock->getData(), otherBlock->getSize());
  19. mDirty = otherBlock->mDirty;
  20. }
  21. GpuParamBlock::~GpuParamBlock()
  22. {
  23. if(mData != nullptr)
  24. CM_DELETE_BYTES(mData, ScratchAlloc);
  25. }
  26. void GpuParamBlock::write(UINT32 offset, const void* data, UINT32 size)
  27. {
  28. #if CM_DEBUG_MODE
  29. if(offset < 0 || (offset + size) > mSize)
  30. {
  31. CM_EXCEPT(InvalidParametersException, "Wanted range is out of buffer bounds. " \
  32. "Available range: 0 .. " + toString(mSize) + ". " \
  33. "Wanted range: " + toString(offset) + " .. " + toString(offset + size) + ".");
  34. }
  35. #endif
  36. memcpy(mData + offset, data, size);
  37. mDirty = true;
  38. }
  39. void GpuParamBlock::zeroOut(UINT32 offset, UINT32 size)
  40. {
  41. #if CM_DEBUG_MODE
  42. if(offset < 0 || (offset + size) > mSize)
  43. {
  44. CM_EXCEPT(InvalidParametersException, "Wanted range is out of buffer bounds. " \
  45. "Available range: 0 .. " + toString(mSize) + ". " \
  46. "Wanted range: " + toString(offset) + " .. " + toString(offset + size) + ".");
  47. }
  48. #endif
  49. memset(mData + offset, 0, size);
  50. mDirty = true;
  51. }
  52. void GpuParamBlock::uploadToBuffer(GpuParamBlockBufferPtr buffer)
  53. {
  54. buffer->writeData(mData);
  55. mDirty = false;
  56. }
  57. }