トップページ > 記事閲覧
SetDrawBlendModeとGraphBlend
名前:丈槍由紀 日時: 2016/03/04 13:47

GraphBlendとSetDrawBlendModeの間で指定できる合成モードに違いがあるのが気になります スクリーンやオーバーレイを使って画像を描画したい時、 描画したい画像を一時的に他のスクリーンに描画してからGraphBlendで通常の描画結果と合成しているのですが、 別途スクリーンを用意するのはもちろん、GraphBlendの引数とするために通常の描画も仮画面に置く必要があったりと不便が多いです。 スクリーンの管理も大変なので、出来れば裏画面への描画のみで完結させたいのですが、、、 SetDrawBlendModeで複雑な計算をするのはハード面で厳しいものがあるのでしょうか。。。?
メンテ

Page: 1 |

Re: SetDrawBlendModeとGraphBlend ( No.1 )
名前:管理人 日時:2016/03/07 01:52

> SetDrawBlendModeで複雑な計算をするのはハード面で厳しいものがあるのでしょうか。。。? はい、Direct3D が対応している『描画先の画像とのブレンド処理』は SetDrawBlendMode で 指定できるような単純な計算のみ対応していて、GraphBlend で行うような複雑な計算には対応していません なので仮に SetDrawBlendMode の機能の一部として GraphBlend のような効果を実装する場合も 直接裏画面に対して GraphBlend と同等の処理を行うことができませんので 1.描画先の裏画面の内容を仮スクリーンに転送   ↓ 2.仮スクリーンの内容と描画する画像を GraphBlend と同等の処理を使用してブレンド   ↓ 3.ブレンド結果を裏画面に描画 という処理をDXライブラリ内部で行うことになります ( この場合既存の SetDrawBlendMode で設定できるブレンドモードと比べて描画負荷が数十倍、あるいは 百倍以上遅くなります ) また、自前で GraphBlend を行う場合は予め GraphBlend で使用する分は別のスクリーンに描画して おくことができますが、SetDrawBlendMode の機能の一部として実装する場合はそれができないので 「1.描画先の裏画面の内容を仮スクリーンに転送」が発生する分だけ自前で GraphBlend を 使用する場合より処理負荷が高くなります とはいえ、そこまで性能的にぎりぎりの処理を行っていない場合は SetDrawBlendMode で設定できた方が 使い易いのは確かなので、もし仮に実装されたら丈槍由紀さんも使用されるとのことでしたら 実装したいと思いますがどうでしょうか?
メンテ
Re: SetDrawBlendModeとGraphBlend ( No.2 )
名前:丈槍由紀(解決) 日時:2016/03/08 04:24

うーん、、 関数一発で合成モード付きの描画できるというのは(リーダブルなコードという面で)魅力的なのですが、 内部的に無駄が多いのであれば自前で処理を書いたほうがよさそうですね 利用者の多いライブラリですから、書きやすさより処理速度を重視するユーザーも一定数いることでしょうし なので、ライブラリは今のままで大丈夫です。 返信ありがとうございました
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存