diff --git a/MacroLibX/example/42_logo.bmp b/MacroLibX/example/42_logo.bmp new file mode 100644 index 0000000..299dacc Binary files /dev/null and b/MacroLibX/example/42_logo.bmp differ diff --git a/MacroLibX/example/42_logo.jpg b/MacroLibX/example/42_logo.jpg new file mode 100644 index 0000000..c40c51b Binary files /dev/null and b/MacroLibX/example/42_logo.jpg differ diff --git a/MacroLibX/example/build.sh b/MacroLibX/example/build.sh index 4405e9d..b332c18 100755 --- a/MacroLibX/example/build.sh +++ b/MacroLibX/example/build.sh @@ -7,6 +7,6 @@ fi if [ $(uname -s) = 'Darwin' ]; then clang main.c ../libmlx.dylib -L /opt/homebrew/lib -lSDL2 -g; else - clang main.c ../libmlx.so -lSDL2 -g; + clang main.c ../libmlx.so -lSDL2 -g -Wall -Wextra -Werror; fi diff --git a/MacroLibX/example/main.c b/MacroLibX/example/main.c index de17d3c..57d9c94 100644 --- a/MacroLibX/example/main.c +++ b/MacroLibX/example/main.c @@ -6,118 +6,162 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:55:21 by maldavid #+# #+# */ -/* Updated: 2024/01/11 15:03:14 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 15:23:35 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include -#include #include "../includes/mlx.h" -typedef struct s_mlx +typedef struct { - void *mlx; - void *win; - void *logo; - void *img; -} t_mlx; + void* mlx; + void* win; + void* logo_png; + void* logo_jpg; + void* logo_bmp; + void* img; +} mlx_t; -int update(void *param) +int update(void* param) { - static int i = 0; - int j; - int k; - t_mlx *mlx; + static int i = 0; + mlx_t* mlx = (mlx_t*)param; - mlx = (t_mlx *)param; + mlx_set_font_scale(mlx->mlx, mlx->win, "default", 6.f); mlx_string_put(mlx->mlx, mlx->win, 160, 120, 0xFFFF2066, "this text should be hidden"); - mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo, 100, 100); + + mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_png, 100, 100); + mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_jpg, 210, 150); + mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_bmp, 220, 40); mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60); - if (i == 0) - mlx_set_font_scale(mlx->mlx, mlx->win, "font.ttf", 16.f); + mlx_string_put(mlx->mlx, mlx->win, 20, 50, 0xFFFFFFFF, "that's a text"); - j = 0; - k = 0; - while (j++ < 400) + + int color = 0; + for(int j = 0; j < 400; j++) { - mlx_pixel_put(mlx->mlx, mlx->win, j, j, 0xFFFF0000 + k); + mlx_pixel_put(mlx->mlx, mlx->win, j, j, 0xFFFF0000 + color); mlx_pixel_put(mlx->mlx, mlx->win, 399 - j, j, 0xFF0000FF); - k += (k < 255); + color += (color < 255); } - if (++i == 5000) + + if(++i == 5000) mlx_clear_window(mlx->mlx, mlx->win); - if (i == 7000) + if(i == 7000) mlx_set_font_scale(mlx->mlx, mlx->win, "default", 16.f); - return (0); + + return 0; } -void *create_image(t_mlx *mlx) +void* create_image(mlx_t* mlx) { - unsigned char pixel[4]; - int i[3]; - void *img; - - memset(i, 0, sizeof(int) * 3); - img = mlx_new_image(mlx->mlx, 100, 100); - while (i[0] < (100 * 100) * 4) + unsigned char pixel[4]; + void* img = mlx_new_image(mlx->mlx, 100, 100); + for(int i = 0, j = 0, k = 0; i < (100 * 100) * 4; i += 4, j++) { - if (i[0] < 10000 || i[0] > 20000) + if(j >= 100) { - pixel[0] = i[0]; - pixel[1] = i[1]; - pixel[2] = i[2]; - pixel[3] = 0x99; - mlx_set_image_pixel(mlx->mlx, img, i[1], i[2], *((int *)pixel)); + j = 0; + k++; } - i[0] += 4; - i[1]++; - if (i[1] >= 100) + if(i < 10000 || i > 20000) { - i[1] = 0; - i[2]++; + pixel[0] = i; + pixel[1] = j; + pixel[2] = k; + pixel[3] = 0x99; + mlx_set_image_pixel(mlx->mlx, img, j, k, *((int *)pixel)); } } - return (img); + return img; } -int key_hook(int key, void *param) +int key_hook(int key, void* param) { - if (key == 41) - mlx_loop_end(((t_mlx *)param)->mlx); - return (0); + int x; + int y; + mlx_t* mlx = (mlx_t*)param; + + mlx_mouse_get_pos(mlx->mlx, &x, &y); + switch(key) + { + case 41 : // ESCAPE + mlx_loop_end(mlx->mlx); + break; + case 22 : // (S)how + mlx_mouse_show(); + break; + case 11 : // (H)ide + mlx_mouse_hide(); + break; + case 6 : // (C)lear + mlx_clear_window(mlx->mlx, mlx->win); + break; + case 79 : // RIGHT KEY + mlx_mouse_move(mlx->mlx, mlx->win, x + 10, y); + break; + case 80 : // LEFT KEY + mlx_mouse_move(mlx->mlx, mlx->win, x - 10, y); + break; + case 81 : // UP KEY + mlx_mouse_move(mlx->mlx, mlx->win, x, y + 10); + break; + case 82 : // DOWN KEY + mlx_mouse_move(mlx->mlx, mlx->win, x, y - 10); + break; + + default : break; + } + return 0; } -int window_hook(int event, void *param) +int window_hook(int event, void* param) { - if (event == 0) - mlx_loop_end(((t_mlx *)param)->mlx); - return (0); + if(event == 0) + mlx_loop_end(((mlx_t*)param)->mlx); + return 0; } -int main(int argc, char **argv) +int main(void) { - t_mlx mlx; - void *img; - int w; - int h; + mlx_t mlx; + int w; + int h; + int dummy; - (void)argc; - (void)argv; mlx.mlx = mlx_init(); mlx.win = mlx_new_window(mlx.mlx, 400, 400, "My window"); + + mlx_set_fps_goal(mlx.mlx, 60); + mlx_on_event(mlx.mlx, mlx.win, MLX_KEYDOWN, key_hook, &mlx); mlx_on_event(mlx.mlx, mlx.win, MLX_WINDOW_EVENT, window_hook, &mlx); - mlx.logo = mlx_png_file_to_image(mlx.mlx, "42_logo.png", &w, &h); + + mlx.logo_png = mlx_png_file_to_image(mlx.mlx, "42_logo.png", &dummy, &dummy); + mlx.logo_bmp = mlx_bmp_file_to_image(mlx.mlx, "42_logo.bmp", &dummy, &dummy); + mlx.logo_jpg = mlx_jpg_file_to_image(mlx.mlx, "42_logo.jpg", &dummy, &dummy); + mlx_pixel_put(mlx.mlx, mlx.win, 200, 10, 0xFFFF00FF); - mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo, 10, 190); + mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo_png, 10, 190); + mlx.img = create_image(&mlx); - mlx_string_put(mlx.mlx, mlx.win, 20, 20, 0xFF0020FF, \ - "that text will disappear"); + + mlx_set_font_scale(mlx.mlx, mlx.win, "font.ttf", 16.f); + mlx_string_put(mlx.mlx, mlx.win, 20, 20, 0xFF0020FF, "that text will disappear"); + mlx_loop_hook(mlx.mlx, update, &mlx); mlx_loop(mlx.mlx); - mlx_destroy_image(mlx.mlx, mlx.logo); + + mlx_get_screens_size(mlx.mlx, mlx.win, &w, &h); + printf("screen size : %dx%d\n", w, h); + + mlx_destroy_image(mlx.mlx, mlx.logo_png); + mlx_destroy_image(mlx.mlx, mlx.logo_jpg); + mlx_destroy_image(mlx.mlx, mlx.logo_bmp); mlx_destroy_image(mlx.mlx, mlx.img); mlx_destroy_window(mlx.mlx, mlx.win); mlx_destroy_display(mlx.mlx); - return (0); + + return 0; } diff --git a/MacroLibX/includes/mlx.h b/MacroLibX/includes/mlx.h index 6c5c733..14e4a0e 100644 --- a/MacroLibX/includes/mlx.h +++ b/MacroLibX/includes/mlx.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */ -/* Updated: 2024/01/05 19:53:13 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 14:36:12 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -349,15 +349,27 @@ MLX_API int mlx_destroy_display(void* mlx); /** - * @brief Get screen size + * @brief Get the size of the screen the given window is on * * @param mlx Internal MLX application + * @param win Internal window * @param w Get width size * @param h Get height size * * @return (int) Always return 0, made this to copy the behaviour of the original MLX */ -MLX_API int mlx_get_screens_size(void* mlx, int* w, int* h); +MLX_API int mlx_get_screens_size(void* mlx, void* win, int* w, int* h); + + +/** + * @brief Caps the FPS + * + * @param mlx Internal MLX application + * @param fps The FPS cap + * + * @return (int) Always return 0 + */ +MLX_API int mlx_set_fps_goal(void* mlx, int fps); #ifdef __cplusplus } diff --git a/MacroLibX/scripts/fetch_dependencies.sh b/MacroLibX/scripts/fetch_dependencies.sh old mode 100644 new mode 100755 diff --git a/MacroLibX/src/core/application.cpp b/MacroLibX/src/core/application.cpp index 514df83..b8a02f7 100644 --- a/MacroLibX/src/core/application.cpp +++ b/MacroLibX/src/core/application.cpp @@ -6,12 +6,13 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 22:10:52 by maldavid #+# #+# */ -/* Updated: 2024/01/11 05:08:42 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 15:19:58 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include "application.h" #include +#include #include #include #include @@ -23,8 +24,9 @@ namespace mlx::core { static bool __drop_sdl_responsability = false; - Application::Application() : _in(std::make_unique()) + Application::Application() : _fps(), _in(std::make_unique()) { + _fps.init(); __drop_sdl_responsability = SDL_WasInit(SDL_INIT_VIDEO); if(__drop_sdl_responsability) // is case the mlx is running in a sandbox like MacroUnitTester where SDL is already init return; @@ -37,6 +39,8 @@ namespace mlx::core { while(_in->is_running()) { + if(!_fps.update()) + continue; _in->update(); if(_loop_hook) @@ -84,6 +88,7 @@ namespace mlx::core Application::~Application() { TextLibrary::get().clearLibrary(); + FontLibrary::get().clearLibrary(); if(__drop_sdl_responsability) return; SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_EVENTS); diff --git a/MacroLibX/src/core/application.h b/MacroLibX/src/core/application.h index 6b4ee97..a4bb649 100644 --- a/MacroLibX/src/core/application.h +++ b/MacroLibX/src/core/application.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 21:49:46 by maldavid #+# #+# */ -/* Updated: 2024/01/10 19:57:12 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 14:59:47 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,7 @@ #include #include #include +#include namespace mlx::core { @@ -39,7 +40,9 @@ namespace mlx::core inline void onEvent(void* win, int event, int (*funct_ptr)(int, void*), void* param) noexcept; - inline void getScreenSize(int* w, int* h) noexcept; + inline void getScreenSize(void* win, int* w, int* h) noexcept; + + inline void setFPSCap(uint32_t fps) noexcept; inline void* newGraphicsSuport(std::size_t w, std::size_t h, const char* title); inline void clearGraphicsSupport(void* win); @@ -65,6 +68,7 @@ namespace mlx::core ~Application(); private: + FpsManager _fps; std::list _textures; std::vector> _graphics; std::function _loop_hook; diff --git a/MacroLibX/src/core/application.inl b/MacroLibX/src/core/application.inl index c942efb..dbc2f5c 100644 --- a/MacroLibX/src/core/application.inl +++ b/MacroLibX/src/core/application.inl @@ -42,7 +42,6 @@ namespace mlx::core } SDL_WarpMouseInWindow(_graphics[*static_cast(win)]->getWindow()->getNativeWindow(), x, y); SDL_PumpEvents(); - SDL_FlushEvent(SDL_MOUSEMOTION); } void Application::onEvent(void* win, int event, int (*funct_ptr)(int, void*), void* param) noexcept @@ -56,14 +55,20 @@ namespace mlx::core _in->onEvent(_graphics[*static_cast(win)]->getWindow()->getID(), event, funct_ptr, param); } - void Application::getScreenSize(int* w, int* h) noexcept + void Application::getScreenSize(void* win, int* w, int* h) noexcept { + CHECK_WINDOW_PTR(win); SDL_DisplayMode DM; - SDL_GetDesktopDisplayMode(0, &DM); + SDL_GetDesktopDisplayMode(SDL_GetWindowDisplayIndex(_graphics[*static_cast(win)]->getWindow()->getNativeWindow()), &DM); *w = DM.w; *h = DM.h; } + void Application::setFPSCap(uint32_t fps) noexcept + { + _fps.setMaxFPS(fps); + } + void* Application::newGraphicsSuport(std::size_t w, std::size_t h, const char* title) { MLX_PROFILE_FUNCTION(); diff --git a/MacroLibX/src/core/bridge.cpp b/MacroLibX/src/core/bridge.cpp index f2d947b..e714b6b 100644 --- a/MacroLibX/src/core/bridge.cpp +++ b/MacroLibX/src/core/bridge.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:35:20 by maldavid #+# #+# */ -/* Updated: 2024/01/10 19:54:51 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 15:02:06 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,6 +47,11 @@ extern "C" void* mlx_new_window(void* mlx, int w, int h, const char* title) { MLX_CHECK_APPLICATION_POINTER(mlx); + if(w <= 0 || h <= 0) + { + mlx::core::error::report(e_kind::fatal_error, "invalid window size (%d x %d)", w, h); + return NULL; // not nullptr for the C compatibility + } return static_cast(mlx)->newGraphicsSuport(w, h, title); } @@ -73,12 +78,14 @@ extern "C" int mlx_mouse_show() { - return SDL_ShowCursor(SDL_ENABLE); + SDL_ShowCursor(SDL_ENABLE); + return 0; } int mlx_mouse_hide() { - return SDL_ShowCursor(SDL_DISABLE); + SDL_ShowCursor(SDL_DISABLE); + return 0; } int mlx_mouse_move(void* mlx, void* win, int x, int y) @@ -105,6 +112,8 @@ extern "C" void* mlx_new_image(void* mlx, int width, int height) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (width <= 0 || height <= 0) + mlx::core::error::report(e_kind::fatal_error, "invalid image size (%d x %d)", width, height); return static_cast(mlx)->newTexture(width, height); } @@ -142,6 +151,8 @@ extern "C" void* mlx_png_file_to_image(void* mlx, char* filename, int* width, int* height) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (filename == nullptr) + mlx::core::error::report(e_kind::fatal_error, "PNG loader : filename is NULL"); std::filesystem::path file(filename); if(file.extension() != ".png") { @@ -154,6 +165,8 @@ extern "C" void* mlx_jpg_file_to_image(void* mlx, char* filename, int* width, int* height) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (filename == nullptr) + mlx::core::error::report(e_kind::fatal_error, "JPG loader : filename is NULL"); std::filesystem::path file(filename); if(file.extension() != ".jpg" && file.extension() != ".jpeg") { @@ -166,6 +179,8 @@ extern "C" void* mlx_bmp_file_to_image(void* mlx, char* filename, int* width, int* height) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (filename == nullptr) + mlx::core::error::report(e_kind::fatal_error, "BMP loader : filename is NULL"); std::filesystem::path file(filename); if(file.extension() != ".bmp" && file.extension() != ".dib") { @@ -202,6 +217,11 @@ extern "C" void mlx_set_font(void* mlx, void* win, char* filepath) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (filepath == nullptr) + { + mlx::core::error::report(e_kind::error, "Font loader : filepath is NULL"); + return; + } std::filesystem::path file(filepath); if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte") { @@ -214,6 +234,11 @@ extern "C" void mlx_set_font_scale(void* mlx, void* win, char* filepath, float scale) { MLX_CHECK_APPLICATION_POINTER(mlx); + if (filepath == nullptr) + { + mlx::core::error::report(e_kind::error, "Font loader : filepath is NULL"); + return; + } std::filesystem::path file(filepath); if(std::strcmp(filepath, "default") != 0 && file.extension() != ".ttf" && file.extension() != ".tte") { @@ -246,10 +271,27 @@ extern "C" return 0; } - int mlx_get_screens_size(void* mlx, int* w, int* h) + int mlx_get_screens_size(void* mlx, void* win, int* w, int* h) { MLX_CHECK_APPLICATION_POINTER(mlx); - static_cast(mlx)->getScreenSize(w, h); + static_cast(mlx)->getScreenSize(win, w, h); + return 0; + } + + int mlx_set_fps_goal(void* mlx, int fps) + { + MLX_CHECK_APPLICATION_POINTER(mlx); + if(fps < 0) + { + mlx::core::error::report(e_kind::error, "You cannot set a negative FPS cap (nice try)"); + fps = -fps; + } + if(fps == 0) + { + mlx::core::error::report(e_kind::error, "You cannot set a FPS cap to 0 (nice try)"); + return 0; + } + static_cast(mlx)->setFPSCap(static_cast(fps)); return 0; } } diff --git a/MacroLibX/src/core/fps.cpp b/MacroLibX/src/core/fps.cpp new file mode 100644 index 0000000..db76414 --- /dev/null +++ b/MacroLibX/src/core/fps.cpp @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* fps.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maldavid +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/18 14:56:17 by maldavid #+# #+# */ +/* Updated: 2024/01/18 15:20:03 by maldavid ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include + +namespace mlx +{ + void FpsManager::init() + { + _timer = SDL_GetTicks64(); + _fps_before = static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()); + _fps_now = static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()); + } + + bool FpsManager::update() + { + using namespace std::chrono_literals; + _fps_now = static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()); + + if(SDL_GetTicks64() - _timer > 1000) + _timer += 1000; + + _fps_elapsed_time = _fps_now - _fps_before; + if(_fps_elapsed_time >= _ns) + { + _fps_before += _ns; + return true; + } + std::this_thread::sleep_for(std::chrono::duration(_ns)); + return false; + } +} diff --git a/MacroLibX/src/core/fps.h b/MacroLibX/src/core/fps.h new file mode 100644 index 0000000..80f25db --- /dev/null +++ b/MacroLibX/src/core/fps.h @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* fps.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maldavid +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/18 14:53:30 by maldavid #+# #+# */ +/* Updated: 2024/01/18 15:16:06 by maldavid ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef __MLX_FPS__ +#define __MLX_FPS__ + +#include + +namespace mlx +{ + class FpsManager + { + public: + FpsManager() = default; + + void init(); + bool update(); + inline void setMaxFPS(uint32_t fps) noexcept { _max_fps = fps; _ns = 1000000000.0 / fps; } + + ~FpsManager() = default; + + private: + double _ns = 1000000000.0 / 1'337'000.0; + uint64_t _timer = 0; + uint64_t _fps_before = 0; + uint64_t _fps_now = 0; + uint32_t _max_fps = 1'337'000; + uint32_t _fps_elapsed_time = 0; + }; +} + +#endif diff --git a/MacroLibX/src/platform/inputs.cpp b/MacroLibX/src/platform/inputs.cpp index 412732a..738fa1b 100644 --- a/MacroLibX/src/platform/inputs.cpp +++ b/MacroLibX/src/platform/inputs.cpp @@ -6,13 +6,12 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/05 16:30:19 by maldavid #+# #+# */ -/* Updated: 2024/01/10 18:31:13 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 07:59:15 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include "inputs.h" #include -#include #include namespace mlx @@ -35,7 +34,7 @@ namespace mlx } uint32_t id = _event.window.windowID; - if(!_events_hooks.count(id)) + if(_events_hooks.find(id) == _events_hooks.end()) continue; auto& hooks = _events_hooks[id]; diff --git a/MacroLibX/src/platform/inputs.h b/MacroLibX/src/platform/inputs.h index fb663fc..e550009 100644 --- a/MacroLibX/src/platform/inputs.h +++ b/MacroLibX/src/platform/inputs.h @@ -6,15 +6,14 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/05 16:27:35 by maldavid #+# #+# */ -/* Updated: 2023/12/11 19:47:20 by vavaas ### ########.fr */ +/* Updated: 2024/01/16 07:59:08 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include #include -#include #include -#include +#include #include #include @@ -26,7 +25,7 @@ namespace mlx { struct Hook { - std::function hook; + func::function hook; void* param = nullptr; }; diff --git a/MacroLibX/src/platform/window.cpp b/MacroLibX/src/platform/window.cpp index aee77aa..44827ac 100644 --- a/MacroLibX/src/platform/window.cpp +++ b/MacroLibX/src/platform/window.cpp @@ -6,14 +6,13 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:36:44 by maldavid #+# #+# */ -/* Updated: 2023/12/27 16:57:28 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 07:59:21 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include #include #include -#include namespace mlx { diff --git a/MacroLibX/src/renderer/core/memory.cpp b/MacroLibX/src/renderer/core/memory.cpp index 1e3ede0..ccb8ed0 100644 --- a/MacroLibX/src/renderer/core/memory.cpp +++ b/MacroLibX/src/renderer/core/memory.cpp @@ -6,7 +6,7 @@ /* By: kbz_8 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/20 22:02:37 by kbz_8 #+# #+# */ -/* Updated: 2024/01/10 21:54:35 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:11:02 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -98,7 +98,7 @@ namespace mlx vmaSetAllocationName(_allocator, allocation, name); } #ifdef DEBUG - core::error::report(e_kind::message, "Graphics Allocator : created new buffer"); + core::error::report(e_kind::message, "Graphics Allocator : created new buffer '%s'", name); #endif _active_buffers_allocations++; return allocation; @@ -128,7 +128,7 @@ namespace mlx vmaSetAllocationName(_allocator, allocation, name); } #ifdef DEBUG - core::error::report(e_kind::message, "Graphics Allocator : created new image"); + core::error::report(e_kind::message, "Graphics Allocator : created new image '%s'", name); #endif _active_images_allocations++; return allocation; diff --git a/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.cpp b/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.cpp index 188403f..03df39e 100644 --- a/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.cpp +++ b/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/01/23 18:34:23 by maldavid #+# #+# */ -/* Updated: 2024/01/03 13:13:54 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:19:55 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,6 +22,7 @@ namespace mlx poolInfo.poolSizeCount = n; poolInfo.pPoolSizes = size; poolInfo.maxSets = 8192; + poolInfo.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; VkResult res = vkCreateDescriptorPool(Render_Core::get().getDevice().get(), &poolInfo, nullptr, &_pool); if(res != VK_SUCCESS) diff --git a/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.h b/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.h index 82cf9c4..2c624ef 100644 --- a/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.h +++ b/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/01/23 18:32:43 by maldavid #+# #+# */ -/* Updated: 2024/01/03 15:27:45 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:22:20 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,8 @@ namespace mlx inline VkDescriptorPool& operator()() noexcept { return _pool; } inline VkDescriptorPool& get() noexcept { return _pool; } + inline bool isInit() const noexcept { return _pool != VK_NULL_HANDLE; } + private: VkDescriptorPool _pool = VK_NULL_HANDLE; }; diff --git a/MacroLibX/src/renderer/descriptors/vk_descriptor_set.cpp b/MacroLibX/src/renderer/descriptors/vk_descriptor_set.cpp index 423db02..8af5877 100644 --- a/MacroLibX/src/renderer/descriptors/vk_descriptor_set.cpp +++ b/MacroLibX/src/renderer/descriptors/vk_descriptor_set.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/01/23 18:40:44 by maldavid #+# #+# */ -/* Updated: 2024/01/10 18:28:34 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:22:10 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,8 +106,24 @@ namespace mlx { return _desc_set[_renderer->getActiveImageIndex()]; } + VkDescriptorSet& DescriptorSet::get() noexcept { return _desc_set[_renderer->getActiveImageIndex()]; } + + void DescriptorSet::destroy() noexcept + { + MLX_PROFILE_FUNCTION(); + if(_pool->isInit()) + vkFreeDescriptorSets(Render_Core::get().getDevice().get(), _pool->get(), _desc_set.size(), _desc_set.data()); + for(auto& set : _desc_set) + { + if(set != VK_NULL_HANDLE) + set = VK_NULL_HANDLE; + } + #ifdef DEBUG + core::error::report(e_kind::message, "Vulkan : destroyed descriptor set"); + #endif + } } diff --git a/MacroLibX/src/renderer/descriptors/vk_descriptor_set.h b/MacroLibX/src/renderer/descriptors/vk_descriptor_set.h index d555d5c..5f2191e 100644 --- a/MacroLibX/src/renderer/descriptors/vk_descriptor_set.h +++ b/MacroLibX/src/renderer/descriptors/vk_descriptor_set.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/01/23 18:39:36 by maldavid #+# #+# */ -/* Updated: 2024/01/03 15:27:50 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:13:25 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,8 @@ namespace mlx VkDescriptorSet& operator()() noexcept; VkDescriptorSet& get() noexcept; + void destroy() noexcept; + private: std::array _desc_set; class DescriptorPool* _pool = nullptr; diff --git a/MacroLibX/src/renderer/images/texture.cpp b/MacroLibX/src/renderer/images/texture.cpp index 2206f64..16d693f 100644 --- a/MacroLibX/src/renderer/images/texture.cpp +++ b/MacroLibX/src/renderer/images/texture.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/31 18:03:35 by maldavid #+# #+# */ -/* Updated: 2024/01/11 01:20:29 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:18:22 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -155,6 +155,7 @@ namespace mlx { MLX_PROFILE_FUNCTION(); Image::destroy(); + _set.destroy(); if(_buf_map.has_value()) _buf_map->destroy(); _vbo.destroy(); diff --git a/MacroLibX/src/renderer/images/texture_atlas.cpp b/MacroLibX/src/renderer/images/texture_atlas.cpp index b6eb61b..c03d712 100644 --- a/MacroLibX/src/renderer/images/texture_atlas.cpp +++ b/MacroLibX/src/renderer/images/texture_atlas.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/07 16:40:09 by maldavid #+# #+# */ -/* Updated: 2023/12/31 00:52:01 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 10:18:08 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,5 +51,6 @@ namespace mlx void TextureAtlas::destroy() noexcept { Image::destroy(); + _set.destroy(); } } diff --git a/MacroLibX/src/renderer/images/texture_atlas.h b/MacroLibX/src/renderer/images/texture_atlas.h index 5fd4da9..bc465d7 100644 --- a/MacroLibX/src/renderer/images/texture_atlas.h +++ b/MacroLibX/src/renderer/images/texture_atlas.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/07 16:36:33 by maldavid #+# #+# */ -/* Updated: 2024/01/08 21:42:31 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 02:47:30 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,7 +30,8 @@ namespace mlx void destroy() noexcept override; inline void setDescriptor(DescriptorSet&& set) noexcept { _set = set; } - inline VkDescriptorSet getSet() noexcept { return _set.isInit() ? _set.get() : VK_NULL_HANDLE; } + inline VkDescriptorSet getVkSet() noexcept { return _set.isInit() ? _set.get() : VK_NULL_HANDLE; } + inline DescriptorSet getSet() noexcept { return _set; } inline void updateSet(int binding) noexcept { _set.writeDescriptor(binding, *this); _has_been_updated = true; } inline bool hasBeenUpdated() const noexcept { return _has_been_updated; } inline constexpr void resetUpdate() noexcept { _has_been_updated = false; } diff --git a/MacroLibX/src/renderer/images/vk_image.cpp b/MacroLibX/src/renderer/images/vk_image.cpp index 3cf0592..412387e 100644 --- a/MacroLibX/src/renderer/images/vk_image.cpp +++ b/MacroLibX/src/renderer/images/vk_image.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/01/25 11:59:07 by maldavid #+# #+# */ -/* Updated: 2024/01/07 01:17:54 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 09:47:26 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -252,16 +252,16 @@ namespace mlx void Image::destroy() noexcept { // not creating destroyer in `create` as some image may be copied (and so `this` will be invalid) - CmdResource::setDestroyer([this]() - { + //CmdResource::setDestroyer([this]() + //{ destroySampler(); destroyImageView(); if(_image != VK_NULL_HANDLE) Render_Core::get().getAllocator().destroyImage(_allocation, _image); _image = VK_NULL_HANDLE; - }); - CmdResource::requireDestroy(); + //}); + //CmdResource::requireDestroy(); } uint32_t formatSize(VkFormat format) diff --git a/MacroLibX/src/renderer/pipeline/pipeline.cpp b/MacroLibX/src/renderer/pipeline/pipeline.cpp index b8ca2b6..06ebfd3 100644 --- a/MacroLibX/src/renderer/pipeline/pipeline.cpp +++ b/MacroLibX/src/renderer/pipeline/pipeline.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/18 21:27:38 by maldavid #+# #+# */ -/* Updated: 2024/01/10 21:53:38 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 07:45:15 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,7 +49,7 @@ namespace mlx gl_Position = uProj.mat * vec4(pos.x, pos.y, 0.0, 1.0); } */ - const std::vector vertex_shader = { + const std::vector vertex_shader = { // precompiled vertex shader 0x07230203,0x00010000,0x0008000b,0x0000003b,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, @@ -124,7 +124,7 @@ namespace mlx fColor = process_color; } */ - const std::vector fragment_shader = { + const std::vector fragment_shader = { // pre compiled fragment shader 0x07230203,0x00010000,0x0008000b,0x0000002c,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000000d,0x0000002a,0x00030010, diff --git a/MacroLibX/src/renderer/renderer.cpp b/MacroLibX/src/renderer/renderer.cpp index 6cb8578..2e3b1c1 100644 --- a/MacroLibX/src/renderer/renderer.cpp +++ b/MacroLibX/src/renderer/renderer.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/18 17:25:16 by maldavid #+# #+# */ -/* Updated: 2024/01/10 14:18:35 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 08:02:57 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -82,7 +82,7 @@ namespace mlx if(result == VK_ERROR_OUT_OF_DATE_KHR) { - _swapchain.recreate(); + recreateRenderData(); return false; } else if(result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) @@ -145,7 +145,7 @@ namespace mlx if(result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || _framebufferResized) { _framebufferResized = false; - _swapchain.recreate(); + recreateRenderData(); } else if(result != VK_SUCCESS) core::error::report(e_kind::fatal_error, "Vulkan error : failed to present swap chain image"); @@ -158,6 +158,18 @@ namespace mlx } } + void Renderer::recreateRenderData() + { + _swapchain.recreate(); + _pass.destroy(); + _pass.init(_swapchain.getImagesFormat(), VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + for(auto& fb : _framebuffers) + fb.destroy(); + _framebuffers.clear(); + for(std::size_t i = 0; i < _swapchain.getImagesNumber(); i++) + _framebuffers.emplace_back().init(_pass, _swapchain.getImage(i)); + } + void Renderer::destroy() { MLX_PROFILE_FUNCTION(); diff --git a/MacroLibX/src/renderer/renderer.h b/MacroLibX/src/renderer/renderer.h index 7b4dd5f..1d4869b 100644 --- a/MacroLibX/src/renderer/renderer.h +++ b/MacroLibX/src/renderer/renderer.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/18 17:14:45 by maldavid #+# #+# */ -/* Updated: 2023/12/22 21:59:15 by kbz_8 ### ########.fr */ +/* Updated: 2024/01/16 08:01:25 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -113,6 +113,9 @@ namespace mlx ~Renderer() = default; + private: + void recreateRenderData(); + private: GraphicPipeline _pipeline; CmdManager _cmd; diff --git a/MacroLibX/src/renderer/renderpass/vk_render_pass.cpp b/MacroLibX/src/renderer/renderpass/vk_render_pass.cpp index 06b5e75..a4a08a1 100644 --- a/MacroLibX/src/renderer/renderpass/vk_render_pass.cpp +++ b/MacroLibX/src/renderer/renderpass/vk_render_pass.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/06 18:21:36 by maldavid #+# #+# */ -/* Updated: 2024/01/10 21:53:03 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 08:22:39 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,7 @@ namespace mlx { - static const VkClearValue clearColor = {{{ 0.0f, 0.0f, 0.0f, 1.0f }}}; // wtf, this mess to satisfy a warning + static const VkClearValue clearColor = {{{ 0.f, 0.f, 0.f, 1.0f }}}; // wtf, this mess to satisfy a warning void RenderPass::init(VkFormat attachement_format, VkImageLayout layout) { diff --git a/MacroLibX/src/renderer/texts/font.cpp b/MacroLibX/src/renderer/texts/font.cpp index c508c99..d025e12 100644 --- a/MacroLibX/src/renderer/texts/font.cpp +++ b/MacroLibX/src/renderer/texts/font.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/11 22:06:09 by kbz_8 #+# #+# */ -/* Updated: 2024/01/11 01:23:20 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 13:16:18 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,51 +19,43 @@ constexpr const int RANGE = 1024; namespace mlx { - Font::Font(Renderer& renderer, const std::filesystem::path& path, float scale) : non_copyable(), _name(path.string()), _scale(scale) + Font::Font(Renderer& renderer, const std::filesystem::path& path, float scale) : _name(path.string()), _renderer(renderer), _scale(scale) { - MLX_PROFILE_FUNCTION(); - std::vector tmp_bitmap(RANGE * RANGE); - std::vector vulkan_bitmap(RANGE * RANGE * 4); - - std::ifstream file(path, std::ios::binary); - if(!file.is_open()) - { - core::error::report(e_kind::error, "Font load : cannot open font file, %s", _name.c_str()); - return; - } - std::ifstream::pos_type fileSize = std::filesystem::file_size(path); - file.seekg(0, std::ios::beg); - std::vector bytes(fileSize); - file.read(reinterpret_cast(bytes.data()), fileSize); - file.close(); - - stbtt_pack_context pc; - stbtt_PackBegin(&pc, tmp_bitmap.data(), RANGE, RANGE, RANGE, 1, nullptr); - stbtt_PackFontRange(&pc, bytes.data(), 0, scale, 32, 96, _cdata.data()); - stbtt_PackEnd(&pc); - for(int i = 0, j = 0; i < RANGE * RANGE; i++, j += 4) - { - vulkan_bitmap[j + 0] = tmp_bitmap[i]; - vulkan_bitmap[j + 1] = tmp_bitmap[i]; - vulkan_bitmap[j + 2] = tmp_bitmap[i]; - vulkan_bitmap[j + 3] = tmp_bitmap[i]; - } - #ifdef DEBUG - _atlas.create(vulkan_bitmap.data(), RANGE, RANGE, VK_FORMAT_R8G8B8A8_UNORM, std::string(_name + "_font_altas").c_str(), true); - #else - _atlas.create(vulkan_bitmap.data(), RANGE, RANGE, VK_FORMAT_R8G8B8A8_UNORM, nullptr, true); - #endif - _atlas.setDescriptor(renderer.getFragDescriptorSet().duplicate()); + _build_data = path; } - Font::Font(class Renderer& renderer, const std::string& name, const std::vector& ttf_data, float scale) : non_copyable(), _name(name), _scale(scale) + Font::Font(class Renderer& renderer, const std::string& name, const std::vector& ttf_data, float scale) : _name(name), _renderer(renderer), _scale(scale) + { + _build_data = ttf_data; + } + + void Font::buildFont() { MLX_PROFILE_FUNCTION(); + std::vector file_bytes; + if(std::holds_alternative(_build_data)) + { + std::ifstream file(std::get(_build_data), std::ios::binary); + if(!file.is_open()) + { + core::error::report(e_kind::error, "Font load : cannot open font file, %s", _name.c_str()); + return; + } + std::ifstream::pos_type fileSize = std::filesystem::file_size(std::get(_build_data)); + file.seekg(0, std::ios::beg); + file_bytes.resize(fileSize); + file.read(reinterpret_cast(file_bytes.data()), fileSize); + file.close(); + } + std::vector tmp_bitmap(RANGE * RANGE); std::vector vulkan_bitmap(RANGE * RANGE * 4); stbtt_pack_context pc; stbtt_PackBegin(&pc, tmp_bitmap.data(), RANGE, RANGE, RANGE, 1, nullptr); - stbtt_PackFontRange(&pc, ttf_data.data(), 0, scale, 32, 96, _cdata.data()); + if(std::holds_alternative(_build_data)) + stbtt_PackFontRange(&pc, file_bytes.data(), 0, _scale, 32, 96, _cdata.data()); + else + stbtt_PackFontRange(&pc, std::get>(_build_data).data(), 0, _scale, 32, 96, _cdata.data()); stbtt_PackEnd(&pc); for(int i = 0, j = 0; i < RANGE * RANGE; i++, j += 4) { @@ -77,12 +69,20 @@ namespace mlx #else _atlas.create(vulkan_bitmap.data(), RANGE, RANGE, VK_FORMAT_R8G8B8A8_UNORM, nullptr, true); #endif - _atlas.setDescriptor(renderer.getFragDescriptorSet().duplicate()); + _atlas.setDescriptor(_renderer.getFragDescriptorSet().duplicate()); + _is_init = true; + } + + void Font::destroy() + { + MLX_PROFILE_FUNCTION(); + _atlas.destroy(); + _is_init = false; } Font::~Font() { - MLX_PROFILE_FUNCTION(); - _atlas.destroy(); + if(_is_init) + destroy(); } } diff --git a/MacroLibX/src/renderer/texts/font.h b/MacroLibX/src/renderer/texts/font.h index d25c4b7..9e39cde 100644 --- a/MacroLibX/src/renderer/texts/font.h +++ b/MacroLibX/src/renderer/texts/font.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/11 21:17:04 by kbz_8 #+# #+# */ -/* Updated: 2023/12/14 17:51:40 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 13:15:55 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,45 +15,41 @@ #include #include -#include #include #include +#include namespace mlx { - class Font : public non_copyable + class Font { + friend class FontLibrary; public: Font() = delete; Font(class Renderer& renderer, const std::filesystem::path& path, float scale); Font(class Renderer& renderer, const std::string& name, const std::vector& ttf_data, float scale); + inline const std::string& getName() const { return _name; } inline float getScale() const noexcept { return _scale; } inline const std::array& getCharData() const { return _cdata; } inline const TextureAtlas& getAtlas() const noexcept { return _atlas; } - inline bool operator==(const Font& rhs) const { return rhs._name == _name; } - inline bool operator!=(const Font& rhs) const { return rhs._name != _name; } + inline bool operator==(const Font& rhs) const { return rhs._name == _name && rhs._scale == _scale; } + inline bool operator!=(const Font& rhs) const { return rhs._name != _name || rhs._scale != _scale; } + void destroy(); + ~Font(); + private: + void buildFont(); + private: std::array _cdata; TextureAtlas _atlas; + std::variant> _build_data; std::string _name; + class Renderer& _renderer; float _scale = 0; - }; -} - -namespace std -{ - template <> - struct hash - { - std::size_t operator()(const mlx::Font& f) const noexcept - { - std::size_t hash = 0; - mlx::hashCombine(hash, f.getName(), f.getScale()); - return hash; - } + bool _is_init = false; }; } diff --git a/MacroLibX/src/renderer/texts/font_library.cpp b/MacroLibX/src/renderer/texts/font_library.cpp new file mode 100644 index 0000000..e3a04c0 --- /dev/null +++ b/MacroLibX/src/renderer/texts/font_library.cpp @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* font_library.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maldavid +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/18 09:28:14 by maldavid #+# #+# */ +/* Updated: 2024/01/18 13:07:48 by maldavid ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include +#include +#include + +namespace mlx +{ + std::shared_ptr FontLibrary::getFontData(FontID id) + { + MLX_PROFILE_FUNCTION(); + if(!_cache.count(id) || std::find(_invalid_ids.begin(), _invalid_ids.end(), id) != _invalid_ids.end()) + core::error::report(e_kind::fatal_error, "Font Library : wrong font ID '%d'", id); + return _cache[id]; + } + + FontID FontLibrary::addFontToLibrary(std::shared_ptr font) + { + MLX_PROFILE_FUNCTION(); + auto it = std::find_if(_cache.begin(), _cache.end(), [&](const std::pair>& v) + { + return v.second->getScale() == font->getScale() && + v.second->getName() == font->getName() && + std::find(_invalid_ids.begin(), _invalid_ids.end(), v.first) == _invalid_ids.end(); + }); + if(it != _cache.end()) + return it->first; + font->buildFont(); + _cache[_current_id] = font; + _current_id++; + return _current_id - 1; + } + + void FontLibrary::removeFontFromLibrary(FontID id) + { + MLX_PROFILE_FUNCTION(); + if(!_cache.count(id) || std::find(_invalid_ids.begin(), _invalid_ids.end(), id) != _invalid_ids.end()) + { + core::error::report(e_kind::warning, "Font Library : trying to remove a font with an unkown or invalid ID '%d'", id); + return; + } + _cache[id]->destroy(); + _invalid_ids.push_back(id); + } + + void FontLibrary::clearLibrary() + { + MLX_PROFILE_FUNCTION(); + for(auto& [id, font] : _cache) + { + font->destroy(); + _invalid_ids.push_back(id); + } + // do not `_cache.clear();` as it releases the fonts and may not destroy the texture atlas that is in use by command buffers + } +} diff --git a/MacroLibX/src/renderer/texts/font_library.h b/MacroLibX/src/renderer/texts/font_library.h new file mode 100644 index 0000000..9a1d4dc --- /dev/null +++ b/MacroLibX/src/renderer/texts/font_library.h @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* font_library.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maldavid +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/18 09:26:03 by maldavid #+# #+# */ +/* Updated: 2024/01/18 09:33:30 by maldavid ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef __MLX_FONT_LIBRARY__ +#define __MLX_FONT_LIBRARY__ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mlx +{ + using FontID = uint32_t; + constexpr FontID nullfont = 0; + + class FontLibrary : public Singleton + { + friend class Singleton; + + public: + std::shared_ptr getFontData(FontID id); + FontID addFontToLibrary(std::shared_ptr font); + void removeFontFromLibrary(FontID id); + + void clearLibrary(); + + private: + FontLibrary() = default; + ~FontLibrary() = default; + + private: + std::unordered_map> _cache; + std::vector _invalid_ids; + FontID _current_id = 1; + }; +} + +#endif diff --git a/MacroLibX/src/renderer/texts/text.cpp b/MacroLibX/src/renderer/texts/text.cpp index bf1823d..b26c01c 100644 --- a/MacroLibX/src/renderer/texts/text.cpp +++ b/MacroLibX/src/renderer/texts/text.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 00:11:56 by maldavid #+# #+# */ -/* Updated: 2024/01/11 03:31:57 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 13:56:50 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,15 +16,21 @@ namespace mlx { - void Text::init(std::string text, Font const* font, std::vector vbo_data, std::vector ibo_data) + void Text::init(std::string text, FontID font, std::vector vbo_data, std::vector ibo_data) { MLX_PROFILE_FUNCTION(); _text = std::move(text); _font = font; #ifdef DEBUG + std::string debug_name = _text; + for(char& c : debug_name) + { + if(c == ' ' || c == '"' || c == '\'') + c = '_'; + } for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) - _vbo[i].create(sizeof(Vertex) * vbo_data.size(), static_cast(vbo_data.data()), _text.c_str()); - _ibo.create(sizeof(uint16_t) * ibo_data.size(), ibo_data.data(), _text.c_str()); + _vbo[i].create(sizeof(Vertex) * vbo_data.size(), static_cast(vbo_data.data()), debug_name.c_str()); + _ibo.create(sizeof(uint16_t) * ibo_data.size(), ibo_data.data(), debug_name.c_str()); #else for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) _vbo[i].create(sizeof(Vertex) * vbo_data.size(), static_cast(vbo_data.data()), nullptr); diff --git a/MacroLibX/src/renderer/texts/text.h b/MacroLibX/src/renderer/texts/text.h index eff6f8a..44bd7a1 100644 --- a/MacroLibX/src/renderer/texts/text.h +++ b/MacroLibX/src/renderer/texts/text.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 00:09:04 by maldavid #+# #+# */ -/* Updated: 2024/01/11 00:13:25 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 09:37:42 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -26,9 +27,9 @@ namespace mlx public: Text() = default; - void init(std::string text, Font const* font, std::vector vbo_data, std::vector ibo_data); + void init(std::string text, FontID font, std::vector vbo_data, std::vector ibo_data); void bind(class Renderer& renderer) noexcept; - inline const Font& getFontInUse() const noexcept { return *_font; } + inline FontID getFontInUse() const noexcept { return _font; } void updateVertexData(int frame, std::vector vbo_data); inline uint32_t getIBOsize() noexcept { return _ibo.getSize(); } inline const std::string& getText() const { return _text; } @@ -40,7 +41,7 @@ namespace mlx std::array _vbo; C_IBO _ibo; std::string _text; - Font const* _font = nullptr; + FontID _font = nullfont; }; } diff --git a/MacroLibX/src/renderer/texts/text_descriptor.cpp b/MacroLibX/src/renderer/texts/text_descriptor.cpp index bc1f35a..4db185a 100644 --- a/MacroLibX/src/renderer/texts/text_descriptor.cpp +++ b/MacroLibX/src/renderer/texts/text_descriptor.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 00:23:11 by maldavid #+# #+# */ -/* Updated: 2024/01/11 03:40:54 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 09:44:54 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,7 +33,7 @@ namespace mlx TextDrawDescriptor::TextDrawDescriptor(std::string text, uint32_t _color, int _x, int _y) : color(_color), x(_x), y(_y), _text(std::move(text)) {} - void TextDrawDescriptor::init(Font* const font) noexcept + void TextDrawDescriptor::init(FontID font) noexcept { MLX_PROFILE_FUNCTION(); std::vector vertexData; @@ -42,34 +42,38 @@ namespace mlx float stb_x = 0.0f; float stb_y = 0.0f; - for(char c : _text) { - if(c < 32) - continue; + std::shared_ptr font_data = FontLibrary::get().getFontData(font); - stbtt_aligned_quad q; - stbtt_GetPackedQuad(font->getCharData().data(), RANGE, RANGE, c - 32, &stb_x, &stb_y, &q, 1); + for(char c : _text) + { + if(c < 32) + continue; - std::size_t index = vertexData.size(); + stbtt_aligned_quad q; + stbtt_GetPackedQuad(font_data->getCharData().data(), RANGE, RANGE, c - 32, &stb_x, &stb_y, &q, 1); - glm::vec4 vertex_color = { - static_cast((color & 0x000000FF)) / 255.f, - static_cast((color & 0x0000FF00) >> 8) / 255.f, - static_cast((color & 0x00FF0000) >> 16) / 255.f, - static_cast((color & 0xFF000000) >> 24) / 255.f - }; + std::size_t index = vertexData.size(); - vertexData.emplace_back(glm::vec2{q.x0, q.y0}, vertex_color, glm::vec2{q.s0, q.t0}); - vertexData.emplace_back(glm::vec2{q.x1, q.y0}, vertex_color, glm::vec2{q.s1, q.t0}); - vertexData.emplace_back(glm::vec2{q.x1, q.y1}, vertex_color, glm::vec2{q.s1, q.t1}); - vertexData.emplace_back(glm::vec2{q.x0, q.y1}, vertex_color, glm::vec2{q.s0, q.t1}); + glm::vec4 vertex_color = { + static_cast((color & 0x000000FF)) / 255.f, + static_cast((color & 0x0000FF00) >> 8) / 255.f, + static_cast((color & 0x00FF0000) >> 16) / 255.f, + static_cast((color & 0xFF000000) >> 24) / 255.f + }; - indexData.emplace_back(index + 0); - indexData.emplace_back(index + 1); - indexData.emplace_back(index + 2); - indexData.emplace_back(index + 2); - indexData.emplace_back(index + 3); - indexData.emplace_back(index + 0); + vertexData.emplace_back(glm::vec2{q.x0, q.y0}, vertex_color, glm::vec2{q.s0, q.t0}); + vertexData.emplace_back(glm::vec2{q.x1, q.y0}, vertex_color, glm::vec2{q.s1, q.t0}); + vertexData.emplace_back(glm::vec2{q.x1, q.y1}, vertex_color, glm::vec2{q.s1, q.t1}); + vertexData.emplace_back(glm::vec2{q.x0, q.y1}, vertex_color, glm::vec2{q.s0, q.t1}); + + indexData.emplace_back(index + 0); + indexData.emplace_back(index + 1); + indexData.emplace_back(index + 2); + indexData.emplace_back(index + 2); + indexData.emplace_back(index + 3); + indexData.emplace_back(index + 0); + } } std::shared_ptr text_data = std::make_shared(); text_data->init(_text, font, std::move(vertexData), std::move(indexData)); @@ -84,13 +88,14 @@ namespace mlx { MLX_PROFILE_FUNCTION(); std::shared_ptr draw_data = TextLibrary::get().getTextData(id); - TextureAtlas& atlas = const_cast(draw_data->getFontInUse().getAtlas()); + std::shared_ptr font_data = FontLibrary::get().getFontData(draw_data->getFontInUse()); + TextureAtlas& atlas = const_cast(font_data->getAtlas()); draw_data->bind(renderer); - if(atlas.getSet() == VK_NULL_HANDLE) + if(!atlas.getSet().isInit()) atlas.setDescriptor(renderer.getFragDescriptorSet().duplicate()); if(!atlas.hasBeenUpdated()) atlas.updateSet(0); - sets[1] = const_cast(atlas).getSet(); + sets[1] = const_cast(atlas).getVkSet(); vkCmdBindDescriptorSets(renderer.getActiveCmdBuffer().get(), VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr); atlas.render(renderer, x, y, draw_data->getIBOsize()); } @@ -98,7 +103,8 @@ namespace mlx void TextDrawDescriptor::resetUpdate() { std::shared_ptr draw_data = TextLibrary::get().getTextData(id); - TextureAtlas& atlas = const_cast(draw_data->getFontInUse().getAtlas()); + std::shared_ptr font_data = FontLibrary::get().getFontData(draw_data->getFontInUse()); + TextureAtlas& atlas = const_cast(font_data->getAtlas()); atlas.resetUpdate(); } } diff --git a/MacroLibX/src/renderer/texts/text_descriptor.h b/MacroLibX/src/renderer/texts/text_descriptor.h index b44300b..bc8d239 100644 --- a/MacroLibX/src/renderer/texts/text_descriptor.h +++ b/MacroLibX/src/renderer/texts/text_descriptor.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 00:13:34 by maldavid #+# #+# */ -/* Updated: 2024/01/11 04:28:58 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 09:40:06 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,7 @@ #include #include #include +#include #include namespace mlx @@ -36,7 +37,7 @@ namespace mlx public: TextDrawDescriptor(std::string text, uint32_t _color, int _x, int _y); - void init(Font* const font) noexcept; + void init(FontID font) noexcept; bool operator==(const TextDrawDescriptor& rhs) const { return _text == rhs._text && x == rhs.x && y == rhs.y && color == rhs.color; } void render(std::array& sets, Renderer& renderer) override; void resetUpdate() override; diff --git a/MacroLibX/src/renderer/texts/text_library.cpp b/MacroLibX/src/renderer/texts/text_library.cpp index 9dd5658..4a61b38 100644 --- a/MacroLibX/src/renderer/texts/text_library.cpp +++ b/MacroLibX/src/renderer/texts/text_library.cpp @@ -6,11 +6,10 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/10 11:59:57 by maldavid #+# #+# */ -/* Updated: 2024/01/11 05:19:24 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 08:02:31 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ -#include #include #include #include diff --git a/MacroLibX/src/renderer/texts/text_library.h b/MacroLibX/src/renderer/texts/text_library.h index 19ae1eb..9bdef36 100644 --- a/MacroLibX/src/renderer/texts/text_library.h +++ b/MacroLibX/src/renderer/texts/text_library.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/10 11:52:30 by maldavid #+# #+# */ -/* Updated: 2024/01/11 05:08:04 by maldavid ### ########.fr */ +/* Updated: 2024/01/16 08:54:15 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,6 @@ #include #include -#include #include #include #include diff --git a/MacroLibX/src/renderer/texts/text_manager.cpp b/MacroLibX/src/renderer/texts/text_manager.cpp index d4a9f82..81dffd7 100644 --- a/MacroLibX/src/renderer/texts/text_manager.cpp +++ b/MacroLibX/src/renderer/texts/text_manager.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/06 16:41:13 by maldavid #+# #+# */ -/* Updated: 2024/01/11 04:54:16 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 09:45:24 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,28 +14,28 @@ #include #include #include -#include #include -#include #include -#include namespace mlx { void TextManager::init(Renderer& renderer) noexcept { MLX_PROFILE_FUNCTION(); - _font_in_use = &const_cast(*_font_set.emplace(renderer, "default", dogica_ttf, 6.0f).first); + loadFont(renderer, "default", 6.f); } void TextManager::loadFont(Renderer& renderer, const std::filesystem::path& filepath, float scale) { MLX_PROFILE_FUNCTION(); - if(filepath.string() == "default") // we're sure it is already loaded - _font_in_use = &const_cast(*_font_set.emplace(renderer, "default", dogica_ttf, scale).first); + std::shared_ptr font; + if(filepath.string() == "default") + font = std::make_shared(renderer, "default", dogica_ttf, scale); else - _font_in_use = &const_cast(*_font_set.emplace(renderer, filepath, scale).first); + font = std::make_shared(renderer, filepath, scale); + + _font_in_use = FontLibrary::get().addFontToLibrary(font); } std::pair TextManager::registerText(int x, int y, uint32_t color, std::string str) @@ -49,8 +49,9 @@ namespace mlx } auto text_ptr = TextLibrary::get().getTextData(res.first->id); - if(*_font_in_use != text_ptr->getFontInUse()) + if(_font_in_use != text_ptr->getFontInUse()) { + // TODO : update text vertex buffers rather than destroying it and recreating it TextLibrary::get().removeTextFromLibrary(res.first->id); const_cast(*res.first).init(_font_in_use); } @@ -61,6 +62,5 @@ namespace mlx { MLX_PROFILE_FUNCTION(); _text_descriptors.clear(); - _font_set.clear(); } } diff --git a/MacroLibX/src/renderer/texts/text_manager.h b/MacroLibX/src/renderer/texts/text_manager.h index 93cfedb..8198b66 100644 --- a/MacroLibX/src/renderer/texts/text_manager.h +++ b/MacroLibX/src/renderer/texts/text_manager.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/06 16:24:11 by maldavid #+# #+# */ -/* Updated: 2024/01/11 05:18:42 by maldavid ### ########.fr */ +/* Updated: 2024/01/18 13:52:01 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,9 +19,12 @@ #include #include #include +#include #include #include #include +#include +#include namespace mlx { @@ -40,8 +43,7 @@ namespace mlx private: std::unordered_set _text_descriptors; - std::unordered_set _font_set; - Font* _font_in_use = nullptr; + FontID _font_in_use = nullfont; }; } diff --git a/MacroLibX/third_party/glm/common.hpp b/MacroLibX/third_party/glm/common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_features.hpp b/MacroLibX/third_party/glm/detail/_features.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_fixes.hpp b/MacroLibX/third_party/glm/detail/_fixes.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_noise.hpp b/MacroLibX/third_party/glm/detail/_noise.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_swizzle.hpp b/MacroLibX/third_party/glm/detail/_swizzle.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_swizzle_func.hpp b/MacroLibX/third_party/glm/detail/_swizzle_func.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/_vectorize.hpp b/MacroLibX/third_party/glm/detail/_vectorize.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/compute_common.hpp b/MacroLibX/third_party/glm/detail/compute_common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/compute_vector_relational.hpp b/MacroLibX/third_party/glm/detail/compute_vector_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_common.inl b/MacroLibX/third_party/glm/detail/func_common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_common_simd.inl b/MacroLibX/third_party/glm/detail/func_common_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_exponential.inl b/MacroLibX/third_party/glm/detail/func_exponential.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_exponential_simd.inl b/MacroLibX/third_party/glm/detail/func_exponential_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_geometric.inl b/MacroLibX/third_party/glm/detail/func_geometric.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_geometric_simd.inl b/MacroLibX/third_party/glm/detail/func_geometric_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_integer.inl b/MacroLibX/third_party/glm/detail/func_integer.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_integer_simd.inl b/MacroLibX/third_party/glm/detail/func_integer_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_matrix.inl b/MacroLibX/third_party/glm/detail/func_matrix.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_matrix_simd.inl b/MacroLibX/third_party/glm/detail/func_matrix_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_packing.inl b/MacroLibX/third_party/glm/detail/func_packing.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_packing_simd.inl b/MacroLibX/third_party/glm/detail/func_packing_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_trigonometric.inl b/MacroLibX/third_party/glm/detail/func_trigonometric.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_trigonometric_simd.inl b/MacroLibX/third_party/glm/detail/func_trigonometric_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_vector_relational.inl b/MacroLibX/third_party/glm/detail/func_vector_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/func_vector_relational_simd.inl b/MacroLibX/third_party/glm/detail/func_vector_relational_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/glm.cpp b/MacroLibX/third_party/glm/detail/glm.cpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/qualifier.hpp b/MacroLibX/third_party/glm/detail/qualifier.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/setup.hpp b/MacroLibX/third_party/glm/detail/setup.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_float.hpp b/MacroLibX/third_party/glm/detail/type_float.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_half.hpp b/MacroLibX/third_party/glm/detail/type_half.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_half.inl b/MacroLibX/third_party/glm/detail/type_half.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x2.hpp b/MacroLibX/third_party/glm/detail/type_mat2x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x2.inl b/MacroLibX/third_party/glm/detail/type_mat2x2.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x3.hpp b/MacroLibX/third_party/glm/detail/type_mat2x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x3.inl b/MacroLibX/third_party/glm/detail/type_mat2x3.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x4.hpp b/MacroLibX/third_party/glm/detail/type_mat2x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat2x4.inl b/MacroLibX/third_party/glm/detail/type_mat2x4.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x2.hpp b/MacroLibX/third_party/glm/detail/type_mat3x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x2.inl b/MacroLibX/third_party/glm/detail/type_mat3x2.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x3.hpp b/MacroLibX/third_party/glm/detail/type_mat3x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x3.inl b/MacroLibX/third_party/glm/detail/type_mat3x3.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x4.hpp b/MacroLibX/third_party/glm/detail/type_mat3x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat3x4.inl b/MacroLibX/third_party/glm/detail/type_mat3x4.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x2.hpp b/MacroLibX/third_party/glm/detail/type_mat4x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x2.inl b/MacroLibX/third_party/glm/detail/type_mat4x2.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x3.hpp b/MacroLibX/third_party/glm/detail/type_mat4x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x3.inl b/MacroLibX/third_party/glm/detail/type_mat4x3.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x4.hpp b/MacroLibX/third_party/glm/detail/type_mat4x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x4.inl b/MacroLibX/third_party/glm/detail/type_mat4x4.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_mat4x4_simd.inl b/MacroLibX/third_party/glm/detail/type_mat4x4_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_quat.hpp b/MacroLibX/third_party/glm/detail/type_quat.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_quat.inl b/MacroLibX/third_party/glm/detail/type_quat.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_quat_simd.inl b/MacroLibX/third_party/glm/detail/type_quat_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec1.hpp b/MacroLibX/third_party/glm/detail/type_vec1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec1.inl b/MacroLibX/third_party/glm/detail/type_vec1.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec2.hpp b/MacroLibX/third_party/glm/detail/type_vec2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec2.inl b/MacroLibX/third_party/glm/detail/type_vec2.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec3.hpp b/MacroLibX/third_party/glm/detail/type_vec3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec3.inl b/MacroLibX/third_party/glm/detail/type_vec3.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec4.hpp b/MacroLibX/third_party/glm/detail/type_vec4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec4.inl b/MacroLibX/third_party/glm/detail/type_vec4.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/detail/type_vec4_simd.inl b/MacroLibX/third_party/glm/detail/type_vec4_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/exponential.hpp b/MacroLibX/third_party/glm/exponential.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext.hpp b/MacroLibX/third_party/glm/ext.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_clip_space.hpp b/MacroLibX/third_party/glm/ext/matrix_clip_space.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_clip_space.inl b/MacroLibX/third_party/glm/ext/matrix_clip_space.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_common.hpp b/MacroLibX/third_party/glm/ext/matrix_common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_common.inl b/MacroLibX/third_party/glm/ext/matrix_common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x2.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x3.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x4.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double2x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double2x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x2.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x3.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x4.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double3x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double3x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x2.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x3.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x4.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_double4x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_double4x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x2.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x3.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x4.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float2x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float2x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x2.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x3.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x4.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float3x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float3x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x2.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x2_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x3.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x3_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x4.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_float4x4_precision.hpp b/MacroLibX/third_party/glm/ext/matrix_float4x4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_projection.hpp b/MacroLibX/third_party/glm/ext/matrix_projection.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_projection.inl b/MacroLibX/third_party/glm/ext/matrix_projection.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_relational.hpp b/MacroLibX/third_party/glm/ext/matrix_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_relational.inl b/MacroLibX/third_party/glm/ext/matrix_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_transform.hpp b/MacroLibX/third_party/glm/ext/matrix_transform.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/matrix_transform.inl b/MacroLibX/third_party/glm/ext/matrix_transform.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_common.hpp b/MacroLibX/third_party/glm/ext/quaternion_common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_common.inl b/MacroLibX/third_party/glm/ext/quaternion_common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_common_simd.inl b/MacroLibX/third_party/glm/ext/quaternion_common_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_double.hpp b/MacroLibX/third_party/glm/ext/quaternion_double.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_double_precision.hpp b/MacroLibX/third_party/glm/ext/quaternion_double_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_exponential.hpp b/MacroLibX/third_party/glm/ext/quaternion_exponential.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_exponential.inl b/MacroLibX/third_party/glm/ext/quaternion_exponential.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_float.hpp b/MacroLibX/third_party/glm/ext/quaternion_float.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_float_precision.hpp b/MacroLibX/third_party/glm/ext/quaternion_float_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_geometric.hpp b/MacroLibX/third_party/glm/ext/quaternion_geometric.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_geometric.inl b/MacroLibX/third_party/glm/ext/quaternion_geometric.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_relational.hpp b/MacroLibX/third_party/glm/ext/quaternion_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_relational.inl b/MacroLibX/third_party/glm/ext/quaternion_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_transform.hpp b/MacroLibX/third_party/glm/ext/quaternion_transform.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_transform.inl b/MacroLibX/third_party/glm/ext/quaternion_transform.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_trigonometric.hpp b/MacroLibX/third_party/glm/ext/quaternion_trigonometric.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/quaternion_trigonometric.inl b/MacroLibX/third_party/glm/ext/quaternion_trigonometric.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_common.hpp b/MacroLibX/third_party/glm/ext/scalar_common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_common.inl b/MacroLibX/third_party/glm/ext/scalar_common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_constants.hpp b/MacroLibX/third_party/glm/ext/scalar_constants.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_constants.inl b/MacroLibX/third_party/glm/ext/scalar_constants.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_int_sized.hpp b/MacroLibX/third_party/glm/ext/scalar_int_sized.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_integer.hpp b/MacroLibX/third_party/glm/ext/scalar_integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_integer.inl b/MacroLibX/third_party/glm/ext/scalar_integer.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_relational.hpp b/MacroLibX/third_party/glm/ext/scalar_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_relational.inl b/MacroLibX/third_party/glm/ext/scalar_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_uint_sized.hpp b/MacroLibX/third_party/glm/ext/scalar_uint_sized.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_ulp.hpp b/MacroLibX/third_party/glm/ext/scalar_ulp.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/scalar_ulp.inl b/MacroLibX/third_party/glm/ext/scalar_ulp.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool1.hpp b/MacroLibX/third_party/glm/ext/vector_bool1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool1_precision.hpp b/MacroLibX/third_party/glm/ext/vector_bool1_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool2.hpp b/MacroLibX/third_party/glm/ext/vector_bool2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool2_precision.hpp b/MacroLibX/third_party/glm/ext/vector_bool2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool3.hpp b/MacroLibX/third_party/glm/ext/vector_bool3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool3_precision.hpp b/MacroLibX/third_party/glm/ext/vector_bool3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool4.hpp b/MacroLibX/third_party/glm/ext/vector_bool4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_bool4_precision.hpp b/MacroLibX/third_party/glm/ext/vector_bool4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_common.hpp b/MacroLibX/third_party/glm/ext/vector_common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_common.inl b/MacroLibX/third_party/glm/ext/vector_common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double1.hpp b/MacroLibX/third_party/glm/ext/vector_double1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double1_precision.hpp b/MacroLibX/third_party/glm/ext/vector_double1_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double2.hpp b/MacroLibX/third_party/glm/ext/vector_double2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double2_precision.hpp b/MacroLibX/third_party/glm/ext/vector_double2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double3.hpp b/MacroLibX/third_party/glm/ext/vector_double3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double3_precision.hpp b/MacroLibX/third_party/glm/ext/vector_double3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double4.hpp b/MacroLibX/third_party/glm/ext/vector_double4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_double4_precision.hpp b/MacroLibX/third_party/glm/ext/vector_double4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float1.hpp b/MacroLibX/third_party/glm/ext/vector_float1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float1_precision.hpp b/MacroLibX/third_party/glm/ext/vector_float1_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float2.hpp b/MacroLibX/third_party/glm/ext/vector_float2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float2_precision.hpp b/MacroLibX/third_party/glm/ext/vector_float2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float3.hpp b/MacroLibX/third_party/glm/ext/vector_float3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float3_precision.hpp b/MacroLibX/third_party/glm/ext/vector_float3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float4.hpp b/MacroLibX/third_party/glm/ext/vector_float4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_float4_precision.hpp b/MacroLibX/third_party/glm/ext/vector_float4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int1.hpp b/MacroLibX/third_party/glm/ext/vector_int1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int1_precision.hpp b/MacroLibX/third_party/glm/ext/vector_int1_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int2.hpp b/MacroLibX/third_party/glm/ext/vector_int2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int2_precision.hpp b/MacroLibX/third_party/glm/ext/vector_int2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int3.hpp b/MacroLibX/third_party/glm/ext/vector_int3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int3_precision.hpp b/MacroLibX/third_party/glm/ext/vector_int3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int4.hpp b/MacroLibX/third_party/glm/ext/vector_int4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_int4_precision.hpp b/MacroLibX/third_party/glm/ext/vector_int4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_integer.hpp b/MacroLibX/third_party/glm/ext/vector_integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_integer.inl b/MacroLibX/third_party/glm/ext/vector_integer.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_relational.hpp b/MacroLibX/third_party/glm/ext/vector_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_relational.inl b/MacroLibX/third_party/glm/ext/vector_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint1.hpp b/MacroLibX/third_party/glm/ext/vector_uint1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint1_precision.hpp b/MacroLibX/third_party/glm/ext/vector_uint1_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint2.hpp b/MacroLibX/third_party/glm/ext/vector_uint2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint2_precision.hpp b/MacroLibX/third_party/glm/ext/vector_uint2_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint3.hpp b/MacroLibX/third_party/glm/ext/vector_uint3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint3_precision.hpp b/MacroLibX/third_party/glm/ext/vector_uint3_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint4.hpp b/MacroLibX/third_party/glm/ext/vector_uint4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_uint4_precision.hpp b/MacroLibX/third_party/glm/ext/vector_uint4_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_ulp.hpp b/MacroLibX/third_party/glm/ext/vector_ulp.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/ext/vector_ulp.inl b/MacroLibX/third_party/glm/ext/vector_ulp.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/fwd.hpp b/MacroLibX/third_party/glm/fwd.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/geometric.hpp b/MacroLibX/third_party/glm/geometric.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/glm.hpp b/MacroLibX/third_party/glm/glm.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/bitfield.hpp b/MacroLibX/third_party/glm/gtc/bitfield.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/bitfield.inl b/MacroLibX/third_party/glm/gtc/bitfield.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/color_space.hpp b/MacroLibX/third_party/glm/gtc/color_space.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/color_space.inl b/MacroLibX/third_party/glm/gtc/color_space.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/constants.hpp b/MacroLibX/third_party/glm/gtc/constants.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/constants.inl b/MacroLibX/third_party/glm/gtc/constants.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/epsilon.hpp b/MacroLibX/third_party/glm/gtc/epsilon.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/epsilon.inl b/MacroLibX/third_party/glm/gtc/epsilon.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/integer.hpp b/MacroLibX/third_party/glm/gtc/integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/integer.inl b/MacroLibX/third_party/glm/gtc/integer.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_access.hpp b/MacroLibX/third_party/glm/gtc/matrix_access.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_access.inl b/MacroLibX/third_party/glm/gtc/matrix_access.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_integer.hpp b/MacroLibX/third_party/glm/gtc/matrix_integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_inverse.hpp b/MacroLibX/third_party/glm/gtc/matrix_inverse.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_inverse.inl b/MacroLibX/third_party/glm/gtc/matrix_inverse.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_transform.hpp b/MacroLibX/third_party/glm/gtc/matrix_transform.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/matrix_transform.inl b/MacroLibX/third_party/glm/gtc/matrix_transform.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/noise.hpp b/MacroLibX/third_party/glm/gtc/noise.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/noise.inl b/MacroLibX/third_party/glm/gtc/noise.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/packing.hpp b/MacroLibX/third_party/glm/gtc/packing.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/packing.inl b/MacroLibX/third_party/glm/gtc/packing.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/quaternion.hpp b/MacroLibX/third_party/glm/gtc/quaternion.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/quaternion.inl b/MacroLibX/third_party/glm/gtc/quaternion.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/quaternion_simd.inl b/MacroLibX/third_party/glm/gtc/quaternion_simd.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/random.hpp b/MacroLibX/third_party/glm/gtc/random.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/random.inl b/MacroLibX/third_party/glm/gtc/random.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/reciprocal.hpp b/MacroLibX/third_party/glm/gtc/reciprocal.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/reciprocal.inl b/MacroLibX/third_party/glm/gtc/reciprocal.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/round.hpp b/MacroLibX/third_party/glm/gtc/round.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/round.inl b/MacroLibX/third_party/glm/gtc/round.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/type_aligned.hpp b/MacroLibX/third_party/glm/gtc/type_aligned.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/type_precision.hpp b/MacroLibX/third_party/glm/gtc/type_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/type_precision.inl b/MacroLibX/third_party/glm/gtc/type_precision.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/type_ptr.hpp b/MacroLibX/third_party/glm/gtc/type_ptr.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/type_ptr.inl b/MacroLibX/third_party/glm/gtc/type_ptr.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/ulp.hpp b/MacroLibX/third_party/glm/gtc/ulp.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/ulp.inl b/MacroLibX/third_party/glm/gtc/ulp.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtc/vec1.hpp b/MacroLibX/third_party/glm/gtc/vec1.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/associated_min_max.hpp b/MacroLibX/third_party/glm/gtx/associated_min_max.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/associated_min_max.inl b/MacroLibX/third_party/glm/gtx/associated_min_max.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/bit.hpp b/MacroLibX/third_party/glm/gtx/bit.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/bit.inl b/MacroLibX/third_party/glm/gtx/bit.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/closest_point.hpp b/MacroLibX/third_party/glm/gtx/closest_point.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/closest_point.inl b/MacroLibX/third_party/glm/gtx/closest_point.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_encoding.hpp b/MacroLibX/third_party/glm/gtx/color_encoding.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_encoding.inl b/MacroLibX/third_party/glm/gtx/color_encoding.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_space.hpp b/MacroLibX/third_party/glm/gtx/color_space.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_space.inl b/MacroLibX/third_party/glm/gtx/color_space.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_space_YCoCg.hpp b/MacroLibX/third_party/glm/gtx/color_space_YCoCg.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/color_space_YCoCg.inl b/MacroLibX/third_party/glm/gtx/color_space_YCoCg.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/common.hpp b/MacroLibX/third_party/glm/gtx/common.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/common.inl b/MacroLibX/third_party/glm/gtx/common.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/compatibility.hpp b/MacroLibX/third_party/glm/gtx/compatibility.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/compatibility.inl b/MacroLibX/third_party/glm/gtx/compatibility.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/component_wise.hpp b/MacroLibX/third_party/glm/gtx/component_wise.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/component_wise.inl b/MacroLibX/third_party/glm/gtx/component_wise.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/dual_quaternion.hpp b/MacroLibX/third_party/glm/gtx/dual_quaternion.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/dual_quaternion.inl b/MacroLibX/third_party/glm/gtx/dual_quaternion.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/easing.hpp b/MacroLibX/third_party/glm/gtx/easing.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/easing.inl b/MacroLibX/third_party/glm/gtx/easing.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/euler_angles.hpp b/MacroLibX/third_party/glm/gtx/euler_angles.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/euler_angles.inl b/MacroLibX/third_party/glm/gtx/euler_angles.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/extend.hpp b/MacroLibX/third_party/glm/gtx/extend.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/extend.inl b/MacroLibX/third_party/glm/gtx/extend.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/extended_min_max.hpp b/MacroLibX/third_party/glm/gtx/extended_min_max.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/extended_min_max.inl b/MacroLibX/third_party/glm/gtx/extended_min_max.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/exterior_product.hpp b/MacroLibX/third_party/glm/gtx/exterior_product.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/exterior_product.inl b/MacroLibX/third_party/glm/gtx/exterior_product.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_exponential.hpp b/MacroLibX/third_party/glm/gtx/fast_exponential.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_exponential.inl b/MacroLibX/third_party/glm/gtx/fast_exponential.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_square_root.hpp b/MacroLibX/third_party/glm/gtx/fast_square_root.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_square_root.inl b/MacroLibX/third_party/glm/gtx/fast_square_root.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_trigonometry.hpp b/MacroLibX/third_party/glm/gtx/fast_trigonometry.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/fast_trigonometry.inl b/MacroLibX/third_party/glm/gtx/fast_trigonometry.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/float_notmalize.inl b/MacroLibX/third_party/glm/gtx/float_notmalize.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/functions.hpp b/MacroLibX/third_party/glm/gtx/functions.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/functions.inl b/MacroLibX/third_party/glm/gtx/functions.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/gradient_paint.hpp b/MacroLibX/third_party/glm/gtx/gradient_paint.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/gradient_paint.inl b/MacroLibX/third_party/glm/gtx/gradient_paint.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/handed_coordinate_space.hpp b/MacroLibX/third_party/glm/gtx/handed_coordinate_space.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/handed_coordinate_space.inl b/MacroLibX/third_party/glm/gtx/handed_coordinate_space.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/hash.hpp b/MacroLibX/third_party/glm/gtx/hash.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/hash.inl b/MacroLibX/third_party/glm/gtx/hash.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/integer.hpp b/MacroLibX/third_party/glm/gtx/integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/integer.inl b/MacroLibX/third_party/glm/gtx/integer.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/intersect.hpp b/MacroLibX/third_party/glm/gtx/intersect.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/intersect.inl b/MacroLibX/third_party/glm/gtx/intersect.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/io.hpp b/MacroLibX/third_party/glm/gtx/io.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/io.inl b/MacroLibX/third_party/glm/gtx/io.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/log_base.hpp b/MacroLibX/third_party/glm/gtx/log_base.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/log_base.inl b/MacroLibX/third_party/glm/gtx/log_base.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_cross_product.hpp b/MacroLibX/third_party/glm/gtx/matrix_cross_product.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_cross_product.inl b/MacroLibX/third_party/glm/gtx/matrix_cross_product.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_decompose.hpp b/MacroLibX/third_party/glm/gtx/matrix_decompose.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_decompose.inl b/MacroLibX/third_party/glm/gtx/matrix_decompose.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_factorisation.hpp b/MacroLibX/third_party/glm/gtx/matrix_factorisation.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_factorisation.inl b/MacroLibX/third_party/glm/gtx/matrix_factorisation.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_interpolation.hpp b/MacroLibX/third_party/glm/gtx/matrix_interpolation.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_interpolation.inl b/MacroLibX/third_party/glm/gtx/matrix_interpolation.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_major_storage.hpp b/MacroLibX/third_party/glm/gtx/matrix_major_storage.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_major_storage.inl b/MacroLibX/third_party/glm/gtx/matrix_major_storage.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_operation.hpp b/MacroLibX/third_party/glm/gtx/matrix_operation.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_operation.inl b/MacroLibX/third_party/glm/gtx/matrix_operation.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_query.hpp b/MacroLibX/third_party/glm/gtx/matrix_query.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_query.inl b/MacroLibX/third_party/glm/gtx/matrix_query.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_transform_2d.hpp b/MacroLibX/third_party/glm/gtx/matrix_transform_2d.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/matrix_transform_2d.inl b/MacroLibX/third_party/glm/gtx/matrix_transform_2d.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/mixed_product.hpp b/MacroLibX/third_party/glm/gtx/mixed_product.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/mixed_product.inl b/MacroLibX/third_party/glm/gtx/mixed_product.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/norm.hpp b/MacroLibX/third_party/glm/gtx/norm.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/norm.inl b/MacroLibX/third_party/glm/gtx/norm.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/normal.hpp b/MacroLibX/third_party/glm/gtx/normal.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/normal.inl b/MacroLibX/third_party/glm/gtx/normal.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/normalize_dot.hpp b/MacroLibX/third_party/glm/gtx/normalize_dot.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/normalize_dot.inl b/MacroLibX/third_party/glm/gtx/normalize_dot.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/number_precision.hpp b/MacroLibX/third_party/glm/gtx/number_precision.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/number_precision.inl b/MacroLibX/third_party/glm/gtx/number_precision.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/optimum_pow.hpp b/MacroLibX/third_party/glm/gtx/optimum_pow.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/optimum_pow.inl b/MacroLibX/third_party/glm/gtx/optimum_pow.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/orthonormalize.hpp b/MacroLibX/third_party/glm/gtx/orthonormalize.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/orthonormalize.inl b/MacroLibX/third_party/glm/gtx/orthonormalize.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/perpendicular.hpp b/MacroLibX/third_party/glm/gtx/perpendicular.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/perpendicular.inl b/MacroLibX/third_party/glm/gtx/perpendicular.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/polar_coordinates.hpp b/MacroLibX/third_party/glm/gtx/polar_coordinates.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/polar_coordinates.inl b/MacroLibX/third_party/glm/gtx/polar_coordinates.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/projection.hpp b/MacroLibX/third_party/glm/gtx/projection.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/projection.inl b/MacroLibX/third_party/glm/gtx/projection.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/quaternion.hpp b/MacroLibX/third_party/glm/gtx/quaternion.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/quaternion.inl b/MacroLibX/third_party/glm/gtx/quaternion.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/range.hpp b/MacroLibX/third_party/glm/gtx/range.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/raw_data.hpp b/MacroLibX/third_party/glm/gtx/raw_data.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/raw_data.inl b/MacroLibX/third_party/glm/gtx/raw_data.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/rotate_normalized_axis.hpp b/MacroLibX/third_party/glm/gtx/rotate_normalized_axis.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/rotate_normalized_axis.inl b/MacroLibX/third_party/glm/gtx/rotate_normalized_axis.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/rotate_vector.hpp b/MacroLibX/third_party/glm/gtx/rotate_vector.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/rotate_vector.inl b/MacroLibX/third_party/glm/gtx/rotate_vector.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/scalar_multiplication.hpp b/MacroLibX/third_party/glm/gtx/scalar_multiplication.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/scalar_relational.hpp b/MacroLibX/third_party/glm/gtx/scalar_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/scalar_relational.inl b/MacroLibX/third_party/glm/gtx/scalar_relational.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/spline.hpp b/MacroLibX/third_party/glm/gtx/spline.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/spline.inl b/MacroLibX/third_party/glm/gtx/spline.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/std_based_type.hpp b/MacroLibX/third_party/glm/gtx/std_based_type.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/std_based_type.inl b/MacroLibX/third_party/glm/gtx/std_based_type.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/string_cast.hpp b/MacroLibX/third_party/glm/gtx/string_cast.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/string_cast.inl b/MacroLibX/third_party/glm/gtx/string_cast.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/texture.hpp b/MacroLibX/third_party/glm/gtx/texture.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/texture.inl b/MacroLibX/third_party/glm/gtx/texture.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/transform.hpp b/MacroLibX/third_party/glm/gtx/transform.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/transform.inl b/MacroLibX/third_party/glm/gtx/transform.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/transform2.hpp b/MacroLibX/third_party/glm/gtx/transform2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/transform2.inl b/MacroLibX/third_party/glm/gtx/transform2.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/type_aligned.hpp b/MacroLibX/third_party/glm/gtx/type_aligned.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/type_aligned.inl b/MacroLibX/third_party/glm/gtx/type_aligned.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/type_trait.hpp b/MacroLibX/third_party/glm/gtx/type_trait.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/type_trait.inl b/MacroLibX/third_party/glm/gtx/type_trait.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/vec_swizzle.hpp b/MacroLibX/third_party/glm/gtx/vec_swizzle.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/vector_angle.hpp b/MacroLibX/third_party/glm/gtx/vector_angle.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/vector_angle.inl b/MacroLibX/third_party/glm/gtx/vector_angle.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/vector_query.hpp b/MacroLibX/third_party/glm/gtx/vector_query.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/vector_query.inl b/MacroLibX/third_party/glm/gtx/vector_query.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/wrap.hpp b/MacroLibX/third_party/glm/gtx/wrap.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/gtx/wrap.inl b/MacroLibX/third_party/glm/gtx/wrap.inl old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/integer.hpp b/MacroLibX/third_party/glm/integer.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat2x2.hpp b/MacroLibX/third_party/glm/mat2x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat2x3.hpp b/MacroLibX/third_party/glm/mat2x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat2x4.hpp b/MacroLibX/third_party/glm/mat2x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat3x2.hpp b/MacroLibX/third_party/glm/mat3x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat3x3.hpp b/MacroLibX/third_party/glm/mat3x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat3x4.hpp b/MacroLibX/third_party/glm/mat3x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat4x2.hpp b/MacroLibX/third_party/glm/mat4x2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat4x3.hpp b/MacroLibX/third_party/glm/mat4x3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/mat4x4.hpp b/MacroLibX/third_party/glm/mat4x4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/matrix.hpp b/MacroLibX/third_party/glm/matrix.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/packing.hpp b/MacroLibX/third_party/glm/packing.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/common.h b/MacroLibX/third_party/glm/simd/common.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/exponential.h b/MacroLibX/third_party/glm/simd/exponential.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/geometric.h b/MacroLibX/third_party/glm/simd/geometric.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/integer.h b/MacroLibX/third_party/glm/simd/integer.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/matrix.h b/MacroLibX/third_party/glm/simd/matrix.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/neon.h b/MacroLibX/third_party/glm/simd/neon.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/packing.h b/MacroLibX/third_party/glm/simd/packing.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/platform.h b/MacroLibX/third_party/glm/simd/platform.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/trigonometric.h b/MacroLibX/third_party/glm/simd/trigonometric.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/simd/vector_relational.h b/MacroLibX/third_party/glm/simd/vector_relational.h old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/trigonometric.hpp b/MacroLibX/third_party/glm/trigonometric.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/vec2.hpp b/MacroLibX/third_party/glm/vec2.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/vec3.hpp b/MacroLibX/third_party/glm/vec3.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/vec4.hpp b/MacroLibX/third_party/glm/vec4.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/third_party/glm/vector_relational.hpp b/MacroLibX/third_party/glm/vector_relational.hpp old mode 100644 new mode 100755 diff --git a/MacroLibX/valgrind.supp b/MacroLibX/valgrind.supp index d746267..04fc934 100644 --- a/MacroLibX/valgrind.supp +++ b/MacroLibX/valgrind.supp @@ -1,7 +1,31 @@ { name Memcheck:Leak - fun:*alloc + fun:* + ... + obj:*libmlx* + ... +} +{ + name + Memcheck:Cond + fun:* + ... + obj:*libmlx* + ... +} +{ + name + Memcheck:Value8 + fun:* + ... + obj:*libmlx* + ... +} +{ + name + Memcheck:Addr4 + fun:* ... obj:*libmlx* ... @@ -9,7 +33,7 @@ { name Memcheck:Leak - fun:*alloc + fun:* ... obj:*SDL* ... @@ -17,7 +41,7 @@ { name Memcheck:Leak - fun:*alloc + fun:* ... obj:*X11* ... @@ -25,7 +49,7 @@ { name Memcheck:Leak - fun:*alloc + fun:* ... obj:*nvidia.so* ... @@ -33,7 +57,7 @@ { name Memcheck:Leak - fun:*alloc + fun:* obj:* ... fun:X11* @@ -51,7 +75,16 @@ { name Memcheck:Leak - fun:*alloc + fun:* + obj:* + ... + fun:_dl_* + ... +} +{ + name + Memcheck:Leak + fun:* obj:* ... fun:dl_* @@ -66,32 +99,3 @@ fun:dl_* ... } -{ - name - Memcheck:Leak - fun:calloc - obj:* -} -{ - name - Memcheck:Leak - fun:realloc - obj:* -} -{ - name - Memcheck:Leak - fun:malloc - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* -} - diff --git a/Makefile b/Makefile index e9571d3..d7acac5 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: adjoly +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/01 11:03:22 by adjoly #+# #+# # -# Updated: 2024/01/13 19:09:13 by adjoly ### ########.fr # +# Updated: 2024/01/19 13:41:58 by adjoly ### ########.fr # # # # **************************************************************************** # @@ -17,7 +17,8 @@ CC = cc SRCS = main.c \ get_map.c \ ft_move_character.c \ - print_map.c + print_map.c \ + ft_check_map_error.c OBJS = $(SRCS:.c=.o) diff --git a/ft_check_map_error.c b/ft_check_map_error.c new file mode 100644 index 0000000..d713a53 --- /dev/null +++ b/ft_check_map_error.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_check_map_error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/17 10:17:52 by adjoly #+# #+# */ +/* Updated: 2024/01/18 13:51:13 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft/libft.h" +#include "printf/ft_printf.h" +#include "so_long.h" +#include +#include + +char ft_check_charset(char c, char *charset) +{ + while (*charset) + { + if (c != *charset) + return (1); + charset++; + } + return (0); +} + +char ft_valid_char(char **map) +{ + size_t y; + size_t x; + + y = 0; + while (map[y]) + { + x = 0; + while (map[y][x]) + { + if (ft_check_charset(map[y][x], "01CEP") == 0) + return (1); + x++; + } + y++; + } + return (0); +} + +/*char ft_floodfill(char **map) +{ + while (expression) + { + + } + // partir dans toutes les direction a partir du P et sur tout les point suivant +}*/ + +char ft_valid_file_ext(char *file_name) +{ + unsigned short file_len; + + file_len = ft_strlen(file_name) - 1; + if (file_name[file_len] == 'r' && file_name[file_len - 1] == 'e' \ + && file_name[file_len - 2] == 'b' && file_name[file_len - 3] == '.') + return (0); + return (1); +} + +void ft_send_error(char *msg, char **map) +{ + ft_putstr_fd("Error\n", 1); + ft_putstr_fd(msg, 1); + if (map) + ft_freemap(map); + exit(EXIT_SUCCESS); +} + +void ft_check_map_error(char **map) +{ + if (ft_valid_char(map) == 1) + ft_send_error("Invalid character in map\n", map); + // else if (ft_floodfill(map) == 1) + // ft_send_error("Map is not finishable\n", map); +} diff --git a/ft_check_map_error.o b/ft_check_map_error.o new file mode 100644 index 0000000..07e85de Binary files /dev/null and b/ft_check_map_error.o differ diff --git a/ft_lstclear_img.c b/ft_lstclear_img.c new file mode 100644 index 0000000..c5fa2bf --- /dev/null +++ b/ft_lstclear_img.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear_img.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/11 18:05:14 by adjoly #+# #+# */ +/* Updated: 2024/01/14 15:18:13 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "so_long.h" + +void ft_lstdelone_img(t_list *lst, void *param, void (*del)(void *, void *)) +{ + + if (lst == NULL || del == NULL) + return ; + del(lst->content, param); + free(lst); +} + +void ft_lstclear_img(t_list **lst, void *param, void (*del)(void *, void *)) +{ + t_list *tmp; + + tmp = NULL; + while (lst && *lst && del) + { + tmp = (*lst)->next; + ft_lstdelone_img((*lst), param, del); + *lst = tmp; + } +} diff --git a/ft_lstclear_img.o b/ft_lstclear_img.o new file mode 100644 index 0000000..315e9c8 Binary files /dev/null and b/ft_lstclear_img.o differ diff --git a/ft_move_character.c b/ft_move_character.c index ba7ac45..14fd6d9 100644 --- a/ft_move_character.c +++ b/ft_move_character.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/07 19:13:01 by adjoly #+# #+# */ -/* Updated: 2024/01/13 18:14:25 by adjoly ### ########.fr */ +/* Updated: 2024/01/19 15:25:00 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,16 @@ #include "printf/ft_printf.h" #include "so_long.h" +void ft_printmapchar(char **map) +{ + while (*map) + { + ft_printf("%s\n", *map); + map++; + } + return ; +} + void ft_move_up(t_window *win) { if (win->map[win->p_coords->y - 1][win->p_coords->x] == 'C') @@ -23,9 +33,7 @@ void ft_move_up(t_window *win) ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->map[win->p_coords->y - 1][win->p_coords->x] = '0'; win->p_coords->y = win->p_coords->y - 1; - ft_printf("%d\n", win->c_count); win->c_count--; - ft_printf("%d\n", win->c_count); win->mov_count++; } else if (win->p_coords->y == win->e_coords->y && win->e_coords->x == win->p_coords->x && win->map[win->p_coords->y - 1][win->p_coords->x] != '1') @@ -36,7 +44,11 @@ void ft_move_up(t_window *win) win->mov_count++; } else if (win->map[win->p_coords->y - 1][win->p_coords->x] == 'E' && win->c_count == 0) + { + win->mov_count++; + ft_printf("%d\n", win->c_count); exit(0); + } else if (win->map[win->p_coords->y - 1][win->p_coords->x] != '1') { ft_putimg(win->p_coords->x, win->p_coords->y - 1, win, P_PNG); @@ -54,12 +66,10 @@ void ft_move_down(t_window *win) ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->map[win->p_coords->y + 1][win->p_coords->x] = '0'; win->p_coords->y = win->p_coords->y + 1; - ft_printf("%d\n", win->c_count); win->c_count--; - ft_printf("%d\n", win->c_count); win->mov_count++; } - else if (win->p_coords->x == win->e_coords->x && win->p_coords->y == win->e_coords->y && win->map[win->p_coords->y + 1][win->p_coords->x] != '1') + else if (win->p_coords->y == win->e_coords->y && win->e_coords->x == win->p_coords->x && win->map[win->p_coords->y + 1][win->p_coords->x] != '1') { ft_putimg(win->p_coords->x, win->p_coords->y + 1, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); @@ -67,7 +77,11 @@ void ft_move_down(t_window *win) win->mov_count++; } else if (win->map[win->p_coords->y + 1][win->p_coords->x] == 'E' && win->c_count == 0) + { + win->mov_count++; + ft_printf("%d\n", win->c_count); exit(0); + } else if (win->map[win->p_coords->y + 1][win->p_coords->x] != '1') { ft_putimg(win->p_coords->x, win->p_coords->y + 1, win, P_PNG); @@ -85,20 +99,22 @@ void ft_move_left(t_window *win) ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->map[win->p_coords->y][win->p_coords->x - 1] = '0'; win->p_coords->x = win->p_coords->x - 1; - ft_printf("%d\n", win->c_count); win->c_count--; - ft_printf("%d\n", win->c_count); win->mov_count++; } - else if (win->p_coords->x == win->e_coords->x && win->e_coords->y == win->p_coords->y && win->map[win->p_coords->y][win->p_coords->x - 1] != '1') + else if (win->p_coords->y == win->e_coords->y && win->e_coords->x == win->p_coords->x && win->map[win->p_coords->y][win->p_coords->x - 1] != '1') { ft_putimg(win->p_coords->x - 1, win->p_coords->y, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); win->p_coords->x = win->p_coords->x - 1; win->mov_count++; } - if (win->map[win->p_coords->y][win->p_coords->x - 1] == 'E' && win->c_count == 0) + else if (win->map[win->p_coords->y][win->p_coords->x - 1] == 'E' && win->c_count == 0) + { + win->mov_count++; + ft_printf("%d\n", win->c_count); exit(0); + } else if (win->map[win->p_coords->y][win->p_coords->x - 1] != '1') { ft_putimg(win->p_coords->x - 1, win->p_coords->y, win, P_PNG); @@ -115,13 +131,11 @@ void ft_move_right(t_window *win) ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->map[win->p_coords->y][win->p_coords->x + 1] = '0'; - win->p_coords->x = win->p_coords->x + 1; - ft_printf("%d\n", win->c_count); + win->p_coords->x = win->p_coords->x - 1; win->c_count--; - ft_printf("%d\n", win->c_count); win->mov_count++; } - else if (win->p_coords->x == win->e_coords->x && win->p_coords->y == win->e_coords->y && win->map[win->p_coords->y][win->p_coords->x + 1] != '1') + else if (win->p_coords->y == win->e_coords->y && win->e_coords->x == win->p_coords->x && win->map[win->p_coords->y][win->p_coords->x + 1] != '1') { ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); @@ -129,7 +143,11 @@ void ft_move_right(t_window *win) win->mov_count++; } else if (win->map[win->p_coords->y][win->p_coords->x + 1] == 'E' && win->c_count == 0) + { + win->mov_count++; + ft_printf("%d\n", win->c_count); exit(0); + } else if (win->map[win->p_coords->y][win->p_coords->x + 1] != '1') { ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); @@ -137,7 +155,6 @@ void ft_move_right(t_window *win) win->p_coords->x = win->p_coords->x + 1; win->mov_count++; } - (void)win; } int ft_key_event(int key, void *param) @@ -160,5 +177,11 @@ int ft_key_event(int key, void *param) else if (key == 7) ft_move_right(win); ft_printf("Mouvement : %d\n", win->mov_count); + // ft_printmap(win->map, win); + // ft_printmapchar(win->map); + // ft_printf("%d\n", win->e_coords->x); + // ft_printf("%d\n", win->e_coords->y); + // ft_printf("%d\n", win->p_coords->x); + // ft_printf("%d\n", win->p_coords->y); return (0); } diff --git a/ft_move_character.o b/ft_move_character.o new file mode 100644 index 0000000..1ae23d2 Binary files /dev/null and b/ft_move_character.o differ diff --git a/get_map.c b/get_map.c index a3b1edb..d07518e 100644 --- a/get_map.c +++ b/get_map.c @@ -6,14 +6,13 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 13:13:18 by adjoly #+# #+# */ -/* Updated: 2024/01/13 19:05:06 by adjoly ### ########.fr */ +/* Updated: 2024/01/19 14:30:23 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "so_long.h" -#include -int ft_countline_fd(int fd) +size_t ft_countline_fd(int fd) { size_t line_count; ssize_t rd; @@ -23,7 +22,6 @@ int ft_countline_fd(int fd) i = 0; line_count = 0; buf = ft_calloc(1, 1); - // buf = 0; while (i < ULONG_MAX) { rd = read(fd, buf, 1); @@ -33,6 +31,7 @@ int ft_countline_fd(int fd) line_count++; i++; } + free(buf); return (line_count); } @@ -40,15 +39,24 @@ char **ft_read_map(char *file_name) { char **map_read; int fd; - int line_count; size_t i; + size_t ln_count; i = 0; fd = open(file_name, O_RDONLY); - line_count = ft_countline_fd(fd); + if (fd < 1) + { + return (NULL); + } + ln_count = ft_countline_fd(fd); close(fd); fd = open(file_name, O_RDONLY); - map_read = ft_calloc(sizeof(char *), line_count); + map_read = ft_calloc(sizeof(char *), ln_count); + if (!map_read) + { + close (fd); + return (NULL); + } while (i < ULONG_MAX) { map_read[i] = get_next_line(fd); @@ -56,7 +64,6 @@ char **ft_read_map(char *file_name) break ; i++; } - map_read[i] = NULL; close(fd); return (map_read); } diff --git a/get_map.o b/get_map.o new file mode 100644 index 0000000..9a22f3a Binary files /dev/null and b/get_map.o differ diff --git a/get_next_line/get_next_line.a b/get_next_line/get_next_line.a new file mode 100644 index 0000000..cd22091 Binary files /dev/null and b/get_next_line/get_next_line.a differ diff --git a/get_next_line/get_next_line.o b/get_next_line/get_next_line.o new file mode 100644 index 0000000..f93ff55 Binary files /dev/null and b/get_next_line/get_next_line.o differ diff --git a/get_next_line/get_next_line_utils.o b/get_next_line/get_next_line_utils.o new file mode 100644 index 0000000..c8c7179 Binary files /dev/null and b/get_next_line/get_next_line_utils.o differ diff --git a/libft/ft_atoi.o b/libft/ft_atoi.o new file mode 100644 index 0000000..afb0010 Binary files /dev/null and b/libft/ft_atoi.o differ diff --git a/libft/ft_bzero.o b/libft/ft_bzero.o new file mode 100644 index 0000000..62d7f17 Binary files /dev/null and b/libft/ft_bzero.o differ diff --git a/libft/ft_calloc.o b/libft/ft_calloc.o new file mode 100644 index 0000000..6fada56 Binary files /dev/null and b/libft/ft_calloc.o differ diff --git a/libft/ft_isalnum.o b/libft/ft_isalnum.o new file mode 100644 index 0000000..aecf709 Binary files /dev/null and b/libft/ft_isalnum.o differ diff --git a/libft/ft_isalpha.o b/libft/ft_isalpha.o new file mode 100644 index 0000000..0bd62e8 Binary files /dev/null and b/libft/ft_isalpha.o differ diff --git a/libft/ft_isascii.o b/libft/ft_isascii.o new file mode 100644 index 0000000..11cdcbf Binary files /dev/null and b/libft/ft_isascii.o differ diff --git a/libft/ft_isdigit.o b/libft/ft_isdigit.o new file mode 100644 index 0000000..9473b5f Binary files /dev/null and b/libft/ft_isdigit.o differ diff --git a/libft/ft_isprint.o b/libft/ft_isprint.o new file mode 100644 index 0000000..fa1d564 Binary files /dev/null and b/libft/ft_isprint.o differ diff --git a/libft/ft_itoa.o b/libft/ft_itoa.o new file mode 100644 index 0000000..9d54483 Binary files /dev/null and b/libft/ft_itoa.o differ diff --git a/libft/ft_lstadd_back.o b/libft/ft_lstadd_back.o new file mode 100644 index 0000000..83158d2 Binary files /dev/null and b/libft/ft_lstadd_back.o differ diff --git a/libft/ft_lstadd_front.o b/libft/ft_lstadd_front.o new file mode 100644 index 0000000..c480e34 Binary files /dev/null and b/libft/ft_lstadd_front.o differ diff --git a/libft/ft_lstclear.o b/libft/ft_lstclear.o new file mode 100644 index 0000000..3b791fb Binary files /dev/null and b/libft/ft_lstclear.o differ diff --git a/libft/ft_lstdelone.o b/libft/ft_lstdelone.o new file mode 100644 index 0000000..b0055fa Binary files /dev/null and b/libft/ft_lstdelone.o differ diff --git a/libft/ft_lstiter.o b/libft/ft_lstiter.o new file mode 100644 index 0000000..4fc4d3a Binary files /dev/null and b/libft/ft_lstiter.o differ diff --git a/libft/ft_lstlast.o b/libft/ft_lstlast.o new file mode 100644 index 0000000..af009cf Binary files /dev/null and b/libft/ft_lstlast.o differ diff --git a/libft/ft_lstmap.o b/libft/ft_lstmap.o new file mode 100644 index 0000000..f038204 Binary files /dev/null and b/libft/ft_lstmap.o differ diff --git a/libft/ft_lstnew.o b/libft/ft_lstnew.o new file mode 100644 index 0000000..e258459 Binary files /dev/null and b/libft/ft_lstnew.o differ diff --git a/libft/ft_lstsize.o b/libft/ft_lstsize.o new file mode 100644 index 0000000..d476de5 Binary files /dev/null and b/libft/ft_lstsize.o differ diff --git a/libft/ft_memchr.o b/libft/ft_memchr.o new file mode 100644 index 0000000..be0211d Binary files /dev/null and b/libft/ft_memchr.o differ diff --git a/libft/ft_memcmp.o b/libft/ft_memcmp.o new file mode 100644 index 0000000..f6e2703 Binary files /dev/null and b/libft/ft_memcmp.o differ diff --git a/libft/ft_memcpy.o b/libft/ft_memcpy.o new file mode 100644 index 0000000..6fec394 Binary files /dev/null and b/libft/ft_memcpy.o differ diff --git a/libft/ft_memmove.o b/libft/ft_memmove.o new file mode 100644 index 0000000..02381d8 Binary files /dev/null and b/libft/ft_memmove.o differ diff --git a/libft/ft_memset.o b/libft/ft_memset.o new file mode 100644 index 0000000..936618d Binary files /dev/null and b/libft/ft_memset.o differ diff --git a/libft/ft_putchar_fd.o b/libft/ft_putchar_fd.o new file mode 100644 index 0000000..786101f Binary files /dev/null and b/libft/ft_putchar_fd.o differ diff --git a/libft/ft_putendl_fd.o b/libft/ft_putendl_fd.o new file mode 100644 index 0000000..fedf787 Binary files /dev/null and b/libft/ft_putendl_fd.o differ diff --git a/libft/ft_putnbr_fd.o b/libft/ft_putnbr_fd.o new file mode 100644 index 0000000..82110de Binary files /dev/null and b/libft/ft_putnbr_fd.o differ diff --git a/libft/ft_putstr_fd.c b/libft/ft_putstr_fd.c index 2b23b47..25fd4db 100644 --- a/libft/ft_putstr_fd.c +++ b/libft/ft_putstr_fd.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/31 11:45:55 by adjoly #+# #+# */ -/* Updated: 2023/11/05 15:06:13 by adjoly ### ########.fr */ +/* Updated: 2024/01/17 11:26:44 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,14 +14,5 @@ void ft_putstr_fd(char *s, int fd) { - int i; - - i = 0; - if (s == NULL) - return ; - while (s[i]) - { - write(fd, &s[i], 1); - i++; - } + write(fd, s, ft_strlen(s)); } diff --git a/libft/ft_putstr_fd.o b/libft/ft_putstr_fd.o new file mode 100644 index 0000000..b731fc0 Binary files /dev/null and b/libft/ft_putstr_fd.o differ diff --git a/libft/ft_split.o b/libft/ft_split.o new file mode 100644 index 0000000..31a281e Binary files /dev/null and b/libft/ft_split.o differ diff --git a/libft/ft_strchr.o b/libft/ft_strchr.o new file mode 100644 index 0000000..c5583ff Binary files /dev/null and b/libft/ft_strchr.o differ diff --git a/libft/ft_strdup.o b/libft/ft_strdup.o new file mode 100644 index 0000000..5c511ad Binary files /dev/null and b/libft/ft_strdup.o differ diff --git a/libft/ft_striteri.o b/libft/ft_striteri.o new file mode 100644 index 0000000..791eac5 Binary files /dev/null and b/libft/ft_striteri.o differ diff --git a/libft/ft_strjoin.o b/libft/ft_strjoin.o new file mode 100644 index 0000000..868baa1 Binary files /dev/null and b/libft/ft_strjoin.o differ diff --git a/libft/ft_strlcat.o b/libft/ft_strlcat.o new file mode 100644 index 0000000..fffbf92 Binary files /dev/null and b/libft/ft_strlcat.o differ diff --git a/libft/ft_strlcpy.o b/libft/ft_strlcpy.o new file mode 100644 index 0000000..e25b437 Binary files /dev/null and b/libft/ft_strlcpy.o differ diff --git a/libft/ft_strlen.c b/libft/ft_strlen.c index 5ccf0b8..4378724 100644 --- a/libft/ft_strlen.c +++ b/libft/ft_strlen.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/30 18:15:57 by adjoly #+# #+# */ -/* Updated: 2023/11/01 17:15:12 by adjoly ### ########.fr */ +/* Updated: 2024/01/17 11:30:30 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,10 +14,13 @@ size_t ft_strlen(const char *s) { - int i; + size_t res; - i = 0; - while (s[i]) - i++; - return (i); + res = 0; + while (*s) + { + s++; + res++; + } + return (res); } diff --git a/libft/ft_strlen.o b/libft/ft_strlen.o new file mode 100644 index 0000000..fec4953 Binary files /dev/null and b/libft/ft_strlen.o differ diff --git a/libft/ft_strmapi.o b/libft/ft_strmapi.o new file mode 100644 index 0000000..81a145a Binary files /dev/null and b/libft/ft_strmapi.o differ diff --git a/libft/ft_strncmp.o b/libft/ft_strncmp.o new file mode 100644 index 0000000..1f797d9 Binary files /dev/null and b/libft/ft_strncmp.o differ diff --git a/libft/ft_strnstr.o b/libft/ft_strnstr.o new file mode 100644 index 0000000..bfbe0b7 Binary files /dev/null and b/libft/ft_strnstr.o differ diff --git a/libft/ft_strrchr.o b/libft/ft_strrchr.o new file mode 100644 index 0000000..aa9ce75 Binary files /dev/null and b/libft/ft_strrchr.o differ diff --git a/libft/ft_strtrim.o b/libft/ft_strtrim.o new file mode 100644 index 0000000..d2ff71e Binary files /dev/null and b/libft/ft_strtrim.o differ diff --git a/libft/ft_substr.o b/libft/ft_substr.o new file mode 100644 index 0000000..d811f99 Binary files /dev/null and b/libft/ft_substr.o differ diff --git a/libft/ft_tolower.o b/libft/ft_tolower.o new file mode 100644 index 0000000..9fde8fe Binary files /dev/null and b/libft/ft_tolower.o differ diff --git a/libft/ft_toupper.o b/libft/ft_toupper.o new file mode 100644 index 0000000..374dad9 Binary files /dev/null and b/libft/ft_toupper.o differ diff --git a/libft/libft.a b/libft/libft.a new file mode 100644 index 0000000..bdc9914 Binary files /dev/null and b/libft/libft.a differ diff --git a/libft/libft.h b/libft/libft.h index 5d540b8..87512df 100644 --- a/libft/libft.h +++ b/libft/libft.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/01 10:06:03 by adjoly #+# #+# */ -/* Updated: 2023/11/11 18:37:56 by adjoly ### ########.fr */ +/* Updated: 2024/01/14 15:16:49 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/main.c b/main.c index 5cf2587..400fc86 100644 --- a/main.c +++ b/main.c @@ -6,22 +6,44 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/06 16:18:56 by adjoly #+# #+# */ -/* Updated: 2024/01/13 19:01:34 by adjoly ### ########.fr */ +/* Updated: 2024/01/19 14:44:15 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ -#include "libft/libft.h" +#include "MacroLibX/includes/mlx.h" +#include "printf/ft_printf.h" #include "so_long.h" +void ft_freeimg(t_window *win) +{ + while (*win->img) + { + mlx_destroy_image(win, *win->img); + win->img++; + } + free(win->img); + return ; +} + +size_t ft_sizemap(char **map) +{ + size_t i; + + i = 0; + while (*map) + { + map++; + i++; + } + return (i); +} + void ft_freemap(char **map) { - int i; - - i = 0; - while (map[i]) + while (*map) { - free(map[i]); - i++; + free(*map); + map++; } free(map); } @@ -35,39 +57,77 @@ int win_close(int event, void *param) void ft_exit(t_window *win) { - mlx_destroy_image(win->mlx, win->img); mlx_destroy_window(win->mlx, win->win); mlx_destroy_display(win->mlx); ft_freemap(win->map); + ft_freeimg(win); free(win->p_coords); free(win->e_coords); free(win); + exit (0); } int main(int ac, char **av) { t_window *win; char **map; + void **img; + t_coords *map_size; (void) ac; (void) av; + map = NULL; + if (ft_valid_file_ext(av[1]) == 1) + ft_send_error("Invalid map file extension (not .ber)\n", map); map = ft_read_map(av[1]); - win = malloc(sizeof(map) + sizeof(t_window)); + if (!map) + return (0); + ft_check_map_error(map); + map_size = malloc(sizeof(t_coords)); + if (!map_size) + { + ft_freemap(map); + return (0); + } + map_size->x = ft_strlen(map[0]); + map_size->y = ft_sizemap(map); + ft_printf("x: %d\n", map_size->x); + ft_printf("y: %d\n", map_size->y); + img = malloc((map_size->x * map_size->y) * sizeof(void *)); + if (!img) + { + free(map_size); + ft_freemap(map); + return (0); + } + win = malloc(sizeof(map) + sizeof(t_window) + sizeof(img)); + win->img = img; + if (!win) + { + ft_freemap(map); + return (0); + } win->mlx = mlx_init(); + if (!win->mlx) + { + // free map img win; + return (0); + } win->win = mlx_new_window(win->mlx, 1600, 900, "so_fluffy"); + if (!win->win) + { + // free map img win ; destroy mlx + return (0); + } win->map = map; + win->map_size = map_size; + win->p_coords = malloc(sizeof(t_coords)); + win->e_coords = malloc(sizeof(t_coords)); win->mov_count = 0; mlx_on_event(win->mlx, win->win, MLX_WINDOW_EVENT, win_close, win->mlx); mlx_on_event(win->mlx, win->win, MLX_KEYDOWN, ft_key_event, win); - // mlx_loop_hook(win->mlx, win_update, win); ft_printmap(win->map, win); mlx_loop(win->mlx); - mlx_destroy_image(win->mlx, win->img); - mlx_destroy_window(win->mlx, win->win); - mlx_destroy_display(win->mlx); - ft_freemap(win->map); - free(win->p_coords); - free(win->e_coords); - free(win); + ft_exit(win); return (0); } diff --git a/main.o b/main.o new file mode 100644 index 0000000..1af1871 Binary files /dev/null and b/main.o differ diff --git a/print_map.c b/print_map.c index 61fbeac..e559653 100644 --- a/print_map.c +++ b/print_map.c @@ -6,39 +6,44 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/09 15:30:06 by adjoly #+# #+# */ -/* Updated: 2024/01/13 17:56:32 by adjoly ### ########.fr */ +/* Updated: 2024/01/19 14:43:12 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "MacroLibX/includes/mlx.h" -#include "libft/libft.h" -#include "printf/ft_printf.h" #include "so_long.h" -#include -#include + +void ft_putplayer(t_window *win) +{ + ft_putimg(win->p_coords->x, win->p_coords->y, win, P_PNG); +} void ft_putimg(size_t x, size_t y, t_window *win, char *file_path) { - int img_x; - int img_y; + int img_x; + int img_y; + size_t img_xy; img_x = 0; img_y = 0; + img_xy = x + (y * win->map_size->x); + ft_printf("%d\n", img_xy); + if (win->img[img_xy]) + mlx_destroy_image(win->mlx, win->img[img_xy]); ft_putstr_fd(file_path, 1); ft_putchar_fd('\n', 1); - win->img = mlx_png_file_to_image(win->mlx, file_path, &img_x, &img_y); - mlx_put_image_to_window(win->mlx, win->win, win->img, x * img_x, y * img_y); + win->img[img_xy] = mlx_png_file_to_image(win->mlx, file_path, &img_x, &img_y); + mlx_put_image_to_window(win->mlx, win->win, win->img[img_xy], x * img_x, y * img_y); } void ft_printmap(char **map, t_window *win) { - int x; - int y; + size_t x; + size_t y; y = 0; - // win->c_count = malloc(1 * sizeof(size_t)); win->c_count = 0; - while (map[y]) + while (map[y] != NULL && y < ULONG_MAX) { x = 0; while (map[y][x]) @@ -54,18 +59,17 @@ void ft_printmap(char **map, t_window *win) } else if (map[y][x] == 'E') { - win->e_coords = malloc(sizeof(t_coords *)); win->e_coords->x = x; win->e_coords->y = y; ft_putimg(x, y, win, E_PNG); } else if (map[y][x] == 'P') { - win->p_coords = malloc(sizeof(t_coords *)); win->p_coords->y = y; win->p_coords->x = x; ft_putimg(x, y, win, P_PNG); } + x++; } y++; diff --git a/print_map.o b/print_map.o new file mode 100644 index 0000000..9b53c48 Binary files /dev/null and b/print_map.o differ diff --git a/printf/ft_printf.o b/printf/ft_printf.o new file mode 100644 index 0000000..5eaa2e2 Binary files /dev/null and b/printf/ft_printf.o differ diff --git a/printf/ft_putchar.o b/printf/ft_putchar.o new file mode 100644 index 0000000..e31b0fe Binary files /dev/null and b/printf/ft_putchar.o differ diff --git a/printf/ft_putnbr.o b/printf/ft_putnbr.o new file mode 100644 index 0000000..279ad48 Binary files /dev/null and b/printf/ft_putnbr.o differ diff --git a/printf/ft_putnbrbase.o b/printf/ft_putnbrbase.o new file mode 100644 index 0000000..b8ef8dc Binary files /dev/null and b/printf/ft_putnbrbase.o differ diff --git a/printf/ft_putstr.o b/printf/ft_putstr.o new file mode 100644 index 0000000..410f795 Binary files /dev/null and b/printf/ft_putstr.o differ diff --git a/printf/ft_strlen.o b/printf/ft_strlen.o new file mode 100644 index 0000000..0bbb64d Binary files /dev/null and b/printf/ft_strlen.o differ diff --git a/printf/libftprintf.a b/printf/libftprintf.a new file mode 100644 index 0000000..93ec406 Binary files /dev/null and b/printf/libftprintf.a differ diff --git a/so_long b/so_long new file mode 100755 index 0000000..ae2bf94 Binary files /dev/null and b/so_long differ diff --git a/so_long.h b/so_long.h index e8c9da5..a6de367 100644 --- a/so_long.h +++ b/so_long.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/06 16:19:42 by adjoly #+# #+# */ -/* Updated: 2024/01/13 19:00:01 by adjoly ### ########.fr */ +/* Updated: 2024/01/19 14:34:31 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,21 +38,28 @@ typedef struct s_window { void *mlx; void *win; - void *img; + void **img; char **map; t_coords *p_coords; t_coords *e_coords; size_t c_count; size_t mov_count; + t_coords *map_size; } t_window; int ft_key_event(int key, void *param); +void ft_freemap(char **map); int check_wall(char **map, t_coords *player); -int ft_countline_fd(int fd); +size_t ft_countline_fd(int fd); char **ft_read_map(char *file_name); void ft_printmap(char **map, t_window *win); void ft_putimg(size_t x, size_t y, t_window *win, char *file_path); +void ft_check_map_error(char **map); + +char ft_valid_file_ext(char *file_name); +void ft_send_error(char *msg, char **map); +void ft_check_map_error(char **map); #endif \ No newline at end of file