2


0

2つの振動する色がどのようにして3番目の色になるかを示すことができるアプリケーション(winforms)を書きたいと思います。 そのためには、2色を非常に速く(> 50 fpsで)切り替えることができる必要があります。 私は本当にマネージコードでこれをしたいと思っています。

今、私は互いの上に単色で2つの小さな長方形のビットマップを描いています。 ダブルバッファリングを有効にしたコントロールで、2つのメモリ内ビットマップを含むGDI DrawImageを使用してもカットされず、高速でちらつき/ちらつきが発生します。 スライダーに接続されたタイマーが切り替えをトリガーします。

  1. これは賢明なアプローチですか?

  2. GDIとBitBLTはもっと良いのでしょうか?

  3. WPFのパフォーマンスは向上しましたか?

  4. DirectXや他のテクノロジはどうですか?

TIAさん、フィードバックをお待ちしています。

3 Answer


2


私はGDIで高速グラフィックスをすることができなかったのでDirectXを使いました、しかしMSはManaged DirectXのサポートをやめたので、あなたはこれをアンマネージドCで行う必要があるかもしれません。

C#でコントローラを作成し、DirectXをサポートしているアンマネージドC DLLを呼び出す、非常に薄いマネージドC層を作成してください。

他のアプリケーションが実際にcpuを使用できないようにするには、コンピュータを排他的に制御する必要があります。そうしないと、フレームレートが低下する可能性があるか、少なくとも一貫性がなくなります。

DirectX 9.0cなどの古いバージョンのDirectXを使用していて、それでも.NETがサポートされている場合は、それを使用して、毎秒約70フレームの音楽プログラムのフレームレートを取得します。


1


ダブルバッファのアプローチではちらつきを避けることができます(これにより、レンダリングコントロールのDoubleBufferedプロパティをTrueに設定することを意味します - 皮肉なことに、これはちらつきに影響を与えません)。

フレームレートをモニタのリフレッシュレートと同期させる場合に限り、DirectXを介してティアリングを処理できます。 これは可能ではないかもしれません、特にあなたが特定のフレームレートを達成する必要があるなら(そしてそれはあなたのモニタのリフレッシュレートであることは起こりません)。

私はWPFが根本的な引き裂き問題を回避するとは思わない(しかし私は間違っているかもしれない)。


1


これはGDIで動作しますが、フリッカを制御することはできませんので、それは問題外のようなものです。 Direct Xは、ちらつきのない2つの画像を表示するためだけの余分な毛羽立ちの多いものです。 おそらくSDLは十分に機能しますか? それはクロスプラットフォームであり、あなたは文字通り30行以内のコードでこの効果をコーディングすることができます。