BsPixelDataRTTI.h 3.4 KB

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