00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <vlCore/VisualizationLibrary.hpp>
00033 #include <vlCore/LoadWriterManager.hpp>
00034 #include <vlGraphics/Rendering.hpp>
00035 #include <vlGraphics/BezierSurface.hpp>
00036 #include <vlGraphics/FontManager.hpp>
00037
00038 using namespace vl;
00039
00040 #if defined(VL_IO_3D_VLX)
00041 #include "plugins/ioVLX.hpp"
00042 #include <vlGraphics/VLXWrappers.hpp>
00043 #endif
00044 #if defined(VL_IO_3D_3DS)
00045 #include "plugins/io3DS.hpp"
00046 #endif
00047 #if defined(VL_IO_3D_OBJ)
00048 #include "plugins/ioOBJ.hpp"
00049 #endif
00050 #if defined(VL_IO_3D_AC3D)
00051 #include "plugins/ioAC3D.hpp"
00052 #endif
00053 #if defined(VL_IO_3D_PLY)
00054 #include "plugins/ioPLY.hpp"
00055 #endif
00056 #if defined(VL_IO_3D_STL)
00057 #include "plugins/ioSTL.hpp"
00058 #endif
00059 #if defined(VL_IO_3D_MD2)
00060 #include "plugins/ioMD2.hpp"
00061 #endif
00062 #if defined(VL_IO_3D_COLLADA)
00063 #include "plugins/COLLADA/ioDae.hpp"
00064 #endif
00065
00066
00067
00068
00069 namespace
00070 {
00071 bool gInitializedGraphics = false;
00072 };
00073
00074
00075
00076 namespace
00077 {
00078 ref<FontManager> gDefaultFontManager = NULL;
00079 }
00080 FontManager* vl::defFontManager()
00081 {
00082 return gDefaultFontManager.get();
00083 }
00084 void vl::setDefFontManager(FontManager* fm)
00085 {
00086 gDefaultFontManager = fm;
00087 }
00088
00089 #if defined(VL_IO_3D_VLX)
00090 namespace
00091 {
00092 void registerVLXWrappers()
00093 {
00094
00095 defVLXRegistry()->registerClassWrapper( Geometry::Type(), new VLXClassWrapper_Geometry );
00096
00097
00098 defVLXRegistry()->registerClassWrapper( VertexAttribInfo::Type(), new VLXClassWrapper_VertexAttribInfo );
00099
00100
00101 defVLXRegistry()->registerClassWrapper( BezierSurface::Type(), new VLXClassWrapper_Geometry );
00102
00103
00104 defVLXRegistry()->registerClassWrapper( PatchParameter::Type(), new VLXClassWrapper_PatchParameter );
00105
00106
00107 ref<VLXClassWrapper_DrawCall> drawcall_serializer = new VLXClassWrapper_DrawCall;
00108 defVLXRegistry()->registerClassWrapper( DrawArrays::Type(), drawcall_serializer.get() );
00109 defVLXRegistry()->registerClassWrapper( DrawElementsUInt::Type(), drawcall_serializer.get() );
00110 defVLXRegistry()->registerClassWrapper( DrawElementsUShort::Type(), drawcall_serializer.get() );
00111 defVLXRegistry()->registerClassWrapper( DrawElementsUByte::Type(), drawcall_serializer.get() );
00112 defVLXRegistry()->registerClassWrapper( MultiDrawElementsUInt::Type(), drawcall_serializer.get() );
00113 defVLXRegistry()->registerClassWrapper( MultiDrawElementsUShort::Type(), drawcall_serializer.get() );
00114 defVLXRegistry()->registerClassWrapper( MultiDrawElementsUByte::Type(), drawcall_serializer.get() );
00115
00116
00117 defVLXRegistry()->registerClassWrapper( ResourceDatabase::Type(), new VLXClassWrapper_ResourceDatabase );
00118
00119
00120 defVLXRegistry()->registerClassWrapper( Uniform::Type(), new VLXClassWrapper_Uniform );
00121
00122
00123 defVLXRegistry()->registerClassWrapper( LODEvaluator::Type(), new VLXClassWrapper_LODEvaluator );
00124
00125
00126 defVLXRegistry()->registerClassWrapper( Transform::Type(), new VLXClassWrapper_Transform );
00127
00128
00129 defVLXRegistry()->registerClassWrapper( Material::Type(), new VLXClassWrapper_Material );
00130
00131
00132 defVLXRegistry()->registerClassWrapper( Texture::Type(), new VLXClassWrapper_Texture );
00133
00134
00135 defVLXRegistry()->registerClassWrapper( TextureSampler::Type(), new VLXClassWrapper_TextureSampler );
00136
00137
00138 defVLXRegistry()->registerClassWrapper( TexParameter::Type(), new VLXClassWrapper_TexParameter );
00139
00140
00141 defVLXRegistry()->registerClassWrapper( DepthSortCallback::Type(), new VLXClassWrapper_ActorEventCallback );
00142
00143
00144 ref<VLXClassWrapper_LODEvaluator> lod_evaluator = new VLXClassWrapper_LODEvaluator;
00145 defVLXRegistry()->registerClassWrapper( PixelLODEvaluator::Type(), lod_evaluator.get() );
00146 defVLXRegistry()->registerClassWrapper( DistanceLODEvaluator::Type(), lod_evaluator.get() );
00147
00148
00149 defVLXRegistry()->registerClassWrapper( Actor::Type(), new VLXClassWrapper_Actor );
00150
00151
00152 defVLXRegistry()->registerClassWrapper( Effect::Type(), new VLXClassWrapper_Effect );
00153
00154
00155 defVLXRegistry()->registerClassWrapper( Shader::Type(), new VLXClassWrapper_Shader );
00156
00157
00158 defVLXRegistry()->registerClassWrapper( Camera::Type(), new VLXClassWrapper_Camera );
00159
00160
00161 defVLXRegistry()->registerClassWrapper( Light::Type(), new VLXClassWrapper_Light );
00162
00163
00164 defVLXRegistry()->registerClassWrapper( ClipPlane::Type(), new VLXClassWrapper_ClipPlane );
00165
00166
00167 defVLXRegistry()->registerClassWrapper( Color::Type(), new VLXClassWrapper_Color );
00168
00169
00170 defVLXRegistry()->registerClassWrapper( SecondaryColor::Type(), new VLXClassWrapper_SecondaryColor );
00171
00172
00173 defVLXRegistry()->registerClassWrapper( Normal::Type(), new VLXClassWrapper_Normal );
00174
00175
00176 defVLXRegistry()->registerClassWrapper( VertexAttrib::Type(), new VLXClassWrapper_VertexAttrib );
00177
00178
00179 defVLXRegistry()->registerClassWrapper( Viewport::Type(), new VLXClassWrapper_Viewport );
00180
00181
00182 defVLXRegistry()->registerClassWrapper( GLSLProgram::Type(), new VLXClassWrapper_GLSLProgram );
00183 ref<VLXClassWrapper_GLSLShader> sh_serializer = new VLXClassWrapper_GLSLShader;
00184 defVLXRegistry()->registerClassWrapper( GLSLVertexShader::Type(), sh_serializer.get() );
00185 defVLXRegistry()->registerClassWrapper( GLSLFragmentShader::Type(), sh_serializer.get() );
00186 defVLXRegistry()->registerClassWrapper( GLSLGeometryShader::Type(), sh_serializer.get() );
00187 defVLXRegistry()->registerClassWrapper( GLSLTessControlShader::Type(), sh_serializer.get() );
00188 defVLXRegistry()->registerClassWrapper( GLSLTessEvaluationShader::Type(), sh_serializer.get() );
00189
00190
00191 defVLXRegistry()->registerClassWrapper( GLSLShader::Type(), new VLXClassWrapper_GLSLShader );
00192
00193
00194 ref<VLXClassWrapper_Array> array_serializer = new VLXClassWrapper_Array;
00195
00196 defVLXRegistry()->registerClassWrapper( ArrayFloat1::Type(), array_serializer.get() );
00197 defVLXRegistry()->registerClassWrapper( ArrayFloat2::Type(), array_serializer.get() );
00198 defVLXRegistry()->registerClassWrapper( ArrayFloat3::Type(), array_serializer.get() );
00199 defVLXRegistry()->registerClassWrapper( ArrayFloat4::Type(), array_serializer.get() );
00200
00201 defVLXRegistry()->registerClassWrapper( ArrayDouble1::Type(), array_serializer.get() );
00202 defVLXRegistry()->registerClassWrapper( ArrayDouble2::Type(), array_serializer.get() );
00203 defVLXRegistry()->registerClassWrapper( ArrayDouble3::Type(), array_serializer.get() );
00204 defVLXRegistry()->registerClassWrapper( ArrayDouble4::Type(), array_serializer.get() );
00205
00206 defVLXRegistry()->registerClassWrapper( ArrayInt1::Type(), array_serializer.get() );
00207 defVLXRegistry()->registerClassWrapper( ArrayInt2::Type(), array_serializer.get() );
00208 defVLXRegistry()->registerClassWrapper( ArrayInt3::Type(), array_serializer.get() );
00209 defVLXRegistry()->registerClassWrapper( ArrayInt4::Type(), array_serializer.get() );
00210
00211 defVLXRegistry()->registerClassWrapper( ArrayUInt1::Type(), array_serializer.get() );
00212 defVLXRegistry()->registerClassWrapper( ArrayUInt2::Type(), array_serializer.get() );
00213 defVLXRegistry()->registerClassWrapper( ArrayUInt3::Type(), array_serializer.get() );
00214 defVLXRegistry()->registerClassWrapper( ArrayUInt4::Type(), array_serializer.get() );
00215
00216 defVLXRegistry()->registerClassWrapper( ArrayShort1::Type(), array_serializer.get() );
00217 defVLXRegistry()->registerClassWrapper( ArrayShort2::Type(), array_serializer.get() );
00218 defVLXRegistry()->registerClassWrapper( ArrayShort3::Type(), array_serializer.get() );
00219 defVLXRegistry()->registerClassWrapper( ArrayShort4::Type(), array_serializer.get() );
00220
00221 defVLXRegistry()->registerClassWrapper( ArrayUShort1::Type(), array_serializer.get() );
00222 defVLXRegistry()->registerClassWrapper( ArrayUShort2::Type(), array_serializer.get() );
00223 defVLXRegistry()->registerClassWrapper( ArrayUShort3::Type(), array_serializer.get() );
00224 defVLXRegistry()->registerClassWrapper( ArrayUShort4::Type(), array_serializer.get() );
00225
00226 defVLXRegistry()->registerClassWrapper( ArrayByte1::Type(), array_serializer.get() );
00227 defVLXRegistry()->registerClassWrapper( ArrayByte2::Type(), array_serializer.get() );
00228 defVLXRegistry()->registerClassWrapper( ArrayByte3::Type(), array_serializer.get() );
00229 defVLXRegistry()->registerClassWrapper( ArrayByte4::Type(), array_serializer.get() );
00230
00231 defVLXRegistry()->registerClassWrapper( ArrayUByte1::Type(), array_serializer.get() );
00232 defVLXRegistry()->registerClassWrapper( ArrayUByte2::Type(), array_serializer.get() );
00233 defVLXRegistry()->registerClassWrapper( ArrayUByte3::Type(), array_serializer.get() );
00234 defVLXRegistry()->registerClassWrapper( ArrayUByte4::Type(), array_serializer.get() );
00235 }
00236 }
00237 #endif
00238
00239 void VisualizationLibrary::initGraphics()
00240 {
00241 VL_CHECK(!gInitializedGraphics);
00242 if (gInitializedGraphics)
00243 {
00244 Log::bug("VisualizationLibrary::initGraphics(): Visualization Library Graphics is already initialized!\n");
00245 return;
00246 }
00247
00248
00249
00250
00251 gDefaultFontManager = new FontManager;
00252
00253
00254 #if defined(VL_IO_3D_VLX)
00255 registerVLXWrappers();
00256 registerLoadWriter(new LoadWriterVLX);
00257 #endif
00258 #if defined(VL_IO_3D_OBJ)
00259 registerLoadWriter(new LoadWriterOBJ);
00260 #endif
00261 #if defined(VL_IO_3D_3DS)
00262 registerLoadWriter(new LoadWriter3DS);
00263 #endif
00264 #if defined(VL_IO_3D_AC3D)
00265 registerLoadWriter(new LoadWriterAC3D);
00266 #endif
00267 #if defined(VL_IO_3D_PLY)
00268 registerLoadWriter(new LoadWriterPLY);
00269 #endif
00270 #if defined(VL_IO_3D_STL)
00271 registerLoadWriter(new LoadWriterSTL);
00272 #endif
00273 #if defined(VL_IO_3D_MD2)
00274 registerLoadWriter(new LoadWriterMD2);
00275 #endif
00276 #if defined(VL_IO_3D_COLLADA)
00277 registerLoadWriter(new LoadWriterDae);
00278 #endif
00279
00280
00281
00282
00283 gInitializedGraphics = true;
00284 }
00285
00286 void VisualizationLibrary::shutdownGraphics()
00287 {
00288 if (gInitializedGraphics)
00289 {
00290 gInitializedGraphics = false;
00291
00292
00293
00294
00295 gDefaultFontManager->releaseAllFonts();
00296 gDefaultFontManager = NULL;
00297 }
00298 }
00299
00300 void VisualizationLibrary::init(bool log_info)
00301 {
00302 initCore(log_info);
00303 initGraphics();
00304 }
00305
00306 void VisualizationLibrary::shutdown()
00307 {
00308 Log::debug("VisualizationLibrary::shutdown()\n");
00309 shutdownGraphics();
00310 shutdownCore();
00311 }
00312
00313 bool VisualizationLibrary::isGraphicsInitialized() { return gInitializedGraphics; }
00314