On Thu, 06 Dec 2007 09:44:55 +0100, Denis Oliver Kropp wrote: > Carl Worth wrote: > > For interleaving cairo and non-cairo rendering, cairo provides the > > cairo_surface_flush and cairo_surface_mark_dirty APIs. Does > > cairo-directfb implement those and does your application use them. > > Thanks for the pointer. The cairo-directfb backend seems to do nothing > in these functions. I'm not sure what it's supposed to do. Should the > first accumulate a region to flip and the second actually flips? I don't know how cairo-directfb surface is implemented exactly. So I'll describe the general concepts and then illustrate them by way of a fictitious "shadow" backend that is implemented with a cairo-image-surface internally and can copy back and forth between that and some underlying "system" object. When an application wants to switch from cairo- to non-cairo-based drawing it should call cairo_surface_flush. In this case, our shadow backend would copy its state from the image surface to the underlying system. (Ideally it would copy a minimal region based on the extents of cairo drawing operations that have occurred, but cairo's current backend interfaces don't make it easy to know this. But there would be no API impact from improving that.) Then, when an application wants to switch back from non-cairo- to cairo-based drawing it should call cairo_surface_mark_dirty_rectangle one or more times. Our shadow backend would accumulate a region from these rectangles and before the next cairo drawing operation would copy that region from the system to the image surface. Does that make sense? -Carl
Attachment:
pgp4DenKYghsN.pgp
Description: PGP signature