2016-07-20 6 views
1

私はこのようになりますカスタムシェーダエフェクト作成しました:私は別の画像に(それはいくつかのパラメータを持っている)、このシェーダ効果のわずかに異なるバリエーションを適用する必要がありますが、私が作成しようとすると複数のシェーダエフェクトインスタンスを作成する方法は?


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

を2番目のMyShaderEffectオブジェクトで、「 '入力'プロパティは既に登録されています」という例外が発生します。

これで回避方法があるので、1つのシェーダから複数のShaderEffectインスタンスを作成できますか?

答えて

2

依存関係プロパティがstaticフィールドに登録する必要がありますので、登録は唯一のタイプごとに一度起こる:

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

良いが+1に気づいた、私は –

+0

...問題thatsのだと思うしかし、どのような他の特性についてはどうですか?私はそれらを使ってシェーダのパラメータを設定します。それらを静的にすると、異なるインスタンスに対して異なるシェーダの振る舞いを持つことはできません。 – yadda

+1

このフィールドは、プロパティの単なる識別子です。 'GetValue'と' SetValue'を使ってプロパティ値にアクセスするために使用されるキーです。 'Input'プロパティ自体は静的ではありません。 –

関連する問題