BsGpuParamBlock.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "BsGpuParamBlock.h"
  2. #include "BsGpuParamDesc.h"
  3. #include "BsGpuParamBlockBuffer.h"
  4. #include "BsHardwareBufferManager.h"
  5. #include "BsFrameAlloc.h"
  6. #include "BsException.h"
  7. namespace BansheeEngine
  8. {
  9. GpuParamBlock::GpuParamBlock(UINT32 size)
  10. :mDirty(true), mData(nullptr), mSize(size), mAlloc(nullptr)
  11. {
  12. if (mSize > 0)
  13. mData = (UINT8*)bs_alloc(mSize);
  14. memset(mData, 0, mSize);
  15. }
  16. GpuParamBlock::GpuParamBlock(FrameAlloc* alloc, UINT32 size)
  17. :mDirty(true), mData(nullptr), mSize(size), mAlloc(alloc)
  18. {
  19. if (mSize > 0)
  20. mData = alloc->alloc(mSize);
  21. memset(mData, 0, mSize);
  22. }
  23. GpuParamBlock::~GpuParamBlock()
  24. {
  25. if (mData != nullptr)
  26. {
  27. if (mAlloc != nullptr)
  28. mAlloc->dealloc(mData);
  29. else
  30. bs_free(mData);
  31. }
  32. }
  33. void GpuParamBlock::write(UINT32 offset, const void* data, UINT32 size)
  34. {
  35. #if BS_DEBUG_MODE
  36. if(offset < 0 || (offset + size) > mSize)
  37. {
  38. BS_EXCEPT(InvalidParametersException, "Wanted range is out of buffer bounds. " \
  39. "Available range: 0 .. " + toString(mSize) + ". " \
  40. "Wanted range: " + toString(offset) + " .. " + toString(offset + size) + ".");
  41. }
  42. #endif
  43. memcpy(mData + offset, data, size);
  44. mDirty = true;
  45. }
  46. void GpuParamBlock::read(UINT32 offset, void* data, UINT32 size)
  47. {
  48. #if BS_DEBUG_MODE
  49. if(offset < 0 || (offset + size) > mSize)
  50. {
  51. BS_EXCEPT(InvalidParametersException, "Wanted range is out of buffer bounds. " \
  52. "Available range: 0 .. " + toString(mSize) + ". " \
  53. "Wanted range: " + toString(offset) + " .. " + toString(offset + size) + ".");
  54. }
  55. #endif
  56. memcpy(data, mData + offset, size);
  57. }
  58. void GpuParamBlock::zeroOut(UINT32 offset, UINT32 size)
  59. {
  60. #if BS_DEBUG_MODE
  61. if(offset < 0 || (offset + size) > mSize)
  62. {
  63. BS_EXCEPT(InvalidParametersException, "Wanted range is out of buffer bounds. " \
  64. "Available range: 0 .. " + toString(mSize) + ". " \
  65. "Wanted range: " + toString(offset) + " .. " + toString(offset + size) + ".");
  66. }
  67. #endif
  68. memset(mData + offset, 0, size);
  69. mDirty = true;
  70. }
  71. void GpuParamBlock::uploadToBuffer(const GpuParamBlockBufferPtr& buffer)
  72. {
  73. buffer->writeData(mData);
  74. mDirty = false;
  75. }
  76. }