1

现在我可以通过

m_pDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, 
    IREF_GETPPTR(pBackBuffer,IDirect3DSurface9));

然后在系统内存中创建一个名为 pSurfTemp 的表面

m_pDevice->CreateOffscreenPlainSurface(
    g_Proc.m_Stats.m_SizeWnd.cx, g_Proc.m_Stats.m_SizeWnd.cy, 
    s_bbFormat, D3DPOOL_SYSTEMMEM, 
    IREF_GETPPTR(pSurfTemp,IDirect3DSurface9), NULL );

然后我通过

m_pDevice->GetRenderTargetData(pBackBuffer, pSurfTemp);

数据似乎像这样转换:videoMemory->systemMemory

由于下一步是再次操作显存中的数据,它会将其从系统内存中复制回显存中。它浪费时间。

我想复制视频内存中的数据,我该怎么做?

4

1 回答 1

1

如果我理解正确,你会想CreateOffscreenPlainSurface()D3DPOOL_DEFAULT标志,所以驱动程序会自动选择合适的内存位置。但它从不保证它永远是视频卡的板载内存。

顺便说一句,过早的优化是万恶之源。=)

Edit: Another option is to switch API from DirectX 9 (which is obsolete) to DirectX 11, which allows much more precise resources manipulations. Also, OpenGL goes somewhere in between. Both, is a huge code rewrite.

于 2013-09-12T10:35:00.390 回答