--- a/src/drivers/gl_fbo.c Fri Mar 02 23:49:10 2012 +1000 +++ b/src/drivers/gl_fbo.c Sat Mar 03 16:11:28 2012 +1000 @@ -59,6 +59,7 @@ }; static GLint gl_fbo_max_attachments = 0; +static GLint gl_fbo_depth_component; static gboolean gl_fbo_have_packed_stencil = FALSE; static struct gl_fbo_info fbo[MAX_FRAMEBUFFERS]; @@ -103,6 +104,11 @@ gl_fbo_have_packed_stencil = FALSE; WARN( "Packed depth stencil not available - disabling shadow volumes" ); } + if( driver->capabilities.depth_bits >= 24 ) { + gl_fbo_depth_component = GL_DEPTH_COMPONENT24; + } else { + gl_fbo_depth_component = GL_DEPTH_COMPONENT16; + } driver->create_render_buffer = gl_fbo_create_render_buffer; driver->destroy_render_buffer = gl_fbo_destroy_render_buffer; @@ -151,7 +157,7 @@ GL_RENDERBUFFER, fbo[bufno].depth_id); } else { glBindRenderbuffer(GL_RENDERBUFFER, fbo[bufno].depth_id); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); + glRenderbufferStorage(GL_RENDERBUFFER, gl_fbo_depth_component, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, fbo[bufno].depth_id); /* In theory you could attach a separate stencil buffer. In practice this @@ -331,6 +337,8 @@ { gl_fbo_detach(); gl_display_render_buffer( buffer ); + if( display_driver->swap_buffers ) + display_driver->swap_buffers(); } static void gl_fbo_load_frame_buffer( frame_buffer_t frame, render_buffer_t buffer ) @@ -343,6 +351,8 @@ { gl_fbo_detach(); gl_display_blank( colour ); + if( display_driver->swap_buffers ) + display_driver->swap_buffers(); } void gl_fbo_detach() @@ -353,8 +363,6 @@ glDrawBuffer( GL_FRONT ); glReadBuffer( GL_FRONT ); #endif - if( display_driver->swap_buffers ) - display_driver->swap_buffers(); } static gboolean gl_fbo_read_render_buffer( unsigned char *target, render_buffer_t buffer,