[cairo] cairo internal design ideas

David Reveman c99drn at cs.umu.se
Thu Sep 23 17:26:46 PDT 2004


On Thu, 2004-09-23 at 12:29 -0700, Bill Spitzak wrote: 
> On Wednesday 22 September 2004 08:41 pm, David Reveman wrote:
> > A better solution would be to do the clipping in software and just send
> > one set of trapezoid primitives to hardware. So how do we do this? Well,
> > to me, the tessellator is basically doing clipping. If we could get the
> > tessellator to do all clipping (we send it a drawing path and a clipping
> > path and it returns one set of trapezoids) that would be perfect. Do you
> > think this is possible?
> 
> I wish, I suggested this a long time ago. Unfortunatly the set of compositing 
> operators include ones which modify outside the path, so you cannot reduce 
> the clip+path to a single path.
> 
> My suggestion was:
> 
> 1. get rid of all operators that can modify a pixel outside the path (or when 
> the alpha is zero in a source pattern).
> 
> 2. Add a "invert path" operator that makes the "interior" of the path be 
> everything outside it, rather than inside it.
> 
> The purpose is so that the backend can think about a single alpha channel 
> rather than two, thus removing one term from all the compositing functions. 
> It would also allow path+clip to be turned into a single path.
> 
> Maybe it should be brought up again. I serioulsly doubt any actual 
> application needs the Porter-Duff compositing operators that modify the 
> outside area, and besides you can emulate those with the invert-path (full 
> emulation also requires inverting a source image's alpha, but I suspect it is 
> not needed).
> 
> Invert-path is also vital in order to "clip out" a shape, which is currenlty 
> impossible in the current Cairo scheme.

Good suggestion. I'd like to see something like this.

I think that having all backends being able to support drawing of paths
with operators that modify outside the path will be hard. This would be
a good solution.
 
-David




More information about the cairo mailing list