共通の処理 / 初期化と同じ処理をし、描画先のバックバッファのポインタを取得します。
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の描画を行えます。使用例のソースを置いておきます。