Ich habe benutzerdefinierten Shader-Effekt erzeugt, der wie folgt aussieht:Wie erstellt man mehrere Shader-Effekt-Instanzen?
class MyShaderEffect : ShaderEffect
{
private PixelShader _pixelShader = new PixelShader();
public readonly DependencyProperty InputProperty =
ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(MyShaderEffect), 0);
public MyShaderEffect()
{
_pixelShader.UriSource = new Uri("MyShader.ps", UriKind.Relative);
this.PixelShader = _pixelShader;
this.UpdateShaderValue(InputProperty);
}
public Brush Input
{
get { return (Brush)this.GetValue(InputProperty); }
set { this.SetValue(InputProperty, value); }
}
}
Ich brauche eine etwas andere Variationen dieses Shader-Effekt anzuwenden (es einige Parameter haben) auf ein anderen Bilder, aber wenn ich versuche zu erstellen ein zweites MyShaderEffect-Objekt, ich bekomme "'Eingabe' Eigenschaft wurde bereits registriert" Ausnahme.
Gibt es eine Möglichkeit, um mehrere ShaderEffect-Instanzen von einem einzelnen Shader zu erstellen?
Gut bemerkt +1, ich denke, das ist das Problem ... –
Aber was ist mit den anderen Eigenschaften? Ich verwende sie, um Shader-Parameter einzustellen. Wenn ich sie statisch mache, kann ich für verschiedene Instanzen kein unterschiedliches Shader-Verhalten haben. – yadda
Dieses Feld ist nur die Kennung der Eigenschaft. Es ist ein Schlüssel, der verwendet wird, um mit 'GetValue' und 'SetValue' auf die Eigenschaftswerte zuzugreifen. Die'Eingabe'-Eigenschaft selbst ist nicht statisch. –