DirectDrawにおいて、あるデバイスコンテキストの内容を2Dテクスチャにコピーしたいのですが、方法が分かりません。
恐らく、テクスチャのサーフェイスを取得してIDirect3DSurface9::GetDC関数でデバイスコンテキストを取得し、そこにBitBltでコピーする、と思うのですが、肝心のサーフェイスの取得方法がわかりません。
どうすればできるのでしょうか。
DirectDraw
イグトランスさん、ありがとうございます。
とりあえず、CImage2Dクラスに以下の関数を追加してみました。
しかし、これではこの関数を呼び出す前に、CImage2D::SetTexture関数を呼び出さないと、当然アクセス違反になってしまいます。わざわざSetTexture関数を呼ばなくてもいいような、もうちょっと使い勝手がいい関数にしたいのですが、どのように手直ししたらいいでしょうか。テクスチャの作り方さっぱりです…
あとメモリリークを起こしていないか心配だ…(^^;
とりあえず、CImage2Dクラスに以下の関数を追加してみました。
コード: 全て選択
Function PasteDC(nXDest As Long, nYDest As Long, nWidth As Long, nHeight As Long, hdcSrc As HDC, nXSrc As Long, nYSrc As Long, dwRop As DWord) As Long
Dim lpD3DSurface As LPDIRECT3DSURFACE9
Dim hdcDest As HDC
'サーフェイスの取得
lpD3DTexture->GetSurfaceLevel(0, VarPtr(lpD3DSurface))
'デバイスコンテキストの取得
lpD3DSurface->GetDC(VarPtr(hdcDest))
'描画
PasteDC = BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop)
'開放
lpD3DSurface->ReleaseDC(hdcDest)
lpD3DSurface->Release()
End Function
あとメモリリークを起こしていないか心配だ…(^^;