私はIDirect3DSurface9、デフォルトプール、YUVフォーマットを持っています。どうすれば効率的にビットマップビットを取得できますか?現時点では私は:
- レンダリングターゲットを作成します。
device->CreateRenderTarget(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &render_target, NULL)
- YUVをRGB32に変換:(
device->StretchRect(videomem_surf, NULL, render_target_, NULL, D3DTEXF_NONE)
完全な長方形、ストレッチなし)
- システムメモリにプレーンなオフスクリーンサーフェスを作成する
device->CreateOffscreenPlainSurface(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &sysmem_offscreen_surf, NULL)
- ビデオメモリからsysmemにデータをコピーします。
device->GetRenderTargetData(render_target, sysmem_offscreen_surface)
- オフスクリーンサーフェスからGetDC、互換性のあるDCおよび互換性のあるビットマップを作成し、オフスクリーンの表面DCから互換性のあるDCにBitBltを作成し、GetDIBits()によってビットマップビットをバッファーにコピーします
元のサーフェスからレンダリングターゲット、次にオフスクリーンサーフェス、互換性のあるビットマップ、最後にバッファへのコピーが非常に多いため、これは少しオーバーヘッドに見えます。これをどのように改善できますか?
ありがとう