2016-07-19 11 views
1

ダミー質問です。私はこのようになりますカスタムシェーダを持っている:ピクセルシェーダー一様変数の設定

 
sampler2D InputTexture; 

float parameter1, parameter2 etc 

float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 result = blah-blah-blah some calculations using parameter1, parameter2 etc. 

    return result; 
} 

私はこのようになりますそのラッパーを経由して、それを使用しようとしている:だから

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

、私の質問は:どのように私は、これらのシェーダを設定しますC#プログラムのパラメータ?

答えて

0

ShaderEffectクラスのdocumentationにあります。すべてのパラメータに対して依存関係プロパティを作成する必要があります。たとえば:PixelShaderConstantCallback

class MyShaderEffect 
{ 
    public MyShaderEffect() 
    { 
     PixelShader = _pixelShader; 

     UpdateShaderValue(InputProperty); 
     UpdateShaderValue(ThresholdProperty); 
    } 

    public double Threshold 
    { 
     get { return (double)GetValue(ThresholdProperty); } 
     set { SetValue(ThresholdProperty, value); } 
    } 

    public static readonly DependencyProperty ThresholdProperty = 
     DependencyProperty.Register("Threshold", typeof(double), typeof(MyShaderEffect), 
       new UIPropertyMetadata(0.5, PixelShaderConstantCallback(0))); 
} 

0あなたはHLSLで使用登録を参照:

float threshold : register(c0); 

WPFの時にプロパティの変更シェーダを更新するために知っているこの方法です。コンストラクタでUpdateShaderValueを呼び出して最初に値を渡すことも重要です。