Custom Pixel Shader Effect はじめました。

まずは Direct X SDK をインストール
http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en

インストールしたフォルダの下の Utilities\bin\x86 に Path を通しておくと後々便利


次にエフェクトの Brighten.fx ファイルを作成。HLSL を書く。ここではブライトのエフェクト。

sampler2D input : register(s0);

float4 main(float2 uv : TEXCOORD) : COLOR
{
  float4 Color;
  Color = tex2D( input , uv.xy)*4;
  return Color;
}

次に Brighten.fx ファイルをコンパイルして Brighten.ps ファイルを作成

fxc /T ps_2_0 /Fo Brighten.ps Brighten.fx

完了後に Brighten.ps ファイルが出来あがる。バイナリファイル。

この Brighten.ps ファイルを Silverlight に Resource で登録する。

設定した Brighten.ps を読み込んで扱うための ShaderEffect のクラスを作成。BrightenEffect.cs

public class BrightenEffect : ShaderEffect {
		
  private static PixelShader shader = new PixelShader(){
    UriSource = new Uri("/SilverlightSquare.CustomEffect;component/Assets/Shader/Brighten.ps",UriKind.Relative)
  };
	
  public BrightenEffect(){
    this.PixelShader = shader;
  }
}

作った BrightenEffect を使う。

<UserControl x:Class="SilverlightSquare.CustomEffect.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:localEffects="clr-namespace:SilverlightSquare.CustomEffect.Effects;assembly=SilverlightSquare.CustomEffect">
  <Grid x:Name="LayoutRoot">
    <Image Source="Assets/Image/image1.jpg"
      Stretch="Uniform" HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
      <Image.Effect>
        <localEffects:BrightenEffect />
      </Image.Effect>
    </Image>
  </Grid>
</UserControl>