我最近开始使用 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 秒后,内存开始开始过度使用(每秒使用大约 200Mo),直到达到我计算机 RAM 的全部容量......
我寻找这种行为的根源,发现这完全是由
BeginDraw();
EndDraw();
部分。我删除了所有完成的绘画,停止处理除 WM_PAINT 之外的所有消息。仍然......(我也转向调试)。
然后我检查了一些其他代码,即Direct2D Hello World Example。摇动窗口调整大小手柄。并获得完全相同的内存过度使用....
所以。我不知道是什么原因造成的。它是 Direct2D 错误吗?我的显卡驱动?有没有人经历过同样的现象?