diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2017-04-27 09:48:15 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2017-04-27 09:48:15 -0700 |
commit | fc4e5f9d1e734affab9917558f19102a1331942f (patch) | |
tree | 13db7411dafa195d880e53a7551fd2b648e7fd23 /src | |
parent | 3d4ab5e29e6187d5e97892a7f8a1ce73e809e0cd (diff) |
sparkler: respect fragment->frame_{width,height}
should_draw_expire_if_oob() assumed the fragment represented the entire
frame. Instead, return 0 if the coordinates are outside the fragment,
but only reset longevity if outside of the frame.
If sparkler goes threaded in the drawing, this would result in threads
simply skipping particles outside the fragment. The longevity reset
occurring in all threads appears suspicious but should be benign since
they all write the same thing - 0.
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/sparkler/helpers.h | 5 | ||||
-rw-r--r-- | src/modules/sparkler/particles.c | 2 |
2 files changed, 3 insertions, 4 deletions
diff --git a/src/modules/sparkler/helpers.h b/src/modules/sparkler/helpers.h index e263d36..3fd1bda 100644 --- a/src/modules/sparkler/helpers.h +++ b/src/modules/sparkler/helpers.h @@ -23,9 +23,8 @@ static inline uint32_t makergb(uint32_t r, uint32_t g, uint32_t b, float intensi static inline int should_draw_expire_if_oob(particles_t *particles, particle_t *p, int x, int y, fb_fragment_t *f, int *longevity) { if (!fb_fragment_contains(f, x, y)) { - /* offscreen */ - if (longevity) - *longevity = 0; + if (longevity && (x < 0 || x > f->frame_width || y < 0 || y > f->frame_height)) + *longevity = 0; /* offscreen */ return 0; } diff --git a/src/modules/sparkler/particles.c b/src/modules/sparkler/particles.c index e504adb..5116e3a 100644 --- a/src/modules/sparkler/particles.c +++ b/src/modules/sparkler/particles.c @@ -216,7 +216,7 @@ bsp_t * particles_bsp(particles_t *particles) static inline void _particles_draw(particles_t *particles, list_head_t *list, fb_fragment_t *fragment) { - float w2 = fragment->width * .5f, h2 = fragment->height * .5f; + float w2 = fragment->frame_width * .5f, h2 = fragment->frame_height * .5f; _particle_t *p; assert(particles); |