Procházet zdrojové kódy

Fixing a bug with managed object data serialization introduced in previous commit

BearishSun před 9 roky
rodič
revize
e394a4f07d

+ 7 - 22
Source/BansheeCore/Include/BsAnimationCurveRTTI.h

@@ -20,43 +20,28 @@ namespace BansheeEngine
 		/** @copydoc RTTIPlainType::toMemory */
 		/** @copydoc RTTIPlainType::toMemory */
 		static void toMemory(const TKeyframe<T>& data, char* memory)
 		static void toMemory(const TKeyframe<T>& data, char* memory)
 		{
 		{
-			UINT32 size = sizeof(UINT32);
-			char* memoryStart = memory;
-			memory += sizeof(UINT32);
-
-			memory = rttiWriteElem(data.value, memory, size);
-			memory = rttiWriteElem(data.inTangent, memory, size);
-			memory = rttiWriteElem(data.outTangent, memory, size);
-			memory = rttiWriteElem(data.time, memory, size);
-
-			memcpy(memoryStart, &size, sizeof(UINT32));
+			memory = rttiWriteElem(data.value, memory);
+			memory = rttiWriteElem(data.inTangent, memory);
+			memory = rttiWriteElem(data.outTangent, memory);
+			memory = rttiWriteElem(data.time, memory);
 		}
 		}
 
 
 		/** @copydoc RTTIPlainType::fromMemory */
 		/** @copydoc RTTIPlainType::fromMemory */
 		static UINT32 fromMemory(TKeyframe<T>& data, char* memory)
 		static UINT32 fromMemory(TKeyframe<T>& data, char* memory)
 		{
 		{
-			UINT32 size = 0;
-			memory = rttiReadElem(size, memory);
 			memory = rttiReadElem(data.value, memory);
 			memory = rttiReadElem(data.value, memory);
 			memory = rttiReadElem(data.inTangent, memory);
 			memory = rttiReadElem(data.inTangent, memory);
 			memory = rttiReadElem(data.outTangent, memory);
 			memory = rttiReadElem(data.outTangent, memory);
 			memory = rttiReadElem(data.time, memory);
 			memory = rttiReadElem(data.time, memory);
 			
 			
-			return size;
+			return sizeof(TKeyframe<T>);
 		}
 		}
 
 
 		/** @copydoc RTTIPlainType::getDynamicSize */
 		/** @copydoc RTTIPlainType::getDynamicSize */
 		static UINT32 getDynamicSize(const TKeyframe<T>& data)
 		static UINT32 getDynamicSize(const TKeyframe<T>& data)
 		{
 		{
-			UINT64 dataSize = sizeof(UINT32);
-			dataSize += rttiGetElemSize(data.value);
-			dataSize += rttiGetElemSize(data.inTangent);
-			dataSize += rttiGetElemSize(data.outTangent);
-			dataSize += rttiGetElemSize(data.time);
-
-			assert(dataSize <= std::numeric_limits<UINT32>::max());
-
-			return (UINT32)dataSize;
+			assert(false);
+			return sizeof(TKeyframe<T>);
 		}
 		}
 	};
 	};
 
 

+ 4 - 23
Source/BansheeUtility/Include/BsFlags.h

@@ -240,49 +240,30 @@ namespace BansheeEngine
 	 */
 	 */
 	template<class Enum, class Storage> struct RTTIPlainType<Flags<Enum, Storage>>
 	template<class Enum, class Storage> struct RTTIPlainType<Flags<Enum, Storage>>
 	{	
 	{	
-		enum { id = TID_Pair }; enum { hasDynamicSize = 0 };
+		enum { id = TID_Flags }; enum { hasDynamicSize = 0 };
 
 
 		/** @copydoc RTTIPlainType::toMemory */
 		/** @copydoc RTTIPlainType::toMemory */
 		static void toMemory(const Flags<Enum, Storage>& data, char* memory)
 		static void toMemory(const Flags<Enum, Storage>& data, char* memory)
 		{ 
 		{ 
-			UINT32 size = sizeof(UINT32);
-			char* memoryStart = memory;
-			memory += sizeof(UINT32);
-
 			Storage storageData = (Storage)data;
 			Storage storageData = (Storage)data;
-
-			size += RTTIPlainType<Storage>::getDynamicSize(storageData);
 			RTTIPlainType<Storage>::toMemory(storageData, memory);
 			RTTIPlainType<Storage>::toMemory(storageData, memory);
-
-			memcpy(memoryStart, &size, sizeof(UINT32));
 		}
 		}
 
 
 		/** @copydoc RTTIPlainType::fromMemory */
 		/** @copydoc RTTIPlainType::fromMemory */
 		static UINT32 fromMemory(Flags<Enum, Storage>& data, char* memory)
 		static UINT32 fromMemory(Flags<Enum, Storage>& data, char* memory)
 		{ 
 		{ 
-			UINT32 size = 0;
-			memcpy(&size, memory, sizeof(UINT32));
-			memory += sizeof(UINT32);
-
 			Storage storageData;
 			Storage storageData;
 			RTTIPlainType<Storage>::fromMemory(storageData, memory);
 			RTTIPlainType<Storage>::fromMemory(storageData, memory);
 
 
 			data = Flags<Enum, Storage>(storageData);
 			data = Flags<Enum, Storage>(storageData);
-
-			return size;
+			return sizeof(Flags<Enum, Storage>);
 		}
 		}
 
 
 		/** @copydoc RTTIPlainType::getDynamicSize */
 		/** @copydoc RTTIPlainType::getDynamicSize */
 		static UINT32 getDynamicSize(const Flags<Enum, Storage>& data)
 		static UINT32 getDynamicSize(const Flags<Enum, Storage>& data)
 		{ 
 		{ 
-			UINT64 dataSize = sizeof(UINT32);
-
-			Storage storageData = (Storage)data;
-			dataSize += RTTIPlainType<Storage>::getDynamicSize(storageData);
-
-			assert(dataSize <= std::numeric_limits<UINT32>::max());
-
-			return (UINT32)dataSize;
+			assert(false);
+			return sizeof(Flags<Enum, Storage>);
 		}	
 		}	
 	}; 
 	}; 
 
 

+ 1 - 0
Source/SBansheeEngine/Include/BsManagedSerializableObjectInfo.h

@@ -258,6 +258,7 @@ namespace BansheeEngine
 	{
 	{
 	public:
 	public:
 		ManagedSerializableMemberInfo();
 		ManagedSerializableMemberInfo();
+		virtual ~ManagedSerializableMemberInfo() {}
 
 
 		/**	Determines should the member be serialized when serializing the parent object. */
 		/**	Determines should the member be serialized when serializing the parent object. */
 		bool isSerializable() const { return mFlags.isSet(ScriptFieldFlag::Serializable); }
 		bool isSerializable() const { return mFlags.isSet(ScriptFieldFlag::Serializable); }