2016-07-20 13 views
1

I는 다음과 같습니다 사용자 정의 쉐이더 효과를 만들었습니다 : 내가 만들려고 할 때여러 셰이더 효과 인스턴스를 만드는 방법은 무엇입니까?

나는이 쉐이더 효과의 약간 다른 변형을 적용 할 필요가

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 인스턴스를 만들 수있는 방법이 있습니까?

답변

2

종속성 속성이 static 필드에 등록되므로 등록을 한 번만 유형에 따라 발생한다 :

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

은 좋은 일이, 내가 다른 부동산에 대한 문제 ... –

+0

그러나 먹으 렴 생각 차렸다? 셰이더 매개 변수를 설정하기 위해 그것들을 사용합니다. 정적으로 만들면 다른 인스턴스에 대한 셰이더 동작을 다르게 할 수 없습니다. – yadda

+1

이 필드는 속성의 식별자입니다. GetValue 및 SetValue를 사용하여 속성 값에 액세스하는 데 사용되는 키입니다. 'Input' 속성 자체는 정적이 아닙니다. –