1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include "fb.h"
#include "rototiller.h"
#include "util.h"
#include "particles.h"
/* particle system gadget (C) Vito Caputo <vcaputo@pengaru.com> 2/15/2014 */
/* 1/10/2015 added octree bsp (though not yet leveraged) */
/* 11/25/2016 refactor and begun adapting to rototiller */
#define INIT_PARTS 100
extern particle_ops_t simple_ops;
/* Render a 3D particle system */
static void sparkler(fb_fragment_t *fragment)
{
static particles_t *particles;
static int initialized;
uint32_t *buf = fragment->buf;
if (!initialized) {
srand(time(NULL) + getpid());
particles = particles_new();
particles_add_particles(particles, NULL, &simple_ops, INIT_PARTS);
initialized = 1;
}
memset(buf, 0, ((fragment->width << 2) + fragment->stride) * fragment->height);
particles_age(particles);
particles_draw(particles, fragment);
particles_sim(particles);
particles_add_particles(particles, NULL, &simple_ops, INIT_PARTS / 4);
}
rototiller_renderer_t sparkler_renderer = {
.render = sparkler,
.name = "sparkler",
.description = "Particle system with spatial interactions",
.author = "Vito Caputo <vcaputo@pengaru.com>",
.license = "GPLv2",
};
|