BsGpuParamBlock.cpp 2.1 KB

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