为什么没有ValidateRect导致directx应用程序极大地减速?(c ++)

时间:2012-02-14 17:32:18

标签: directx

我之前刚刚问了一个问题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 );

}

1 个答案:

答案 0 :(得分:1)

您的应用程序正在放慢速度,因为它的呈现远远超出了必要的范围。它收到了大量的WM_PAINT消息。

当Windows认为应该绘制窗口时,Windows会向窗口发送WM_PAINT消息。它根据窗口是否已失效来进行此确定。完全渲染窗口后,必须通过验证窗口的客户区来告诉Windows这种情况。只要存在一些无效区域,Windows将继续发送您的窗口WM_PAINT消息。

在DirectX之前,应用程序窗口在调用EndPaint时已经过验证。你仍然可以调用BeginPaint和EndPaint,包装你正在做的任何DirectX渲染,或者你可以在完成渲染时调用ValidateRect。