1 /*
2 Copyright (C) 2001-2006, William Joseph.
3 All Rights Reserved.
4 
5 This file is part of GtkRadiant.
6 
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11 
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21 
22 #include "plugin.h"
23 
24 #include "ishaders.h"
25 #include "ifilesystem.h"
26 #include "itextures.h"
27 #include "iscriplib.h"
28 #include "qerplugin.h"
29 
30 #include "string/string.h"
31 #include "modulesystem/singletonmodule.h"
32 
33 #include "shaders.h"
34 
35 class ShadersDependencies :
36   public GlobalFileSystemModuleRef,
37   public GlobalTexturesModuleRef,
38   public GlobalScripLibModuleRef,
39   public GlobalRadiantModuleRef
40 {
41   ImageModuleRef m_bitmapModule;
42 public:
ShadersDependencies()43   ShadersDependencies() :
44     m_bitmapModule("bmp")
45   {
46   }
getBitmapModule()47   ImageModuleRef& getBitmapModule()
48   {
49     return m_bitmapModule;
50   }
51 };
52 
53 class ShadersQ3API
54 {
55   ShaderSystem* m_shadersq3;
56 public:
57   typedef ShaderSystem Type;
58   STRING_CONSTANT(Name, "quake3");
59 
ShadersQ3API(ShadersDependencies & dependencies)60   ShadersQ3API(ShadersDependencies& dependencies)
61   {
62     g_shadersExtension = "shader";
63     g_shadersDirectory = "scripts/";
64     g_bitmapModule = dependencies.getBitmapModule().getTable();
65     Shaders_Construct();
66     m_shadersq3 = &GetShaderSystem();
67   }
~ShadersQ3API()68   ~ShadersQ3API()
69   {
70     Shaders_Destroy();
71   }
getTable()72   ShaderSystem* getTable()
73   {
74     return m_shadersq3;
75   }
76 };
77 
78 typedef SingletonModule<ShadersQ3API, ShadersDependencies, DependenciesAPIConstructor<ShadersQ3API, ShadersDependencies> > ShadersQ3Module;
79 
80 ShadersQ3Module g_ShadersQ3Module;
81 
82 
83 class ShadersDoom3API
84 {
85   ShaderSystem* m_shadersdoom3;
86 public:
87   typedef ShaderSystem Type;
88   STRING_CONSTANT(Name, "doom3");
89 
ShadersDoom3API(ShadersDependencies & dependencies)90   ShadersDoom3API(ShadersDependencies& dependencies)
91   {
92     g_shadersExtension = "mtr";
93     g_shadersDirectory = "materials/";
94     g_enableDefaultShaders = false;
95     g_shaderLanguage = SHADERLANGUAGE_DOOM3;
96     g_useShaderList = false;
97     g_bitmapModule = dependencies.getBitmapModule().getTable();
98     Shaders_Construct();
99     m_shadersdoom3 = &GetShaderSystem();
100   }
~ShadersDoom3API()101   ~ShadersDoom3API()
102   {
103     Shaders_Destroy();
104   }
getTable()105   ShaderSystem* getTable()
106   {
107     return m_shadersdoom3;
108   }
109 };
110 
111 typedef SingletonModule<ShadersDoom3API, ShadersDependencies, DependenciesAPIConstructor<ShadersDoom3API, ShadersDependencies> > ShadersDoom3Module;
112 
113 ShadersDoom3Module g_ShadersDoom3Module;
114 
115 
116 class ShadersQuake4API
117 {
118   ShaderSystem* m_shadersquake4;
119 public:
120   typedef ShaderSystem Type;
121   STRING_CONSTANT(Name, "quake4");
122 
ShadersQuake4API(ShadersDependencies & dependencies)123   ShadersQuake4API(ShadersDependencies& dependencies)
124   {
125     g_shadersExtension = "mtr";
126     g_shadersDirectory = "materials/";
127     g_enableDefaultShaders = false;
128     g_shaderLanguage = SHADERLANGUAGE_QUAKE4;
129     g_useShaderList = false;
130     g_bitmapModule = dependencies.getBitmapModule().getTable();
131     Shaders_Construct();
132     m_shadersquake4 = &GetShaderSystem();
133   }
~ShadersQuake4API()134   ~ShadersQuake4API()
135   {
136     Shaders_Destroy();
137   }
getTable()138   ShaderSystem* getTable()
139   {
140     return m_shadersquake4;
141   }
142 };
143 
144 typedef SingletonModule<ShadersQuake4API, ShadersDependencies, DependenciesAPIConstructor<ShadersQuake4API, ShadersDependencies> > ShadersQuake4Module;
145 
146 ShadersQuake4Module g_ShadersQuake4Module;
147 
148 
149 
Radiant_RegisterModules(ModuleServer & server)150 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server)
151 {
152   GlobalErrorStream::instance().setOutputStream(server.getErrorStream());
153   GlobalOutputStream::instance().setOutputStream(server.getOutputStream());
154   GlobalDebugMessageHandler::instance().setHandler(server.getDebugMessageHandler());
155   GlobalModuleServer::instance().set(server);
156 
157   g_ShadersQ3Module.selfRegister();
158   g_ShadersDoom3Module.selfRegister();
159   g_ShadersQuake4Module.selfRegister();
160 }
161