[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Alpha Channel Speed Question



Lenard Lindstrom wrote:
On 22 Nov 2006 at 21:15, Kamilche wrote:

I have a question - Do you know of a way to get method 3 as outlined below to be faster? The necessity of doing all those extra blits to preserve the alpha channel is really slowing things down.




import pygame

[snip some code]
def Run():
     bgcolor1 = (255, 255, 255)
     bgcolor2 = (192, 192, 192)
     bgcolor3 = (128, 128, 128)
     nightcolor = [0, 0, 0, 64]

# Create a bitmap - assume this is an expensive operation
# taking a few seconds.
bitmap = pygame.Surface((100, 100), pygame.SRCALPHA, 32).convert_alpha()
pygame.draw.circle(bitmap, (0, 255, 255), [50, 50], 50, 0)
bitmappos = [0, 0]


# Create the nighttime overlay
night = pygame.Surface((WIDTH, HEIGHT/3), pygame.SRCALPHA, 32).convert_alpha()
night.fill(nightcolor)


     # Loop forever
     quitgame = 0
     while not quitgame:
         pygame.event.pump()
[snip]
         # Look for quit
         for e in pygame.event.get():
             if e.type in [pygame.QUIT, pygame.MOUSEBUTTONDOWN]:
                 quitgame = 1
                 break
             elif e.type == pygame.KEYDOWN:
                 if e.key == 27:
                     quitgame = 1
                     break
             elif e.type == pygame.MOUSEMOTION:
                 bitmappos = e.pos
                 nightcolor[3] = e.pos[0]/float(WIDTH) * 255
                 night.fill(nightcolor)

Maybe, using colorkey and Surface alpha. But I have a question too. Do you prepare all your bitmaps (circle) at game startup? More specifically, would it be expensive to prepare a black and white mask, to be used as the shader (night), for each bitmap? Even if it is you can remove excess processing by declaring night as:

pygame.Surface((WIDTH, HEIGHT/3), 0, 32)

and adjust its surface alpha using set_alpha().

Lenard Lindstrom
<len-l@xxxxxxxxx>





Colorkeys are incompatible with per pixel alpha - set_alpha only works on pictures that don't have per pixel alpha.

Thanks anyway!

--Kamilche