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

本文关键字:实例 果实 何创建 创建 | 更新日期: 2023-09-27 17:57:44

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


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);

此字段只是属性的标识符。它是一个用于访问属性值的键,使用GetValueSetValue. The 输入的属性本身不是静态的。