Hello,

> > I had a look at x.org's sunffb and all they did is to rewrite
> > ffb_accel.c to use XAA and add a hardware-accelerated alpha-blending
> > function ( plus accompanying changes in ffb_driver.c to load
> > relevant modules and a few more or less trivial ones in other files
> > ). Now I have something that works, is fast but for some strange
> > reason all text drawn via XRender has red and blue components
> > swapped. Only text, images are fine. Playing with anti-aliasing
> > parameters seems to change this too, after disabling subpixel
> > hinting newly started apps get it right, until next start of the
> > Xserver... It worked fine with the old code and affects both KDE and
> > GTK apps. The other changes are only reformatting source and
> > renaming of some macros ( XF86* -> XORG* and such ).
> > Any ideas?
> > Looks almost like an un- or misinitialized variable somewhere,
> > defaults to ARGB, gets overwritten when someone changes
> > anti-aliasing parameters and nobody noticed since ARGB is almost
> > always right.
> 
> Looks like an endian bug to me

I've found the bug.
In fbpict.c / fbComposite() calls fbCompositeSolidMask_nx8x8888() when
rendering text. This takes a drawable to provide the font colour as
source, one with the background color as destination and the font as
alpha mask. The problem is that gtk and KDE call this with an RGB
picture as source even when rendering directly to the screen which is
BGR. fbCompositeSolidMask*() doesn't convert the source color to the
destination picture's format - apparently it assumes RGB - which is why
text is drawn in the wrong color. Programs that render always in the
display's native format, like apparently WindowMaker, didn't have the
problem in the first place.

have fun
Michael

Attachment: pgp1QrYCLg58Z.pgp
Description: PGP signature

Attachment: pgplytfgHOonf.pgp
Description: PGP signature

Reply via email to