Browse Source

GL render system factory

Marko Pintera 13 years ago
parent
commit
4562533deb

+ 2 - 0
CamelotRenderer/CamelotRenderer.vcxproj

@@ -198,6 +198,7 @@
     <ClInclude Include="RenderSystemGL\Include\OgreGLPixelFormat.h" />
     <ClInclude Include="RenderSystemGL\Include\OgreGLPrerequisites.h" />
     <ClInclude Include="RenderSystemGL\Include\OgreGLRenderSystem.h" />
+    <ClInclude Include="RenderSystemGL\Include\CmGLRenderSystemFactory.h" />
     <ClInclude Include="RenderSystemGL\Include\OgreGLRenderTexture.h" />
     <ClInclude Include="RenderSystemGL\Include\OgreGLSupport.h" />
     <ClInclude Include="RenderSystemGL\Include\OgreGLTexture.h" />
@@ -356,6 +357,7 @@
     <ClCompile Include="RenderSystemGL\Source\OgreGLPBRenderTexture.cpp" />
     <ClCompile Include="RenderSystemGL\Source\OgreGLPixelFormat.cpp" />
     <ClCompile Include="RenderSystemGL\Source\OgreGLRenderSystem.cpp" />
+    <ClCompile Include="RenderSystemGL\Source\CmGLRenderSystemFactory.cpp" />
     <ClCompile Include="RenderSystemGL\Source\OgreGLRenderTexture.cpp" />
     <ClCompile Include="RenderSystemGL\Source\OgreGLSupport.cpp" />
     <ClCompile Include="RenderSystemGL\Source\OgreGLTexture.cpp" />

+ 6 - 0
CamelotRenderer/CamelotRenderer.vcxproj.filters

@@ -511,6 +511,9 @@
     <ClInclude Include="RenderSystemGL\Source\win32\OgreGLUtil.h">
       <Filter>RenderSystemGL\Win32</Filter>
     </ClInclude>
+    <ClInclude Include="RenderSystemGL\Include\CmGLRenderSystemFactory.h">
+      <Filter>RenderSystemGL\Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="stdafx.cpp">
@@ -891,5 +894,8 @@
     <ClCompile Include="RenderSystemGL\Source\win32\OgreWin32Context.cpp">
       <Filter>RenderSystemGL\Win32</Filter>
     </ClCompile>
+    <ClCompile Include="RenderSystemGL\Source\CmGLRenderSystemFactory.cpp">
+      <Filter>RenderSystemGL\Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 35 - 0
CamelotRenderer/RenderSystemGL/Include/CmGLRenderSystemFactory.h

@@ -0,0 +1,35 @@
+#pragma once
+
+#include <string>
+#include "CmRenderSystemFactory.h"
+#include "CmRenderSystemManager.h"
+#include "OgreGLRenderSystem.h"
+
+namespace CamelotEngine
+{
+	const std::string SystemName = "GLRenderSystem";
+
+	class GLRenderSystemFactory : public RenderSystemFactory
+	{
+	public:
+		virtual RenderSystemPtr create();
+		virtual const std::string& name() const { return SystemName; }
+
+	private:
+		class InitOnStart
+		{
+		public:
+			InitOnStart() 
+			{ 
+				static RenderSystemFactoryPtr newFactory;
+				if(newFactory == nullptr)
+				{
+					newFactory = RenderSystemFactoryPtr(new GLRenderSystemFactory());
+					RenderSystemManager::registerRenderSystemFactory(newFactory);
+				}
+			}
+		};
+
+		static InitOnStart initOnStart; // Makes sure factory is registered on program start
+	};
+}

+ 11 - 0
CamelotRenderer/RenderSystemGL/Source/CmGLRenderSystemFactory.cpp

@@ -0,0 +1,11 @@
+#include "CmGLRenderSystemFactory.h"
+
+namespace CamelotEngine
+{
+	RenderSystemPtr GLRenderSystemFactory::create()
+	{
+		return RenderSystemPtr(new Ogre::GLRenderSystem());
+	}
+
+	GLRenderSystemFactory::InitOnStart GLRenderSystemFactory::initOnStart;
+}

+ 4 - 1
CamelotRenderer/TODO.txt

@@ -86,6 +86,7 @@ TODO:
 IMPORTANT: After I set up a test case and remove irrelevant Ogre stuff, make sure to port OpenGL, before renaming anything or removing major files
 IMPORTANT: I think I should strive to make the renderer one unique CmRenderSystem.dll (Log manager, exceptions, math can go in a separate CmUtility library?)
    - Later separate out OpenGL and D3D9 dlls as well, since I want to support D3D11. And I want to keep the framework separate from implementation
+     - AND because I need to have it separated since I can't expect DirectX to compile on OSX or Linux
 
 Other notes:
  - Make sure to remove all ogre memory allocators and memory category bullshit (Possibly replace with Camelot versions?)
@@ -101,4 +102,6 @@ Other notes:
 After everything is polished:
  - Make sure the renderer can run on a separate thread
  - Get 64bit version working
- - Add Unified shader so I can easily switch between HLSL and GLSL shaders (they need same parameters usually, just different code)
+ - Add Unified shader so I can easily switch between HLSL and GLSL shaders (they need same parameters usually, just different code)
+    - Maybe just add support for Cg and force everyone to use that? - I'd like to be able to just switch out renderer in a single location and that everything keeps on working without 
+	  further modifications.