Jelajahi Sumber

Bit more serialization work

Marko Pintera 13 tahun lalu
induk
melakukan
d525c79d1a

+ 1 - 0
CamelotRenderer/CamelotRenderer.vcxproj

@@ -131,6 +131,7 @@
     <ClInclude Include="Include\CmVertexIndexData.h" />
     <ClInclude Include="Include\CmVertexIndexData.h" />
     <ClInclude Include="Include\CmViewport.h" />
     <ClInclude Include="Include\CmViewport.h" />
     <ClInclude Include="Include\CmWindowEventUtilities.h" />
     <ClInclude Include="Include\CmWindowEventUtilities.h" />
+    <ClInclude Include="Include\CmResourceST.h" />
     <ClInclude Include="Include\stdafx.h" />
     <ClInclude Include="Include\stdafx.h" />
     <ClInclude Include="Include\targetver.h" />
     <ClInclude Include="Include\targetver.h" />
   </ItemGroup>
   </ItemGroup>

+ 6 - 0
CamelotRenderer/CamelotRenderer.vcxproj.filters

@@ -43,6 +43,9 @@
     <Filter Include="Source Files\Resources">
     <Filter Include="Source Files\Resources">
       <UniqueIdentifier>{6df1cc13-bf9e-45e7-90ae-337999c702cf}</UniqueIdentifier>
       <UniqueIdentifier>{6df1cc13-bf9e-45e7-90ae-337999c702cf}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="Header Files\Serialization">
+      <UniqueIdentifier>{75249db9-4f2e-43c3-8df4-37250c4b60a2}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Text Include="ReadMe.txt" />
     <Text Include="ReadMe.txt" />
@@ -164,6 +167,9 @@
     <ClInclude Include="Include\CmResources.h">
     <ClInclude Include="Include\CmResources.h">
       <Filter>Header Files\Resources</Filter>
       <Filter>Header Files\Resources</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\CmResourceST.h">
+      <Filter>Header Files\Serialization</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\CamelotRenderer.cpp">
     <ClCompile Include="Source\CamelotRenderer.cpp">

+ 17 - 1
CamelotRenderer/Include/CmResource.h

@@ -1,6 +1,7 @@
 #pragma once
 #pragma once
 
 
 #include "CmPrerequisites.h"
 #include "CmPrerequisites.h"
+#include "CmISerializable.h"
 #include "CmUUID.h"
 #include "CmUUID.h"
 
 
 namespace CamelotEngine
 namespace CamelotEngine
@@ -8,11 +9,13 @@ namespace CamelotEngine
 	/**
 	/**
 	 * @brief	Base class for all resources used in the engine.
 	 * @brief	Base class for all resources used in the engine.
 	 */
 	 */
-	class CM_EXPORT Resource
+	class CM_EXPORT Resource : public ISerializable
 	{
 	{
 	public:
 	public:
 		virtual ~Resource() {};
 		virtual ~Resource() {};
 
 
+		//public 
+
 	protected:
 	protected:
 		friend class Resources;
 		friend class Resources;
 
 
@@ -28,5 +31,18 @@ namespace CamelotEngine
 
 
 		UUID mSourceUUID; 
 		UUID mSourceUUID; 
 		UINT32 mSize;
 		UINT32 mSize;
+
+	/************************************************************************/
+	/* 								SERIALIZATION                      		*/
+	/************************************************************************/
+	public:
+		friend class ResourceST;
+
+		virtual SerializableType* getSerializable() const;
+
+		static Resource* newObject()
+		{
+			return new Resource();
+		}
 	};
 	};
 }
 }

+ 21 - 0
CamelotRenderer/Include/CmResourceST.h

@@ -0,0 +1,21 @@
+#pragma once
+
+#include "CmPrerequisites.h"
+#include "CmRTTIType.h"
+#include "CmSerializableType.h"
+#include "CmResource.h"
+
+namespace CamelotEngine
+{
+	class CM_EXPORT ResourceST : public SerializableType
+	{
+	private:
+		UINT32 getSize(Resource* obj) { return obj->mSize; }
+		void setSize(Resource* obj, UINT32 size) { obj->mSize = size; } 
+	public:
+		ResourceST()
+		{
+			addPlainField("Size", 0, &ResourceST::getSize, &ResourceST::setSize);
+		}
+	};
+}

+ 7 - 0
CamelotRenderer/Source/CmResource.cpp

@@ -1,4 +1,5 @@
 #include "CmResource.h"
 #include "CmResource.h"
+#include "CmResourceST.h"
 
 
 namespace CamelotEngine
 namespace CamelotEngine
 {
 {
@@ -45,4 +46,10 @@ namespace CamelotEngine
 	//			load();
 	//			load();
 	//		}
 	//		}
 	//}
 	//}
+	
+	SerializableType* Resource::getSerializable() const
+	{
+		static ResourceST serializableType;
+		return &serializableType;
+	}
 }
 }

+ 2 - 0
CamelotUtility/CamelotUtility.vcxproj

@@ -124,8 +124,10 @@
     <ClCompile Include="Source\CmBinarySerializer.cpp" />
     <ClCompile Include="Source\CmBinarySerializer.cpp" />
     <ClCompile Include="Source\CmFileSerializer.cpp" />
     <ClCompile Include="Source\CmFileSerializer.cpp" />
     <ClCompile Include="Source\CmIReflectable.cpp" />
     <ClCompile Include="Source\CmIReflectable.cpp" />
+    <ClCompile Include="Source\CmISerializable.cpp" />
     <ClCompile Include="Source\CmRTTIField.cpp" />
     <ClCompile Include="Source\CmRTTIField.cpp" />
     <ClCompile Include="Source\CmRTTIType.cpp" />
     <ClCompile Include="Source\CmRTTIType.cpp" />
+    <ClCompile Include="Source\CmSerializableType.cpp" />
     <ClCompile Include="Source\CmTextureData.cpp">
     <ClCompile Include="Source\CmTextureData.cpp">
       <FileType>CppHeader</FileType>
       <FileType>CppHeader</FileType>
     </ClCompile>
     </ClCompile>

+ 6 - 0
CamelotUtility/CamelotUtility.vcxproj.filters

@@ -248,5 +248,11 @@
     <ClCompile Include="Source\CmIReflectable.cpp">
     <ClCompile Include="Source\CmIReflectable.cpp">
       <Filter>Source Files\RTTI</Filter>
       <Filter>Source Files\RTTI</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\CmSerializableType.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\CmISerializable.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 4 - 2
CamelotUtility/Include/CmISerializable.h

@@ -2,12 +2,14 @@
 
 
 #include "CmPrerequisitesUtil.h"
 #include "CmPrerequisitesUtil.h"
 #include "CmIReflectable.h"
 #include "CmIReflectable.h"
+#include "CmSerializableType.h"
 
 
 namespace CamelotEngine
 namespace CamelotEngine
 {
 {
-	class CM_UTILITY_EXPORT ISerializable : IReflectable
+	class CM_UTILITY_EXPORT ISerializable : public IReflectable
 	{
 	{
 	public:
 	public:
-		virtual SerializableType* getSerializable() = 0;
+		virtual RTTITypeBase* getRTTI() const { return getSerializable(); }
+		virtual SerializableType* getSerializable() const = 0;
 	};
 	};
 }
 }

+ 1 - 0
CamelotUtility/Include/CmRTTIPlainField.h

@@ -2,6 +2,7 @@
 
 
 #include "CmPrerequisitesUtil.h"
 #include "CmPrerequisitesUtil.h"
 #include "CmRTTIField.h"
 #include "CmRTTIField.h"
+#include "CmException.h"
 
 
 namespace CamelotEngine
 namespace CamelotEngine
 {
 {

+ 1 - 1
CamelotUtility/Include/CmSerializableType.h

@@ -5,7 +5,7 @@
 
 
 namespace CamelotEngine
 namespace CamelotEngine
 {
 {
-	class CM_UTILITY_EXPORT SerializableType : public RTTITypeBase
+	class CM_UTILITY_EXPORT SerializableType : public RTTIType
 	{
 	{
 	public:
 	public:
 		virtual void beginSerialization() {}
 		virtual void beginSerialization() {}

+ 3 - 0
CamelotUtility/Source/CmISerializable.cpp

@@ -0,0 +1,3 @@
+#include "CmISerializable.h"
+
+// Need a source file to make sure implementation is compiled

+ 3 - 0
CamelotUtility/Source/CmSerializableType.cpp

@@ -0,0 +1,3 @@
+#include "CmSerializableType.h"
+
+// Need a source file to make sure implementation is compiled