Search
lxdream.org :: lxdream/src/drivers/gl_fbo.c :: diff
lxdream 0.9.1
released Jun 29
Download Now
filename src/drivers/gl_fbo.c
changeset 1166:f405d42a9786
prev1141:dc60a0987db9
next1210:79bbd30363f4
author Nathan Keynes <nkeynes@lxdream.org>
date Thu Apr 07 21:42:55 2011 +1000 (13 years ago)
permissions -rw-r--r--
last change Add german translation update from Riemann80, thanks!
file annotate diff log raw
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.3 @@ -42,6 +42,7 @@
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.9
1.10 extern uint32_t video_width, video_height;
1.11 @@ -112,6 +113,7 @@
1.12 driver->display_blank = gl_fbo_display_blank;
1.13 driver->read_render_buffer = gl_fbo_read_render_buffer;
1.14
1.15 + gl_fbo_test_framebuffer();
1.16 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
1.17 }
1.18
1.19 @@ -214,18 +216,27 @@
1.20 glDrawBuffer(ATTACHMENT_POINT(attach));
1.21 glReadBuffer(ATTACHMENT_POINT(attach));
1.22
1.23 + return ATTACHMENT_POINT(attach);
1.24 +}
1.25
1.26 - GLint status = glGetError();
1.27 - if( status != GL_NO_ERROR ) {
1.28 - ERROR( "GL error setting render target (%x)!", status );
1.29 - }
1.30 - status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
1.31 +static gboolean gl_fbo_test_framebuffer( )
1.32 +{
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.37 +
1.38 + GLint status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
1.39 if( status != GL_FRAMEBUFFER_COMPLETE_EXT ) {
1.40 ERROR( "Framebuffer failure: %x", status );
1.41 - exit(1);
1.42 + result = FALSE;
1.43 + }
1.44 + if( result ) {
1.45 + result = gl_check_error( "Setting up framebuffer" );
1.46 }
1.47
1.48 - return ATTACHMENT_POINT(attach);
1.49 + gl_fbo_destroy_render_buffer( buffer );
1.50 + return result;
1.51 }
1.52
1.53 static render_buffer_t gl_fbo_create_render_buffer( uint32_t width, uint32_t height, GLuint tex_id )
1.54 @@ -294,7 +305,6 @@
1.55
1.56 static gboolean gl_fbo_set_render_target( render_buffer_t buffer )
1.57 {
1.58 - glGetError();
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.62 @@ -306,7 +316,6 @@
1.63 static void gl_fbo_finish_render( render_buffer_t buffer )
1.64 {
1.65 glFinish();
1.66 - glGetError();
1.67 gl_fbo_detach_render_buffer(buffer);
1.68 }
1.69
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.75 }
1.76
1.77 static gboolean gl_fbo_read_render_buffer( unsigned char *target, render_buffer_t buffer,
1.78 int rowstride, int format )
1.79 {
1.80 - glGetError();
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 );
.