BsBlendStateRTTI.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsBlendState.h"
  5. #include "BsRenderStateManager.h"
  6. namespace BansheeEngine
  7. {
  8. /** @cond RTTI */
  9. /** @addtogroup RTTI-Impl-Core
  10. * @{
  11. */
  12. template<> struct RTTIPlainType<BLEND_STATE_DESC>
  13. {
  14. enum { id = TID_BLEND_STATE_DESC }; enum { hasDynamicSize = 1 };
  15. static void toMemory(const BLEND_STATE_DESC& data, char* memory)
  16. {
  17. UINT32 size = getDynamicSize(data);
  18. memcpy(memory, &size, sizeof(UINT32));
  19. memory += sizeof(UINT32);
  20. size -= sizeof(UINT32);
  21. memcpy(memory, &data, size);
  22. }
  23. static UINT32 fromMemory(BLEND_STATE_DESC& data, char* memory)
  24. {
  25. UINT32 size;
  26. memcpy(&size, memory, sizeof(UINT32));
  27. memory += sizeof(UINT32);
  28. UINT32 dataSize = size - sizeof(UINT32);
  29. memcpy((void*)&data, memory, dataSize);
  30. return size;
  31. }
  32. static UINT32 getDynamicSize(const BLEND_STATE_DESC& data)
  33. {
  34. UINT64 dataSize = sizeof(data) + sizeof(UINT32);
  35. #if BS_DEBUG_MODE
  36. if(dataSize > std::numeric_limits<UINT32>::max())
  37. {
  38. BS_EXCEPT(InternalErrorException, "Data overflow! Size doesn't fit into 32 bits.");
  39. }
  40. #endif
  41. return (UINT32)dataSize;
  42. }
  43. };
  44. class BS_CORE_EXPORT BlendStateRTTI : public RTTIType<BlendState, IReflectable, BlendStateRTTI>
  45. {
  46. private:
  47. BLEND_STATE_DESC& getData(BlendState* obj) { return obj->mProperties.mData; }
  48. void setData(BlendState* obj, BLEND_STATE_DESC& val) { obj->mProperties.mData = val; }
  49. public:
  50. BlendStateRTTI()
  51. {
  52. addPlainField("mData", 0, &BlendStateRTTI::getData, &BlendStateRTTI::setData);
  53. }
  54. void onDeserializationEnded(IReflectable* obj) override
  55. {
  56. BlendState* blendState = static_cast<BlendState*>(obj);
  57. blendState->initialize();
  58. }
  59. const String& getRTTIName() override
  60. {
  61. static String name = "BlendState";
  62. return name;
  63. }
  64. UINT32 getRTTIId() override
  65. {
  66. return TID_BlendState;
  67. }
  68. std::shared_ptr<IReflectable> newRTTIObject() override
  69. {
  70. return RenderStateManager::instance()._createBlendStatePtr(BLEND_STATE_DESC());
  71. }
  72. };
  73. /** @} */
  74. /** @endcond */
  75. }