|
我刚刚开始学习D3D,使用的学习教程主要就是官方SDK的帮助手册。下面这段代码是手册里讲初始化框架这一章的(非常基础),相信不少人都熟悉:
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 );
}
这是消息处理函数。我的疑问是,d3d里一定有什么可以让系统不停发送WM_PAINT这个消息吧?我知道第一个WM_PAINT消息是updatewindow()发送的。但是如果要不断更新画面,必须要不断启动WM_PAINT才能做到。因为它把所有渲染过程都放在这个Render()里了。所以我想这个Render()里一定有再次发送WM_PAINT的命令?Render()函数如下:
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Rendering of scene objects can happen here
// End the scene
g_pd3dDevice->EndScene();
}
// Present the backbuffer contents to the display
g_pd3dDevice-> resent( NULL, NULL, NULL, NULL );
}
所以我猜,发送WM_PAINT消息的命令可能就在Clear()、BeginScene()、EndScene()、Present()这几个函数中当中某一个里面。
但到底在哪一个里面?网上查了半天查不到,SDK这个问题也不讲。我的猜测正确吗?有大侠知道吗?谢谢了。 |
|