私は最近 Direct2D を使い始めましたが、ウィンドウのサイズを変更するときにいくつかの奇妙な動作を発見しました: メモリ使用量が急増し、最終的に「メモリ不足エラー」が発生します。これが私のコードのレイアウトです:
// Nothing special in there
int wWinMain(...)
{
// Window creation, ressource allocation, message loop.
}
次にwindowProc
// Nothing special in there either
case WM_PAINT :
if(myObject->paint()) {
ValidateRect(myObject->rect());
return 0;
}
else return DefWindowProc(...);
default :
return DefWindowProc(...);
私が使用するペイント方法について
// Check the ressources
checkRessources();
mRenderTarget->BeginDraw();
mRenderTarget->EndDraw();
// Check for errors
checkForError();
それ以外には何もありません。すべてが正常にコンパイルされ、ウィンドウが表示されます。次に、サイズ変更ハンドルを取り、それを振り始めます。これにより、ウィンドウのサイズが常に変更され、再描画されます。20秒ほど振った後、コンピューターのRAMの全容量に達するまで、メモリが過剰に使用され始めます(毎秒約200Moが使用されます)...
そのような行動の原因を探したところ、それはもっぱら
BeginDraw();
EndDraw();
部。完了したすべてのペイントを削除し、WM_PAINT 以外のすべてのメッセージの処理を停止しました。それでも...(そして、デバッグもオフにしました)。
次に、他のコード、つまりDirect2D Hello World Exampleを確認しました。ウィンドウのサイズ変更ハンドルを振った。そして、まったく同じメモリの過剰使用を取得します....
そう。何が原因なのかわかりません。Direct2D のバグですか?私のグラフィックカードドライバー?同じ現象を経験した人はいますか?