From fb2cbe20db6b60ace6b50492652ad4a04a8a4231 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 30 Oct 2024 22:38:23 -0600 Subject: [PATCH 1/7] glew -> glad & libglfw.so -> libglfw.a --- Makefile | 57 ++++++++++++------------------------------ ext/glfw.mk | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 41 deletions(-) create mode 100644 ext/glfw.mk diff --git a/Makefile b/Makefile index 86ced9c..672fbd1 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ BIN = manigraph OBJ = \ + ext/glad/glad.o \ src/surface.o \ src/context.o \ src/texture.o \ @@ -14,18 +15,8 @@ OBJ = \ CFLAGS = \ -I./ext/cglm/include \ -I./ext/glfw/include \ - -Wall -Wno-unused-function -std=c99 -D_POSIX_C_SOURCE \ - -WAYLAND-LIB = \ - xdg-shell \ - relative-pointer-unstable-v1 \ - xdg-decoration-unstable-v1 \ - pointer-constraints-unstable-v1 \ - viewporter \ - idle-inhibit-unstable-v1 \ - fractional-scale-v1 \ - xdg-activation-v1 \ - wayland + -I./ext/glad \ + -Wall -Wno-unused-function -std=c99 -D_GNU_SOURCE \ help: @echo "Para compilar el proyecto a tu sistema operativo" @@ -36,47 +27,31 @@ help: @echo " $(MAKE) cocoa" @echo "Para limpiar los archivos compilados se puede usar" @echo " $(MAKE) clean" - @echo "Para ejecturar el programa sin instalarlos se puede usar:" - @echo " $(MAKE) run-linux" src/main.o: src/data/axis.h src/data/shaders.h -# WINDOWS -windows: $(OBJ) glfw.dll - $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 -lglew32 +windows: $(OBJ) + cd ext; $(MAKE) -f glfw.mk windows; cd - + $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 -glfw.dll: - $(CC) -fPIC -shared -D_GLFW_WIN32 -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o $@ -lgdi32 - -# LINUX linux-wayland: $(OBJ) - for i in $(WAYLAND-LIB); \ - do \ - wayland-scanner client-header ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol.h; \ - wayland-scanner private-code ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol-code.h; \ - done - $(MAKE) DFLAGS="-D_GLFW_WAYLAND" libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm + cd ext; $(MAKE) -f glfw.mk linux-wayland; cd - + $(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm linux-x11: $(OBJ) - $(MAKE) DFLAGS="-D_GLFW_X11" libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm + cd ext; $(MAKE) -f glfw.mk linux-x11; cd - + $(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm -run-linux: - LD_LIBRARY_PATH=. ./$(BIN) - -# COCOA cocoa: $(OBJ) - $(MAKE) DFLAGS="-D_GLFW_COCOA" libglfw.so - $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw - -libglfw.so: - $(CC) -fPIC -shared $(DFLAGS) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ + cd ext; $(MAKE) -f glfw.mk cocoa; cd - + $(CC) -framework OpenGL -o $(BIN) $(OBJ) ext/glfw.a -lGL -lglfw clean: - rm $(OBJ) $(BIN) ext/glfw/deps/wayland/*.h + rm $(OBJ) $(BIN) + cd ext; $(MAKE) -f glfw.mk clean; cd - + .SUFFIXES: .c .o -.c.o: src/main.h +.c.o: $(CC) $(CFLAGS) -c -o $@ $< diff --git a/ext/glfw.mk b/ext/glfw.mk new file mode 100644 index 0000000..3d03183 --- /dev/null +++ b/ext/glfw.mk @@ -0,0 +1,71 @@ +BIN = libglfw.a +OBJ = \ + glfw/src/context.o \ + glfw/src/egl_context.o \ + glfw/src/glx_context.o \ + glfw/src/init.o \ + glfw/src/input.o \ + glfw/src/linux_joystick.o \ + glfw/src/monitor.o \ + glfw/src/null_init.o \ + glfw/src/null_joystick.o \ + glfw/src/null_monitor.o \ + glfw/src/null_window.o \ + glfw/src/osmesa_context.o \ + glfw/src/platform.o \ + glfw/src/posix_module.o \ + glfw/src/posix_poll.o \ + glfw/src/posix_thread.o \ + glfw/src/posix_time.o \ + glfw/src/vulkan.o \ + glfw/src/wgl_context.o \ + glfw/src/win32_init.o \ + glfw/src/win32_joystick.o \ + glfw/src/win32_module.o \ + glfw/src/win32_monitor.o \ + glfw/src/win32_thread.o \ + glfw/src/win32_time.o \ + glfw/src/win32_window.o \ + glfw/src/window.o \ + glfw/src/wl_init.o \ + glfw/src/wl_monitor.o \ + glfw/src/wl_window.o \ + glfw/src/x11_init.o \ + glfw/src/x11_monitor.o \ + glfw/src/x11_window.o \ + glfw/src/xkb_unicode.o + +WAYLAND-LIB = \ + xdg-shell \ + relative-pointer-unstable-v1 \ + xdg-decoration-unstable-v1 \ + pointer-constraints-unstable-v1 \ + viewporter \ + idle-inhibit-unstable-v1 \ + fractional-scale-v1 \ + xdg-activation-v1 \ + wayland + +windows: + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_WIN32 -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + +linux-x11: + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_X11 -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + + +linux-wayland: + for i in $(WAYLAND-LIB); \ + do \ + wayland-scanner client-header glfw/deps/wayland/$$i.xml glfw/deps/wayland/$$i-client-protocol.h; \ + wayland-scanner private-code glfw/deps/wayland/$$i.xml glfw/deps/wayland/$$i-client-protocol-code.h; \ + done + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_WAYLAND -fPIC -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + + + +clean: + rm $(OBJ) $(BIN) + rm glfw/deps/wayland/*.h From c37614ae5236c7352ea9d1d73b675106c5ced40d Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 30 Oct 2024 22:44:58 -0600 Subject: [PATCH 2/7] default: GLAD --- src/main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.h b/src/main.h index 130a91a..37f7130 100644 --- a/src/main.h +++ b/src/main.h @@ -5,7 +5,7 @@ */ /* #define DEBUG */ -/* #define GLAD */ +#define GLAD typedef const void * window_t; typedef unsigned int id_t; From 583c0cb92ffb5d83e2afeb1b49bea0c57ebaec25 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Mon, 4 Nov 2024 20:56:50 -0600 Subject: [PATCH 3/7] Use modern scrolling for better UX --- src/input.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/input.c b/src/input.c index a639003..fdb9188 100644 --- a/src/input.c +++ b/src/input.c @@ -107,13 +107,21 @@ void __mouse_callback_input( void __scroll_callback_input(GLFWwindow *window, double xoffset, double yoffset) { versor p = GLM_QUAT_IDENTITY_INIT; + versor r = GLM_QUAT_IDENTITY_INIT; - glm_quatv(p, yoffset * ANGLE, axis[selected_axis]); - + //glm_quatv(p, yoffset * ANGLE, axis[selected_axis]); + glm_quatv(p, yoffset * ANGLE * 2, (vec3){-1,0,0}); + glm_quatv(r, xoffset * ANGLE * 2, (vec3){0,1,0}); glm_quat_mul(p, q, q); + glm_quat_mul(r, q, q); + glm_quat_rotatev(p, axis[0], axis[0]); glm_quat_rotatev(p, axis[1], axis[1]); glm_quat_rotatev(p, axis[2], axis[2]); + + glm_quat_rotatev(r, axis[0], axis[0]); + glm_quat_rotatev(r, axis[1], axis[1]); + glm_quat_rotatev(r, axis[2], axis[2]); } quat_t poll_input(window_t window) From 805ff18e21c787bbcd176031ce64f98bd95957bc Mon Sep 17 00:00:00 2001 From: alan Date: Tue, 26 Nov 2024 22:21:56 -0600 Subject: [PATCH 4/7] expandiendo a Rn avance --- src/surface.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/src/surface.c b/src/surface.c index 2acc0e8..b568302 100644 --- a/src/surface.c +++ b/src/surface.c @@ -77,7 +77,7 @@ void klein(float *d_surface, int * coord, int grid_size) typedef void (*function_t)(float *, int *, int); -float *generate_data_surface(int grid_size, unsigned char *m) +/* float *generate_data_surface(int grid_size, unsigned char *m) { unsigned int i, j, k = 0; long size; @@ -96,26 +96,110 @@ float *generate_data_surface(int grid_size, unsigned char *m) for (j = 0; j < grid_size; j++) { // triangle 1, Front - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); + f(&d_surface[k + 1], &cara, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size); + f(&d_surface[k + 1], &cara, j}, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); + f(&d_surface[k + 1], &cara, j + 1}, grid_size); k += *m; // triangle 2, Back - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); + f(&d_surface[k + 1], &cara, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size); + f(&d_surface[k + 1], &cara+ 1}, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); + f(&d_surface[k + 1], &cara, j + 1}, grid_size); k += *m; } } + return d_surface; +} */ + +float *generate_data_surface(int grid_size, unsigned char *s) +{ + unsigned int i, j, k, o, p, l, n, m, q = 0; + long size; + function_t f; + float *d_surface; + int dim = 2; + + f = klein; + *s = 4; + + int cara[2]; + + size = grid_size * grid_size * 2 * dim * (*s); + d_surface = malloc((size + 1) * sizeof(float)); + d_surface[0] = size; + + for(o = 0; o < dim; o ++) + { + for (p = o + 1; p < dim; p++) + { + for (k = 0; k < (1 << o); k++) + { + for(l = 0; l < (1 << p); l += (1 << (o + 1))) + { + for(m = 0; m < (1 << dim); m += (1 << (p + 1))) + { + for(n = 0; n < dim; n++) + { + if(((k + l + m) & (1 << n)) == 0) + { + if(n != o && n != p) + cara[n] = 0; + } + else + { + if(n != o && n != p) + cara[n] = 1; + } + + for(i = 0; i < grid_size; i++) + { + cara[o] = i; + for (j = 0; j < grid_size; j++) + { + cara[p] = j; + + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + + cara[o] = i; + cara [p] = j; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + } + } + + + } + } + } + } + } + } + return d_surface; } + + static void __calculate_normal( float *p1, float *p2, float *p3, float *normal, unsigned char n) { From 8d1f54604ebda500d6524cfad222f01b1faa7b62 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 27 Nov 2024 00:20:51 -0600 Subject: [PATCH 5/7] Optimize and work with dim=2 --- src/surface.c | 97 +++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 53 deletions(-) diff --git a/src/surface.c b/src/surface.c index b568302..bc14bc7 100644 --- a/src/surface.c +++ b/src/surface.c @@ -90,6 +90,7 @@ typedef void (*function_t)(float *, int *, int); size = grid_size * grid_size * 6 * (*m); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; + ++d_surface; for (i = 0; i < grid_size; i++) { @@ -122,76 +123,66 @@ float *generate_data_surface(int grid_size, unsigned char *s) long size; function_t f; float *d_surface; - int dim = 2; + const int dim =2; + int cara[dim]; f = klein; *s = 4; - int cara[2]; - - size = grid_size * grid_size * 2 * dim * (*s); + size = grid_size * grid_size * 6 * (*s); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; - + for(o = 0; o < dim; o ++) - { - for (p = o + 1; p < dim; p++) + { + for (p = 0; p < o; p++) { - for (k = 0; k < (1 << o); k++) + for (k = 0; k < (1 << (dim-2)); k++) { - for(l = 0; l < (1 << p); l += (1 << (o + 1))) + for(n = 0; n < dim; n ++) { - for(m = 0; m < (1 << dim); m += (1 << (p + 1))) + if( n==o || n== p ) + continue; + + cara[n] = (k & (1< Date: Wed, 27 Nov 2024 17:21:59 -0600 Subject: [PATCH 6/7] Fix: encoding for n-cube faces --- src/surface.c | 82 +++++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 62 deletions(-) diff --git a/src/surface.c b/src/surface.c index bc14bc7..79f75af 100644 --- a/src/surface.c +++ b/src/surface.c @@ -29,6 +29,14 @@ void riemman(float *d_surface, int * coords, int grid_size) } +void cube( float *d_surface, int * coord, int grid_size ) +{ + unsigned char i; + + for(int i=0; i<4; i++ ) + d_surface[i]=(float)coord[i]/grid_size; +} + void mobius(float *d_surface, int * coord, int grid_size) { const float width = 0.5; @@ -50,20 +58,6 @@ void torus(float *d_surface, int * coord, int grid_size) d_surface[2] = 0.5 * sin(v); } -void torus_5d(float *d_surface, int * coord, int grid_size) -{ - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * M_PI) * ((float)coord[1] / grid_size); - float r1 = (float)coord[2] / grid_size; - float r2 = (float)coord[3] / grid_size; - - d_surface[0] = (r1 + r2 * cos(v)) * cos(u); - d_surface[1] = (r1 + r2 * cos(v)) * sin(u); - d_surface[2] = r2 * sin(v); - d_surface[3] = r1; - d_surface[4] = r2; -} - void klein(float *d_surface, int * coord, int grid_size) { float u = (2 * M_PI) * ((float)coord[0] / grid_size); @@ -77,59 +71,22 @@ void klein(float *d_surface, int * coord, int grid_size) typedef void (*function_t)(float *, int *, int); -/* float *generate_data_surface(int grid_size, unsigned char *m) -{ - unsigned int i, j, k = 0; - long size; - function_t f; - float *d_surface; - - f = klein; - *m = 4; - - size = grid_size * grid_size * 6 * (*m); - d_surface = malloc((size + 1) * sizeof(float)); - d_surface[0] = size; - ++d_surface; - - for (i = 0; i < grid_size; i++) - { - for (j = 0; j < grid_size; j++) - { - // triangle 1, Front - f(&d_surface[k + 1], &cara, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j}, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j + 1}, grid_size); - k += *m; - - // triangle 2, Back - f(&d_surface[k + 1], &cara, grid_size); - k += *m; - f(&d_surface[k + 1], &cara+ 1}, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j + 1}, grid_size); - k += *m; - } - } - - return d_surface; -} */ - float *generate_data_surface(int grid_size, unsigned char *s) { - unsigned int i, j, k, o, p, l, n, m, q = 0; - long size; + unsigned int i, j, k, o, p, l, n, m; + long size, q=0; function_t f; float *d_surface; const int dim =2; int cara[dim]; - f = klein; + char bits[dim+1]; + bits[dim]=0; + + f =klein ; *s = 4; - size = grid_size * grid_size * 6 * (*s); + size = grid_size * grid_size * 6 * (*s) * 24; d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; @@ -139,12 +96,13 @@ float *generate_data_surface(int grid_size, unsigned char *s) { for (k = 0; k < (1 << (dim-2)); k++) { - for(n = 0; n < dim; n ++) + unsigned char skip=0; + for(n = 0; n < dim-2; n++) { - if( n==o || n== p ) - continue; + if( n==(o-1) || n==p ) + skip++; - cara[n] = (k & (1< Date: Wed, 27 Nov 2024 17:31:47 -0600 Subject: [PATCH 7/7] Fix: compilation error --- src/context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/context.c b/src/context.c index 4eb36bb..449e703 100644 --- a/src/context.c +++ b/src/context.c @@ -4,8 +4,8 @@ #include #else #ifdef GLAD -#include #include +#include #else #include #endif