[OLPC-Games] Weird Cairo ImageSurface issue
Mike C. Fletcher
mcfletch at vrplumber.com
Mon Feb 4 00:51:42 EST 2008
Hi all, looking for some eyes to go over a problem...
Bug report on OLPCGames shows that on 32-bit machines, the svg sprite
rendering code is showing the wrong colours. On 64-bit machines it
shows the correct colours. The process used to render svg is like this:
Create a context with:
csrf = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
context = cairo.Context (csrf)
draw into the context with an rsvg handle, then convert to a Pygame
image like this (just taking the path that the failing instances take):
format = 'ARGB'
data = csrf.get_data()
a = array.array( 'I' )
a.fromstring( data )
data = a.tostring()
) # there's the next
on AMD64 (using Pygame-ctypes due to a bug in regular Pygame), this
produces the correct colours and alpha channel. On 32-bit machines
(which use non-ctypes Pygame) it produces colours that seem to have the
A -> G
R -> B
G -> A
B -> R
applied to them, that is, shifted by 16 bits from where they should be.
The csrf reports get_type() == 0, which is type ARGB, so it doesn't
*look* like a problem with the surface being e.g. 16-bit instead of 24 bit.
Anyway, I've burned a lot of hours looking for the problem. It will
have to be something small, but I seem to be past the point of being
able to recognise it this evening. If someone wants to poke at the
problem and tell me what I've done stupidly I would appreciate it. I've
attached a simple test svg file to let you see the failure in svgspritetest.
Mike C. Fletcher
Designer, VR Plumber, Coder
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 5017 bytes
Desc: not available
Url : http://lists.laptop.org/pipermail/games/attachments/20080204/1aa63efa/attachment.svg
More information about the Games