diff options
author | Brian Paul <[email protected]> | 2009-05-01 12:28:57 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-05-01 12:54:20 -0600 |
commit | b57b6c2d2c83aee96f945ce3385a1ab8337335cb (patch) | |
tree | 0eb263b8246bc70c85ab6a847614a9db99ceedf0 | |
parent | 3f52a853f795d7432b181de81da6f0c4cf1cc202 (diff) |
xlib winsys: use new st_swapbuffers() function
The front/back buffer pointers are truly swapped (when there is an actual
front buffer).
This fixes some issues seen with apps/tests that draw to both the front
and back color buffers. The true swap allows us to avoid the (potentially)
slow surface_copy() call in update_framebuffer_state() and is cleaner
overall.
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/xm_api.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c index a3d16516531..79c2230588f 100644 --- a/src/gallium/state_trackers/glx/xlib/xm_api.c +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c @@ -1100,26 +1100,19 @@ XMesaContext XMesaGetCurrentContext( void ) - - - -/* - * Copy the back buffer to the front buffer. If there's no back buffer - * this is a no-op. +/** + * Swap front and back color buffers and have winsys display front buffer. + * If there's no front color buffer no swap actually occurs. */ PUBLIC void XMesaSwapBuffers( XMesaBuffer b ) { - struct pipe_surface *surf; + struct pipe_surface *frontLeftSurf; - /* If we're swapping the buffer associated with the current context - * we have to flush any pending rendering commands first. - */ - st_notify_swapbuffers(b->stfb); + st_swapbuffers(b->stfb, &frontLeftSurf, NULL); - st_get_framebuffer_surface(b->stfb, ST_SURFACE_BACK_LEFT, &surf); - if (surf) { - driver.display_surface(b, surf); + if (frontLeftSurf) { + driver.display_surface(b, frontLeftSurf); } xmesa_check_and_update_buffer_size(NULL, b); |