描画処理について
DirectGraphicsによる描画はIDirect3DDevice9インタフェースを通じて行うことが出来ます。
DirectGraphicsによる描画はダブルバッファリングと言う方法を使って行われます。
描画処理の流れを簡単に説明すると、まず描画をバックバッファ(裏画面)に対して行います。
バックバッファに描画を行ってもディスプレイには表示されません。
ディスプレイに表示させるためにはバックバッファの内容をプライマリバッファ(表画面)に転送する必要があります。
バックバッファに描画 → プライマリバッファに転送 → バックバッファに描画 → プライマリバッファに転送
このような繰り返しでDirectX Graphicsによる描画は行われます。
このような方法をなぜ使うかと言うと、プライマリバッファに直接描画を行ってしまうと
描画途中の画面が表示されてしまうためです。
バックバッファに描画を行ってから、プライマリバッファに送って表示することによって
描画途中の画面が表示されることがなくなります。
描画の流れ
サンプルの描画処理部分を見てみてください。
VOID Render() { if( NULL == g_pd3dDevice ) { return; } g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) { // ここに描画処理を入れる g_pd3dDevice->EndScene(); } g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
まず、IDirect3DDevice9インタフェースのClearメソッドでバックバッファをクリアし、
BeginSceneメソッドで描画開始を宣言します。
そして、なんらかの描画をバックバッファに行い、EndSceneメソッドで描画終了を宣言します。
この段階ではバックバッファに描画を行っただけでディスプレイには反映されません。
ディスプレイに反映させるためには、プライマリバッファにバックバッファの内容を転送する必要があります。
それを行うのがPresentメソッドです。
Presentメソッドによってプライマリバッファにバックバッファの内容を転送され、
ディスプレイに描画内容が反映されます。
サンプルでは実際の描画は行われていませんが、この流れ自体は変わりません。
次節では、実際にモデルを描画する処理を解説します。