summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2017-04-27 09:48:15 -0700
committerVito Caputo <vcaputo@pengaru.com>2017-04-27 09:48:15 -0700
commitfc4e5f9d1e734affab9917558f19102a1331942f (patch)
tree13db7411dafa195d880e53a7551fd2b648e7fd23 /src/modules
parent3d4ab5e29e6187d5e97892a7f8a1ce73e809e0cd (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/modules')
-rw-r--r--src/modules/sparkler/helpers.h5
-rw-r--r--src/modules/sparkler/particles.c2
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);
© All Rights Reserved