1.1 --- a/src/drivers/gl_fbo.c Tue Oct 26 09:22:22 2010 +1000
1.2 +++ b/src/drivers/gl_fbo.c Thu Apr 07 21:42:55 2011 +1000
1.4 static void gl_fbo_display_render_buffer( render_buffer_t buffer );
1.5 static void gl_fbo_load_frame_buffer( frame_buffer_t frame, render_buffer_t buffer );
1.6 static void gl_fbo_display_blank( uint32_t colour );
1.7 +static gboolean gl_fbo_test_framebuffer( );
1.8 static gboolean gl_fbo_read_render_buffer( unsigned char *target, render_buffer_t buffer, int rowstride, int format );
1.10 extern uint32_t video_width, video_height;
1.12 driver->display_blank = gl_fbo_display_blank;
1.13 driver->read_render_buffer = gl_fbo_read_render_buffer;
1.15 + gl_fbo_test_framebuffer();
1.16 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
1.19 @@ -214,18 +216,27 @@
1.20 glDrawBuffer(ATTACHMENT_POINT(attach));
1.21 glReadBuffer(ATTACHMENT_POINT(attach));
1.23 + return ATTACHMENT_POINT(attach);
1.26 - GLint status = glGetError();
1.27 - if( status != GL_NO_ERROR ) {
1.28 - ERROR( "GL error setting render target (%x)!", status );
1.30 - status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
1.31 +static gboolean gl_fbo_test_framebuffer( )
1.33 + gboolean result = TRUE;
1.34 + glGetError(); /* Clear error state just in case */
1.35 + render_buffer_t buffer = gl_fbo_create_render_buffer( 640, 480, 0 );
1.36 + gl_fbo_set_render_target(buffer);
1.38 + GLint status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
1.39 if( status != GL_FRAMEBUFFER_COMPLETE_EXT ) {
1.40 ERROR( "Framebuffer failure: %x", status );
1.45 + result = gl_check_error( "Setting up framebuffer" );
1.48 - return ATTACHMENT_POINT(attach);
1.49 + gl_fbo_destroy_render_buffer( buffer );
1.53 static render_buffer_t gl_fbo_create_render_buffer( uint32_t width, uint32_t height, GLuint tex_id )
1.56 static gboolean gl_fbo_set_render_target( render_buffer_t buffer )
1.59 int fb = gl_fbo_get_framebuffer( buffer->width, buffer->height );
1.60 gl_fbo_attach_texture( fb, buffer->buf_id );
1.61 /* setup the gl context */
1.63 static void gl_fbo_finish_render( render_buffer_t buffer )
1.67 gl_fbo_detach_render_buffer(buffer);
1.70 @@ -338,12 +347,12 @@
1.71 /* Make sure texture attachment is not a current draw/read buffer */
1.72 glDrawBuffer( GL_FRONT );
1.73 glReadBuffer( GL_FRONT );
1.74 + display_driver->swap_buffers();
1.77 static gboolean gl_fbo_read_render_buffer( unsigned char *target, render_buffer_t buffer,
1.78 int rowstride, int format )
1.81 int fb = gl_fbo_get_framebuffer( buffer->width, buffer->height );
1.82 gl_fbo_attach_texture( fb, buffer->buf_id );
1.83 return gl_read_render_buffer( target, buffer, rowstride, format );