From 5efde1e3e65af769cb629d55f0a4dd4f87caebe9 Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 20 Sep 2019 16:01:46 +0200 Subject: Parallel computation, pixel array - All the pixels are stored in an array, put in a surface then a texture so we don't draw each pixel one by one. - The computation of this array is done in parallel (one thread by line) - Use sscanf instead of atoi hack to parse options --- header.h | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'header.h') diff --git a/header.h b/header.h index 216db2d..fbaca08 100644 --- a/header.h +++ b/header.h @@ -4,11 +4,14 @@ # include # include -# define MAX_ITERATION 200 +# define MAX_ITERATION 210 # define ESCAPE_RADIUS 2 # define ESCAPE_RADIUS_SQUARED (ESCAPE_RADIUS * ESCAPE_RADIUS) -typedef unsigned char Byte; +# define PIXELS_CHANELS 3 +# define PIXELS_DEPTH (PIXELS_CHANELS * 8) + +typedef uint8_t Byte; typedef int ColorHexcode; typedef union @@ -41,6 +44,8 @@ typedef struct Color *palette; Color in_set_color; bool moving; + bool changed; + SDL_Texture *canvas; } GState; typedef struct @@ -53,19 +58,29 @@ typedef struct double center_y; } Config; +typedef struct +{ + double real_lo; + double real_hi; + int width; + double imag; + Color *palette; + uint8_t *row; +} ThreadArgs; + // mandelbrot.c int mandelbrot_in_set(double a, double b); void mandelbrot_print(void); -int *mandelbrot_array(Point center, double real_range, double imag_range, - double real_len, double imag_len); +void *mandelbrot_pixels(double real_lo, double real_hi, double imag_lo, + double imag_hi, int width, int height, Color *palette); // graphics.c GState *graphics_init(Config *config); void graphics_quit(GState *state); void graphics_run(GState *state); -Color *create_palette(Color start, Color end); // helper.c double map_range(double x, double src_lo, double src_hi, double dest_lo, double dest_hi); +int *inclusive_range(int start, int end); #endif -- cgit