void csShaderManager::UnregisterShaders () { shaders.DeleteAll (); csRef<csNullShader> nullShader; nullShader.AttachNew (new csNullShader (this)); nullShader->SetName ("*null"); RegisterShader (nullShader); }
bool csShaderManager::Initialize(iObjectRegistry *objreg) { objectreg = objreg; vc = csQueryRegistry<iVirtualClock> (objectreg); txtmgr = csQueryRegistry<iTextureManager> (objectreg); csRef<iVerbosityManager> verbosemgr ( csQueryRegistry<iVerbosityManager> (objectreg)); if (verbosemgr) do_verbose = verbosemgr->Enabled ("renderer.shader"); else do_verbose = false; Frame = csevFrame(objectreg); SystemOpen = csevSystemOpen(objectreg); SystemClose = csevSystemClose(objectreg); csRef<iEventHandlerRegistry> handlerReg = csQueryRegistry<iEventHandlerRegistry> (objectreg); //eventSucc[0] = handlerReg->GetGenericID ("crystalspace.graphics3d"); csRef<iEventQueue> q = csQueryRegistry<iEventQueue> (objectreg); if (q) { csEventID events[] = { Frame, SystemOpen, SystemClose, CS_EVENTLIST_END }; RegisterWeakListener (q, this, events, weakEventHandler); } csRef<iPluginManager> plugin_mgr = csQueryRegistry<iPluginManager> (objectreg); strings = csQueryRegistryTagInterface<iStringSet> ( objectreg, "crystalspace.shared.stringset"); stringsSvName = csQueryRegistryTagInterface<iShaderVarStringSet> ( objectreg, "crystalspace.shader.variablenameset"); { csRef<csNullShader> nullShader; nullShader.AttachNew (new csNullShader (this)); nullShader->SetName ("*null"); RegisterShader (nullShader); } config.AddConfig (objectreg, "/config/shadermgr.cfg"); csRef<iStringArray> classlist = iSCF::SCF->QueryClassList("crystalspace.graphics3d.shadercompiler."); size_t const nmatches = classlist.IsValid() ? classlist->GetSize() : 0; if (nmatches != 0) { size_t i; for (i = 0; i < nmatches; ++i) { const char* classname = classlist->Get(i); csRef<iShaderCompiler> plugin = csLoadPluginCheck<iShaderCompiler> (plugin_mgr, classname); if (plugin) { if (do_verbose) Report (CS_REPORTER_SEVERITY_NOTIFY, "Loaded compiler plugin %s, compiler: %s", classname,plugin->GetName()); RegisterCompiler(plugin); } } } else { Report (CS_REPORTER_SEVERITY_WARNING, "No shader plugins found!"); } csString cfgKey; const csString keyPrefix ("Video.ShaderManager.Tags."); csSet<csString> knownKeys; csRef<iConfigIterator> it (config->Enumerate (keyPrefix)); while (it->HasNext ()) { it->Next(); const char* key = it->GetKey (true); const char* dot = strrchr (key, '.'); cfgKey.Clear (); cfgKey.Append (key, dot - key); if (knownKeys.In ((const char*)cfgKey)) continue; knownKeys.Add ((const char*)cfgKey); const char* tagName = config->GetStr ( keyPrefix + cfgKey + ".TagName", cfgKey); const char* tagPresence = config->GetStr ( keyPrefix + cfgKey + ".Presence", "Neutral"); int tagPriority = config->GetInt ( keyPrefix + cfgKey + ".Priority", 0); csShaderTagPresence presence; if (strcasecmp (tagPresence, "neutral") == 0) { presence = TagNeutral; } else if (strcasecmp (tagPresence, "forbidden") == 0) { presence = TagForbidden; } else if (strcasecmp (tagPresence, "required") == 0) { presence = TagRequired; } else { Report (CS_REPORTER_SEVERITY_WARNING, "Unknown shader tag presence '%s' for tag config '%s'", tagPresence, (const char*)cfgKey); continue; } csStringID tagID = strings->Request (tagName); SetTagOptions (tagID, presence, tagPriority); } sv_time.AttachNew (new csShaderVariable (stringsSvName->Request ("standard time"))); sv_time->SetValue (0.0f); if (config->GetBool ("Video.ShaderManager.EnableShaderCache", false)) { bool redundantRemove = config->GetBool ("Video.ShaderManager.ShaderCache.RedundantRemove", true); shaderCache.AttachNew (new PlexHierarchicalCache (redundantRemove)); csRef<CS::Utility::VfsHierarchicalCache> cache; const char* cachePath; cachePath = config->GetStr ("Video.ShaderManager.ShaderCachePath.User", "/shadercache/user"); if (cachePath && *cachePath) { cache.AttachNew (new CS::Utility::VfsHierarchicalCache (objectreg, csString().Format ("%s/" CS_VERSION_MAJOR "." CS_VERSION_MINOR, cachePath))); shaderCache->AddSubShaderCache (cache, cachePriorityUser); } cachePath = config->GetStr ("Video.ShaderManager.ShaderCachePath.App", 0); if (cachePath && *cachePath) { cache.AttachNew (new CS::Utility::VfsHierarchicalCache (objectreg, cachePath)); cache->SetReadOnly (true); shaderCache->AddSubShaderCache (cache, cachePriorityApp); } cachePath = config->GetStr ("Video.ShaderManager.ShaderCachePath.Global", "/shadercache/global"); if (cachePath && *cachePath) { cache.AttachNew (new CS::Utility::VfsHierarchicalCache (objectreg, cachePath)); cache->SetReadOnly (true); shaderCache->AddSubShaderCache (cache, cachePriorityGlobal); } } return true; }
Bool PluginStart(void) { VERSIONTYPE versionType = GeGetVersionType(); // shader plugin examples if (!RegisterGradient()) return false; if (!RegisterBitmap()) return false; if (!RegisterMandelbrot()) return false; if (!RegisterSimpleMaterial()) return false; if (!RegisterParticleVolume()) return false; // menu plugin examples if (!RegisterMenuTest()) return false; if (!RegisterAsyncTest()) return false; if (!RegisterActiveObjectDlg()) return false; if (!RegisterListView()) return false; if (!RegisterSubDialog()) return false; if (!RegisterLayerShaderBrowser()) return false; if (!RegisterPGPTest()) return false; // filter plugin examples if (!RegisterSTL()) return false; if (!RegisterBFF()) return false; if (!RegisterSculpt()) return false; // object plugin examples if (!RegisterSpherify()) return false; if (!RegisterRoundedTube()) return false; if (!RegisterGravitation()) return false; if (!RegisterAtomObject()) return false; if (!RegisterCircle()) return false; if (!RegisterGLTestObject()) return false; if (!RegisterGLTestMaterial()) return false; if (!RegisterTriangulate()) return false; if (!RegisterMorphMixer()) return false; // tool plugin examples if (!RegisterPrimitiveTool()) return false; if (!RegisterEdgeCutTool()) return false; if (!RegisterPickObjectTool()) return false; if (!RegisterReverseNormals()) return false; if (!RegisterSculptingTool()) return false; if (!RegisterSnapTool()) return false; // sculpting tool examples if ((versionType == VERSIONTYPE_STUDIO) || (versionType == VERSIONTYPE_BODYPAINT)) { if (!RegisterSculptDrawPolyTool()) return false; if (!RegisterSculptPullBrush()) return false; if (!RegisterSculptSelectionBrush()) return false; if (!RegisterSculptCubesBrush()) return false; if (!RegisterSculptGrabBrush()) return false; if (!RegisterSculptDrawPolyBrush()) return false; if (!RegisterSculptDeformer()) return false; if (!RegisterSculptModifiers()) return false; if (!RegisterSculptBrushTwist()) return false; if (!RegisterSculptBrushMultiStamp()) return false; if (!RegisterPaintAdvanced()) return false; if (!RegisterSculptBrushSpline()) return false; } // animation plugin example if (!RegisterBlinker()) return false; // tag / expression plugin examples if (!RegisterLookAtCamera()) return false; // bitmap filter examples if (!RegisterThreshold()) return false; if (!RegisterSampleMatrix()) return false; // video post examples if (!RegisterVPTest()) return false; if (!RegisterVPInvertImage()) return false; if (!RegisterVPVisualizeNormals()) return false; if (!RegisterVPReconstruct()) return false; if (!RegisterVPVisualizeChannel()) return false; if (!RegisterStereoVideoPost()) return false; if (!RegisterMemoryStat()) return false; if (!RegisterPainterSaveTest()) return false; // falloff type examples if (!RegisterRandomFalloff()) return false; // effector plugin examples, can only be loaded if MoGfx is installed if ((versionType == VERSIONTYPE_BROADCAST) || (versionType == VERSIONTYPE_STUDIO)) { if (!RegisterNoiseEffector()) return false; if (!RegisterDropEffector()) return false; } // hair examples if (!RegisterDeformerObject()) return false; if (!RegisterForceObject()) return false; if (!RegisterCollisionObject()) return false; if (!RegisterConstraintObject()) return false; if (!RegisterGrassObject()) return false; if (!RegisterShader()) return false; if (!RegisterVideopost()) return false; if (!RegisterStylingTag()) return false; if (!RegisterRenderingTag()) return false; if (!RegisterGeneratorObject()) return false; // SnapData example if(!RegisterSnapDataNullSnap()) return false; // take system example if (!RegisterTakeTestCommmands()) return false; // String custom GUI example if(!RegisterCustomGUIString()) return false; // CustomDataType and CustomGUI example if(!RegisterCustomDatatypeCustomGUI()) return false; // GeDialog example if(!RegisterExampleDialogCommand()) return false; // ObjectData example showing the use of GetDDescription() if(!RegisterObjectDynamicDescription()) return false; // ObjectData example showing the use of Get-/SetDParameter() with certain CustomGUIs if(!RegisterGetSetDParameterExample()) return false; return true; }