如何创建多个着色器效果实例?
How to create multiple shader effect instances?
我创建了如下所示的自定义着色器效果:
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); }
}
}
我需要将此着色器效果(它有一些参数)的稍微不同的变体应用于不同的图像,但是当我尝试创建第二个 MyShaderEffect 对象时,我得到“'Input' 属性 已经注册”异常。
有没有办法解决这个问题,以便我可以从单个着色器创建多个 ShaderEffect 实例?
依赖属性应在 static
字段中注册,因此每种类型只注册一次:
public static readonly DependencyProperty InputProperty =
ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(MyShaderEffect), 0);
我创建了如下所示的自定义着色器效果:
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); }
}
}
我需要将此着色器效果(它有一些参数)的稍微不同的变体应用于不同的图像,但是当我尝试创建第二个 MyShaderEffect 对象时,我得到“'Input' 属性 已经注册”异常。
有没有办法解决这个问题,以便我可以从单个着色器创建多个 ShaderEffect 实例?
依赖属性应在 static
字段中注册,因此每种类型只注册一次:
public static readonly DependencyProperty InputProperty =
ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(MyShaderEffect), 0);