<span style="color:rgb(0,51,0)">Chris, thanks for you reply. I clearly understand now the distinction between images and X Drawables.</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">So, to summarise, could you please confirm that my following GTK/Cairo interface functions correctly and always use the XServer:</span><br style="color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">1. In my expose_event function I do:</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="font-family:courier new,monospace;color:rgb(0,51,0)">maincanvas_drawable = GTK_LAYOUT(maincanvas)->bin_window; // drawable layout window //</span><br style="font-family:courier new,monospace;color:rgb(0,51,0)">
<span style="font-family:courier new,monospace;color:rgb(0,51,0)">maincanvas_cs = gdk_cairo_create(maincanvas_drawable); // corresponding cairo state//</span><br style="font-family:courier new,monospace;color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">to get the Cairo State maincanvas_cs</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">2. Next, I draw to maincanvas_cs:</span><br style="color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">...</span><br style="color:rgb(0,51,0)"><span style="font-family:courier new,monospace;color:rgb(0,51,0)">cairo_paint(maincanvas_cs);</span><br style="color:rgb(0,51,0)">
<span style="color:rgb(0,51,0)">...</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">or</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">3.  I create a similar surface and draw to that, for double-buffering, like this: </span><br style="color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="font-family:courier new,monospace;color:rgb(0,51,0)">parent_sf = cairo_get_target(maincanvas_cs); // get parent surface //</span><br style="font-family:courier new,monospace;color:rgb(0,51,0)">
<span style="font-family:courier new,monospace;color:rgb(0,51,0)">drawbuffer_sf = cairo_surface_create_similar(parent_sf, CAIRO_CONTENT_COLOR_ALPHA, maincanvasWidth, maincanvasHeight);</span><br style="font-family:courier new,monospace;color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">All of the above exploit the GPU, correct?</span><br style="color:rgb(0,51,0)"><br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">Thanks for your time and help!</span><br style="color:rgb(0,51,0)">
<br style="color:rgb(0,51,0)"><span style="color:rgb(0,51,0)">Christos.</span><br><br><div class="gmail_quote">On 10 October 2012 12:08, Chris Wilson <span dir="ltr"><<a href="mailto:chris@chris-wilson.co.uk" target="_blank">chris@chris-wilson.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, 10 Oct 2012 09:20:40 +0300, Christos Sotiriou <<a href="mailto:csotiriou@gmail.com">csotiriou@gmail.com</a>> wrote:<br>

> Dear Chris, Dear Cairo Developers/Users,<br>
><br>
</div>> I had a few more questions regarding my older post, *i.e.* being able to<br>
<div class="im">> draw millions of small rectangles on a Cairo surface provided by GTK/GDK.<br>
><br>
> Chris Wilson was kind enough to explain that my Cairo drawing is slow as I<br>
> use a non-integer, non-uniform scaling factor, and has improved the Cairo<br>
> code for new releases; however, I am stuck with the older Cairo version<br>
> which I mention in my older email (for O/S compatibility), so I am back to<br>
> probing this issue further, as I really need to speed up zoom-in/zoom-out<br>
> for my rectangles.<br>
><br>
> My two questions are the following:<br>
><br>
</div>>    1. Does Cairo *always use or not use* 2D Hardware Rendering? How can<br>
<div class="im">>    this be enabled or verified using Cairo code? If not, where can I find a<br>
>    Cairo code snippet which enables X acceleration?<br>
<br>
</div>If you pass cairo an X Drawable, it will use XRender to draw to it.<br>
If you pass cairo an image buffer, it will render directly to it using<br>
the CPU.<br>
<br>
>    2. As I mention in a prior message I used two methods for<br>
<div class="im">>    "double-buffering", drawing to an image surface OR drawing to a similar<br>
>    surface (cairo_surface_create_similar). Funnily enough, the latter was<br>
>    faster. Is there a reason for this? It seems mysterious...<br>
<br>
</div>Using image requires doing all the rasterisation locally and transferring<br>
the final result using PutImage. Using the similar surface, and you will<br>
offload the rasterisation to the X server, which may in turn use the GPU<br>
to accelerate the operations.<br>
<br>
>    3. Related to my first question, I tried to use Cairo/X interaction to<br>
>    verify if this would improve drawing, *i.e.* if I used an Xlib surface.<br>
<div class="im">>    I used the following code:<br>
><br>
>     xdisplay = gdk_x11_drawable_get_xdisplay(maincanvas_drawable);<br>
>     xid = gdk_x11_drawable_get_xid(maincanvas_drawable);<br>
>     visual =<br>
>    gdk_x11_visual_get_xvisual(gtk_widget_get_visual(GTK_WIDGET(maincanvas)));<br>
><br>
>     maincanvas_sf = cairo_xlib_surface_create(xdisplay, xid, visual,<br>
>    maincanvasWidth, maincanvasHeight);<br>
>     maincanvas_cs = cairo_create(maincanvas_sf);<br>
><br>
>    However, drawing to the Xlib surface did not help either (actually made<br>
>    matters worse, as GDK/GTK interaction with scrollbars stopped working). So,<br>
>    coming back to my first question, how can I guarantee 2D acceleration and<br>
>    why is an Xlib surface not helping? How can an Xlib surface be used<br>
>    properly?<br>
<br>
</div>In your expose event, you want to call<br>
  cr = gdk_cairo_create(gtk_widget_get_window(widget))<br>
to integrate your drawing into the GTK+ model.<br>
<div class="HOEnZb"><div class="h5">-Chris<br>
<br>
--<br>
Chris Wilson, Intel Open Source Technology Centre<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--------------------------------------------------------------------------<br>Christos P. Sotiriou<br>email: <a href="mailto:csotiriou@gmail.com">csotiriou@gmail.com</a><br>
Cell: +30 697 8984 222<br>