PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Direct3D backbuffer in Speicher?


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?

transstilben
2008-04-30, 22:18:05
Am einfachsten ist es, den gesammten Backbuffer zu sperren, also etwa:
ddrval = lpDDSBack->Lock(NULL,&ddsDesc,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);