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

omhiaaxx  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(81)

我已经创建了自定义着色器效果,看起来像这样:

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' property was already registered”异常。
有没有一种方法可以解决这个问题,这样我就可以从一个着色器创建多个ShaderEffect示例?

34gzjxbg

34gzjxbg1#

依赖项属性应该使用static字段注册,因此每个类型只注册一次:

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

字符串
此字段只是属性的标识符。它是一个键,用于使用GetValueSetValue. The访问属性值。

相关问题