window: do proper Cairo device flushing
authorPekka Paalanen <ppaalanen@gmail.com>
Mon, 19 Dec 2011 11:57:59 +0000 (13:57 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 19 Dec 2011 15:50:38 +0000 (10:50 -0500)
The Cairo documentation tells us to always call cairo_device_flush()
before using other rendering APIs on the cairo surface, especially where
the Cairo device shares state with us (that is, EGL and GL state in this
case).

Add a call to cairo_device_flush() into display_acquire_window_surface(),
which the toytoolkit offers for switching to native (GL) rendering.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
clients/window.c

index e8e3508..d06d4aa 100644 (file)
@@ -995,11 +995,6 @@ window_draw_decorations(struct window *window)
        cairo_show_text(cr, window->title);
 
        cairo_destroy(cr);
-
-       /* FIXME: this breakes gears, fix cairo? */
-#if 0 
-       cairo_device_flush (window->display->device);
-#endif
 }
 
 void
@@ -2529,6 +2524,7 @@ display_acquire_window_surface(struct display *display,
        data = cairo_surface_get_user_data(window->cairo_surface,
                                           &surface_data_key);
 
+       cairo_device_flush(device);
        cairo_device_acquire(device);
        if (!eglMakeCurrent(display->dpy, data->surf, data->surf, ctx))
                fprintf(stderr, "failed to make surface current\n");