aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ft_castray_loop.c87
-rw-r--r--src/ft_floor_cast.c99
-rw-r--r--src/ft_floor_cast_inits.c38
-rw-r--r--src/ft_floor_threads.c111
-rw-r--r--src/ft_raycasting.c207
-rw-r--r--src/ft_wall_cast.c70
-rw-r--r--src/ft_wall_threads.c83
7 files changed, 378 insertions, 317 deletions
diff --git a/src/ft_castray_loop.c b/src/ft_castray_loop.c
new file mode 100644
index 0000000..28277a7
--- /dev/null
+++ b/src/ft_castray_loop.c
@@ -0,0 +1,87 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_raycasting.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:22:57 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:23:42 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <cub3d.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <math.h>
+
+void
+ ft_calc_tex(t_cub *cl)
+{
+ if (cl->rlist.side == 0)
+ cl->rlist.wall_hit_x = (cl->plist.pos_x) +
+ cl->rlist.wall_dist * cl->rlist.y_ray_dir;
+ else
+ cl->rlist.wall_hit_x = (cl->plist.pos_y) +
+ cl->rlist.wall_dist * cl->rlist.x_ray_dir;
+ cl->rlist.wall_hit_x -= floor(cl->rlist.wall_hit_x);
+ cl->tlist[cl->w_side].tex_x = (int)(cl->rlist.wall_hit_x *
+ (double)cl->tlist[cl->w_side].img_w);
+ if (cl->rlist.side == 0 && cl->rlist.x_ray_dir > 0)
+ cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w
+ - cl->tlist[cl->w_side].tex_x - 1;
+ else if (cl->rlist.side == 1 && cl->rlist.y_ray_dir < 0)
+ cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w
+ - cl->tlist[cl->w_side].tex_x - 1;
+}
+
+void
+ ft_initray(uint16_t i, t_cub *cl)
+{
+ t_win *wl;
+ t_player *pl;
+
+ wl = &cl->wlist;
+ pl = &cl->plist;
+ pl->cam_x = 2 * i / (float)(wl->x_size) - 1;
+ cl->rlist.x_ray_pos = pl->pos_y;
+ cl->rlist.y_ray_pos = pl->pos_x;
+ cl->rlist.x_ray_dir = pl->dir_x + pl->plane_x *
+ pl->cam_x;
+ cl->rlist.y_ray_dir = pl->dir_y + pl->plane_y *
+ pl->cam_x;
+ cl->rlist.sqx = (int16_t)cl->rlist.x_ray_pos;
+ cl->rlist.sqy = (int16_t)cl->rlist.y_ray_pos;
+ ft_detect(cl);
+ if (cl->rlist.side == 0)
+ {
+ cl->rlist.wall_dist = (cl->rlist.sqx - cl->rlist.x_ray_pos +
+ (1 - cl->mlist.x_step) / 2) / cl->rlist.x_ray_dir;
+ }
+ else
+ {
+ cl->rlist.wall_dist = (cl->rlist.sqy - cl->rlist.y_ray_pos +
+ (1 - cl->mlist.y_step) / 2) / cl->rlist.y_ray_dir;
+ }
+}
+
+void
+ ft_castray_loop(uint16_t i, t_win *wl, t_cub *cl)
+{
+ ft_initray(i, cl);
+ cl->rlist.line_h = (int16_t)(wl->y_size / cl->rlist.wall_dist);
+ cl->rlist.wall_t = -cl->rlist.line_h / 2 + wl->y_size / 2;
+ if (cl->rlist.wall_t < 0)
+ cl->rlist.wall_t = 0;
+ cl->rlist.wall_b = cl->rlist.line_h / 2 + wl->y_size / 2;
+ if (cl->rlist.wall_b >= (int16_t)wl->y_size)
+ cl->rlist.wall_b = wl->y_size - 1;
+ ft_choose_tex(i, cl);
+ ft_calc_tex(cl);
+ cl->rlist.tex_x_tab[i] = cl->tlist[cl->w_side].tex_x;
+ cl->rlist.line_h_tab[i] = cl->rlist.line_h;
+ cl->rlist.wall_t_tab[i] = cl->rlist.wall_t;
+ cl->rlist.wall_b_tab[i] = cl->rlist.wall_b;
+ cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist;
+}
diff --git a/src/ft_floor_cast.c b/src/ft_floor_cast.c
index c9c44e5..3962431 100644
--- a/src/ft_floor_cast.c
+++ b/src/ft_floor_cast.c
@@ -43,7 +43,7 @@ static void
(y * cl->img.sizeline))) = ft_rgb_to_hex(dist, rgb, cl);
}
-static void
+void
ft_floor_cast_loop(uint16_t y, uint16_t x, t_cub *cl)
{
if (cl->mlist.isftex)
@@ -61,103 +61,6 @@ static void
}
void
-*ft_floor_one(void *vargp)
-{
- uint16_t x;
- uint16_t y;
- t_cub *cl;
-
- cl = (t_cub *)vargp;
- y = (cl->wlist.y_size / 2);
- while (y < (cl->wlist.y_size))
- {
- x = 0;
- while (x < cl->wlist.x_size / 4)
- {
- if (cl->rlist.wall_bz[x] <= y)
- ft_floor_cast_loop(y, x, cl);
- x++;
- }
- y++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-void
-*ft_floor_two(void *vargp)
-{
- uint16_t x;
- uint16_t y;
- t_cub *cl;
-
- cl = (t_cub *)vargp;
- y = (cl->wlist.y_size / 2);
- /* y += 1 * (cl->wlist.y_size / 2 / 4); */
- while (y < (cl->wlist.y_size))
- {
- x = cl->wlist.x_size / 4;
- while (x < 2 * (cl->wlist.x_size / 4))
- {
- if (cl->rlist.wall_bz[x] <= y)
- ft_floor_cast_loop(y, x, cl);
- x++;
- }
- y++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-void
-*ft_floor_three(void *vargp)
-{
- uint16_t x;
- uint16_t y;
- t_cub *cl;
-
- cl = (t_cub *)vargp;
- y = (cl->wlist.y_size / 2);
- while (y < (cl->wlist.y_size))
- {
- x = 2 * (cl->wlist.x_size / 4);
- while (x < 3 * (cl->wlist.x_size / 4))
- {
- if (cl->rlist.wall_bz[x] <= y)
- ft_floor_cast_loop(y, x, cl);
- x++;
- }
- y++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-void
-*ft_floor_four(void *vargp)
-{
- uint16_t x;
- uint16_t y;
- t_cub *cl;
-
- cl = (t_cub *)vargp;
- y = (cl->wlist.y_size / 2);
- while (y < (cl->wlist.y_size))
- {
- x = 3 * (cl->wlist.x_size / 4);
- while (x < 4 * (cl->wlist.x_size / 4))
- {
- if (cl->rlist.wall_bz[x] <= y)
- ft_floor_cast_loop(y, x, cl);
- x++;
- }
- y++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-void
*ft_floor_cast(void *vargp)
{
pthread_t tid[4];
diff --git a/src/ft_floor_cast_inits.c b/src/ft_floor_cast_inits.c
index 591eb24..d1f2811 100644
--- a/src/ft_floor_cast_inits.c
+++ b/src/ft_floor_cast_inits.c
@@ -14,6 +14,20 @@
#include <stdint.h>
void
+ ft_set_fc_tex_xy(uint8_t tid, uint16_t x, uint16_t y, t_cub *cl)
+{
+ const int32_t x_cell = (int32_t)(cl->rlist.x_floor);
+ const int32_t y_cell = (int32_t)(cl->rlist.y_floor);
+
+ cl->tlist[tid].tex_x = (int32_t)(cl->tlist[tid].img_h
+ * (cl->rlist.y_floor - y_cell));
+ cl->tlist[tid].tex_y = (int32_t)(cl->tlist[tid].img_w
+ * (cl->rlist.x_floor - x_cell));
+ cl->rlist.fc_tex_x_tab[tid - 6][y][x] = cl->tlist[tid].tex_x;
+ cl->rlist.fc_tex_y_tab[tid - 6][y][x] = cl->tlist[tid].tex_y;
+}
+
+void
ft_floor_cast_inits(uint16_t y, t_ray *rl, t_cub *cl)
{
rl->x_f_ray_dir = cl->plist.dir_x - cl->plist.plane_x;
@@ -30,3 +44,27 @@ void
rl->x_floor = cl->plist.pos_y + rl->row_dist * rl->x_f_ray_dir;
rl->y_floor = cl->plist.pos_x + rl->row_dist * rl->y_f_ray_dir;
}
+
+void
+ ft_floor_loop(uint16_t y, t_cub *cl)
+{
+ uint16_t x;
+
+ x = 0;
+ ft_floor_cast_inits(y, &cl->rlist, cl);
+ while (x < cl->wlist.x_size)
+ {
+ if (cl->rlist.wall_b_tab[x] <= y)
+ {
+ if (cl->mlist.isftex)
+ ft_set_fc_tex_xy(6, x, y, cl);
+ if (cl->mlist.isctex && !cl->mlist.isskybox)
+ ft_set_fc_tex_xy(7, x, cl->wlist.y_size - y - 1, cl);
+ }
+ cl->rlist.x_floor += cl->mlist.x_floor_step;
+ cl->rlist.y_floor += cl->mlist.y_floor_step;
+ x++;
+ }
+ cl->rlist.row_dist_tab[y] = cl->rlist.row_dist;
+ cl->rlist.row_dist_tab[cl->wlist.y_size - y] = cl->rlist.row_dist;
+}
diff --git a/src/ft_floor_threads.c b/src/ft_floor_threads.c
new file mode 100644
index 0000000..476bd8e
--- /dev/null
+++ b/src/ft_floor_threads.c
@@ -0,0 +1,111 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_wall_threads.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:22:23 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:23:42 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <cub3d.h>
+#include <stdint.h>
+#include <pthread.h>
+
+void
+ *ft_floor_one(void *vargp)
+{
+ uint16_t x;
+ uint16_t y;
+ t_cub *cl;
+
+ cl = (t_cub *)vargp;
+ y = (cl->wlist.y_size / 2);
+ while (y < (cl->wlist.y_size))
+ {
+ x = 0;
+ while (x < cl->wlist.x_size / 4)
+ {
+ if (cl->rlist.wall_b_tab[x] <= y)
+ ft_floor_cast_loop(y, x, cl);
+ x++;
+ }
+ y++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_floor_two(void *vargp)
+{
+ uint16_t x;
+ uint16_t y;
+ t_cub *cl;
+
+ cl = (t_cub *)vargp;
+ y = (cl->wlist.y_size / 2);
+ while (y < (cl->wlist.y_size))
+ {
+ x = cl->wlist.x_size / 4;
+ while (x < 2 * (cl->wlist.x_size / 4))
+ {
+ if (cl->rlist.wall_b_tab[x] <= y)
+ ft_floor_cast_loop(y, x, cl);
+ x++;
+ }
+ y++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_floor_three(void *vargp)
+{
+ uint16_t x;
+ uint16_t y;
+ t_cub *cl;
+
+ cl = (t_cub *)vargp;
+ y = (cl->wlist.y_size / 2);
+ while (y < (cl->wlist.y_size))
+ {
+ x = 2 * (cl->wlist.x_size / 4);
+ while (x < 3 * (cl->wlist.x_size / 4))
+ {
+ if (cl->rlist.wall_b_tab[x] <= y)
+ ft_floor_cast_loop(y, x, cl);
+ x++;
+ }
+ y++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_floor_four(void *vargp)
+{
+ uint16_t x;
+ uint16_t y;
+ t_cub *cl;
+
+ cl = (t_cub *)vargp;
+ y = (cl->wlist.y_size / 2);
+ while (y < (cl->wlist.y_size))
+ {
+ x = 3 * (cl->wlist.x_size / 4);
+ while (x < 4 * (cl->wlist.x_size / 4))
+ {
+ if (cl->rlist.wall_b_tab[x] <= y)
+ ft_floor_cast_loop(y, x, cl);
+ x++;
+ }
+ y++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c
index 1804118..8a79154 100644
--- a/src/ft_raycasting.c
+++ b/src/ft_raycasting.c
@@ -18,192 +18,99 @@
#include <pthread.h>
static void
- ft_calc_tex(t_cub *cl)
+ ft_allocate_tabs(uint16_t y_s, uint16_t x_s, t_ray *rl, t_cub *cl)
{
- if (cl->rlist.side == 0)
- cl->rlist.wall_hit_x = (cl->plist.pos_x) +
- cl->rlist.wall_dist * cl->rlist.y_ray_dir;
- else
- cl->rlist.wall_hit_x = (cl->plist.pos_y) +
- cl->rlist.wall_dist * cl->rlist.x_ray_dir;
- cl->rlist.wall_hit_x -= floor(cl->rlist.wall_hit_x);
- cl->tlist[cl->w_side].tex_x = (int)(cl->rlist.wall_hit_x *
- (double)cl->tlist[cl->w_side].img_w);
- if (cl->rlist.side == 0 && cl->rlist.x_ray_dir > 0)
- cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w
- - cl->tlist[cl->w_side].tex_x - 1;
- else if (cl->rlist.side == 1 && cl->rlist.y_ray_dir < 0)
- cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w
- - cl->tlist[cl->w_side].tex_x - 1;
+ uint16_t y;
+ uint16_t x;
+
+ if (!(rl->wall_dist_tab = (float*)malloc(x_s * sizeof(float))) ||
+ !(rl->wall_b_tab = (int16_t*)malloc(x_s * sizeof(int16_t))) ||
+ !(rl->w_side_tab = (uint8_t*)malloc(x_s * sizeof(uint8_t))) ||
+ !(rl->line_h_tab = (uint16_t*)malloc(x_s * sizeof(uint16_t))) ||
+ !(rl->wall_t_tab = (int16_t*)malloc(x_s * sizeof(int16_t))) ||
+ !(rl->tex_x_tab = (int32_t*)malloc(x_s * sizeof(int32_t))) ||
+ !(rl->fc_tex_x_tab = (int32_t***)malloc(2 * sizeof(int32_t**))) ||
+ !(rl->fc_tex_y_tab = (int32_t***)malloc(2 * sizeof(int32_t**))) ||
+ !(rl->row_dist_tab = (float*)malloc(y_s * sizeof(float))))
+ ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
+ x = -1;
+ while (++x < 2)
+ {
+ if (!(rl->fc_tex_x_tab[x] = (int**)malloc(y_s * sizeof(int*))) ||
+ !(rl->fc_tex_y_tab[x] = (int**)malloc(y_s * sizeof(int*))))
+ ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
+ y = -1;
+ while (++y < y_s)
+ if (!(rl->fc_tex_x_tab[x][y] = (int*)malloc(x_s * sizeof(int))) ||
+ !(rl->fc_tex_y_tab[x][y] = (int*)malloc(x_s * sizeof(int))))
+ ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
+ }
}
static void
- ft_initray(uint16_t i, t_cub *cl)
+ ft_precalc_loops(t_cub *cl)
{
- t_win *wl;
- t_player *pl;
+ uint16_t i;
- wl = &cl->wlist;
- pl = &cl->plist;
- pl->cam_x = 2 * i / (float)(wl->x_size) - 1;
- cl->rlist.x_ray_pos = pl->pos_y;
- cl->rlist.y_ray_pos = pl->pos_x;
- cl->rlist.x_ray_dir = pl->dir_x + pl->plane_x *
- pl->cam_x;
- cl->rlist.y_ray_dir = pl->dir_y + pl->plane_y *
- pl->cam_x;
- cl->rlist.sqx = (int16_t)cl->rlist.x_ray_pos;
- cl->rlist.sqy = (int16_t)cl->rlist.y_ray_pos;
- ft_detect(cl);
- if (cl->rlist.side == 0)
+ i = 0;
+ while (i < cl->wlist.x_size)
{
- cl->rlist.wall_dist = (cl->rlist.sqx - cl->rlist.x_ray_pos +
- (1 - cl->mlist.x_step) / 2) / cl->rlist.x_ray_dir;
+ ft_castray_loop(i, &cl->wlist, cl);
+ i++;
}
- else
+ i = (cl->wlist.y_size / 2);
+ while (i < cl->wlist.y_size)
{
- cl->rlist.wall_dist = (cl->rlist.sqy - cl->rlist.y_ray_pos +
- (1 - cl->mlist.y_step) / 2) / cl->rlist.y_ray_dir;
+ ft_floor_loop(i, cl);
+ i++;
}
}
static void
- ft_castray_loop(uint16_t i, t_win *wl, t_cub *cl)
-{
- ft_initray(i, cl);
- cl->rlist.line_h = (int16_t)(wl->y_size / cl->rlist.wall_dist);
- cl->rlist.wall_t = -cl->rlist.line_h / 2 + wl->y_size / 2;
- if (cl->rlist.wall_t < 0)
- cl->rlist.wall_t = 0;
- cl->rlist.wall_b = cl->rlist.line_h / 2 + wl->y_size / 2;
- if (cl->rlist.wall_b >= (int16_t)wl->y_size)
- cl->rlist.wall_b = wl->y_size - 1;
- ft_choose_tex(i, cl);
- ft_calc_tex(cl);
- cl->rlist.tex_x_tab[i] = cl->tlist[cl->w_side].tex_x;
- cl->rlist.line_h_tab[i] = cl->rlist.line_h;
- cl->rlist.wall_t_tab[i] = cl->rlist.wall_t;
- cl->rlist.wall_bz[i] = cl->rlist.wall_b;
- cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist;
-}
-
-static void
- ft_set_fc_tex_xy(uint8_t tid, uint16_t x, uint16_t y, t_cub *cl)
+ ft_del_tabs(t_cub *cl)
{
- const int32_t x_cell = (int32_t)(cl->rlist.x_floor);
- const int32_t y_cell = (int32_t)(cl->rlist.y_floor);
-
- cl->tlist[tid].tex_x = (int32_t)(cl->tlist[tid].img_h
- * (cl->rlist.y_floor - y_cell));
- cl->tlist[tid].tex_y = (int32_t)(cl->tlist[tid].img_w
- * (cl->rlist.x_floor - x_cell));
- cl->rlist.fc_tex_x_tab[tid - 6][y][x] = cl->tlist[tid].tex_x;
- cl->rlist.fc_tex_y_tab[tid - 6][y][x] = cl->tlist[tid].tex_y;
-}
-
-void
- ft_castray(t_cub *cl)
-{
- pthread_t tid[2];
uint16_t y;
uint16_t x;
- if (!(cl->rlist.wall_dist_tab = (float*)malloc(cl->wlist.x_size *
- sizeof(float))) ||
- !(cl->rlist.wall_bz = (int16_t*)malloc(cl->wlist.x_size *
- sizeof(int16_t))) ||
- !(cl->rlist.w_side_tab = (uint8_t*)malloc(cl->wlist.x_size *
- sizeof(uint8_t))) ||
- !(cl->rlist.line_h_tab = (uint16_t*)malloc(cl->wlist.x_size *
- sizeof(uint16_t))) ||
- !(cl->rlist.wall_t_tab = (int16_t*)malloc(cl->wlist.x_size *
- sizeof(int16_t))) ||
- !(cl->rlist.tex_x_tab = (int32_t*)malloc(cl->wlist.x_size *
- sizeof(int32_t))) ||
- !(cl->rlist.fc_tex_x_tab = (int32_t***)malloc(2 * sizeof(int32_t**))) ||
- !(cl->rlist.fc_tex_y_tab = (int32_t***)malloc(2 * sizeof(int32_t**))) ||
- !(cl->rlist.row_dist_tab = (float*)malloc(cl->wlist.y_size *
- sizeof(float))))
- ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
- x = 0;
- while (x < 2)
+ x = -1;
+ while (++x < 2)
{
- if (!(cl->rlist.fc_tex_x_tab[x] = (int**)malloc(cl->wlist.y_size *
- sizeof(int*))) ||
- !(cl->rlist.fc_tex_y_tab[x] = (int**)malloc(cl->wlist.y_size *
- sizeof(int*))))
- ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
- y = 0;
- while (y < cl->wlist.y_size)
- {
- if (!(cl->rlist.fc_tex_x_tab[x][y] = (int*)malloc(cl->wlist.x_size *
- sizeof(int))) ||
- !(cl->rlist.fc_tex_y_tab[x][y] = (int*)malloc(cl->wlist.x_size *
- sizeof(int))))
- ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
- y++;
- }
- x++;
- }
- x = 0;
- while (x < cl->wlist.x_size)
- {
- ft_castray_loop(x, &cl->wlist, cl);
- x++;
- }
- y = cl->wlist.y_size / 2;
- while (y < cl->wlist.y_size)
- {
- x = 0;
- ft_floor_cast_inits(y, &cl->rlist, cl);
- while (x < cl->wlist.x_size)
- {
- if (cl->rlist.wall_bz[x] <= y)
- {
- if (cl->mlist.isftex)
- ft_set_fc_tex_xy(6, x, y, cl);
- if (cl->mlist.isctex && !cl->mlist.isskybox)
- ft_set_fc_tex_xy(7, x, cl->wlist.y_size - y - 1, cl);
- }
- cl->rlist.x_floor += cl->mlist.x_floor_step;
- cl->rlist.y_floor += cl->mlist.y_floor_step;
- x++;
- }
- cl->rlist.row_dist_tab[y] = cl->rlist.row_dist;
- cl->rlist.row_dist_tab[cl->wlist.y_size - y] = cl->rlist.row_dist;
- y++;
- }
- pthread_create(&tid[0], 0x0, ft_wall_cast, (void*)cl);
- pthread_create(&tid[1], 0x0, ft_floor_cast, (void*)cl);
- pthread_join(tid[0], 0x0);
- pthread_join(tid[1], 0x0);
- x = 0;
- while (x < 2)
- {
- y = 0;
- while (y < cl->wlist.y_size)
+ y = -1;
+ while (++y < cl->wlist.y_size)
{
ft_memdel((void*)&cl->rlist.fc_tex_x_tab[x][y]);
ft_memdel((void*)&cl->rlist.fc_tex_y_tab[x][y]);
- y++;
}
ft_memdel((void*)&cl->rlist.fc_tex_x_tab[x]);
ft_memdel((void*)&cl->rlist.fc_tex_y_tab[x]);
- x++;
}
ft_memdel((void*)&cl->rlist.fc_tex_x_tab);
ft_memdel((void*)&cl->rlist.fc_tex_y_tab);
ft_memdel((void*)&cl->rlist.tex_x_tab);
ft_memdel((void*)&cl->rlist.row_dist_tab);
ft_memdel((void*)&cl->rlist.wall_t_tab);
+ ft_memdel((void*)&cl->rlist.wall_b_tab);
ft_memdel((void*)&cl->rlist.w_side_tab);
ft_memdel((void*)&cl->rlist.line_h_tab);
- ft_memdel((void*)&cl->rlist.wall_bz);
+ ft_memdel((void*)&cl->rlist.wall_dist_tab);
+}
+
+void
+ ft_castray(t_cub *cl)
+{
+ pthread_t tid[2];
+
+ ft_allocate_tabs(cl->wlist.y_size, cl->wlist.x_size, &cl->rlist, cl);
+ ft_precalc_loops(cl);
+ pthread_create(&tid[0], 0x0, ft_wall_cast, (void*)cl);
+ pthread_create(&tid[1], 0x0, ft_floor_cast, (void*)cl);
+ pthread_join(tid[0], 0x0);
+ pthread_join(tid[1], 0x0);
ft_calc_sprite(cl);
ft_calc_heal(cl);
ft_calc_trap(cl);
ft_calc_weaps(cl);
if (cl->plist.handles_weapon > -1)
ft_draw_handweap(cl);
- ft_memdel((void*)&cl->rlist.wall_dist_tab);
+ ft_del_tabs(cl);
}
diff --git a/src/ft_wall_cast.c b/src/ft_wall_cast.c
index 8e74434..7610df6 100644
--- a/src/ft_wall_cast.c
+++ b/src/ft_wall_cast.c
@@ -14,7 +14,7 @@
#include <stdint.h>
#include <pthread.h>
-static void
+void
ft_draw_verline(t_cub *cl, int32_t x, int32_t y, int32_t y2)
{
int32_t d;
@@ -35,74 +35,6 @@ static void
}
}
-static void
-*ft_wall_one(void *vargp)
-{
- t_cub *cl;
- uint16_t i;
-
- cl = (t_cub *)vargp;
- i = 0;
- while (i < cl->wlist.x_size / 4)
- {
- ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_bz[i]);
- i++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-static void
-*ft_wall_two(void *vargp)
-{
- t_cub *cl;
- uint16_t i;
-
- cl = (t_cub *)vargp;
- i = cl->wlist.x_size / 4;
- while (i < 2 * (cl->wlist.x_size / 4))
- {
- ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_bz[i]);
- i++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-static void
-*ft_wall_three(void *vargp)
-{
- t_cub *cl;
- uint16_t i;
-
- cl = (t_cub *)vargp;
- i = 2 * (cl->wlist.x_size / 4);
- while (i < 3 * (cl->wlist.x_size / 4))
- {
- ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_bz[i]);
- i++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
-static void
-*ft_wall_four(void *vargp)
-{
- t_cub *cl;
- uint16_t i;
-
- cl = (t_cub *)vargp;
- i = 3 * (cl->wlist.x_size / 4);
- while (i < 4 * (cl->wlist.x_size / 4))
- {
- ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_bz[i]);
- i++;
- }
- pthread_exit(0x0);
- return (0x0);
-}
-
void
*ft_wall_cast(void *vargp)
{
diff --git a/src/ft_wall_threads.c b/src/ft_wall_threads.c
new file mode 100644
index 0000000..30aa3b9
--- /dev/null
+++ b/src/ft_wall_threads.c
@@ -0,0 +1,83 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_wall_threads.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:22:23 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:23:42 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <cub3d.h>
+#include <stdint.h>
+#include <pthread.h>
+
+void
+ *ft_wall_one(void *vargp)
+{
+ t_cub *cl;
+ uint16_t i;
+
+ cl = (t_cub *)vargp;
+ i = 0;
+ while (i < cl->wlist.x_size / 4)
+ {
+ ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_b_tab[i]);
+ i++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_wall_two(void *vargp)
+{
+ t_cub *cl;
+ uint16_t i;
+
+ cl = (t_cub *)vargp;
+ i = cl->wlist.x_size / 4;
+ while (i < 2 * (cl->wlist.x_size / 4))
+ {
+ ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_b_tab[i]);
+ i++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_wall_three(void *vargp)
+{
+ t_cub *cl;
+ uint16_t i;
+
+ cl = (t_cub *)vargp;
+ i = 2 * (cl->wlist.x_size / 4);
+ while (i < 3 * (cl->wlist.x_size / 4))
+ {
+ ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_b_tab[i]);
+ i++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}
+
+void
+ *ft_wall_four(void *vargp)
+{
+ t_cub *cl;
+ uint16_t i;
+
+ cl = (t_cub *)vargp;
+ i = 3 * (cl->wlist.x_size / 4);
+ while (i < 4 * (cl->wlist.x_size / 4))
+ {
+ ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_b_tab[i]);
+ i++;
+ }
+ pthread_exit(0x0);
+ return (0x0);
+}