Gast
2008-04-30, 03:30:00
Hallo,
ich muss irgenwie den Inhalt des BackBuffers in einen einfachen Heap/Ram/Whatever-Speicherbereich kopieren. Wie geht dies am einfachsten?
IDirect3DSurface9* pBackBuffer;
D3DSURFACE_DESC Desc;
D3DLOCKED_RECT LockedRect;
if(FAILED((*pDirect3DDevice)->CreateOffscreenPlainSurface(PresentParameters.BackBufferWidth,
PresentParameters.BackBufferHeight,
PresentParameters.BackBufferFormat,
D3DPOOL_SYSTEMMEM,//D3DPOOL_SCRATCH
&pBackBuffer,
NULL)) ||
FAILED((*pDirect3DDevice)->GetRenderTarget(0,&pBackBuffer)) ||
FAILED(pBackBuffer->GetDesc(&Desc)))
{
#ifdef _DEBUG
DebugBreak();
#endif
ExitProcess(-1);
}
IDirect3DSurface9* pBackBufferCopy=pBackBuffer;
if(FAILED(pBackBufferCopy->LockRect(&LockedRect,NULL,D3DLOCK_READONLY)))
{
#ifdef _DEBUG
DebugBreak();
#endif
ExitProcess(-1);
}
Dies ist mein bisheriger Ansatz. Leider schlägt aber der LockRect-call mit D3DERR_INVALIDCALL.
Was ist falsch?
ich muss irgenwie den Inhalt des BackBuffers in einen einfachen Heap/Ram/Whatever-Speicherbereich kopieren. Wie geht dies am einfachsten?
IDirect3DSurface9* pBackBuffer;
D3DSURFACE_DESC Desc;
D3DLOCKED_RECT LockedRect;
if(FAILED((*pDirect3DDevice)->CreateOffscreenPlainSurface(PresentParameters.BackBufferWidth,
PresentParameters.BackBufferHeight,
PresentParameters.BackBufferFormat,
D3DPOOL_SYSTEMMEM,//D3DPOOL_SCRATCH
&pBackBuffer,
NULL)) ||
FAILED((*pDirect3DDevice)->GetRenderTarget(0,&pBackBuffer)) ||
FAILED(pBackBuffer->GetDesc(&Desc)))
{
#ifdef _DEBUG
DebugBreak();
#endif
ExitProcess(-1);
}
IDirect3DSurface9* pBackBufferCopy=pBackBuffer;
if(FAILED(pBackBufferCopy->LockRect(&LockedRect,NULL,D3DLOCK_READONLY)))
{
#ifdef _DEBUG
DebugBreak();
#endif
ExitProcess(-1);
}
Dies ist mein bisheriger Ansatz. Leider schlägt aber der LockRect-call mit D3DERR_INVALIDCALL.
Was ist falsch?