1
是否可以通过DX 9.0c中的像素着色器2.0访问深度缓冲区?我google'd了一下,我发现唯一的解决办法形容GPU黑客工具,只能在GeForce 6 & 7.如何访问DirectX 9.0像素着色器中的深度缓冲区c
我想实现是写场着色效果深度。我不能简单地抓住顶点的Z坐标,因为我也在渲染纹理技巧,用于其他后期处理。
编辑:
我已经试过这样:
D3DXCreateTexture(lpD3Dev9, width, height, 1, D3DUSAGE_DEPTHSTENCIL, D3DFMT_D24S8, D3DPOOL_DEFAULT, &lpD3DepthBuffer);
lpD3DepthBuffer->GetSurfaceLevel(0,&lpNewDepthBuffer);
lpD3Dev9->GetDepthStencilSurface(&lpPrevDepthBuffer);
lpD3Dev9->SetDepthStencilSurface(lpNewDepthBuffer);
lpD3Dev9->BeginScene();
// Rendering...
lpD3Dev9->EndScene();
lpD3Dev9->SetDepthStencilSurface(lpPrevDepthBuffer);
// this function fails:
D3DXSaveTextureToFile("C:\backBuffer.png", D3DXIFF_PNG, lpD3DepthBuffer, NULL);
lpD3Dev9->BeginScene();
UINT passes;
D3DXHANDLE tech;
lpD3DXfxScreen->FindNextValidTechnique(0, &tech);
lpD3DXfxScreen->SetTechnique(tech);
lpD3DXfxScreen->Begin(&passes,0);
lpD3DXfxScreen->SetTexture("texDepth", lpD3DepthBuffer);
// render shader...
SaveTextureToFile失败,并且着色得到质地是纯白色的RGB(1,1,1)