Ver Fonte

Added some importer and resource stumps

Marko Pintera há 13 anos atrás
pai
commit
97cd3ece41

+ 6 - 0
CamelotRenderer/CamelotRenderer.vcxproj

@@ -112,6 +112,7 @@
     <ClInclude Include="Include\CmHardwareVertexBuffer.h" />
     <ClInclude Include="Include\CmHardwareVertexBuffer.h" />
     <ClInclude Include="Include\CmHighLevelGpuProgram.h" />
     <ClInclude Include="Include\CmHighLevelGpuProgram.h" />
     <ClInclude Include="Include\CmHighLevelGpuProgramManager.h" />
     <ClInclude Include="Include\CmHighLevelGpuProgramManager.h" />
+    <ClInclude Include="Include\CmImporter.h" />
     <ClInclude Include="Include\CmPrerequisites.h" />
     <ClInclude Include="Include\CmPrerequisites.h" />
     <ClInclude Include="Include\CmRenderOperation.h" />
     <ClInclude Include="Include\CmRenderOperation.h" />
     <ClInclude Include="Include\CmRenderSystem.h" />
     <ClInclude Include="Include\CmRenderSystem.h" />
@@ -121,6 +122,9 @@
     <ClInclude Include="Include\CmRenderTarget.h" />
     <ClInclude Include="Include\CmRenderTarget.h" />
     <ClInclude Include="Include\CmRenderTexture.h" />
     <ClInclude Include="Include\CmRenderTexture.h" />
     <ClInclude Include="Include\CmRenderWindow.h" />
     <ClInclude Include="Include\CmRenderWindow.h" />
+    <ClInclude Include="Include\CmResource.h" />
+    <ClInclude Include="Include\CmResources.h" />
+    <ClInclude Include="Include\CmSpecificImporter.h" />
     <ClInclude Include="Include\CmTexture.h" />
     <ClInclude Include="Include\CmTexture.h" />
     <ClInclude Include="Include\CmTextureManager.h" />
     <ClInclude Include="Include\CmTextureManager.h" />
     <ClInclude Include="Include\CmTextureState.h" />
     <ClInclude Include="Include\CmTextureState.h" />
@@ -146,12 +150,14 @@
     <ClCompile Include="Source\CmHardwareVertexBuffer.cpp" />
     <ClCompile Include="Source\CmHardwareVertexBuffer.cpp" />
     <ClCompile Include="Source\CmHighLevelGpuProgram.cpp" />
     <ClCompile Include="Source\CmHighLevelGpuProgram.cpp" />
     <ClCompile Include="Source\CmHighLevelGpuProgramManager.cpp" />
     <ClCompile Include="Source\CmHighLevelGpuProgramManager.cpp" />
+    <ClCompile Include="Source\CmImporter.cpp" />
     <ClCompile Include="Source\CmRenderSystem.cpp" />
     <ClCompile Include="Source\CmRenderSystem.cpp" />
     <ClCompile Include="Source\CmRenderSystemCapabilities.cpp" />
     <ClCompile Include="Source\CmRenderSystemCapabilities.cpp" />
     <ClCompile Include="Source\CmRenderSystemManager.cpp" />
     <ClCompile Include="Source\CmRenderSystemManager.cpp" />
     <ClCompile Include="Source\CmRenderTarget.cpp" />
     <ClCompile Include="Source\CmRenderTarget.cpp" />
     <ClCompile Include="Source\CmRenderTexture.cpp" />
     <ClCompile Include="Source\CmRenderTexture.cpp" />
     <ClCompile Include="Source\CmRenderWindow.cpp" />
     <ClCompile Include="Source\CmRenderWindow.cpp" />
+    <ClCompile Include="Source\CmResources.cpp" />
     <ClCompile Include="Source\CmTexture.cpp" />
     <ClCompile Include="Source\CmTexture.cpp" />
     <ClCompile Include="Source\CmTextureManager.cpp" />
     <ClCompile Include="Source\CmTextureManager.cpp" />
     <ClCompile Include="Source\CmTextureState.cpp" />
     <ClCompile Include="Source\CmTextureState.cpp" />

+ 119 - 80
CamelotRenderer/CamelotRenderer.vcxproj.filters

@@ -22,6 +22,27 @@
     <Filter Include="Source Files\Utility">
     <Filter Include="Source Files\Utility">
       <UniqueIdentifier>{48d2fcc6-cfa6-4d2f-a83c-d16ec65eb96b}</UniqueIdentifier>
       <UniqueIdentifier>{48d2fcc6-cfa6-4d2f-a83c-d16ec65eb96b}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="Header Files\RenderSystem">
+      <UniqueIdentifier>{3480589d-111c-44b8-b0f1-a178cd00f31e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\RenderSystem">
+      <UniqueIdentifier>{e0bdc5fc-afd1-46f9-9e3e-f85ca3e220b8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\AssetImporter">
+      <UniqueIdentifier>{ce5fd26d-808e-4914-b478-3099834f03df}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\Importer">
+      <UniqueIdentifier>{f1fb2bc5-43c6-476a-89e3-b7de86c5aebe}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\Resources">
+      <UniqueIdentifier>{e091a28f-6a0f-44ab-a88f-83e3c970c2f3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Importer">
+      <UniqueIdentifier>{7ac6e5cb-48f7-4a49-a793-fb2ccfabe895}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Resources">
+      <UniqueIdentifier>{6df1cc13-bf9e-45e7-90ae-337999c702cf}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Text Include="ReadMe.txt" />
     <Text Include="ReadMe.txt" />
@@ -44,92 +65,104 @@
     <ClInclude Include="Include\CmCamera.h">
     <ClInclude Include="Include\CmCamera.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmDefaultHardwareBufferManager.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
     <ClInclude Include="Include\CmFrustum.h">
     <ClInclude Include="Include\CmFrustum.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmGpuProgram.h">
+    <ClInclude Include="Include\CmViewport.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmGpuProgramManager.h">
+    <ClInclude Include="Include\stdafx.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmGpuProgramParams.h">
+    <ClInclude Include="Include\targetver.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwareBuffer.h">
+    <ClInclude Include="Include\CmPrerequisites.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwareBufferManager.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmVertexIndexData.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwareIndexBuffer.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmTextureState.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwareOcclusionQuery.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmTextureManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwarePixelBuffer.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmTexture.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHardwareVertexBuffer.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmRenderWindow.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHighLevelGpuProgram.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmRenderTexture.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmHighLevelGpuProgramManager.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmRenderTarget.h">
+      <Filter>Header Files\RenderSystem</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmRenderSystemManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmRenderSystemFactory.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
     <ClInclude Include="Include\CmRenderSystem.h">
     <ClInclude Include="Include\CmRenderSystem.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
     <ClInclude Include="Include\CmRenderSystemCapabilities.h">
     <ClInclude Include="Include\CmRenderSystemCapabilities.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderSystemFactory.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmRenderOperation.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderSystemManager.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHighLevelGpuProgramManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderTarget.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHighLevelGpuProgram.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderTexture.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwareVertexBuffer.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderWindow.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwarePixelBuffer.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmTexture.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwareOcclusionQuery.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmTextureManager.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwareIndexBuffer.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmTextureState.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwareBuffer.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmVertexIndexData.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmHardwareBufferManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmViewport.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmGpuProgramParams.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\stdafx.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmGpuProgramManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\targetver.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmGpuProgram.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmRenderOperation.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmDefaultHardwareBufferManager.h">
+      <Filter>Header Files\RenderSystem</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\CmPrerequisites.h">
-      <Filter>Header Files</Filter>
+    <ClInclude Include="Include\CmImporter.h">
+      <Filter>Header Files\Importer</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmSpecificImporter.h">
+      <Filter>Header Files\Importer</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmResource.h">
+      <Filter>Header Files\Resources</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmResources.h">
+      <Filter>Header Files\Resources</Filter>
     </ClInclude>
     </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
@@ -142,80 +175,86 @@
     <ClCompile Include="Source\CmCamera.cpp">
     <ClCompile Include="Source\CmCamera.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\CmDefaultHardwareBufferManager.cpp">
+    <ClCompile Include="Source\CmFrustum.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\CmFrustum.cpp">
+    <ClCompile Include="Source\CmViewport.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\CmGpuProgram.cpp">
+    <ClCompile Include="Source\stdafx.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\CmWindowEventUtilities.cpp">
+      <Filter>Source Files\Utility</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\CmDefaultHardwareBufferManager.cpp">
+      <Filter>Source Files\RenderSystem</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\CmGpuProgram.cpp">
+      <Filter>Source Files\RenderSystem</Filter>
+    </ClCompile>
     <ClCompile Include="Source\CmGpuProgramManager.cpp">
     <ClCompile Include="Source\CmGpuProgramManager.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmGpuProgramParams.cpp">
     <ClCompile Include="Source\CmGpuProgramParams.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHardwareBufferManager.cpp">
     <ClCompile Include="Source\CmHardwareBufferManager.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHardwareIndexBuffer.cpp">
     <ClCompile Include="Source\CmHardwareIndexBuffer.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHardwareOcclusionQuery.cpp">
     <ClCompile Include="Source\CmHardwareOcclusionQuery.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHardwarePixelBuffer.cpp">
     <ClCompile Include="Source\CmHardwarePixelBuffer.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHardwareVertexBuffer.cpp">
     <ClCompile Include="Source\CmHardwareVertexBuffer.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHighLevelGpuProgram.cpp">
     <ClCompile Include="Source\CmHighLevelGpuProgram.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmHighLevelGpuProgramManager.cpp">
     <ClCompile Include="Source\CmHighLevelGpuProgramManager.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderSystem.cpp">
     <ClCompile Include="Source\CmRenderSystem.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderSystemCapabilities.cpp">
     <ClCompile Include="Source\CmRenderSystemCapabilities.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderSystemManager.cpp">
     <ClCompile Include="Source\CmRenderSystemManager.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderTarget.cpp">
     <ClCompile Include="Source\CmRenderTarget.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderTexture.cpp">
     <ClCompile Include="Source\CmRenderTexture.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmRenderWindow.cpp">
     <ClCompile Include="Source\CmRenderWindow.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmTexture.cpp">
     <ClCompile Include="Source\CmTexture.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmTextureManager.cpp">
     <ClCompile Include="Source\CmTextureManager.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmTextureState.cpp">
     <ClCompile Include="Source\CmTextureState.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
     <ClCompile Include="Source\CmVertexIndexData.cpp">
     <ClCompile Include="Source\CmVertexIndexData.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\CmViewport.cpp">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\RenderSystem</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\stdafx.cpp">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="Source\CmImporter.cpp">
+      <Filter>Source Files\Importer</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\CmWindowEventUtilities.cpp">
-      <Filter>Source Files\Utility</Filter>
+    <ClCompile Include="Source\CmResources.cpp">
+      <Filter>Source Files\Resources</Filter>
     </ClCompile>
     </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 63 - 0
CamelotRenderer/Include/CmImporter.h

@@ -0,0 +1,63 @@
+#pragma once
+
+#include "CmPrerequisites.h"
+#include "CmModule.h"
+
+namespace CamelotEngine
+{
+	/**
+	 * @brief	Module responsible for importing various asset types and converting
+	 * 			them to types usable by the engine.
+	 */
+	class Importer : public Module<Importer>
+	{
+	public:
+		/**
+		 * @brief	Constructor.
+		 *
+		 * @param	assetDatabasePath	Pathname of the asset database file. Path should not include file extension.
+		 * 								If the database file doesn't exist it will be created in that location.
+		 * 								Meta data for imported resources will be stored in the asset database.
+		 */
+		Importer(const String& assetDatabasePath); 
+		~Importer(); 
+
+		/**
+		 * @brief	Imports a resource at the specified location, and saves the imported data into the
+		 * 			output location. This data can then be loaded with Resources.load. Existing files
+		 * 			will be replaced.
+		 *
+		 * @param	inputFilePath 	Pathname of the input file.
+		 * @param	outputFilePath	Pathname of the output file, without extension.
+		 * @param	keepReferences	(optional) If file is being replaced we can keep all references to it and
+		 * 							just make sure they point to the new file data (default), or we can invalidate all
+		 * 							references and treat it as a completely new file. 
+		 * 							
+		 *							If you're just updating a file keep this set to true, and if you're
+		 * 							replacing a file, set it to false. 
+		 * 							In order for the references to be kept asset types must match.
+		 */
+		void import(const String& inputFilePath, const String& outputFilePath, bool keepReferences = true);
+
+
+		/**
+		 * @brief	Checks if we can import a file with the specified extension.
+		 *
+		 * @param	extension	The extension without leading dot.
+		 */
+		bool supportsFileType(const std::string& extension);
+
+		/**
+		 * @brief	Adds a new asset importer for the specified file extension. If an asset importer for that extension
+		 * 			already exists, it is removed and replaced with the current one.
+		 * 			
+		 * @note	This method should only be called by asset importers themselves on startup.
+		 *
+		 * @param [in]	importer	The importer that is able to handle files with the specified extension. nullptr if you
+		 * 							want to remove an asset importer for the extension.
+		 */
+		void registerAssetImporter(SpecificImporter* importer);
+	private:
+		std::unordered_map<std::string, SpecificImporter*> mAssetImporters;
+	};
+}

+ 7 - 0
CamelotRenderer/Include/CmPrerequisites.h

@@ -66,6 +66,12 @@ namespace CamelotEngine {
     class VertexBufferBinding;
     class VertexBufferBinding;
     class VertexData;
     class VertexData;
     class VertexDeclaration;
     class VertexDeclaration;
+	// Asset import
+	class SpecificImporter;
+	class Importer;
+	// Resources
+	class Resource;
+	class Resources;
 }
 }
 
 
 /* Shared pointer typedefs*/
 /* Shared pointer typedefs*/
@@ -75,6 +81,7 @@ namespace CamelotEngine
 	typedef std::shared_ptr<HighLevelGpuProgram> HighLevelGpuProgramPtr;
 	typedef std::shared_ptr<HighLevelGpuProgram> HighLevelGpuProgramPtr;
 	typedef std::shared_ptr<HardwarePixelBuffer> HardwarePixelBufferPtr;
 	typedef std::shared_ptr<HardwarePixelBuffer> HardwarePixelBufferPtr;
 	typedef std::shared_ptr<Texture> TexturePtr;
 	typedef std::shared_ptr<Texture> TexturePtr;
+	typedef std::shared_ptr<Resource> ResourcePtr;
 }
 }
 
 
 #endif // __OgrePrerequisites_H__
 #endif // __OgrePrerequisites_H__

+ 20 - 0
CamelotRenderer/Include/CmResource.h

@@ -0,0 +1,20 @@
+#pragma once
+
+#include "CmPrerequisites.h"
+#include "CmUUID.h"
+
+namespace CamelotEngine
+{
+	/**
+	 * @brief	Base class for all resources used in the engine.
+	 */
+	class Resource
+	{
+	public:
+		Resource(const UUID& sourceUUID):mSourceUUID(sourceUUID) {}
+		virtual ~Resource() {};
+
+	private:
+		UUID mSourceUUID; 
+	};
+}

+ 47 - 0
CamelotRenderer/Include/CmResources.h

@@ -0,0 +1,47 @@
+#pragma once
+
+#include "CmPrerequisites.h"
+#include "CmModule.h"
+#include "CmUUID.h"
+
+namespace CamelotEngine
+{
+	class Resources : public Module<Resources>
+	{
+	public:
+		/**
+		 * @brief	Constructor.
+		 *
+		 * @param	assetDatabasePath	Pathname of the asset database file. Path should not include file extension.
+		 * 								If the database file doesn't exist it will be created in that location.
+		 * 								Meta data for resources is stored in the asset database.
+		 */
+		Resources(const String& assetDatabasePath); // TODO
+		~Resources(); // TODO
+
+		/**
+		 * @brief	Loads the resource from a given path. Returns null if resource can't be loaded.
+		 *
+		 * @param	filePath					The path of the file to load. The file is searched for in
+		 * 										the AssetDatabase first, and if it cannot be found it is
+		 * 										loaded as a temporary resource object. You can't save
+		 * 										references to temporary resource objects because they won't
+		 * 										persist after application shut-down, but otherwise they act
+		 * 										the same as normal resources.
+		 * @param	onlyLoadIfFoundInAssetDB	(optional) If true, we disallow loading of temporary resources,
+		 * 										i.e. resources that can't be found in the asset database.
+		 *
+		 * @return	Loaded resource, or null if it cannot be found.
+		 */
+		ResourcePtr load(const String& filePath, bool onlyLoadIfFoundInAssetDB = false);
+
+		/**
+		 * @brief	Loads the resource with the given uuid.
+		 *
+		 * @param	uuid	UUID of the resource to load. 
+		 *
+		 * @return	Loaded resource, or null if it cannot be found.
+		 */
+		ResourcePtr load(const UUID& uuid);
+	};
+}

+ 37 - 0
CamelotRenderer/Include/CmSpecificImporter.h

@@ -0,0 +1,37 @@
+#pragma once
+
+#include "CmPrerequisites.h"
+
+namespace CamelotEngine
+{
+	/**
+	 * @brief	Abstract class that is to be specialized in converting
+	 * 			a certain asset type into an engine usable resource. 
+	 * 			(e.g. a .png file into an engine usable texture).
+	 * 			
+	 *			On initialization this class registers itself with the Importer module,
+	 *			which delegates asset import calls to a specific importer.
+	 */
+	class SpecificImporter
+	{
+	public:
+		SpecificImporter() {}
+		virtual ~SpecificImporter() {}
+
+		/**
+		 * @brief	Returns the list of extensions this importer is responsible for importing.
+		 *
+		 * @return	A list of extensions, without a leading dot.
+		 */
+		virtual const std::vector<String>& extensions() const = 0;
+
+		/**
+		 * @brief	Imports the given file.
+		 *
+		 * @param	filePath	Pathname of the file, with file extension.
+		 *
+		 * @return	null if it fails, otherwise the loaded object.
+		 */
+		virtual ResourcePtr import(const String& filePath) = 0;
+	};
+}

+ 82 - 0
CamelotRenderer/Source/CmImporter.cpp

@@ -0,0 +1,82 @@
+#include "CmImporter.h"
+#include "CmPath.h"
+#include "CmSpecificImporter.h"
+#include "CmDebug.h"
+#include "CmException.h"
+
+namespace CamelotEngine
+{
+	Importer::~Importer()
+	{
+		for(auto i = mAssetImporters.begin(); i != mAssetImporters.end(); ++i)
+		{
+			SpecificImporter* curImporter = i->second;
+			if(curImporter != nullptr)
+			{
+				const std::vector<String>& supportedExtensions = curImporter->extensions();
+				for(auto j = supportedExtensions.begin(); j != supportedExtensions.end(); ++j)
+				{
+					if(mAssetImporters[*j] == curImporter)
+						mAssetImporters[*j] = nullptr;
+				}
+
+				delete curImporter;
+			}
+		}
+
+		mAssetImporters.clear();
+	}
+
+	bool Importer::supportsFileType(const std::string& extension)
+	{
+		auto found = mAssetImporters.find(extension);
+
+		if(found != mAssetImporters.end())
+			return found->second != nullptr; // Even if we found it, it can still be null
+
+		return false;
+	}
+
+	void Importer::import(const String& inputFilePath, const String& outputFilePath, bool keepReferences)
+	{
+		if(!Path::exists(inputFilePath))
+		{
+			LOGWRN("Trying to import asset that doesn't exists. Asset path: " + inputFilePath);
+			return;
+		}
+
+		String ext = Path::getExtension(inputFilePath);
+		ext = ext.substr(1, ext.size() - 1); // Remove the .
+		if(!supportsFileType(ext))
+		{
+			LOGWRN("There is no importer for the provided file type. (" + inputFilePath + ")");
+			return;
+		}
+
+		SpecificImporter* importer = mAssetImporters[ext];
+
+		ResourcePtr importedResource = importer->import(inputFilePath);
+
+		// TODO - Use AssetDatabase for loading the resource
+		// TODO - Serialize the resource to output location
+	}
+
+	void Importer::registerAssetImporter(SpecificImporter* importer)
+	{
+		if(!importer)
+		{
+			LOGWRN("Trying to register a null asset importer!");
+			return;
+		}
+
+		const std::vector<String>& supportedExtensions = importer->extensions();
+		for(auto i = supportedExtensions.begin(); i != supportedExtensions.end(); ++i)
+		{
+			SpecificImporter* existingImporter = mAssetImporters[*i];
+			if(existingImporter != nullptr)
+				delete existingImporter;
+
+			mAssetImporters[*i] = importer;
+		}
+	}
+}

+ 6 - 0
CamelotRenderer/Source/CmResources.cpp

@@ -0,0 +1,6 @@
+#include "CmResources.h"
+
+namespace CamelotEngine
+{
+
+}

+ 4 - 0
CamelotUtility/CamelotUtility.vcxproj

@@ -74,11 +74,13 @@
     <ClInclude Include="Include\CmBitwise.h" />
     <ClInclude Include="Include\CmBitwise.h" />
     <ClInclude Include="Include\CmBox.h" />
     <ClInclude Include="Include\CmBox.h" />
     <ClInclude Include="Include\CmColor.h" />
     <ClInclude Include="Include\CmColor.h" />
+    <ClInclude Include="Include\CmDebug.h" />
     <ClInclude Include="Include\CmDynLibManager.h" />
     <ClInclude Include="Include\CmDynLibManager.h" />
     <ClInclude Include="Include\CmException.h" />
     <ClInclude Include="Include\CmException.h" />
     <ClInclude Include="Include\CmLog.h" />
     <ClInclude Include="Include\CmLog.h" />
     <ClInclude Include="Include\CmMathAsm.h" />
     <ClInclude Include="Include\CmMathAsm.h" />
     <ClInclude Include="Include\CmModule.h" />
     <ClInclude Include="Include\CmModule.h" />
+    <ClInclude Include="Include\CmPath.h" />
     <ClInclude Include="Include\CmPixelUtil.h" />
     <ClInclude Include="Include\CmPixelUtil.h" />
     <ClInclude Include="Include\CmString.h" />
     <ClInclude Include="Include\CmString.h" />
     <ClInclude Include="Include\CmThreadDefines.h" />
     <ClInclude Include="Include\CmThreadDefines.h" />
@@ -95,6 +97,7 @@
     <ClInclude Include="Include\CmRay.h" />
     <ClInclude Include="Include\CmRay.h" />
     <ClInclude Include="Include\CmSphere.h" />
     <ClInclude Include="Include\CmSphere.h" />
     <ClInclude Include="Include\CmStdHeaders.h" />
     <ClInclude Include="Include\CmStdHeaders.h" />
+    <ClInclude Include="Include\CmUUID.h" />
     <ClInclude Include="Include\CmVector2.h" />
     <ClInclude Include="Include\CmVector2.h" />
     <ClInclude Include="Include\CmVector3.h" />
     <ClInclude Include="Include\CmVector3.h" />
     <ClInclude Include="Include\CmVector4.h" />
     <ClInclude Include="Include\CmVector4.h" />
@@ -103,6 +106,7 @@
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Include\CmAxisAlignedBox.cpp" />
     <ClCompile Include="Include\CmAxisAlignedBox.cpp" />
     <ClCompile Include="Source\CmColor.cpp" />
     <ClCompile Include="Source\CmColor.cpp" />
+    <ClCompile Include="Source\CmDebug.cpp" />
     <ClCompile Include="Source\CmDynLibManager.cpp" />
     <ClCompile Include="Source\CmDynLibManager.cpp" />
     <ClCompile Include="Source\CmException.cpp" />
     <ClCompile Include="Source\CmException.cpp" />
     <ClCompile Include="Source\CmLog.cpp" />
     <ClCompile Include="Source\CmLog.cpp" />

+ 12 - 0
CamelotUtility/CamelotUtility.vcxproj.filters

@@ -111,6 +111,15 @@
     <ClInclude Include="Include\CmLog.h">
     <ClInclude Include="Include\CmLog.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\CmUUID.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmPath.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\CmDebug.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Include\CmAxisAlignedBox.cpp">
     <ClCompile Include="Include\CmAxisAlignedBox.cpp">
@@ -161,5 +170,8 @@
     <ClCompile Include="Source\CmLog.cpp">
     <ClCompile Include="Source\CmLog.cpp">
       <Filter>Source Files</Filter>
       <Filter>Source Files</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\CmDebug.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 40 - 0
CamelotUtility/Include/CmDebug.h

@@ -0,0 +1,40 @@
+#pragma once
+
+#include "CmPrerequisitesUtil.h"
+#include "CmLog.h"
+
+namespace CamelotEngine
+{
+	class Log;
+
+	class CM_EXPORT Debug
+	{
+	public:
+		void logDebug(std::string msg);
+		void logInfo(std::string msg);
+		void logWarning(std::string msg);
+		void logError(std::string msg);
+
+		Log& getLog() { return mLog; }
+
+	private:
+		Log mLog;
+	};
+
+	CM_EXPORT Debug& gDebug();
+
+	template <typename T>
+	std::string toStr(T number)
+	{
+		std::ostringstream ss;
+		ss << number;
+		return ss.str();
+	}
+
+#define LOGDBG(x) CamelotEngine::gDebug().logDebug((x));
+#define LOGMSG(x) CamelotEngine::gDebug().logInfo((x));
+#define LOGWRN(x) CamelotEngine::gDebug().logWarning((x));
+#define LOGERR(x) CamelotEngine::gDebug().logError((x));
+
+#define CM_ASSERT(x) assert(x)
+}

+ 2 - 2
CamelotUtility/Include/CmLog.h

@@ -51,7 +51,7 @@ namespace CamelotEngine
 		 * @param	suppressFileOutput	(optional) If true, log won't be saved to a file, even if you
 		 * @param	suppressFileOutput	(optional) If true, log won't be saved to a file, even if you
 		 * 								call save manually.
 		 * 								call save manually.
 		 */
 		 */
-		Log(const String& logFilePath, bool autoSave = true, bool suppressFileOutput = false);
+		Log(const String& logFilePath = "", bool autoSave = true, bool suppressFileOutput = false);
 		~Log();
 		~Log();
 
 
 		/**
 		/**
@@ -71,7 +71,7 @@ namespace CamelotEngine
 		/**
 		/**
 		 * @brief	Saves the log file to disk.
 		 * @brief	Saves the log file to disk.
 		 */
 		 */
-		void save();
+		void flush();
 
 
 	private:
 	private:
 		std::vector<LogEntry*> mEntries;
 		std::vector<LogEntry*> mEntries;

+ 24 - 0
CamelotUtility/Include/CmPath.h

@@ -0,0 +1,24 @@
+#pragma once
+
+#include "CmPrerequisitesUtil.h"
+#include <boost/filesystem.hpp>
+
+namespace CamelotEngine
+{
+	/**
+	 * @brief	Various utility methods for handling file paths.
+	 */
+	class Path
+	{
+	public:
+		static bool exists(const String& path)
+		{
+			return boost::filesystem::exists(path);
+		}
+
+		static String getExtension(const String& path)
+		{
+			return boost::filesystem::extension(path);
+		}
+	};
+}

+ 17 - 0
CamelotUtility/Include/CmStdHeaders.h

@@ -186,4 +186,21 @@ namespace CamelotEngine
 	{ 
 	{ 
 		typedef typename std::multimap<K, V, P> type; 
 		typedef typename std::multimap<K, V, P> type; 
 	}; 
 	}; 
+	//template <typename T, typename A = char> 
+	//using deque = std::deque<T, A>;    
+
+	//template <typename T, typename A = char >
+	//using vector = std::vector<T, A>;
+
+	//template <typename T, typename A = char > 
+	//using list = std::list<T, A>;    
+
+	//template <typename T, typename P = std::less<T>, typename A = char > 
+	//using set = std::set<T, P, A>;    
+
+	//template <typename K, typename V, typename P = std::less<K>, typename A = char > 
+	//using map = std::map<K, V, P, A>; 
+
+	//template <typename K, typename V, typename P = std::less<K>, typename A = char > 
+	//using multimap = std::multimap<K, V, P, A>; 
 }
 }

+ 8 - 0
CamelotUtility/Include/CmUUID.h

@@ -0,0 +1,8 @@
+#pragma once
+
+#include <boost/uuid/uuid.hpp>
+
+namespace CamelotEngine
+{
+	typedef boost::uuids::uuid UUID;
+}

+ 31 - 0
CamelotUtility/Source/CmDebug.cpp

@@ -0,0 +1,31 @@
+#include "CmDebug.h"
+#include "CmLog.h"
+
+namespace CamelotEngine
+{
+	void Debug::logDebug(std::string msg)
+	{
+		mLog.logMsg(msg, LL_DEBUG);
+	}
+
+	void Debug::logInfo(std::string msg)
+	{
+		mLog.logMsg(msg, LL_INFO);
+	}
+
+	void Debug::logWarning(std::string msg)
+	{
+		mLog.logMsg(msg, LL_WARNING);
+	}
+
+	void Debug::logError(std::string msg)
+	{
+		mLog.logMsg(msg, LL_ERROR);
+	}
+
+	CM_EXPORT Debug& gDebug()
+	{
+		static Debug debug;
+		return debug;
+	}
+}

+ 4 - 4
CamelotUtility/Source/CmLog.cpp

@@ -13,7 +13,7 @@ namespace CamelotEngine
 
 
 	Log::~Log()
 	Log::~Log()
 	{
 	{
-		save();
+		flush();
 
 
 		for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter)
 		for(auto iter = mEntries.begin(); iter != mEntries.end(); ++iter)
 			delete *iter;
 			delete *iter;
@@ -27,7 +27,7 @@ namespace CamelotEngine
 		doOnEntryAdded(*newEntry);
 		doOnEntryAdded(*newEntry);
 
 
 		if(mAutoSave)
 		if(mAutoSave)
-			save();
+			flush();
 	}
 	}
 
 
 	void Log::clear()
 	void Log::clear()
@@ -38,10 +38,10 @@ namespace CamelotEngine
 		mEntries.clear();
 		mEntries.clear();
 
 
 		if(mAutoSave)
 		if(mAutoSave)
-			save();
+			flush();
 	}
 	}
 
 
-	void Log::save()
+	void Log::flush()
 	{
 	{
 		if(mSuppressFileOutput)
 		if(mSuppressFileOutput)
 			return;
 			return;