私は多くのブリッティングを行っており(ここ数か月で多くの2Dゲームプロトタイプを作成しています)、可能な限り最速のブリットを探しています。SetDIBitsToDeviceまたはStretchDIBitsよりも速いものはありますか?通常のウィンドウサイズで覚えている限り、これらは約1〜5ミリ秒なので、RAM自体はそれほど高速ではないと思いますが、それほど高速ではありません(200 fpsより高速なものを書き込むのは難しいか不可能です)。
1 に答える
場合によります。
ほとんどのマシンのボトルネックは、システム メモリからグラフィックス メモリに移行することです。
多くの場合、SetDIBitsToDevice と BitBlt の間に実質的な違いはありませんが、ある場合もあります。低カラー モード (256 など) で実行している場合は、32 bpp のピクセル データよりも 1 バイトのインデックスをプッシュしてカードに再マップする方が高速です。(再マッピングがグラフィックスアダプターで処理されるか、システムがドライバーに依存するかどうか--私は推測します。)
あなたができる最も安全なことは、デバイスに依存する (互換性のある) ビットマップからの BitBlt だと思います。これが SetDIBitsToDevice より悪くなるとは思いませんが、引き分けになることもよくあります。
余分なピクセルが GPU で合成されない限り、ストレッチ ブリットはストレート ブリットよりもわずかにコストがかかる可能性があると予想します (ただし、テストはしていません)。
理想的なソフトウェア モデルを提示するのではなく、ハードウェアと密接に連携するように設計された、Direct2D などの新しい API のいくつかを検討することもできます。
どちらのソリューションを選択しても、マシン間の大きなパフォーマンスの違いに備えています。