[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>