From cfb8fa8b3bca99a6bc59e50ade972a8e1d5a097f Mon Sep 17 00:00:00 2001 From: aignacio_sf <> Date: Thu, 18 Sep 2008 23:00:35 +0000 Subject: [PATCH] Fix a case where there is no depth buffer for a render to texture. --- panda/src/dxgsg9/wdxGraphicsBuffer9.cxx | 27 +++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/panda/src/dxgsg9/wdxGraphicsBuffer9.cxx b/panda/src/dxgsg9/wdxGraphicsBuffer9.cxx index ca4fa722f0..a82c010714 100644 --- a/panda/src/dxgsg9/wdxGraphicsBuffer9.cxx +++ b/panda/src/dxgsg9/wdxGraphicsBuffer9.cxx @@ -186,10 +186,17 @@ save_bitplanes() { dxgsg9_cat.error ( ) << "GetRenderTarget " << D3DERRORSTRING(hr) FL; return false; } + + _saved_depth_buffer = 0; hr = _dxgsg -> _d3d_device -> GetDepthStencilSurface (&_saved_depth_buffer); - if (!SUCCEEDED (hr)) { - dxgsg9_cat.error ( ) << "GetDepthStencilSurface " << D3DERRORSTRING(hr) FL; - return false; + if (hr == D3DERR_NOTFOUND) { + // this case is actually ok + } + else { + if (!SUCCEEDED (hr)) { + dxgsg9_cat.error ( ) << "GetDepthStencilSurface " << D3DERRORSTRING(hr) FL; + return false; + } } return true; } @@ -215,11 +222,13 @@ restore_bitplanes() { if (!SUCCEEDED (hr)) { dxgsg9_cat.error ( ) << "SetRenderTarget " << D3DERRORSTRING(hr) FL; } - hr = _dxgsg -> _d3d_device -> SetDepthStencilSurface (_saved_depth_buffer); - if (!SUCCEEDED (hr)) { - dxgsg9_cat.error ( ) << "SetDepthStencilSurface " << D3DERRORSTRING(hr) FL; + if (_saved_depth_buffer) { + hr = _dxgsg -> _d3d_device -> SetDepthStencilSurface (_saved_depth_buffer); + if (!SUCCEEDED (hr)) { + dxgsg9_cat.error ( ) << "SetDepthStencilSurface " << D3DERRORSTRING(hr) FL; + } } - + // clear all render targets, except for the main render target for (int i = 1; i _d3d_device -> SetRenderTarget (i, NULL); @@ -229,7 +238,9 @@ restore_bitplanes() { } _saved_color_buffer->Release(); - _saved_depth_buffer->Release(); + if (_saved_depth_buffer) { + _saved_depth_buffer->Release(); + } _saved_color_buffer = NULL; _saved_depth_buffer = NULL; }