如何创建多个着色器效果实例?

时间:2016-07-20 09:23:17

标签: c# wpf shader pixel-shader

我创建了自定义着色器效果,如下所示:


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对象时,我得到“'输入'属性已经注册”异常。

有没有解决方法,所以我可以从一个着色器创建多个ShaderEffect实例?

1 个答案:

答案 0 :(得分:2)

依赖项属性应在static字段中注册,因此每种类型只能注册一次:

public static readonly DependencyProperty InputProperty =
    ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(MyShaderEffect), 0);