Quick answer: BLEND_RGBA_ADD adds the alpha channel too — usually not what you want for glow. Use BLEND_RGB_ADD to add color while preserving the destination alpha.
A glow effect blitted with BLEND_RGBA_ADD washes out and the soft edges turn into hard squares — the alpha got added, not respected.
RGBA vs RGB Variants
BLEND_RGB_ADD: adds R, G, B. Alpha of the destination is kept. Correct for additive glow.BLEND_RGBA_ADD: adds R, G, B, and A. The alpha channel accumulates — soft edges saturate to opaque.
Same pattern for SUB, MULT, MIN, MAX — the RGBA variants touch alpha, the RGB ones don’t.
Additive Glow Done Right
screen.blit(glow_surface, pos, special_flags=pygame.BLEND_RGB_ADD)
Color brightens where the glow overlaps; the glow’s soft alpha falloff is preserved by the destination.
Pre-Multiply for Best Results
For glow textures, pre-multiply the RGB by the alpha in your art so dark-but-transparent pixels add nothing. Then BLEND_RGB_ADD looks clean even with a colorful glow.
Verifying
Stack several glow sprites. They brighten cumulatively, soft edges stay soft, no hard square artifacts. Toggle to RGBA_ADD to see the difference.
“RGBA variants add alpha too. For glow, you almost always want the RGB variant.”
Render all additive effects to one layer surface, then blit that once — cheaper than dozens of per-sprite additive blits to the screen.