为了渲染并显示一个场景,此步骤中示例代码的做法是:清除后备缓冲,并设置为蓝色,将后备缓冲中的内容提交到前台缓冲中,最后将前台缓冲呈现给屏幕。
为了清除一个场景,需要调用IDirect3DDevice9::Clear方法。
// Clear the back buffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
IDirect3DDevice9::Clear的前两个参数,告知Direct3D所要清除一系列矩形的大小和地址。这些矩形描述了那些在渲染目标表面的,即将被清除的区域。
大多数情况下,你仅仅使用一个覆盖整个渲染目标的矩形。为了达到这个目的,需要将第一个参数设置为0,同时第二个参数设置为NULL。第三个参数决定了此方法的行为。你可以指定不同的标志位,从而来清理渲染目标表面,关联的深度缓冲,模板缓冲,或者是他们三者的任意组合。这个指南并没有使用深度缓冲,所以D3DCLEAR_TARGET是唯一使用了的标志位。最后三个参数分别对应渲染目标,深度缓冲以及模板缓冲清理后的预设数值。CreateDevice示例工程将渲染目标的清理颜色设置为蓝色(D3DCOLOR_XRGB(0,0,255))。最后两个参数会被忽略掉,因为没有设置相应的标志位。
在清理之后,CreateDevice示例工程告知Direct3D可以开始进行渲染,之后它发出信号表示渲染已经完成。代码如下:
// Begin the scene.
g_pd3dDevice->BeginScene();
// Rendering of scene objects happens here.
// End the scene.
g_pd3dDevice->EndScene();
IDirect3DDevice9::BeginScene和IDirect3DDevice9::EndScene方法用来通知系统渲染何时开始,何时完成。你可以在这两个方法之间调用其它渲染方法。如果某个渲染方法失败,你应该在再次调用BeginScene之前调用EndScene方法。
在渲染场景之后,你需要调用IDirect3DDevice9::Present方法来显示它。
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
前两个参数分别代表了源矩形和目标矩形。由于此示例中是将整个后备缓冲提交到前台缓冲中,所以这两个参数设置为NULL。第三个参数用来设置接受呈现的目标窗口。由于这个参数被设置为NULL,则会默认使用D3DPRESENT_PARAMETERS中的hWndDeviceWindow成员所代表的窗口。第四个参数代表了“脏矩形区域”,在大多数情况下都应该设置为NULL。
指南的最后一步是关闭应用程序,详见第五步:关闭系统。