   How to get the pixel color in surface (RenderTarget)
  I create a rendertarget texture and draw some object in its surface.Now I want to get each pixel color in the surface.But LockRect function always returns -2005530516 (D3DERR_INVALIDCALL).How do I get the pixel color in surface (rendertarget texture)?// setup shadow map objectsV_RETURN(m_pd3dDevice->CreateTexture(SHADOW_RESULT_MAP_SIZE_WIDTH,SHADOW_RESULT_MAP_SIZE_HEIGHT,1, D3DUSAGE_RENDERTARGET,//<====render targetSHADOW_MAP_FORMAT, D3DPOOL_DEFAULT,&m_pShadowMapTex,NULL));V_RETURN(m_pShadowMapTex->GetSurfaceLevel(0, &m_pShadowMapSurf));V_RETURN(m_pd3dDevice->CreateDepthStencilSurface(SHADOW_RESULT_MAP_SIZE_WIDTH,SHADOW_RESULT_MAP_SIZE_HEIGHT, D3DFMT_D24S8,D3DMULTISAMPLE_NONE, 0,TRUE,&m_pShadowMapZ,NULL));//lock surface and get colorD3DLOCKED_RECT lrect;D3DSURFACE_DESC Desc;m_pShadowMapSurf->GetDesc(&Desc);hr=m_pShadowMapSurf->LockRect(&lrect,NULL,D3DLOCK_DONOTWAIT|D3DLOCK_READONLY );//<==hr=-2005530516 D3DERR_INVALIDCALLfor (int y=0;y<Desc.Height;y++){for (int x=0;Desc.Width;x++){float dwColor = ((float*)lrect.pBits)[y*(lrect.Pitch/sizeof(float))+x];//Y*Width+Xint r=(int)(dwColor*255.0f);if (dwColor<0.3f){nPixel++;}}}m_pShadowMapSurf->UnlockRect();
  You can't lock textures created in D3DPOOL_DEFAULT, you have to copy the data to a texture in system memory. See the remarks section of the documentation for IDirect3DTexture9::LockRect for more details.   ;Quote:Original post by MJPYou can't lock textures created in D3DPOOL_DEFAULT, you have to copy the data to a texture in system memory. See the remarks section of the documentation for IDirect3DTexture9::LockRect for more details.Thank you,MJP. Are you the MJP in XNA Create Club?int nPixel=0;D3DLOCKED_RECT lrect;D3DSURFACE_DESC Desc;m_pShadowMapSurf->GetDesc(&Desc);LPDIRECT3DSURFACE9 pDestSurface;m_pd3dDevice->CreateOffscreenPlainSurface(Desc.Width,Desc.Height,Desc.Format,D3DPOOL_SYSTEMMEM,&pDestSurface,NULL);//Must be D3DPOOL_SYSTEMMEM for MSDNm_pd3dDevice->GetRenderTargetData(m_pShadowMapSurf,pDestSurface);hr=pDestSurface->LockRect(&lrect,NULL,D3DLOCK_NO_DIRTY_UPDATE|D3DLOCK_READONLY );for (int y=0;y<Desc.Height;y++){for (int x=0;x<Desc.Width;x++){float dwColor = ((float*)lrect.pBits)[y*(lrect.Pitch/sizeof(float))+x];//Y*Width+Xint r=(int)(dwColor*255.0f);if (dwColor<0.3f){nPixel++;}}}pDestSurface->UnlockRect();SAFE_RELEASE(pDestSurface); [Edited by - akira32 on March 20, 2008 8:29:05 AM];Quote:Original post by akira32Thank you,MVP. Are you the MVP in XNA Create Club?No sir, I am not.  I haven't actually done any work with XNA yet (my past few projects have used straight C++ and Direct3D9), but I've been learning C# in preparation for doing my next project in XNA through the Creators Club.