XNA - Obtaining depth from the scene's render target?
- by user1423893
I'm currently rendering my scene to a render target so it can be used for rendering methods such as post processing and order independent transparency.
rtScene = new RenderTarget2D(
GraphicsDevice,
GraphicsDevice.PresentationParameters.BackBufferWidth,
GraphicsDevice.PresentationParameters.BackBufferHeight,
false,
SurfaceFormat.Rgba64,
DepthFormat.Depth24Stencil8, // Requires a depth format for objects to be drawn correctly (e.g. wireframe model surrounding model)
0,
RenderTargetUsage.PreserveContents
);
I am required to use RenderTargetUsage.PreserveContents so that the same render target can be rendered to multiple times, once for each of the draw methods below.
DrawBackground
DrawDeferred
DrawForward
DrawTransparent
The problem is that DrawTransparent requires a copy of the scene's depth as a texture.
Is there any way to obtain this from the scene render target above (rtScene)?
I can't have more than one render target with RenderTargetUsage.PreserveContents as this causes problems on hardware such as the XBOX 360, so rendering the depth to a separate render target at the same time as I render the scene isn't possible as far as I can tell.
Would I be able to get around this problem by "Ping-Ponging" two render targets (using the more compatible RenderTargetUsage.DiscardContents) and using the result for the depth texture?