user3002473
user3002473

Reputation: 5074

Additive blending in pygame doesn't work with alpha

I recently discovered the different blending modes you can apply to blitted surfaces in pygame and I wanted to see how flexible the system was. Unless I'm doing something wrong, it's apparently pretty limited (just like the rest of pygame OOOOOOOH shots fired). I wrote a simple program that draws a bunch of gradient circles using alpha and blits them all around the screen. This is the code:

import pygame
import pygame.gfxdraw
pygame.init()

import random

SCREEN = pygame.display.set_mode((800, 600))
SCREEN.fill((0, 0, 0))

def draw_square(surface, colour, x, y):
    """
    Yeah it's called draw square but it actually draws a circle thing I was just too lazy
    to change the name so you gotta deal with it.
    """
    square = pygame.Surface((100, 100))
    square.fill((0, 0, 0))
    colour += (int(15/255*100), )
    for i in range(25):
        pygame.gfxdraw.filled_circle(square, 50, 50, i*2, colour)
    # Comment the previous two lines out and uncomment the next line to see different results.
    # pygame.draw.circle(square, colour[:3], (50, 50), 50)
    surface.blit(square, (x - 50, y - 50), special_flags=pygame.BLEND_RGB_ADD)

running = True
while running:
    for evt in pygame.event.get():
        if evt.type == pygame.QUIT:
            running = False

    draw_square(SCREEN, (25, 255, 25), random.randint(0, 800), random.randint(0, 600))

    pygame.display.update()
pygame.quit()

It seems to work when drawing a normal circle, but when drawing the circles with pygame.gfxdraw.filled_circle additive blending doesn't work. Any ideas?

EDIT: I'm using Python 3, so 15/255 evaluates properly to a float.

Upvotes: 0

Views: 639

Answers (1)

Dair
Dair

Reputation: 16240

The issue is still with this line:

colour += (int(15/255*100), )

It should go to white initially, but the alpha is so low it will take a long time (well, it should in theory...).

Doing:

colour += (int(125/255*100), )

Makes the effect more obvious.

Result: enter image description here

Upvotes: 1

Related Questions