-
-
Notifications
You must be signed in to change notification settings - Fork 192
Add pygame.transform.bloom function #2872
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
I see no reason not to merge this, but I think this might be more flexible as three separate operations: Threshold, blur, and blit. At least, I think this could be more useful as a function that computes the bloom overlay with a black or transparent background. |
Maybe it would be more flexible but not more performant as the blit is implemented within the blur using only 2 loops. I'd like for @itzpr3d4t0r to have a word about what you mentioned. I can always modify it as requested. |
To add to what I just said, what i think would be best is to keep bloom as a function and maybe add the luminance filter as another function that can reuse the same code this pull request is using. |
Co-authored-by: Dan Lawrence <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I gave this the full walt test:
with this test program:
import pygame
display_surf = pygame.display.set_mode((1280, 600))
display_surf.fill((255, 255, 255))
walt = pygame.image.load("images/walt.png").convert_alpha()
walt_2 = pygame.transform.bloom(
walt, blur_radius=2, intensity=1.5, luminance_threshold=0.6
)
walt_3 = pygame.transform.bloom(
walt, blur_radius=15, intensity=4, luminance_threshold=0.4, blur_type="box"
)
pygame.init()
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
display_surf.fill((255, 255, 255))
display_surf.blit(walt, (0, 100))
display_surf.blit(walt_2, (417, 100))
display_surf.blit(walt_3, (834, 100))
pygame.display.flip()
clock.tick(60)
I think it is a useful effect that developers will use. They'll probably use it, and all of the blurs more if we can eventually get them SIMD accelerated in some manner, but I have no problem adding this among them. Especially as it is reusing a lot of the code from the blurs.
My main criticism is that the input parameters are quite loosely defined right now in the documentation with no expected ranges, and not much description of what they effect in the output.
you have a point. I'll improve the documentation and explain what each argument does |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice docs, LGTM 👍
I implemented the bloom algorithm to add it to
pygame.transform
.I also added documentation and stubs.
I think this is the best implementation. This is the steps, if someone needs them to review:
Please tell me if there are any C improvements, structure improvements or performance improvements.