[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] BLEND_RGBA_MULT bug on Macintosh?
Hi James,
I don't have this problem with my antiquated PC. It is an endian issue,
sort of. The rgba mult code is faulty. For a 4 byte source and
destination surface the blit assumes both have identical masks. Not
true. For my Intel machine I get this:
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit
(Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>> s = pygame.image.load('alpha_corner.png')
>>> s.get_masks()
(255, 65280, 16711680, -16777216)
>>> t = pygame.Surface((10,10), pygame.SRCALPHA, 32)
>>> t.get_masks()
(16711680, 65280, 255, -16777216)
(6, 0)
>>> pygame.display.set_mode()
<Surface(1024x768x24 SW)>
>>> k = pygame.image.load('kitten.jpg').convert_alpha()
>>> k.get_masks()
(16711680, 65280, 255, -16777216)
>>> pygame.LIL_ENDIAN
1234
>>> pygame.get_sdl_byteorder()
1234L
>>> k2=pygame.image.load('kitten.jpg')
>>> k2.get_masks()
(255, 65280, 16711680, 0)
So if the pygame.image.load or pygame.Surface.convert_alpha() reversed
its byte order to match the machine while the other didn't one would get
opaque yellow for transparent_white * opaque_white. But the revered rgb
component order for a loaded image and a stock 4 byte surface is still a
problem for BLEND_RGBA_MULT on little-endian machines.
Try convert_alpha on alpha_corner.jpg as well.
Lenard
James Paige wrote:
Hey, has anybody else had problems with blitting alpha transparent
surfaces using BLEND_RGBA_MULT on Mac OS X? I have some code that works
perfectly on Linux and Windows XP, but when I try it on my Mac, I get
yellow areas where I should be getting transparent areas.
I have posted a more detailed description along with a test case at
http://pygame.motherhamster.org/bugzilla/show_bug.cgi?id=26
I would greatly appreciate it if anyone else using a Mac could test and
see if they get the same results
---
James Paige
--
Lenard Lindstrom
<len-l@xxxxxxxxx>