C# だけで WPF ピクセル シェーダを書く

つまり、HLSLを使わずに、C# だけで、ピクセル シェーダを書くというものです。Sean McDirmid が彼のブログで説明し、CodePlexにコードを公開しています。

C# + LINQによる GPGPU プロジェクトの Brahma がヒントになって、NyaRuRu さんの実行時HLSLコンパイラを使って実現したそうです。

コードはこんな感じだそうです。

public static ColorShader Emboss(
    ShaderCompiler<NoArgLiftedShader> txt,
PointShader uv) {
var input = txt.ImplicitInput;
var color = input[uv];
var cA = txt.Cache(input[uv - 0.001] * 2).Lft();
var cB = txt.Cache(input[uv + 0.001] * 2).Lft();
var cC = 
txt.Cache(ColorShader.New(0.5f, 1) - cA + cB).Lft();
  return ColorShader.New(
txt.Cache((cC.R + cC.G + cC.B) / 3f).Lft(),
color.A);
 }

私的には、HLSLで素直に書いたほうが、分かり易いような気がしますが...