Refactor to comply with the Norm completely
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 17 Jan 2025 12:38:15 +0000 (13:38 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 17 Jan 2025 12:42:06 +0000 (13:42 +0100)
Makefile
inc/miniRT.h
src/color_conversion.c [new file with mode: 0644]
src/event_handlers.c [new file with mode: 0644]
src/event_transform.c [new file with mode: 0644]
src/main.c
src/mlx_helpers.c [new file with mode: 0644]
src/parse_rt.c
src/vec3.c
src/vec3_mul.c [new file with mode: 0644]

index 8363fde0a617465e28f8603fdf5fc5cfb4eaacfa..54a2d082131a4dbc026c385b8ff08aecb97a7c6d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,12 @@ SOURCES :=   main.c                          \
                        sphere.c                        \
                        plane.c                         \
                        object_color.c          \
+                       color_conversion.c      \
+                       event_transform.c       \
+                       event_handlers.c        \
+                       mlx_helpers.c           \
                        vec3.c                          \
+                       vec3_mul.c                      \
 
 SOURCES := $(addprefix $(SRCDIR)/, $(SOURCES))
 
index dc7241c5bad50218eab8754ae35c010b847b2589..002cb793acd4223cf884a203b9989dc328c15c0b 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/13 19:51:09 by ljiriste          #+#    #+#             */
-/*   Updated: 2025/01/17 12:23:18 by ljiriste         ###   ########.fr       */
+/*   Updated: 2025/01/17 13:37:18 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -183,6 +183,8 @@ int                         add_sphere(
 int                            add_cylinder(
                                        const t_parse_tree_node *cylinder_node, t_vec *objects);
 
+t_ray                  get_camera_ray(int x, int y, const t_session *s);
+
 double                 dist_point_from_line(const t_ray *ray, t_vec3 point);
 double                 dist_point_from_plane(const t_plane *plane, t_vec3 point);
 int                            is_behind_ray(const t_ray *ray, t_vec3 point);
@@ -209,13 +211,32 @@ t_vec                     get_intersection_args(const t_ray *ray, const t_object *object);
 double                 get_intersection_arg_min(
                                        const t_ray *ray, const t_object *object);
 
+t_color                        color_srgb_to_lin(t_color_srgb srgb);
+t_color_srgb   color_lin_to_srgb(t_color c);
 t_color                        get_object_color(const t_ray *ray, const t_object *object,
                                        t_scene *scene);
 
+void                   ft_putpx_img(t_img *img, int x, int y, t_color c);
+void                   draw(t_session *s);
+
 int                            rotate(t_element *element, t_vec3 rot_axis, double angle);
 void                   translate(
                                        t_element *element, t_vec3 direction, double distance);
 void                   change_radius(t_element *element, double change);
 void                   change_height(t_element *element, double change);
 
+int                            translate_keycode(
+                                       int keycode, t_element *element, t_vec3 axes[3]);
+int                            rotate_keycode(
+                                       int keycode, t_element *element, t_vec3 axes[3]);
+int                            change_keycode(
+                                       int keycode, t_element *element, t_scene *scene);
+int                            handle_key_press(int keycode, t_session *s);
+int                            handle_mouse_press(int button, int x, int y, t_session *s);
+int                            no_event_handle(__attribute__((unused)) t_session *s);
+
+void                   init_session(t_session *s);
+void                   free_session(t_session *s);
+int                            close_win(t_session *s);
+
 #endif // MINIRT_H
diff --git a/src/color_conversion.c b/src/color_conversion.c
new file mode 100644 (file)
index 0000000..4635aab
--- /dev/null
@@ -0,0 +1,58 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   color_conversion.c                                 :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/01/17 12:32:29 by ljiriste          #+#    #+#             */
+/*   Updated: 2025/01/17 13:00:03 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "miniRT.h"
+#include <math.h>
+
+static double  channel_srgb_to_lin(unsigned char srgb_channel)
+{
+       double  normalized;
+
+       normalized = srgb_channel / 255.;
+       if (normalized < 0.04045)
+               return (normalized / 12.92);
+       else
+               return (pow((normalized + 0.055) / 1.055, 2.4));
+}
+
+t_color        color_srgb_to_lin(t_color_srgb srgb)
+{
+       t_color res;
+
+       res.x = channel_srgb_to_lin(srgb.r);
+       res.y = channel_srgb_to_lin(srgb.g);
+       res.z = channel_srgb_to_lin(srgb.b);
+       return (res);
+}
+
+static unsigned char   channel_lin_to_srgb(double lin_channel)
+{
+       if (lin_channel < 0)
+               lin_channel = 0;
+       else if (lin_channel > 1)
+               lin_channel = 1;
+       if (lin_channel < 0.0031308)
+               return (255 * lin_channel * 12.92);
+       else
+               return (255 * (1.055 * pow(lin_channel, 1 / 2.4) - 0.055));
+}
+
+t_color_srgb   color_lin_to_srgb(t_color c)
+{
+       t_color_srgb    res;
+
+       res.a = 255;
+       res.r = channel_lin_to_srgb(c.x);
+       res.g = channel_lin_to_srgb(c.y);
+       res.b = channel_lin_to_srgb(c.z);
+       return (res);
+}
diff --git a/src/event_handlers.c b/src/event_handlers.c
new file mode 100644 (file)
index 0000000..58edd40
--- /dev/null
@@ -0,0 +1,121 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   event_handlers.c                                   :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/01/17 12:36:05 by ljiriste          #+#    #+#             */
+/*   Updated: 2025/01/17 13:41:40 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "miniRT.h"
+#include <X11/X.h>
+#include <X11/keysym.h>
+
+static const t_vec3    g_x_vec = {.x = 1, .y = 0, .z = 0};
+static const t_vec3    g_y_vec = {.x = 0, .y = 1, .z = 0};
+static const t_vec3    g_z_vec = {.x = 0, .y = 0, .z = 1};
+
+static void    cycle_keycode(int keycode, t_scene *scene)
+{
+       if (keycode == XK_l && scene->lights.size > 0)
+       {
+               if (scene->current_element && scene->current_element->type == LIGHT)
+                       scene->current_light_ind
+                               = (scene->current_light_ind + 1) % scene->lights.size;
+               scene->current_element
+                       = ft_vec_access(&scene->lights, scene->current_light_ind);
+       }
+       else if (keycode == XK_k && scene->lights.size > 0)
+       {
+               if (scene->current_element && scene->current_element->type == LIGHT)
+                       scene->current_light_ind
+                               = (scene->current_light_ind + scene->lights.size - 1)
+                               % scene->lights.size;
+               scene->current_element
+                       = ft_vec_access(&scene->lights, scene->current_light_ind);
+       }
+       else if (keycode == XK_c)
+               scene->current_camera_ind
+                       = (scene->current_camera_ind + 1) % scene->cameras.size;
+       else if (keycode == XK_x)
+               scene->current_camera_ind
+                       = (scene->current_camera_ind + scene->cameras.size - 1)
+                       % scene->cameras.size;
+       return ;
+}
+
+static void    setup_for_keypress_handle(t_session *s, t_element **element,
+               t_camera **camera, t_vec3 (*axes)[3])
+{
+       if (s->scene.current_element)
+               *element = s->scene.current_element;
+       else
+               *element
+                       = ft_vec_access(&s->scene.cameras, s->scene.current_camera_ind);
+       *camera = &(((t_element *)
+                               ft_vec_access(&s->scene.cameras, s->scene.current_camera_ind))
+                       ->object.camera);
+       if (s->scene.relative_directions)
+       {
+               (*axes)[0] = (*camera)->orientation;
+               (*axes)[1] = (*camera)->up_direction;
+               (*axes)[2] = vec_vec_mul((*axes)[1], (*axes)[0]);
+       }
+       else
+       {
+               (*axes)[0] = g_x_vec;
+               (*axes)[1] = g_z_vec;
+               (*axes)[2] = g_y_vec;
+       }
+       return ;
+}
+
+int    handle_key_press(int keycode, t_session *s)
+{
+       t_element       *element;
+       t_camera        *camera;
+       t_vec3          axes[3];
+
+       if (keycode == XK_Escape)
+       {
+               if (s->scene.current_element)
+                       s->scene.current_element = NULL;
+               else
+                       close_win(s);
+       }
+       else
+       {
+               setup_for_keypress_handle(s, &element, &camera, &axes);
+               if (!translate_keycode(keycode, element, axes)
+                       && !rotate_keycode(keycode, element, axes)
+                       && !change_keycode(keycode, element, &s->scene))
+                       cycle_keycode(keycode, &s->scene);
+       }
+       if (keycode != XK_Escape && keycode != XK_o
+               && keycode != XK_l && keycode != XK_k)
+               draw(s);
+       return (0);
+}
+
+int    handle_mouse_press(int button, int x, int y, t_session *s)
+{
+       t_ray   ray;
+
+       if (button == Button1)
+       {
+               ray = get_camera_ray(x, y, s);
+               s->scene.current_element
+                       = find_nearest_obstruction(&ray, &s->scene.objects, NULL).object;
+       }
+       else if (button == Button3)
+               s->scene.current_element = NULL;
+       return (0);
+}
+
+int    no_event_handle(__attribute__((unused)) t_session *s)
+{
+       return (0);
+}
diff --git a/src/event_transform.c b/src/event_transform.c
new file mode 100644 (file)
index 0000000..0c9d12c
--- /dev/null
@@ -0,0 +1,74 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   event_transform.c                                  :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/01/17 13:31:08 by ljiriste          #+#    #+#             */
+/*   Updated: 2025/01/17 13:36:20 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "miniRT.h"
+#include <X11/keysym.h>
+
+static const double    g_translation_step = 0.1;
+static const double    g_rotation_step = 0.1;
+
+static const double    g_resize_step = 0.1;
+
+int    translate_keycode(int keycode, t_element *element, t_vec3 axes[3])
+{
+       if (keycode == XK_Up)
+               translate(element, axes[0], g_translation_step);
+       else if (keycode == XK_Down)
+               translate(element, axes[0], -g_translation_step);
+       else if (keycode == XK_Left)
+               translate(element, axes[2], -g_translation_step);
+       else if (keycode == XK_Right)
+               translate(element, axes[2], g_translation_step);
+       else if (keycode == XK_space)
+               translate(element, axes[1], g_translation_step);
+       else if (keycode == XK_Shift_L)
+               translate(element, axes[1], -g_translation_step);
+       else
+               return (0);
+       return (1);
+}
+
+int    rotate_keycode(int keycode, t_element *element, t_vec3 axes[3])
+{
+       if (keycode == XK_w)
+               rotate(element, axes[2], g_rotation_step);
+       else if (keycode == XK_s)
+               rotate(element, axes[2], -g_rotation_step);
+       else if (keycode == XK_a)
+               rotate(element, axes[1], -g_rotation_step);
+       else if (keycode == XK_d)
+               rotate(element, axes[1], g_rotation_step);
+       else if (keycode == XK_e)
+               rotate(element, axes[0], -g_rotation_step);
+       else if (keycode == XK_q)
+               rotate(element, axes[0], g_rotation_step);
+       else
+               return (0);
+       return (1);
+}
+
+int    change_keycode(int keycode, t_element *element, t_scene *scene)
+{
+       if (keycode == XK_r)
+               change_radius(element, g_resize_step);
+       else if (keycode == XK_t)
+               change_radius(element, -g_resize_step);
+       else if (keycode == XK_f)
+               change_height(element, g_resize_step);
+       else if (keycode == XK_g)
+               change_height(element, -g_resize_step);
+       else if (keycode == XK_o)
+               scene->relative_directions = !scene->relative_directions;
+       else
+               return (0);
+       return (1);
+}
index 66e53126817d1394871b130a9693a4e4697b3577..8273fd00882850131f9b2b0a87c23f6aac9ee2c5 100644 (file)
@@ -6,91 +6,16 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/13 17:16:00 by ljiriste          #+#    #+#             */
-/*   Updated: 2025/01/17 11:57:23 by ljiriste         ###   ########.fr       */
+/*   Updated: 2025/01/17 13:28:58 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "vec3.h"
 #include "miniRT.h"
-#include <mlx.h>
-#include <X11/X.h>
-#include <X11/keysym.h>
 #include <math.h>
 #include <limits.h>
 #include <stdlib.h>
-
-void   *get_pixel(t_img *img, int x, int y)
-{
-       return (img->addr + y * img->bpl + x * img->bpp / CHAR_BIT);
-}
-
-double channel_srgb_to_lin(unsigned char srgb_channel)
-{
-       double  normalized;
-
-       normalized = srgb_channel / 255.;
-       if (normalized < 0.04045)
-               return (normalized / 12.92);
-       else
-               return (pow((normalized + 0.055) / 1.055, 2.4));
-}
-
-t_color        color_srgb_to_lin(t_color_srgb srgb)
-{
-       t_color res;
-
-       res.x = channel_srgb_to_lin(srgb.r);
-       res.y = channel_srgb_to_lin(srgb.g);
-       res.z = channel_srgb_to_lin(srgb.b);
-       return (res);
-}
-
-unsigned char  channel_lin_to_srgb(double lin_channel)
-{
-       if (lin_channel < 0)
-               lin_channel = 0;
-       else if (lin_channel > 1)
-               lin_channel = 1;
-       if (lin_channel < 0.0031308)
-               return (255 * lin_channel * 12.92);
-       else
-               return (255 * (1.055 * pow(lin_channel, 1 / 2.4) - 0.055));
-}
-
-t_color_srgb   color_lin_to_srgb(t_color c)
-{
-       t_color_srgb    res;
-
-       res.a = 255;
-       res.r = channel_lin_to_srgb(c.x);
-       res.g = channel_lin_to_srgb(c.y);
-       res.b = channel_lin_to_srgb(c.z);
-       return (res);
-}
-
-void   ft_putpx_img(t_img *img, int x, int y, t_color c)
-{
-       char                    *px_addr;
-       t_color_srgb    srgb_c;
-
-       srgb_c = color_lin_to_srgb(c);
-       px_addr = get_pixel(img, x, y);
-       if (img->endian)
-       {
-               px_addr[0] = srgb_c.a;
-               px_addr[1] = srgb_c.r;
-               px_addr[2] = srgb_c.g;
-               px_addr[3] = srgb_c.b;
-       }
-       else
-       {
-               px_addr[3] = srgb_c.a;
-               px_addr[2] = srgb_c.r;
-               px_addr[1] = srgb_c.g;
-               px_addr[0] = srgb_c.b;
-       }
-       return ;
-}
+#include <mlx.h>
+#include <X11/X.h>
 
 t_ray  get_camera_ray(int x, int y, const t_session *s)
 {
@@ -142,156 +67,7 @@ void       draw(t_session *s)
        return ;
 }
 
-int    close_win(t_session *s)
-{
-       mlx_destroy_window(s->mlx, s->win);
-       s->win = NULL;
-       return (0);
-}
-
-static const double    g_translation_step = 0.1;
-static const double    g_rotation_step = 0.1;
-static const double    g_resize_step = 0.1;
-
-static const t_vec3    g_x_vec = {.x = 1, .y = 0, .z = 0};
-static const t_vec3    g_y_vec = {.x = 0, .y = 1, .z = 0};
-static const t_vec3    g_z_vec = {.x = 0, .y = 0, .z = 1};
-
-int    handle_key_press(int keycode, t_session *s)
-{
-       t_element       *element;
-       t_camera        *camera;
-       t_vec3          forwards;
-       t_vec3          upwards;
-       t_vec3          sidewards;
-
-       if (s->scene.current_element)
-               element = s->scene.current_element;
-       else
-               element = ft_vec_access(&s->scene.cameras, s->scene.current_camera_ind);
-       camera = &(((t_element *)
-                               ft_vec_access(&s->scene.cameras, s->scene.current_camera_ind))
-                       ->object.camera);
-       if (s->scene.relative_directions)
-       {
-               forwards = camera->orientation;
-               upwards = camera->up_direction;
-               sidewards = vec_vec_mul(upwards, forwards);
-       }
-       else
-       {
-               forwards = g_x_vec;
-               upwards = g_z_vec;
-               sidewards = g_y_vec;
-       }
-       if (keycode == XK_Escape)
-       {
-               if (s->scene.current_element)
-                       s->scene.current_element = NULL;
-               else
-                       close_win(s);
-       }
-       else if (keycode == XK_Up)
-               translate(element, forwards, g_translation_step);
-       else if (keycode == XK_Down)
-               translate(element, forwards, -g_translation_step);
-       else if (keycode == XK_Left)
-               translate(element, sidewards, -g_translation_step);
-       else if (keycode == XK_Right)
-               translate(element, sidewards, g_translation_step);
-       else if (keycode == XK_space)
-               translate(element, upwards, g_translation_step);
-       else if (keycode == XK_Shift_L)
-               translate(element, upwards, -g_translation_step);
-       else if (keycode == XK_w)
-               rotate(element, sidewards, g_rotation_step);
-       else if (keycode == XK_s)
-               rotate(element, sidewards, -g_rotation_step);
-       else if (keycode == XK_a)
-               rotate(element, upwards, -g_rotation_step);
-       else if (keycode == XK_d)
-               rotate(element, upwards, g_rotation_step);
-       else if (keycode == XK_e)
-               rotate(element, forwards, -g_rotation_step);
-       else if (keycode == XK_q)
-               rotate(element, forwards, g_rotation_step);
-       else if (keycode == XK_r)
-               change_radius(element, g_resize_step);
-       else if (keycode == XK_t)
-               change_radius(element, -g_resize_step);
-       else if (keycode == XK_f)
-               change_height(element, g_resize_step);
-       else if (keycode == XK_g)
-               change_height(element, -g_resize_step);
-       else if (keycode == XK_o)
-               s->scene.relative_directions = !s->scene.relative_directions;
-       else if (keycode == XK_l && s->scene.lights.size > 0)
-       {
-               if (s->scene.current_element && s->scene.current_element->type == LIGHT)
-                       s->scene.current_light_ind
-                               = (s->scene.current_light_ind + 1) % s->scene.lights.size;
-               s->scene.current_element
-                       = ft_vec_access(&s->scene.lights, s->scene.current_light_ind);
-       }
-       else if (keycode == XK_k && s->scene.lights.size > 0)
-       {
-               if (s->scene.current_element && s->scene.current_element->type == LIGHT)
-                       s->scene.current_light_ind
-                               = (s->scene.current_light_ind + s->scene.lights.size - 1)
-                               % s->scene.lights.size;
-               s->scene.current_element
-                       = ft_vec_access(&s->scene.lights, s->scene.current_light_ind);
-       }
-       else if (keycode == XK_c)
-               s->scene.current_camera_ind
-                       = (s->scene.current_camera_ind + 1) % s->scene.cameras.size;
-       else if (keycode == XK_x)
-               s->scene.current_camera_ind
-                       = (s->scene.current_camera_ind + s->scene.cameras.size - 1)
-                       % s->scene.cameras.size;
-       if (keycode != XK_Escape && keycode != XK_o
-               && keycode != XK_l && keycode != XK_k)
-               draw(s);
-       return (0);
-}
-
-int    handle_mouse_press(int button, int x, int y, t_session *s)
-{
-       t_ray   ray;
-
-       if (button == Button1)
-       {
-               ray = get_camera_ray(x, y, s);
-               s->scene.current_element
-                       = find_nearest_obstruction(&ray, &s->scene.objects, NULL).object;
-       }
-       else if (button == Button3)
-               s->scene.current_element = NULL;
-       return (0);
-}
-
-int    no_event_handle(__attribute__((unused)) t_session *s)
-{
-       return (0);
-}
-
-void   init_session(t_session *s)
-{
-       s->mlx = mlx_init();
-       s->win = mlx_new_window(s->mlx, s->img.width, s->img.height, "miniRT");
-       s->img.img = mlx_new_image(s->mlx, s->img.width, s->img.height);
-       s->img.addr = mlx_get_data_addr(s->img.img,
-                       &s->img.bpp, &s->img.bpl, &s->img.endian);
-}
-
-static void    free_session(t_session *s)
-{
-       mlx_destroy_display(s->mlx);
-       free(s->mlx);
-       return ;
-}
-
-void   cleanup(t_session *s)
+static void    cleanup(t_session *s)
 {
        mlx_destroy_image(s->mlx, s->img.img);
        free_session(s);
@@ -301,7 +77,7 @@ void cleanup(t_session *s)
        return ;
 }
 
-void   set_defaults(t_session *s)
+static void    set_defaults(t_session *s)
 {
        s->img.width = 1920;
        s->img.height = 1011;
diff --git a/src/mlx_helpers.c b/src/mlx_helpers.c
new file mode 100644 (file)
index 0000000..ff38ab4
--- /dev/null
@@ -0,0 +1,68 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   mlx_helpers.c                                      :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/01/17 13:23:32 by ljiriste          #+#    #+#             */
+/*   Updated: 2025/01/17 13:27:43 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "miniRT.h"
+#include <stdlib.h>
+#include <limits.h>
+#include <mlx.h>
+
+static void    *get_pixel(t_img *img, int x, int y)
+{
+       return (img->addr + y * img->bpl + x * img->bpp / CHAR_BIT);
+}
+
+void   ft_putpx_img(t_img *img, int x, int y, t_color c)
+{
+       char                    *px_addr;
+       t_color_srgb    srgb_c;
+
+       srgb_c = color_lin_to_srgb(c);
+       px_addr = get_pixel(img, x, y);
+       if (img->endian)
+       {
+               px_addr[0] = srgb_c.a;
+               px_addr[1] = srgb_c.r;
+               px_addr[2] = srgb_c.g;
+               px_addr[3] = srgb_c.b;
+       }
+       else
+       {
+               px_addr[3] = srgb_c.a;
+               px_addr[2] = srgb_c.r;
+               px_addr[1] = srgb_c.g;
+               px_addr[0] = srgb_c.b;
+       }
+       return ;
+}
+
+void   init_session(t_session *s)
+{
+       s->mlx = mlx_init();
+       s->win = mlx_new_window(s->mlx, s->img.width, s->img.height, "miniRT");
+       s->img.img = mlx_new_image(s->mlx, s->img.width, s->img.height);
+       s->img.addr = mlx_get_data_addr(s->img.img,
+                       &s->img.bpp, &s->img.bpl, &s->img.endian);
+}
+
+void   free_session(t_session *s)
+{
+       mlx_destroy_display(s->mlx);
+       free(s->mlx);
+       return ;
+}
+
+int    close_win(t_session *s)
+{
+       mlx_destroy_window(s->mlx, s->win);
+       s->win = NULL;
+       return (0);
+}
index 5d464899f7aeb47c401ded9c50cd827c8b0c0bf0..1548fb948397f70d37dbb5d954e4949edde93c9c 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/14 15:09:41 by ljiriste          #+#    #+#             */
-/*   Updated: 2025/01/17 12:04:15 by ljiriste         ###   ########.fr       */
+/*   Updated: 2025/01/17 12:28:38 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -65,7 +65,8 @@ static int    add_element_to_scene(
        return (0);
 }
 
-static t_res   parse_tree_to_scene(const t_parse_tree_node *tree, t_scene *scene)
+static t_res   parse_tree_to_scene(
+                                       const t_parse_tree_node *tree, t_scene *scene)
 {
        if (!tree)
                return (PARSING_ERROR);
index a0a54a3635bad482c3f8f2b8954bcff7c37b74f2..c46b3826060fa8cbb5c945aef0e6b6fc749b1bae 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/13 19:44:03 by ljiriste          #+#    #+#             */
-/*   Updated: 2025/01/13 19:44:28 by ljiriste         ###   ########.fr       */
+/*   Updated: 2025/01/17 12:30:27 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -33,41 +33,6 @@ t_vec3       vec_diff(t_vec3 v, t_vec3 u)
        return (res);
 }
 
-t_vec3 vec_real_mul(t_vec3 vec, double real)
-{
-       t_vec3  res;
-
-       res.x = real * vec.x;
-       res.y = real * vec.y;
-       res.z = real * vec.z;
-       return (res);
-}
-
-double vec_scalar_mul(t_vec3 v, t_vec3 u)
-{
-       return (v.x * u.x + v.y * u.y + v.z * u.z);
-}
-
-t_vec3 vec_elwise_mul(t_vec3 v, t_vec3 u)
-{
-       t_vec3  res;
-
-       res.x = v.x * u.x;
-       res.y = v.y * u.y;
-       res.z = v.z * u.z;
-       return (res);
-}
-
-t_vec3 vec_vec_mul(t_vec3 v, t_vec3 u)
-{
-       t_vec3  res;
-
-       res.x = v.y * u.z - v.z * u.y;
-       res.y = v.z * u.x - v.x * u.z;
-       res.z = v.x * u.y - v.y * u.x;
-       return (res);
-}
-
 double vec_norm(t_vec3 vec)
 {
        return (sqrt(vec_scalar_mul(vec, vec)));
diff --git a/src/vec3_mul.c b/src/vec3_mul.c
new file mode 100644 (file)
index 0000000..9544a88
--- /dev/null
@@ -0,0 +1,48 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   vec3_mul.c                                         :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/01/17 12:29:10 by ljiriste          #+#    #+#             */
+/*   Updated: 2025/01/17 12:30:55 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "vec3.h"
+
+t_vec3 vec_real_mul(t_vec3 vec, double real)
+{
+       t_vec3  res;
+
+       res.x = real * vec.x;
+       res.y = real * vec.y;
+       res.z = real * vec.z;
+       return (res);
+}
+
+double vec_scalar_mul(t_vec3 v, t_vec3 u)
+{
+       return (v.x * u.x + v.y * u.y + v.z * u.z);
+}
+
+t_vec3 vec_elwise_mul(t_vec3 v, t_vec3 u)
+{
+       t_vec3  res;
+
+       res.x = v.x * u.x;
+       res.y = v.y * u.y;
+       res.z = v.z * u.z;
+       return (res);
+}
+
+t_vec3 vec_vec_mul(t_vec3 v, t_vec3 u)
+{
+       t_vec3  res;
+
+       res.x = v.y * u.z - v.z * u.y;
+       res.y = v.z * u.x - v.x * u.z;
+       res.z = v.x * u.y - v.y * u.x;
+       return (res);
+}