<html>
<body>
  <div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream/src</tt></b></td></tr>
<tr><td><tt><a href="#file1">display.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+5</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr class="alt" style=";" ><td><tt>drivers/<a href="#file2">gl_fbo.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-2</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr><td><tt>       /<a href="#file3">video_gl.c</a></tt></td><td></td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr class="alt" style=";" ><td><tt>       /<a href="#file4">video_glx.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+4</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-2</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr><td><tt>       /<a href="#file5">video_gtk.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+3</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-3</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr class="alt" style=";" ><td><tt>       /<a href="#file6">video_nsgl.m</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+5</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr><td><tt>       /<a href="#file7">video_osx.m</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr class="alt" style=";" ><td><tt>pvr2/<a href="#file8">pvr2.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+25</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-18</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr><td><tt>    /<a href="#file9">pvr2.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+8</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">1a21750d300c -> 18c164e8aec4</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+52</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-28</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >9 modified files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
Rearrange frame output slightly.
  pvr2_display_frame renamed to pvr2_next_frame and changed to update the
    frame data without displaying it.
  pvr2_redraw_display renamed to pvr2_draw_frame, called internally after
    pvr2_next_frame
  Add swap_buffers() method to the display driver
  Remove explicit glDrawBuffer() calls where they're referencing the window.
    pvr2_draw_frame now gets to decide where to draw.
  Add force_vsync flag to force double-buffering (not configurable yet)
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>display.h</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/display.h
+++ lxdream/src/display.h
@@ -194,6 +194,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     void (*display_blank)( uint32_t rgb );
 
     /**
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     * Swap front/back window buffers
+     */
+    void (*swap_buffers)();
+
+    /**
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      * Copy the image data from the GL buffer to the target memory buffer,
      * using the format etc from the buffer. This may force a glFinish()
      * but does not invalidate the buffer.
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gl_fbo.c</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/gl_fbo.c
+++ lxdream/src/drivers/gl_fbo.c
@@ -113,8 +113,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     driver->read_render_buffer = gl_fbo_read_render_buffer;
 
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    glDrawBuffer(GL_FRONT);
-    glReadBuffer(GL_FRONT);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void gl_fbo_shutdown()
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -341,6 +339,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void gl_fbo_detach()
 {
     glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    /* Make sure texture attachment is not a current draw/read buffer */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     glDrawBuffer( GL_FRONT );
     glReadBuffer( GL_FRONT );
 }    
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>video_gl.c</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/video_gl.c
+++ lxdream/src/drivers/video_gl.c
@@ -43,7 +43,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     glDisable( GL_DEPTH_TEST );
     glDisable( GL_SCISSOR_TEST );
     glDisable( GL_CULL_FACE );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    glDrawBuffer( GL_FRONT );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void gl_display_render_buffer( render_buffer_t buffer )
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>video_glx.c</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/video_glx.c
+++ lxdream/src/drivers/video_glx.c
@@ -42,6 +42,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static gboolean glx_pbuffer_supported = FALSE;
 static GLuint glx_pbuffer_texture = 0; 
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+static void video_glx_swap_buffers( void );
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > /* Prototypes for pbuffer support methods */
 static void glx_pbuffer_init( display_driver_t driver );
 static render_buffer_t glx_pbuffer_create_render_buffer( uint32_t width, uint32_t height, GLuint tex_id );
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -207,6 +209,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 gboolean video_glx_init_driver( display_driver_t driver )
 {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    driver->swap_buffers = video_glx_swap_buffers;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     if( gl_fbo_is_supported() ) { // First preference
         gl_fbo_init(driver);
     } else if( glx_pbuffer_supported ) {
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -255,7 +258,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void video_glx_swap_buffers( void )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >static </span>void video_glx_swap_buffers( void )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     glXSwapBuffers( video_x11_display, video_x11_window );
 }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -353,7 +356,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     glFinish();
     glReadBuffer( GL_FRONT );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    glDrawBuffer( GL_FRONT );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     glXMakeContextCurrent( video_x11_display, (GLXPbuffer)buffer->buf_id, (GLXPbuffer)buffer->buf_id, glx_context );
     glBindTexture( GL_TEXTURE_RECTANGLE_ARB, glx_pbuffer_texture );
     glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 0, 0, buffer->width, buffer->height, 0 );
</pre></div>
<hr /><a name="file5" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>video_gtk.c</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/video_gtk.c
+++ lxdream/src/drivers/video_gtk.c
@@ -136,11 +136,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         video_gtk_keycode_to_dckeysym,
         video_gtk_keycode_to_keysym,
         NULL, NULL, NULL, NULL, NULL, NULL, 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        video_gtk_display_blank, NULL };
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        video_gtk_display_blank, NULL<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >, NULL</span> };
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 gboolean video_gtk_expose_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data )
 {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    pvr2_redraw_display();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    pvr2_draw_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     return TRUE;
 }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -148,7 +148,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     video_width = event->width;
     video_height = event->height;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    pvr2_redraw_display();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    pvr2_draw_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     return TRUE;
 }
 
</pre></div>
<hr /><a name="file6" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>video_nsgl.m</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/video_nsgl.m
+++ lxdream/src/drivers/video_nsgl.m
@@ -40,9 +40,14 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     [nsgl_context setView: view];
     [nsgl_context makeCurrentContext];
     [pool release];
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    driver->swap_buffers = video_nsgl_swap_buffers;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     if( gl_fbo_is_supported() ) {
         gl_fbo_init(driver);
     } else {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        /* Note there is a 'native' buffer framework, but since all current
+         * Apple drivers appear to support FBO, there's not much point in
+         * doing the work to support them.
+         */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         ERROR( "FBO not supported" );
         return FALSE;
     }
</pre></div>
<hr /><a name="file7" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/drivers</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>video_osx.m</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/drivers/video_osx.m
+++ lxdream/src/drivers/video_osx.m
@@ -126,7 +126,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         video_height = size.height;
         video_nsgl_update();
     }
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    pvr2_redraw_display();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    pvr2_draw_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 - (void)keyDown: (NSEvent *) event
 {
</pre></div>
<hr /><a name="file8" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/pvr2</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>pvr2.c</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/pvr2/pvr2.c
+++ lxdream/src/pvr2/pvr2.c
@@ -47,9 +47,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static render_buffer_t pvr2_next_render_buffer( );
 static render_buffer_t pvr2_frame_buffer_to_render_buffer( frame_buffer_t frame );
 uint32_t pvr2_get_sync_status();
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-
-void pvr2_display_frame( void );
-
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+static gboolean force_vsync = FALSE;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static int output_colour_formats[] = { COLFMT_BGRA1555, COLFMT_RGB565, COLFMT_BGR888, COLFMT_BGRA8888 };
 static int render_colour_formats[8] = {
         COLFMT_BGRA1555, COLFMT_RGB565, COLFMT_BGRA4444, COLFMT_BGRA1555,
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -341,7 +339,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >             (old_line_count < pvr2_state.retrace_end_line ||
                     old_line_count > pvr2_state.line_count) ) {
         pvr2_state.frame_count++;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        pvr2_<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >display</span>_frame();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        pvr2_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >next</span>_frame();
+        pvr2_draw_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
 }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -357,13 +356,28 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     return pvr2_state.frame_count;
 }
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void pvr2_redraw_display()
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Draw the base (emulated) frame only.
+ */
+static void pvr2_draw_base_frame()
+{
+    if( displayed_render_buffer == NULL ) {
+        display_driver->display_blank(displayed_border_colour);
+    } else {
+        display_driver->display_render_buffer(displayed_render_buffer);
+    }
+}
+
+void pvr2_draw_frame()
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     if( display_driver != NULL ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        if( displayed_render_buffer == NULL ) {
-            display_driver->display_blank(displayed_border_colour);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        if( force_vsync ) {
+            glDrawBuffer( GL_BACK );
+            pvr2_draw_base_frame();
+            display_driver->swap_buffers();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         } else {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-            display_driver->display_render_buffer(displayed_render_buffer);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            glDrawBuffer( GL_FRONT );
+            pvr2_draw_base_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         }
     }
 }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -380,28 +394,24 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 
 /**
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- * <span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >Display</span> the next frame, copying the current contents of video ram to
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ * <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >Advance to</span> the next frame, copying the current contents of video ram to
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >  * the window. If the video configuration has changed, first recompute the
  * new frame size/depth.
  */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void pvr2_<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >display</span>_frame( void )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void pvr2_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >next</span>_frame( void )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     int dispmode = MMIO_READ( PVR2, DISP_MODE );
     int vidcfg = MMIO_READ( PVR2, DISP_SYNCCFG );
     gboolean bEnabled = (dispmode & DISPMODE_ENABLE) && (vidcfg & DISPCFG_VO ) ? TRUE : FALSE;
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    if( display_driver == NULL ) {
-        return; /* can't really do anything much */
-    } else if( !bEnabled ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    if( !bEnabled ) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         /* Output disabled == black */
         displayed_render_buffer = NULL;
         displayed_border_colour = 0;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        display_driver->display_blank( 0 ); 
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     } else if( MMIO_READ( PVR2, DISP_CFG2 ) & 0x08 ) { 
         /* Enabled but blanked - border colour */
         displayed_border_colour = MMIO_READ( PVR2, DISP_BORDER );
         displayed_render_buffer = NULL;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        display_driver->display_blank( displayed_border_colour );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     } else {
         /* Real output - determine dimensions etc */
         struct frame_buffer fbuf;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -448,9 +458,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >             rbuf = pvr2_frame_buffer_to_render_buffer( &fbuf );
         }
         displayed_render_buffer = rbuf;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        if( rbuf != NULL ) {
-            display_driver->display_render_buffer( rbuf );
-        }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
 }
 
</pre></div>
<hr /><a name="file9" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/pvr2</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>pvr2.h</b></big> <small id="info" style="color: #888888;" >1a21750d300c -> 18c164e8aec4</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/pvr2/pvr2.h
+++ lxdream/src/pvr2/pvr2.h
@@ -71,10 +71,17 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #define RENDER_CHEAPMOD 2   /* Render cheap-modified polygons */
 #define RENDER_FULLMOD 3    /* Render the fully-modified version of the polygons */
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Advance to the next frame
+ */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void pvr2_next_frame( void );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+
+/**
+ * Draw the current frame on the output window.
+ */
+void pvr2_draw_frame();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void pvr2_set_base_address( uint32_t );
 int pvr2_get_frame_count( void );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void pvr2_redraw_display();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > gboolean pvr2_save_next_scene( const gchar *filename );
 
 #define PVR2_CMD_END_OF_LIST 0x00
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>