[cairo] GTK+, Cairo, XLib integration for fast 2D graphics drawing

Christos Sotiriou csotiriou at gmail.com
Sun Mar 18 21:57:19 PDT 2012

Thanks for your email, and the link. It is very useful.

One thought that springs in mind is to modify my application to work at the
pixel level, rather than the vector level, *i.e.* using GdkPixbuf or
drawing, instead of the GTK/Cairo interface, and that may well resolve the
speed issue.

However, I found the Cairo API as very convenient, due to the universal way
it handles multiple image back-ends, and would be interested to understand
why it is slow, as it claims to use the X render extention (does it
indeed?) and how to speed my application up.

On 18 March 2012 23:15, Dov Grobgeld <dov.grobgeld at gmail.com> wrote:

> For software rendering I have found agg to be much faster than cairo (at
> least it was when I tested a few years back, things may have changed since
> then).
> Also you may consider using my GtkViewerWidget for zooming and scrolling.
> There are examples including how to use it with both cairo and agg at:
> http://giv.sourceforge.net/gtk-image-viewer/gtkimageviewer_tutorial.html
> Regards,
> Dov
> On Sun, Mar 18, 2012 at 17:37, Christos Sotiriou <csotiriou at gmail.com>wrote:
>> Hello all,
>> I have a serious 2D drawing performance problem with GTK+ and Cairo on a
>> GTK+ linux app. I suspect that my implementation does not use any Xlib or
>> other 2D acceleration (is it supported by GTK/Cairo?).
>> I was wondering if you could help me.
>> My GTK+ application is based around a main application window is used for
>> drawing a very large number of drawables (>100K) (mainly rectangles) on a
>> map, and should support both scrolling and zooming in and out.
>> I have implemented this main window as a scrolled window, i.e.
>> GtkScrolledWindow (http://developer.gnome.org/gtk3/stable/ ... indow.html<http://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html>),
>> containing a GtkLayout (
>> http://developer.gnome.org/gtk3/stable/GtkLayout.html).
>> The GtkLayout is drawn upon using the cairo context provided by function
>> gdk_cairo_create() on the GTK_LAYOUT()->bin_window. I hope this is making
>> sense.
>> My problem is that drawing is too, too slow when drawing >100K
>> rectangles. I have tried double buffering in two ways (a) by using a cairo
>> image surface, drawing upon it and then copying the pattern to my drawing
>> context, and (b) by using cairo's surface_create_similar() function, which
>> supposedly uses X.
>> I have found that drawing is simply toooooo slow, every which way.
>> What am I doing wrong? How can I use cairo's Xlib capability without
>> explicitly creating an Xlib surface?
>> Any help is very much appreciated.
Christos P. Sotiriou
email: csotiriou at gmail.com
Cell: +30 697 8984 222
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20120319/3d5d21ad/attachment.htm>

More information about the cairo mailing list