共通の処理 / 初期化と同じ処理をし、描画先のバックバッファのポインタを取得します。
LPDIRECT3DSURFACE9 g_lpBackBuffer = NULL; g_lpD3DDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &g_lpBackBuffer );
読み込んだ画像を格納するサーフェイスを作成し、作成したサーフェイスに画像を読み込みます。この関数がサポートしているファイルフォーマットは、.bmp、.dds、.dib、.jpg、.png、.tga です。
LPDIRECT3DSURFACE9 g_lpSurface = NULL;
g_lpD3DDevice->CreateOffscreenPlainSurface( 320, 240, D3DFMT_X8R8G8B8,
D3DPOOL_DEFAULT, &g_lpSurface, NULL );
D3DXLoadSurfaceFromFile( g_lpSurface, NULL, NULL, "bg.jpg",
NULL, D3DX_DEFAULT, 0, NULL );
「IDirect3DDevice9::StretchRect」を使用しバックバッファへ描画します。第1,2引数に転送元の情報、第3,4引数に転送先の情報を指定します。
// バックバッファへ描画
RECT SrcRect,DestRect;
SetRect( &SrcRect, 0, 0, 320, 240 );
SetRect( &DestRect, 0, 0, 320, 240 );
g_lpD3DDevice->StretchRect( g_lpSurface, &SrcRect, g_lpBackBuffer,
&DestRect, D3DTEXF_NONE );
// バックバッファを表示
g_lpD3DDevice->Present( NULL, NULL, NULL, NULL );
作成した各オブジェクトを解放します。
// 解放
/* #define RELEASE(p) { if(p){(p)->Release();p=NULL;} } */
RELEASE( g_lpSurface );
RELEASE( g_lpBackBuffer );
RELEASE( g_lpD3DDevice );
RELEASE( g_lpD3D );
ここまでの手順で2Dの描画を行えます。使用例のソースを置いておきます。