예제 #1
0
파일: shadermgr.cpp 프로젝트: garinh/cs
void csShaderManager::UnregisterShaders ()
{
  shaders.DeleteAll ();
  csRef<csNullShader> nullShader;
  nullShader.AttachNew (new csNullShader (this));
  nullShader->SetName ("*null");
  RegisterShader (nullShader);
}
예제 #2
0
파일: shadermgr.cpp 프로젝트: garinh/cs
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;
}
예제 #3
0
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;
}