我之前刚刚问了一个问题Spot the flaw c++ code并且意识到在我的应用程序中没有使用ValidateRect消息处理程序会导致这个问题出现大幅减缓?这怎么会以这种方式影响directx应用程序?
//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
答案 0 :(得分:1)
您的应用程序正在放慢速度,因为它的呈现远远超出了必要的范围。它收到了大量的WM_PAINT消息。
当Windows认为应该绘制窗口时,Windows会向窗口发送WM_PAINT消息。它根据窗口是否已失效来进行此确定。完全渲染窗口后,必须通过验证窗口的客户区来告诉Windows这种情况。只要存在一些无效区域,Windows将继续发送您的窗口WM_PAINT消息。
在DirectX之前,应用程序窗口在调用EndPaint时已经过验证。你仍然可以调用BeginPaint和EndPaint,包装你正在做的任何DirectX渲染,或者你可以在完成渲染时调用ValidateRect。