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で素直に書いたほうが、分かり易いような気がしますが...