[cairo] XDBE
Bill Spitzak
spitzak at d2.com
Tue Nov 22 13:03:46 PST 2005
Adam Jackson wrote:
> Right now very few apps use it, so I guess it works as well as it ever did.
> The demo app seems to work though. The API's a bit overblown, but, welcome
> to X.
>
> Internally it's a fairly decent implementation, it just kicks the buffer swap
> through the current GC's CopyArea call so it should natively take advantage
> of any underlying acceleration.
Having used it quite a bit, I am having no trouble. The only real bug is
that if you resize a window, it sometimes swaps in the black/garbage
from the backing buffer. It should do nothing until the program sends a
swap-buffer command to indicate it has updated the back buffer. I have
found this happens if you try to double-buffer the top-level window that
the window manager sees. But if I make a child window that fills the
top-level one, use double buffer on that, and resize, draw, and swap
that myself without doing XFlush, it works great and you get smooth resizes.
Another possible better fix is that resizes should copy *into* the
backing buffer the current contents of the screen. Then if it
accidentally gets swapped back before the program finishes drawing it,
the user will not see any change in the undrawn areas.
> It could do with some loving though, between
> that, Composite, and the mi backing store layer we end up with as many as
> three backing copies of the front buffer, which isn't what I'd call optimal.
I agree. It would be nice if *all* backing copies went to the same area,
no matter how they are created. Ignore any minor glitches (ie I think
the composite extension could show partially-updated backbuffer, just
try to avoid recompositing except when a program sends the
back-buffer-swap command).
More information about the cairo
mailing list