IDirect3DDevice9::GetRenderTargetData() returns no data
Posted
by
P. Avery
on Game Development
See other posts from Game Development
or by P. Avery
Published on 2013-10-29T06:51:48Z
Indexed on
2013/10/29
10:22 UTC
Read the original article
Hit count: 222
I've got a simple function to get the rendertarget data of an RT( w/default pool ). This particular RT has a resolution of 1x1( it's the 10'th and final mip of a texture ). Here is my code to get data for IDirect3DSurface9 *pTargetSurface:
IDirect3DSurface9 *pSOS = NULL;
pd3dDevice->CreateOffScreenPlainSurface( 1, 1, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &pSOS, NULL );
// get residual energy
if( FAILED( hr = pd3dDevice->GetRenderTargetData( pTargetSurface, pSOS ) ) )
{
DebugStringDX( ClassName, "Failed to IDirect3DDevice9::GetRenderTargetData() at DownsampleArea()", __LINE__, hr );
goto Exit;
}
// lock surface
if( FAILED( hr = pSOS->LockRect( &rct, NULL, D3DLOCK_READONLY ) ) )
{
DebugStringDX( ClassName, "Failed to IDirect3DSurface9::LockRect() at DownsampleArea()", __LINE__, hr );
goto Exit;
}
// get residual energy from downsampled texture
pByte = ( BYTE* )rct.pBits;
D3DXVECTOR4 vEnergy;
vEnergy.z = ( float )pByte[ 0 ] / 255.0f;
vEnergy.y = ( float )pByte[ 1 ] / 255.0f;
vEnergy.x = ( float )pByte[ 2 ] / 255.0f;
vEnergy.w = ( float )pByte[ 3 ] / 255.0f;
V( pSOS->UnlockRect() );
All formatting and settings are correct, directx in debug mode shows no errors... The problem is that the 4 bytes above are 0...I know this to be incorrect by using PIX to debug...PIX shows that RGB bytes are 0.078 and Alpah is 1. These values are not less than that which can be represented by a single byte( 1 / 255 ). Any ideas? Am I copying rendertarget data correctly?
© Game Development or respective owner