by Sunshine » 2006年3月24日(金) 22:18
イグトランスさん、ありがとうございます。
とりあえず、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
しかし、これではこの関数を呼び出す前に、CImage2D::SetTexture関数を呼び出さないと、当然アクセス違反になってしまいます。わざわざSetTexture関数を呼ばなくてもいいような、もうちょっと使い勝手がいい関数にしたいのですが、どのように手直ししたらいいでしょうか。テクスチャの作り方さっぱりです…
あとメモリリークを起こしていないか心配だ…(^^;
イグトランスさん、ありがとうございます。
とりあえず、CImage2Dクラスに以下の関数を追加してみました。
[code] 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[/code]
しかし、これではこの関数を呼び出す前に、CImage2D::SetTexture関数を呼び出さないと、当然アクセス違反になってしまいます。わざわざSetTexture関数を呼ばなくてもいいような、もうちょっと使い勝手がいい関数にしたいのですが、どのように手直ししたらいいでしょうか。テクスチャの作り方さっぱりです…
あとメモリリークを起こしていないか心配だ…(^^;