/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* fractal_routine.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gtertysh +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/24 19:37:32 by gtertysh #+# #+# */ /* Updated: 2017/03/24 19:37:33 by gtertysh ### ########.fr */ /* */ /* ************************************************************************** */ #include "fractol.h" void *fractal_routine(void *th_data) { int x; t_color col; t_thread_data *data; data = (t_thread_data *)th_data; while (data->y_start < HEIGHT && data->y_start < data->y_end) { x = 0; while (x < data->fr.w_width) { col = data->fractal_func(data->fr.frac, x, data->y_start); put_pixel_to_image(x, data->y_start, col, &data->fr); x++; } data->y_start++; } free(data); pthread_exit(NULL); } t_frac_data *frac_init(int frac_type) { t_frac_data *f; f = malloc(sizeof(t_frac_data)); f->max_itr = FRAC_MAX_ITR; f->grd = default_gradient(); if (frac_type == 0) complex_equal(-0.4, 0.6, &f->com_const); else complex_equal(0, 0, &f->com_const); f->com_rl_im_change = 1; f->allow_mouse_change = -1; f->mov.x = 0; f->mov.y = 0; f->mov.z = 1; f->frac_type = frac_type; return (f); } void fractal_fork(int frac_type) { t_fractol *fr; fr = fractol_init(mlx_init(), frac_type); parallel_fractal(fr); mlx_put_image_to_window(fr->mlx, fr->win, fr->img->ptr, 0, 0); mlx_hook(fr->win, 2, 5, key_hook, fr); mlx_hook(fr->win, 6, (1L << 6), mouse_move_hook, fr); mlx_hook(fr->win, 4, (1L << 0), mouse_button_hook, fr); mlx_loop(fr->mlx); }