4

MicrosoftがBrushリソースを、Direct2Dコンテキスト全体ではなく、個々のDirect2Dレンダリングターゲットにバインドすることを決定したのはなぜですか。ユーザーがフルスクリーンモードとウィンドウモードを切り替えたとき、またはサイズ変更したときに、画面の全幅と高さにサイズ変更する必要があるDirect2Dレンダリングターゲット(HUDの場合)にマップされたDirect3Dテクスチャがある場合はどうすればよいですか?窓?これが発生したときにすべてのブラシを再作成するのは、これだけです。または、Direct2Dサーフェスではなく、ブラシをID2D1Factoryにバインドするなど、別の方法はありますか?

4

2 に答える 2

3

ブラシでは、GPUにリソースを割り当てる必要があります。Direct2Dは「ポリシーレス」APIであるため、メモリ使用量を直接制御できるようにする必要があるため、ブラシファクトリメソッドはルートファクトリではなくレンダーターゲットからハングします。そうしないと、ハードウェアリソースを解放するタイミングを決定するポリシーを設定する必要があり、そのポリシーは一部のシナリオでは常に間違っています(パフォーマンスやメモリ使用量に悪影響を及ぼします)。

ジオメトリとストロークスタイルのファクトリメソッドは、メインメモリに格納されているため、ルートファクトリにぶら下がっています。また、それらが影響する処理はすべてCPUで実行されます。を介して、ストロークスタイルのジオメトリオブジェクトをハードウェアリソースに「コンパイル」できます。ID2D1Meshこれは、基本的に、頂点バッファに直接テッセレーションするだけです。はるかに高速になりますが(テッセレーション時ではなくレンダリング時!)、ジオメトリの複雑さに応じて、より多くのメモリを使用することもできます。

于 2012-10-08T19:02:41.557 に答える
1

ユーザーがフルスクリーンモードとウィンドウモードを切り替えたときに何が起こるかを説明していなかったため、これが役立つかどうかはわかりません。したがって、唯一の変更はレンダリングターゲットのサイズであると思います。ReSize関数を呼び出すことでレンダリングターゲットのサイズを変更し、通常どおりブラシを使用できます。ブラシで変更する必要はありません。

于 2012-09-30T00:43:21.010 に答える