19,468
社区成员
发帖
与我相关
我的任务
分享
//设置纹理
FAIL_RET( setViewMatrix(d3ddev,camera,zDepth));
FAIL_RET( d3ddev->SetTexture( 0, texture));
FAIL_RET(hr = d3ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE));
FAIL_RET(hr = d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE));
FAIL_RET(hr = d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE));
FAIL_RET(hr = d3ddev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE));
FAIL_RET( d3ddev->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEXSPHERE) ) ); //set next source ( NEW )
FAIL_RET( d3ddev->SetFVF( D3DFVF_CUSTOM ) );
FAIL_RET( d3ddev->SetIndices(g_pIB));
FAIL_RET(d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,0,(g_segments+1)*(1+g_rings),0,2*(g_segments)*g_rings+g_segments-2+g_rings));
FAIL_RET( d3ddev->SetTexture( 0, NULL));
/*关键代码*/
IDirect3DSurface9 * pBackBuffer = NULL;
LPDIRECT3DSURFACE9 surface9 = NULL;
//获取后台缓存
hr = d3ddev->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer);
hr = d3ddev->CreateOffscreenPlainSurface( d3dpp.BackBufferWidth,
d3dpp.BackBufferHeight,
d3dpp.BackBufferFormat,
D3DPOOL_DEFAULT,
&surface9,
NULL);
//以下语句返回 Invaild call
hr = d3ddev->GetRenderTargetData(pBackBuffer, surface9);
D3DLOCKED_RECT Source;
hr = surface9->LockRect(&Source,NULL,0);
/*对Source数据进行自己的操作*/
//操作后的数据 赋值给后台缓存
hr = d3ddev->StretchRect(surface9,NULL,pBackBuffer,NULL,D3DTEXF_NONE);
surface9->UnlockRect();
//绘制
FAIL_RET( d3ddev->BeginScene() );
d3ddev->SetRenderTarget(0,pBackBuffer);
FAIL_RET( d3ddev->EndScene());