[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    X11DRV_PALETTE_ToPhysical
From:       Andreas Mohr <a.mohr () mailto ! de>
Date:       2000-09-28 14:17:27
[Download RAW message or body]

Hi all,

I just saw in a relay trace that we have a really ugly "feature":
Call gdi32.441: SetDIBits(0000f51e,0000f536,00000000,000000b0,403b5df8,403b599c,00000000) \
ret=10025877 fs=008f trace:gdi:GDI_GetObjPtr (f51e): enter 1
trace:gdi:GDI_GetObjPtr (f536): enter 2
err:bitmap:X11DRV_DIB_BuildColorMap #1
trace:gdi:GDI_GetObjPtr (ffef): enter 3
trace:gdi:GDI_ReleaseObj (ffef): leave 3
err:bitmap:X11DRV_DIB_BuildColorMap #1
trace:gdi:GDI_GetObjPtr (ffef): enter 3
trace:gdi:GDI_ReleaseObj (ffef): leave 3
err:bitmap:X11DRV_DIB_BuildColorMap #1
trace:gdi:GDI_GetObjPtr (ffef): enter 3
trace:gdi:GDI_ReleaseObj (ffef): leave 3
err:bitmap:X11DRV_DIB_BuildColorMap #1
trace:gdi:GDI_GetObjPtr (ffef): enter 3
trace:gdi:GDI_ReleaseObj (ffef): leave 3
err:bitmap:X11DRV_DIB_BuildColorMap #1
trace:gdi:GDI_GetObjPtr (ffef): enter 3
trace:gdi:GDI_ReleaseObj (ffef): leave 3
.
.
.

(and so on until all colors are done)

This is kind of awful IMO.

GDI_GetObjPtr isn't that easy.
This is lots of CPU cycles wasted in these loops here:
                for (i = 0; i < colors; i++, rgb++)
                    colorMapping[i] = X11DRV_PALETTE_ToPhysical( dc, RGB(rgb->rgbRed,
                                                                rgb->rgbGreen,
                                                                rgb->rgbBlue));

(X11DRV_DIB_BuildColorMap(); colors often goes up to 256)

Why does X11DRV_PALETTE_ToPhysical() take a DC as parameter ?
It only uses dc->w.hPalette and dc->w.bitsPerPixel anyway.
So why not call it with a "locked" palPtr anyway ?
That way you'd avoid these tons of GetObjPtr, ReleaseObj...

Comments ?

Should I change it ?

Andreas Mohr


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic