カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2012年10月28日(日)

XNA 4.0 の SpriteBatch への Effect 適用について

写真閲覧ソフト: ミルノ PC フォトフレーム 1.5 では、
利用する XNA フレームワーク (グラフィック表示用ライブラリ) を
XNA 3.1 から、XNA 4.0 Refresh に変更しました。

そのときに、ちょっと苦労した点を、後進の方向けに、ご紹介。
この記事は、SpriteBatch の Effect についてです。

XNA 3.1 では、Effect を適用するには、適用のはじめで、

effect.Begin();
effect.CurrentTechnique.Passes[0].Begin();

適用の終わりで、

effect.CurrentTechnique.Passes[0].End();
effect.End();

と書く必要がありましたが、XNA 4.0 では、適用開始で、

effect.CurrentTechnique.Passes[0].Apply();

と書けばよくなりました。適用のやめかたは必要なかったので、
調べてません。どうやるのかな?

まぁ、これだけで話がすめば簡単でいいのですが、
実は書き方だけじゃなく、挙動も変わっています。

XNA 3.1 では、上のように、Effect を適用しても、
SpriteBatch にもともとある Effect は有効で、
SpriteBatch.Draw で指定した色により画像の色を変更できました。
(主に、アルファ値を指定するのに使います)

一方、XNA 4.0 では、Effect を設定した場合、
SpriteBatch.Draw で指定した色は無視されます。

ただ、SpriteBatch.Draw で指定した色は、COLOR0 として
ピクセルシェーダーに渡されるので、自分で作った Effect で、
掛けてあげれば OK。↓ みたいな感じです。

float4 pixel_shader(float2 txp: TEXCOORD0, float4 color: COLOR0) : COLOR
{
  float4 src = tex2D(SampTx, txp);
  return src * color;
}

ミルノでは、SpriteBatch で用意されている Effect は使わずに、
全てカスタム Effect でいい感じに処理してます (笑)。

color の使い方をいじってやれば、アルファ指定用の色情報として、
.NET 4.0 用の Color(alpha, alpha, alpha, alpha) を渡さず、
.NET 3.5 のまま、Color(255, 255, 255, alpha) を渡しても、
うまく処理できます。

また、ABGR -> ARGB の変換なんかも高速に行えるので、
XNA 3.1 から 4.0 に移植するときには、おすすめの方法ですよ。

XNA 4.0 を利用した高速画像ビューアー、ミルノ PC フォトフレーム
試用は無料なので、是非使ってみてくださいね。


コメント
コメントする