[Render] Howto avoid black rect outside of the drawable when compositing?

Owen Taylor otaylor at redhat.com
Wed Jul 16 06:39:22 PDT 2008


On Tue, 2008-07-15 at 21:05 -0700, Pierre-Loup Griffais wrote:
> On Tuesday 15 July 2008 20:29:34 Soeren Sandmann wrote:
> > > None of those allow you to do what you want; you'll need to use a mask
> > > with the same transformation as your source Picture.
> >
> > RepeatNone should result in pixels outside the window being treated as
> > transparent. If it doesn't, then that's a bug.
> 
> In practice, the extents of a Composite operations are clipped upstream to the 
> size of the Src if the repeatType is None, which results in apparent 
> transparency outside the Picture bounds.

If that happen, it's a bug. Src should affect the complete rectangle
passed in to the composite operation. (I think you are right that the
original problem that Clemens had was not the repeat setting but the
operation.)

I'm pretty sure that this doesn't happen with cairo any more, but it's
conceivable that cairo avoids a particular codepath in pixman/render.

> However, as soon as a transformation gets applied the Composite operation 
> doesn't get clipped; as far as I can tell, anything pixman fetches outside 
> the bounds of a RepeatNone Picture is black.
> Are you planning to change pixman to fetch transparent in that case? We 
> implemented our driver to match pixman's current behavior.

[bangs head into wall]

When the implementation doesn't match the spec, the spec wins. Of
course, unless there is a bug in the spec, but then that needs to be
agreed upon and fixed *in the spec*

If you try to implement what you think the current implementation is
doing, then you just subject your users to another round of buginess as
things are fixed elsewhere.

(Pixman of course, does fetch transparent, - it's just that a
transparent source gives you black for operator=Src and an opaque
target.)

- Owen





More information about the xorg mailing list