xrender issue
Hans-Peter Budek
peter.budek at gmx.de
Fri Nov 4 07:11:28 PDT 2011
Chris Wilson wrote:
>
> Do you mind describing you use-case for alphamaps and could you create a
> little benchmark for your workload?
> -Chris
>
I´am programming a animated crossfade from one window to another.
Both windows are not created by my application. The content
of both windows is previously stored in a ARGB32 picture
(without a usable alpha channel). To apply an alpha channel, I use:
uint16_t v = a->Fade * 600 ;
XRenderColor Fade = {.red = v, .green = v, .blue = v, .alpha = v} ;
Pixmap Map = XCreatePixmap(s->Dpy, f->Win, 1, 1, 8) ;
XRenderPictFormat *Format8 = XRenderFindStandardFormat(s->Dpy, PictStandardA8) ;
XRenderPictureAttributes Rep = {.repeat = RepeatNormal,
.subwindow_mode = IncludeInferiors} ;
Picture Alpha = XRenderCreatePicture(s->Dpy, Map, Format8,
CPRepeat, &Rep) ;
Picture Dest = XRenderCreatePicture(s->Dpy, f->Win,
s->RenderFormat,
CPSubwindowMode, &Rep) ;
XRenderPictureAttributes Att = {.alpha_map = Alpha} ;
XRenderFillRectangle(s->Dpy, PictOpSrc, Alpha, &Fade, 0, 0, 1, 1) ;
XRenderChangePicture(s->Dpy, a->OldPic, CPAlphaMap, &Att) ;
XRenderChangePicture(s->Dpy, a->NewPic, CPAlphaMap, &Att) ;
XRenderChangePicture(s->Dpy, Dest, CPAlphaMap, &Att) ;
Rendering to 'Dest' cause the described crash (even PictOpClear).
I tried out 'PictStandardARGB32' alpha maps and maps with the same size
as the windows (no 'RepeatNormal'). But that makes no difference.
Unfortunately a copy of a 'PictStandardA8' picture to a 'PictStandardARGB32'
(via PictOpSrc) does not only modifies the alpha values (it also clears the RGB
values).
Peter
More information about the xorg
mailing list