diff options
author | Vito Caputo <vcaputo@gnugeneration.com> | 2017-01-09 00:53:57 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-09 00:53:57 -0800 |
commit | 6e284f6cfda2b436e7871d34367c3478aa211942 (patch) | |
tree | c84a80e4252291882dc0dc972dd1e42f222a2ede /modules/stars/stars.c | |
parent | bc0ea63460100f61e6c6b73abe20c1f4ffae5db4 (diff) | |
parent | c8b77543492c56b747394e2a460074febeaaeab5 (diff) |
Merge pull request #4 from ph1l/stars
stars: add starfield simulator from ph1l/stars
Diffstat (limited to 'modules/stars/stars.c')
-rw-r--r-- | modules/stars/stars.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/modules/stars/stars.c b/modules/stars/stars.c new file mode 100644 index 0000000..e009714 --- /dev/null +++ b/modules/stars/stars.c @@ -0,0 +1,63 @@ +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <inttypes.h> +#include <time.h> +#include <sys/types.h> +#include <unistd.h> + +#include "draw.h" +#include "fb.h" +#include "rototiller.h" +#include "starslib.h" + +/* Copyright (C) 2017 Philip J. Freeman <elektron@halo.nu> */ + +static void stars(fb_fragment_t *fragment) +{ + static int initialized, z; + static struct universe* u; + + struct return_point rp; + int x, y, width = fragment->width, height = fragment->height; + + if (!initialized) { + z = 128; + srand(time(NULL) + getpid()); + + // Initialize the stars lib (and pre-add a bunch of stars) + new_universe(&u, width, height, z); + for(y=0; y<z; y++) { + while (process_point(u, &rp) != 0); + for(x=0; x<rand()%128; x++){ + new_point(u); + } + } + initialized = 1; + } + + // draw space (or blank the frame, if you prefer) + memset(fragment->buf, 0, ((fragment->width << 2) + fragment->stride) * fragment->height); + + // draw stars + for (;;) { + int ret = process_point( u, &rp ); + if (ret==0) break; + if (ret==1) draw_pixel(fragment, rp.x+(width/2), rp.y+(height/2), + makergb(0xFF, 0xFF, 0xFF, (float)rp.opacity/OPACITY_MAX) + ); + } + + // add stars at horizon + for (x=0; x<rand()%128; x++) { + new_point(u); + } +} + +rototiller_renderer_t stars_renderer = { + .render = stars, + .name = "stars", + .description = "basic starfield", + .author = "Philip J Freeman <elektron@halo.nu>", + .license = "GPLv2", +}; |