2011-02-06 5 views
4

私はフレームごとに変化するフルスクリーンテクスチャの描画を高速化しようとしています。私のシステムでは、GDIとBitBlt()を使って約1000FPSを得ることができますが、Direct3Dと動的テクスチャを使用してパフォーマンスを向上させることができると考えました。代わりに私はわずか約250 FPSを取得しています。Direct3Dストリーミングテクスチャのパフォーマンスを向上させるにはどうすればよいですか?

私は現在のドライバを搭載したATI HD 4870を搭載したMac Proで動作しています。

私はダイナミックテクスチャを試してみましたが、それは私に小さな利得(〜15FPS)を与え、パイプラインのストールを避けるためにテクスチャチェーンを使ってみましたが効果がありません。

私はかなり見てきましたが、このようにダイナミックテクスチャを使用することについての情報はほとんどありません。

私には何か基本的なものがありませんか?

デバイスセットアップ:

 
pparams.BackBufferCount = 1; 
pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; 
pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 

テクスチャ作成:

 
device->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC, 
         D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, NULL); 

テクスチャ更新:

 
texture->LockRect(0, &locked, NULL, D3DLOCK_DISCARD); 
... write texture data 
texture->UnlockRect(0); 
device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(*vertices)); 
... 

をあなたは http://www.libsdl.org/tmp/SDL-1.3.zip

から進行コードで仕事を得ることができます

ありがとう!

答えて

1

DrawPrimitiveUPは非常に遅いです。動的頂点バッファ(nooverwriteで更新、完全ならば破棄)を使用する必要があります。

+0

私は、ダイナミックなテクスチャを使用していなかった昔、フレームごとにDrawPrimitiveUPが1つしかないので、それは問題にはならなかった。ダイナミックなテクスチャにも大きな影響を与えますか? –

+0

DrawPrimitiveUPが問題でない場合は、最大スピードアップを制限する各フレームのドライバオーバーヘッドがあると推測します。ベンチマークの各フレームで行われる作業を増やしてください。 –

+0

さて、ありがとう、ありがとう! –

3

テクスチャを読み返す必要がない場合は、(D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY)フラグを使用してテクスチャを作成できます。

関連する問題