描画を高速に行うには

解決


東雲  2003-07-03 11:07:28  No: 51644  IP: [192.*.*.*]

ENV : Win2000SP3 VC6SP4 SDK NoneDirectX

こんにちは<m(__)m>
早速ではありますが、質問をさせていただきます。

セカンダリサーフェスからプライマリサーフェスへの転送がとても
遅く感じられます。
どのような方策をとれば描画を素早く転送できるのでしょうか?
尚、画面とセカンダリサーフェスは32bitです。

まず、BitBlt、StretchDIBits、SetDIBitsToDevice、
StretchBlt等を使用し1000回セカンダリからプライマリへ描画
を3回行い平均を求めたところ、目立った数値はありませんでした。
次にバックサーフェス同士の転送を行ったところ前述の実験と比べ
たところ転送速度に2倍の差が現れました。
なぜ、このような差が反映されるのでしょうか?
やはり、バスの帯域やVRAM・メモリ間の遅延が関係しているの
でしょうか?しかし、それであっても上記二つの数値は同じになる
はずなのです・・・
現在、Meimi等のリアルタイムでのエフェクトを掛けながら再
生するアプリケーションを作成しております。
しかし、画面への転送がボトルネックになり、滑らかな描画が出来
ません。
他にどのような方法をとれば転送速度を向上させることが出来るの
でしょうか?
皆様のお力添えを得たくここに書き込ませていただきます、宜しく
お願いいたします。

hDCP = GetDC(hWND) // プライマリ(ウインドウ)
hDCS1 = CreateDC(...) // セカンダリ1
hDCS2 = CreateDC(...) // セカンダリ2

# ウインドウへの転送
FOR I = 0 TO 1000
    BitBlt(hDCP , hDCS1);
NEXT I

# セカンダリ同士の転送
FOR I = 0 TO 1000
    BitBlt(hDC1 , hDC2);
NEXT I

編集 削除
東雲  2003-07-03 23:05:17  No: 51645  IP: [192.*.*.*]

少なくともhDCからリニア(仮想でも可)なアドレスを取得する方法を
どなたか、ご存じありませんでしょうか?

編集 削除
とおりすがり  2003-07-03 23:24:21  No: 51646  IP: [192.*.*.*]

やねうらお さんのホームページに詳しく載ってるよ。

編集 削除
東雲  2003-07-04 23:18:43  No: 51647  IP: [192.*.*.*]

ありがとうございます、よく読んでみましたところ
理解いたしました。

プライマリとセカンダリのフォーマットを一致させることで
速度の改善を行えました。<m(__)m>

編集 削除