BsPixelDataRTTI.h 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #pragma once
  5. #include "BsCorePrerequisites.h"
  6. #include "BsPixelData.h"
  7. #include "BsRTTIType.h"
  8. #include "BsManagedDataBlock.h"
  9. namespace BansheeEngine
  10. {
  11. class BS_CORE_EXPORT PixelDataRTTI : public RTTIType<PixelData, GpuResourceData, PixelDataRTTI>
  12. {
  13. UINT32& getLeft(PixelData* obj) { return obj->mExtents.left; }
  14. void setLeft(PixelData* obj, UINT32& val) { obj->mExtents.left = val; }
  15. UINT32& getTop(PixelData* obj) { return obj->mExtents.top; }
  16. void setTop(PixelData* obj, UINT32& val) { obj->mExtents.top = val; }
  17. UINT32& getRight(PixelData* obj) { return obj->mExtents.right; }
  18. void setRight(PixelData* obj, UINT32& val) { obj->mExtents.right = val; }
  19. UINT32& getBottom(PixelData* obj) { return obj->mExtents.bottom; }
  20. void setBottom(PixelData* obj, UINT32& val) { obj->mExtents.bottom = val; }
  21. UINT32& getFront(PixelData* obj) { return obj->mExtents.front; }
  22. void setFront(PixelData* obj, UINT32& val) { obj->mExtents.front = val; }
  23. UINT32& getBack(PixelData* obj) { return obj->mExtents.back; }
  24. void setBack(PixelData* obj, UINT32& val) { obj->mExtents.back = val; }
  25. UINT32& getRowPitch(PixelData* obj) { return obj->mRowPitch; }
  26. void setRowPitch(PixelData* obj, UINT32& val) { obj->mRowPitch = val; }
  27. UINT32& getSlicePitch(PixelData* obj) { return obj->mSlicePitch; }
  28. void setSlicePitch(PixelData* obj, UINT32& val) { obj->mSlicePitch = val; }
  29. PixelFormat& getFormat(PixelData* obj) { return obj->mFormat; }
  30. void setFormat(PixelData* obj, PixelFormat& val) { obj->mFormat = val; }
  31. ManagedDataBlock getData(PixelData* obj)
  32. {
  33. ManagedDataBlock dataBlock((UINT8*)obj->getData(), obj->getConsecutiveSize());
  34. return dataBlock;
  35. }
  36. void setData(PixelData* obj, ManagedDataBlock val)
  37. {
  38. // Nothing to do here, the pointer we provided already belongs to PixelData
  39. // so the data is already written
  40. }
  41. static UINT8* allocateData(PixelData* obj, UINT32 numBytes)
  42. {
  43. obj->allocateInternalBuffer(numBytes);
  44. return obj->getData();
  45. }
  46. public:
  47. PixelDataRTTI()
  48. {
  49. addPlainField("left", 0, &PixelDataRTTI::getLeft, &PixelDataRTTI::setLeft);
  50. addPlainField("top", 1, &PixelDataRTTI::getTop, &PixelDataRTTI::setTop);
  51. addPlainField("right", 2, &PixelDataRTTI::getRight, &PixelDataRTTI::setRight);
  52. addPlainField("bottom", 3, &PixelDataRTTI::getBottom, &PixelDataRTTI::setBottom);
  53. addPlainField("front", 4, &PixelDataRTTI::getFront, &PixelDataRTTI::setFront);
  54. addPlainField("back", 5, &PixelDataRTTI::getBack, &PixelDataRTTI::setBack);
  55. addPlainField("rowPitch", 6, &PixelDataRTTI::getRowPitch, &PixelDataRTTI::setRowPitch);
  56. addPlainField("slicePitch", 7, &PixelDataRTTI::getSlicePitch, &PixelDataRTTI::setSlicePitch);
  57. addPlainField("format", 8, &PixelDataRTTI::getFormat, &PixelDataRTTI::setFormat);
  58. addDataBlockField("data", 9, &PixelDataRTTI::getData, &PixelDataRTTI::setData, 0, &PixelDataRTTI::allocateData);
  59. }
  60. virtual const String& getRTTIName()
  61. {
  62. static String name = "PixelData";
  63. return name;
  64. }
  65. virtual UINT32 getRTTIId()
  66. {
  67. return TID_PixelData;
  68. }
  69. virtual std::shared_ptr<IReflectable> newRTTIObject()
  70. {
  71. PixelDataPtr newPixelData = bs_shared_ptr<PixelData, PoolAlloc>();
  72. return newPixelData;
  73. }
  74. };
  75. }