Пример #1
0
void			ft_ray_cast(t_dt *dt, t_obj *obj)
{
	t_ray		*ray;
	int			pix[2];

	pix[1] = 0;
	ft_set_param(dt);
	while (pix[1] < Y_MAX)
	{
		pix[0] = 0;
		while (pix[0] < X_MAX)
		{
			ray = (t_ray *)malloc(sizeof(t_ray));
			ray->pix[1] = pix[1];
			ray->pix[0] = pix[0];
			ft_init_ray(ray, dt);
			ft_inter(ray, obj);
			ft_get_color(ray, obj);
			ft_mlx_add_col(dt, ray);
			pix[0] = pix[0] + 1;
			free(ray);
		}
		pix[1] = pix[1] + 1;
		mlx_put_image_to_window(dt->conn, dt->win, dt->img, 0, 0);
	}
}
Пример #2
0
void				ft_rc_th(t_env *env)
{
	pthread_t		th[4];
	t_dt			dt[4];
	t_dt			*save;

	ft_set_param(env->dt);
	save = env->dt;
	ft_init_th(env->dt, dt);
	env->dt = &dt[0];
	if (pthread_create(&th[0], NULL, ft_rc_th1, env))
		write(1, "error thread\n", 13);
	env->dt = &dt[1];
	if (pthread_create(&th[1], NULL, ft_rc_th2, env))
		write(1, "error thread\n", 13);
	env->dt = &dt[2];
	if (pthread_create(&th[2], NULL, ft_rc_th3, env))
		write(1, "error thread\n", 13);
	env->dt = &dt[3];
	if (pthread_create(&th[3], NULL, ft_rc_th4, env))
		write(1, "error thread\n", 13);
	pthread_join(th[0], NULL);
	pthread_join(th[1], NULL);
	pthread_join(th[2], NULL);
	pthread_join(th[3], NULL);
	env->dt = save;
	ft_join_th(env, dt);
}
Пример #3
0
void				ft_ray_cast_threads(t_env *env)
{
	int				ij[2];

	ft_set_param(env->dt);
	if (env->dt->th_nb <= 0)
		env->dt->th_nb = 1;
	if (env->dt->th_nb == 1)
		ft_ray_cast(env);
	else
	{
		ft_threads(env);
		if (env->dt->opt_f == 0 && env->dt->opt_aa)
			ft_antialiase(env);
		else
		{
			ij[0] = -1;
			while (++ij[0] < env->dt->y_max)
			{
				ij[1] = -1;
				while (++ij[1] < env->dt->x_max)
					free(env->dt->img_i[ij[0]][ij[1]]);
				free(env->dt->img_i[ij[0]]);
			}
			free(env->dt->img_i);
		}
	}
}
Пример #4
0
void				ft_init_th(t_dt *dt_i, t_dt dt[4])
{
	int			i;

	i = -1;
	while (++i < 4)
	{
		dt[i].img_c = (char *)malloc(sizeof(char) * X_MAX * Y_MAX / 4);
		dt[i].s_line = dt->s_line;
		dt[i].bpp = dt->bpp;
		dt[i].cam_pos[0] = dt_i->cam_pos[0];
		dt[i].cam_pos[1] = dt_i->cam_pos[1];
		dt[i].cam_pos[2] = dt_i->cam_pos[2];
		dt[i].opt_f = dt_i->opt_f;
		dt[i].delta = dt_i->delta;
		ft_set_param(&dt[i]);
	}
}