BsManagedResource.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsResource.h"
  4. #include <mono/jit/jit.h>
  5. #include <mono/metadata/object.h>
  6. namespace BansheeEngine
  7. {
  8. struct ResourceBackupData;
  9. class BS_SCR_BE_EXPORT ManagedResource : public Resource
  10. {
  11. public:
  12. void construct(MonoObject* object, const HManagedResource& myHandle);
  13. MonoObject* getManagedInstance() const { return mManagedInstance; }
  14. ResourceBackupData backup(bool clearExisting = true);
  15. void restore(MonoObject* instance, const ResourceBackupData& data);
  16. static HManagedResource create(MonoObject* managedResource);
  17. static ManagedResourcePtr createEmpty();
  18. private:
  19. friend class ScriptManagedResource;
  20. ManagedResource(MonoObject* managedInstance);
  21. void destroy();
  22. MonoObject* mManagedInstance;
  23. uint32_t mManagedHandle;
  24. HManagedResource mMyHandle;
  25. /************************************************************************/
  26. /* RTTI */
  27. /************************************************************************/
  28. public:
  29. friend class ManagedResourceRTTI;
  30. static RTTITypeBase* getRTTIStatic();
  31. virtual RTTITypeBase* getRTTI() const;
  32. protected:
  33. ManagedResource(); // Serialization only
  34. };
  35. struct ResourceBackupData
  36. {
  37. struct DataBlock
  38. {
  39. UINT8* data;
  40. UINT32 size;
  41. };
  42. DataBlock mTypeInfo;
  43. DataBlock mObjectData;
  44. };
  45. }