[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