• ベストアンサー

DirectDrawによるブレンディングについて

2Dサーフェス上イメージのブレンド処理を サーフェスメモリへの直接アクセスでやってるのですが、 いかんせん遅いです。やっぱZバッファとか使うしか ないですかねえ‥‥使い方あまり知らないんだけど‥‥ 3Dでも構わないんで、ブレンド処理を (可能なら)D3DXで使ったコーティング例なんかメールで 送ってもらえたら有難いです‥‥さすがにムリか(爆)

質問者が選んだベストアンサー

  • ベストアンサー
  • hanimaro
  • ベストアンサー率44% (22/50)
回答No.2

MMX命令自体はインラインアセンブラでいつでも使用できます。(VC6の場合) 命令のリファレンスはインテルのサイトからDL出来ます。 スクリーン全体のアルファブレンドの動的変更と言うことは、 フェードイン・アウトやクロスフェードなんかをしたいんですかね? すごい重いということですが、アルファブレンドをかけるサーフェスを ビデオメモリに取ってませんか? システムメモリにサーフェスを作ることで多少改善されると思うのですが。 現在私が作っているプログラムではP3-700+GeForce2GTS+Win2kのマシンで 640x480の16bitのMMXを使用したクロスフェードで 60fps程度ですね。(まだ高速化の余地はありますが・・・) Celeron366+TNT2+Win98では30fps程度ですが、実際に見てみると特に遅いと思うことはないです。 画面のエフェクト程度ならばこれぐらいで十分だと思いますが。 でも、いくら頑張っても3Dハードウェアを使用するほうが早いです。 3Dハードウェアを使用すると環境が結構限定されてしまうのが欠点ですね。 このサイトに、MMXを使用したアルファブレンドのサンプルがあります。 MMXを使用しない場合でも、かなり最適化されてます。(すごいです) 私も参考にさせて貰いました。 ただ問題なのが英語のページなんです・・・

参考URL:
http://www.gamedev.net/reference/programming/features/mmxblend/page8.asp
fatal-crisis
質問者

お礼

うぅっ、英語なんですね(T-T) けど プログラマって英語力必要ですよね‥‥どうにか頑張ってみます。 サーフェスのメモリ確保も(まだやってないんですけど) 変更して動作確認してみます。これで解決すれば万々歳ですが^^; ではでは、ありがとうございました。 またカキコみつけた時は お願いします(笑)

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hanimaro
  • ベストアンサー率44% (22/50)
回答No.1

はじめまして。 サーフェスをLockしてアルファブレンドする場合は アルファブレンドするサーフェスをビデオメモリに取っているのであれば システムメモリに取ると早くなります。 DirectXではビデオメモリのサーフェスへLockして、データをリードすると めちゃめちゃ時間掛かります。(すべての環境で遅いとは限らないかもしれません。今まで見たビデオカードではそうでした。) それと、MMXを使うとさらに高速化が可能です。 MMXを使用すると、16ビットカラーの場合4ピクセルずつ処理できます。 ビデオカードが対応していればD3DXを使用した方が高速です。 ただ、ビデオカードが対応してなければやはり遅いです。 D3DXで半透明はDirectXのサンプル見れば簡単に作れるのでは? 俺はIMでしかやったこと無いですが・・・ 参考になれば幸いです。それでは。

fatal-crisis
質問者

補足

回答ありがとうございます。 今ブレンドで処理したいのが、 スクリーン全体のブレンドによる動的変更―― つまり連続(アルファ値を徐々に変更)した ブレンド処理なんですけど‥‥それやろうとすると、 やはり2Dではどーしても重いんですね。 普通にブレンド使う分には全然おっけーなのですが。 MMX指令は、ちょっと知らない部分かも‥‥ でもあれってIMとかで使うんですよね・・・・やっぱ3D使うかなあ‥‥

すると、全ての回答が全文表示されます。

関連するQ&A