Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b83f0f07e3
|
||
|
|
52aa9d4ac2
|
||
|
|
bc537cf9f2 | ||
|
|
533109fbcd
|
||
|
|
3997613d16
|
||
|
|
f21121b88d
|
||
|
|
86480fe9b1
|
||
|
|
e9bd748dd8
|
||
|
|
81eb79662e | ||
|
|
d2e2c6eef7 | ||
|
|
57091d3408 | ||
|
|
56339e9e10 | ||
|
|
03796fdaff
|
||
|
|
46869cbcde
|
||
|
|
25df66b5f8 |
No files matched your search
@@ -9,29 +9,24 @@ OBJ = \
|
||||
src/input.o \
|
||||
src/load.o \
|
||||
src/mesh.o \
|
||||
src/gui.o \
|
||||
src/main.o
|
||||
|
||||
EXAMPLES = \
|
||||
example/basic.o
|
||||
example/basic \
|
||||
example/riemman \
|
||||
example/n-cube \
|
||||
example/n-hilbert-cube \
|
||||
example/lens
|
||||
|
||||
CFLAGS = \
|
||||
-I./ext/cglm/include \
|
||||
-I./ext/glfw/include \
|
||||
-I./ext/glad \
|
||||
-I./ext/nuklear \
|
||||
-I./include \
|
||||
-Wall -Wno-unused-function -std=c99 -D_GNU_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
|
||||
|
||||
help:
|
||||
@echo "Usage:"
|
||||
@echo " $(MAKE) windows"
|
||||
@@ -39,6 +34,8 @@ help:
|
||||
@echo " $(MAKE) linux-wayland"
|
||||
@echo " $(MAKE) cocoa"
|
||||
@echo " $(MAKE) CC=emcc wasm"
|
||||
@echo "Examples"
|
||||
@echo " $(MAKE) examples"
|
||||
@echo "Clean"
|
||||
@echo " $(MAKE) clean"
|
||||
|
||||
@@ -54,11 +51,11 @@ glfw.dll:
|
||||
# LINUX
|
||||
linux-wayland: $(OBJ)
|
||||
cd ext; $(MAKE) -f glfw.mk linux-wayland; cd -
|
||||
$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm
|
||||
$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lm
|
||||
|
||||
linux-x11: $(OBJ)
|
||||
cd ext; $(MAKE) -f glfw.mk linux-x11; cd -
|
||||
$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm
|
||||
$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lm
|
||||
|
||||
cocoa: $(OBJ)
|
||||
cd ext; $(MAKE) -f glfw.mk cocoa; cd -
|
||||
@@ -68,11 +65,8 @@ wasm: $(OBJ)
|
||||
$(CC) -sUSE_WEBGL2=1 -sUSE_GLFW=3 -o $(BIN).html $(OBJ)
|
||||
chmod -x $(BIN).wasm
|
||||
|
||||
libglfw.so:
|
||||
$(CC) -fPIC -shared $(DFLAGS) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@
|
||||
|
||||
clean:
|
||||
rm $(OBJ) $(BIN)
|
||||
rm $(OBJ) $(BIN) $(EXAMPLES)
|
||||
cd ext; $(MAKE) -f glfw.mk clean; cd -
|
||||
|
||||
|
||||
@@ -82,3 +76,6 @@ examples: $(EXAMPLES)
|
||||
|
||||
.c.o:
|
||||
$(CC) -Wno-implicit-function-declaration $(CFLAGS) -c -o $@ $<
|
||||
|
||||
.c:
|
||||
$(CC) -I include -o $@ $< -lm
|
||||
@@ -35,6 +35,9 @@ make cocoa
|
||||
make CC=emcc wasm
|
||||
```
|
||||
|
||||
# Flow of Manigraph
|
||||

|
||||
|
||||
# Design
|
||||
Manigraph is a program designed with sustainability in mind. It is built to be
|
||||
portable, resource-efficient, and easy to maintain and scale. The program
|
||||
@@ -56,3 +59,4 @@ they are connected through dependencies. It also highlights the scenarios where
|
||||
files are not independent of one another,
|
||||
|
||||

|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
:: git submodule update --init --recursive
|
||||
:: gcc -fPIC -shared -Iext/glfw/deps/MinGW -D_GLFW_WIN32 -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o glfw.dll -lgdi32
|
||||
gcc -I ext/cglm/include -I ext/glfw/include src/*.c -o manigraph -L . -lglfw -lopengl32 -lglew32
|
||||
gcc -I ext/glad -I ext/cglm/include -I ext/nuklear -I ext/glfw/include src/*.c ext/glad/glad.c -o manigraph -L . -lglfw -lopengl32
|
||||
@@ -0,0 +1,10 @@
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1898.4758660507769 1129.0324109769003" width="1898.4758660507769" height="1129.0324109769003" filter="invert(93%) hue-rotate(180deg)">
|
||||
<!-- svg-source:excalidraw -->
|
||||
|
||||
<defs>
|
||||
<style class="style-fonts">
|
||||
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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 truncated
|
||||
</style>
|
||||
|
||||
</defs>
|
||||
<rect x="0" y="0" width="1898.4758660507769" height="1129.0324109769003" fill="#ffffff"></rect><g stroke-linecap="round"><g transform="translate(134.6093715002511 107.77351992160297) rotate(0 0 20.53139395856948)"><path d="M-0.03 0.27 C0.12 7.13, 0.43 34.86, 0.4 41.61 M-0.71 -0.07 C-0.55 6.89, 0.17 34.05, 0.18 40.93" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(134.6093715002511 107.77351992160297) rotate(0 0 20.53139395856948)"><path d="M-7.14 21.74 C-5.07 26.42, -3.05 29.24, 0.18 40.93 M-7.14 21.74 C-5.09 26.83, -3.72 31.32, 0.18 40.93" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(134.6093715002511 107.77351992160297) rotate(0 0 20.53139395856948)"><path d="M6.9 21.53 C6.09 26.25, 5.21 29.1, 0.18 40.93 M6.9 21.53 C5.56 26.71, 3.54 31.25, 0.18 40.93" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 10) rotate(0 111.7041731117875 50.71428571428572)"><path d="M94.57 1.05 C108.74 -0.54, 127.47 0.09, 142.03 1.74 C156.6 3.38, 170.26 6.55, 181.96 10.93 C193.65 15.31, 205.46 21.69, 212.2 28.03 C218.95 34.38, 221.77 42.07, 222.43 49 C223.09 55.92, 221.5 63.3, 216.18 69.59 C210.85 75.87, 201.36 82.01, 190.46 86.72 C179.57 91.43, 164.94 95.26, 150.82 97.85 C136.71 100.43, 120.76 102.54, 105.77 102.24 C90.78 101.94, 74.39 99.22, 60.88 96.05 C47.36 92.87, 34.4 88.55, 24.68 83.18 C14.96 77.82, 6.51 70.56, 2.54 63.86 C-1.42 57.16, -1.66 49.9, 0.88 42.97 C3.42 36.04, 9.22 28.01, 17.76 22.26 C26.3 16.51, 36.78 12.02, 52.11 8.45 C67.43 4.89, 97.69 1.96, 109.7 0.86 C121.7 -0.23, 124.22 1.3, 124.13 1.87 M89.3 -0.05 C102.73 -2.44, 118.6 -1.14, 133.29 0.37 C147.98 1.88, 164.89 4.63, 177.44 8.99 C189.98 13.36, 201.23 20.63, 208.58 26.55 C215.92 32.48, 219.93 38.04, 221.49 44.53 C223.04 51.01, 222.13 58.81, 217.9 65.47 C213.67 72.13, 206.1 79.1, 196.1 84.48 C186.09 89.86, 171.89 94.84, 157.87 97.74 C143.84 100.64, 126.92 102.13, 111.97 101.89 C97.01 101.66, 82.15 99.11, 68.12 96.32 C54.09 93.52, 38.32 90.03, 27.78 85.13 C17.25 80.23, 9.22 73.57, 4.91 66.93 C0.61 60.3, 0.56 52.44, 1.96 45.32 C3.36 38.2, 6.26 30.25, 13.3 24.22 C20.34 18.18, 31.69 12.76, 44.2 9.12 C56.71 5.48, 81.22 3.44, 88.35 2.37 C95.48 1.29, 86.8 1.94, 86.98 2.67" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(94.25072764231356 48.35387038268223) rotate(0 27.46666717529297 12.5)"><text x="27.46666717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Start</text></g><g mask="url(#mask-DGfGDIEhGbM9VZLGxmU2x)" stroke-linecap="round"><g transform="translate(134.84314553266427 962.6293772541449) rotate(0 0 26.5107599192919)"><path d="M-1.19 0.39 C-0.97 9.52, 0.7 44.88, 0.73 53.73 M0.39 -0.45 C0.57 8.43, 0 43.34, 0.16 51.98" stroke="#1971c2" stroke-width="2" fill="none"></path></g><g transform="translate(134.84314553266427 962.6293772541449) rotate(0 0 26.5107599192919)"><path d="M-8.37 28.48 C-5.8 35.64, -3.14 38.61, 0.16 51.98 M-8.37 28.48 C-5.7 36.93, -1.61 43.92, 0.16 51.98" stroke="#1971c2" stroke-width="2" fill="none"></path></g><g transform="translate(134.84314553266427 962.6293772541449) rotate(0 0 26.5107599192919)"><path d="M8.73 28.49 C7.04 35.48, 5.43 38.45, 0.16 51.98 M8.73 28.49 C5.61 37, 3.89 43.99, 0.16 51.98" stroke="#1971c2" stroke-width="2" fill="none"></path></g></g><mask id="mask-DGfGDIEhGbM9VZLGxmU2x"><rect x="0" y="0" fill="#fff" width="234.84314553266427" height="1115.6508970927287"></rect><rect x="123.08481219933105" y="976.6401371734369" fill="#000" width="23.516666666666666" height="25" opacity="1"></rect></mask><g transform="translate(123.08481219933094 976.6401371734369) rotate(0 11.528343253334356 12.628268248881113)"><text x="11.758333333333333" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">no</text></g><g stroke-linecap="round" transform="translate(11.271716961235711 856.5863096653122) rotate(0 123.57142857142861 60.80888546829817)"><path d="M155 15.25 C178.01 26.81, 199.99 37.31, 216.14 45.75 M155 15.25 C177.66 26.24, 198.53 36.57, 216.14 45.75 M216.14 45.75 C247.48 62.03, 248.09 61.93, 216.14 76.25 M216.14 45.75 C249.22 61.31, 246.25 61.77, 216.14 76.25 M216.14 76.25 C197.3 84.9, 180.84 92.47, 155 106.37 M216.14 76.25 C197.75 85.2, 180.38 93.91, 155 106.37 M155 106.37 C125.11 121.61, 122.24 123.5, 93 106.37 M155 106.37 C125.91 121.02, 125.35 120.1, 93 106.37 M93 106.37 C69.08 94.76, 44.5 82.99, 31 76.25 M93 106.37 C79.25 99.51, 65.79 94.69, 31 76.25 M31 76.25 C-1.88 59.65, -1.57 62.64, 31 45.75 M31 76.25 C-1.26 61.03, 0.39 59.25, 31 45.75 M31 45.75 C48.24 37.32, 60.78 30.54, 93 15.25 M31 45.75 C55.54 34.5, 77.85 22.63, 93 15.25 M93 15.25 C122.69 -0.0Line truncated
|
||||
|
After Width: | Height: | Size: 107 KiB |
+2
-2
@@ -7,7 +7,7 @@
|
||||
#include <klein/parm.h>
|
||||
|
||||
int p = 37;
|
||||
int q = 1;
|
||||
int q = 7;
|
||||
|
||||
void lens(float *d_surface, int *coord, unsigned char * grid)
|
||||
{
|
||||
@@ -41,7 +41,7 @@ int main(void)
|
||||
.f = lens,
|
||||
};
|
||||
|
||||
snprintf(file_name, 0xff, "%03d-%03d-cube.klein", p, q);
|
||||
snprintf(file_name, 0xff, "lens-%03d-%03d.klein", p, q);
|
||||
printf("writing %s\n", file_name);
|
||||
|
||||
klein_parametrize(&klein, parametrization);
|
||||
|
||||
+3
-3
@@ -10,7 +10,7 @@
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
unsigned char dim = 4;
|
||||
unsigned char dim = 10;
|
||||
|
||||
void cube(float *d_surface, int *coord, unsigned char *grid)
|
||||
{
|
||||
@@ -37,9 +37,9 @@ int main(void)
|
||||
parametrization.grid = malloc(dim);
|
||||
|
||||
for (i = 0; i < dim; ++i)
|
||||
parametrization.grid[i] = 1 << i;
|
||||
parametrization.grid[i] = 1 + i;
|
||||
|
||||
snprintf(file_name, 0xff, "%03d-cube.klein", dim);
|
||||
snprintf(file_name, 0xff, "cube-%03d.klein", dim);
|
||||
printf("writing %s\n", file_name);
|
||||
|
||||
klein_parametrize(&klein, parametrization);
|
||||
|
||||
@@ -39,8 +39,8 @@ int klein_export_file(struct klein klein, const char * filename)
|
||||
fwrite("\0", 1, 1, file);
|
||||
fwrite(&klein.dim, 1, 1, file);
|
||||
fwrite(&klein.vertex_size, 8, 1, file);
|
||||
fwrite(klein.vertex, 16, klein.vertex_size * klein.dim, file);
|
||||
fwrite(klein.normals, 16, klein.vertex_size * klein.dim, file);
|
||||
fwrite(klein.vertex, 4, klein.vertex_size * klein.dim, file);
|
||||
fwrite(klein.normals, 4, klein.vertex_size * klein.dim, file);
|
||||
|
||||
fclose(file);
|
||||
return 0;
|
||||
|
||||
+8
-2
@@ -9,7 +9,6 @@
|
||||
|
||||
void set_clean_color_context(unsigned char r, unsigned char g, unsigned char b)
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glClearColor((float)r / 0xff, (float)g / 0xff, (float)b / 0xff, 1.0);
|
||||
}
|
||||
|
||||
@@ -22,4 +21,11 @@ int init_context(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
void clean_context(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); }
|
||||
void clean_context(void)
|
||||
{
|
||||
/* This is important cos, Nuklear Disable DEPTH TEST */
|
||||
glEnable(GL_BLEND);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT );
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
#define A -1,-1,-1,
|
||||
#define B -1,-1, 1,
|
||||
#define C -1, 1,-1,
|
||||
#define D -1, 1, 1,
|
||||
#define E 1,-1,-1,
|
||||
#define F 1,-1, 1,
|
||||
#define G 1, 1,-1,
|
||||
#define H 1, 1, 1,
|
||||
|
||||
narray_float_t d_cube =
|
||||
{
|
||||
3*3*2*6,
|
||||
|
||||
A C E
|
||||
C E G
|
||||
|
||||
E G F
|
||||
G F H
|
||||
|
||||
F H B
|
||||
H B D
|
||||
|
||||
B D A
|
||||
D A C
|
||||
|
||||
C D G
|
||||
D G H
|
||||
|
||||
A B E
|
||||
B E F
|
||||
|
||||
};
|
||||
+2
-2
@@ -61,7 +61,7 @@ const char *fs_plain =
|
||||
|
||||
"void main()"
|
||||
"{"
|
||||
" FragColor = vec4(pow(vec3(Color),vec3(1.0/2.2)),Color.a);"
|
||||
" FragColor = vec4(pow(vec3(Color),vec3(1.0/1.0)),Color.a);"
|
||||
"}";
|
||||
|
||||
const char *fs =
|
||||
@@ -92,7 +92,7 @@ const char *fs =
|
||||
" float specular = pow(abs(dot(normalize(Normal), halfwayDir)), 32.0);\n"
|
||||
" float diffuse = abs(dot(normalize(Normal), lightDir));\n"
|
||||
|
||||
" vec3 result = pow((0.5 + 0.5*diffuse + 1.5*specular) * Color.rgb, "
|
||||
" vec3 result = pow((0.5 + 0.5*diffuse + 1*specular) * Color.rgb, "
|
||||
"vec3(1.0/2.2));\n"
|
||||
" FragColor = vec4(result, Color.a);\n"
|
||||
"}";
|
||||
@@ -0,0 +1,83 @@
|
||||
#include <glad.h>
|
||||
#include "main.h"
|
||||
#define MAX_VERTEX_BUFFER 512 * 1024
|
||||
#define MAX_ELEMENT_BUFFER 128 * 1024
|
||||
#define NK_INCLUDE_FIXED_TYPES
|
||||
#define NK_INCLUDE_STANDARD_IO
|
||||
#define NK_INCLUDE_STANDARD_VARARGS
|
||||
#define NK_INCLUDE_DEFAULT_ALLOCATOR
|
||||
#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
|
||||
#define NK_INCLUDE_FONT_BAKING
|
||||
#define NK_INCLUDE_DEFAULT_FONT
|
||||
#define NK_IMPLEMENTATION
|
||||
#define NK_GLFW_GL3_IMPLEMENTATION
|
||||
#include <nuklear.h>
|
||||
#include <demo/glfw_opengl3/nuklear_glfw_gl3.h>
|
||||
|
||||
struct gui gui =
|
||||
{
|
||||
.file_name = {0},
|
||||
.projection = (struct projection){ .mesh=NULL, .x =0, .y=1, .z=2 },
|
||||
};
|
||||
|
||||
float surface_color[4] = {(float)0x2F/0xFF, (float)0x3C/0xFF, (float)0x7E/0xFF, (float)0xff/0xFF};
|
||||
|
||||
|
||||
static inline
|
||||
void restore_surface_color( void )
|
||||
{
|
||||
gui.picked_color[0] = surface_color[0];
|
||||
gui.picked_color[1] = surface_color[1];
|
||||
gui.picked_color[2] = surface_color[2];
|
||||
gui.picked_color[3] = surface_color[3];
|
||||
}
|
||||
|
||||
struct nk_glfw glfw ={0};
|
||||
struct nk_context * context;
|
||||
|
||||
void draw_gui( void )
|
||||
{
|
||||
nk_glfw3_new_frame(&glfw);
|
||||
|
||||
if (nk_begin(context, "MANIGRAPH", nk_rect(10, 10, 256, 256),
|
||||
NK_WINDOW_BORDER |NK_WINDOW_SCALABLE | NK_WINDOW_MOVABLE | NK_WINDOW_MINIMIZABLE) )
|
||||
{
|
||||
|
||||
/* Color picker para personalización */
|
||||
{
|
||||
struct nk_colorf * p = (void*)&gui.picked_color;
|
||||
nk_layout_row_dynamic(context, 120, 1);
|
||||
*p = nk_color_picker(context, *p, NK_RGBA);
|
||||
}
|
||||
|
||||
nk_layout_row_dynamic(context, 20, 1);
|
||||
if (nk_button_label(context, "Restablecer"))
|
||||
restore_surface_color();
|
||||
|
||||
|
||||
nk_layout_row_dynamic(context, 12, 1);
|
||||
nk_label(context, (char*)gui.file_name, NK_TEXT_ALIGN_LEFT);
|
||||
|
||||
nk_label_colored(context, "Atajos de teclado:", NK_TEXT_ALIGN_LEFT, nk_rgb(255, 255, 255)); // Encabezado
|
||||
nk_label(context, " - W/S: Rotar eje X", NK_TEXT_ALIGN_LEFT);
|
||||
nk_label(context, " - A/D: Rotar eje Y", NK_TEXT_ALIGN_LEFT);
|
||||
nk_label(context, " - Z/X: Rotar eje Z", NK_TEXT_ALIGN_LEFT);
|
||||
}
|
||||
|
||||
nk_end(context);
|
||||
nk_glfw3_render(&glfw, NK_ANTI_ALIASING_ON, MAX_VERTEX_BUFFER, MAX_ELEMENT_BUFFER);
|
||||
}
|
||||
|
||||
|
||||
void init_gui( window_t window )
|
||||
{
|
||||
struct nk_font_atlas * atlas;
|
||||
|
||||
restore_surface_color();
|
||||
|
||||
{
|
||||
context = nk_glfw3_init(&glfw,(GLFWwindow*) window, NK_GLFW3_DEFAULT );
|
||||
nk_glfw3_font_stash_begin(&glfw, &atlas);
|
||||
nk_glfw3_font_stash_end(&glfw);
|
||||
}
|
||||
}
|
||||
+33
-30
@@ -1,15 +1,18 @@
|
||||
#include "main.h"
|
||||
#include <glad.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <cglm/quat.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define ANGLE ((float)0x01 / 0xff * 2 * GLM_PI)
|
||||
|
||||
unsigned char selected_axis = 0;
|
||||
int window_width;
|
||||
int window_height;
|
||||
int window_width = 512;
|
||||
int window_height = 512;
|
||||
|
||||
unsigned char animate_index = 0;
|
||||
extern struct gui gui;
|
||||
|
||||
versor q = GLM_QUAT_IDENTITY_INIT;
|
||||
|
||||
@@ -19,7 +22,13 @@ vec3 axis[3] = {
|
||||
{0, 0, 1},
|
||||
};
|
||||
|
||||
extern struct projection projection;
|
||||
|
||||
void __error_callback_input(int x, const char * msg )
|
||||
{
|
||||
mlog("[GLFW] ");
|
||||
mlog(msg);
|
||||
mlog("\n");
|
||||
}
|
||||
|
||||
void __key_callback_input(
|
||||
GLFWwindow *window, int key, int scancode, int action, int mods)
|
||||
@@ -33,41 +42,41 @@ void __key_callback_input(
|
||||
|
||||
selected_coord = key - GLFW_KEY_0 - 1;
|
||||
|
||||
if (selected_coord >= projection.m)
|
||||
if (selected_coord >= gui.projection.m)
|
||||
return;
|
||||
if (selected_coord == projection.x)
|
||||
if (selected_coord == gui.projection.x)
|
||||
return;
|
||||
if (selected_coord == projection.y)
|
||||
if (selected_coord == gui.projection.y)
|
||||
return;
|
||||
if (selected_coord == projection.z)
|
||||
if (selected_coord == gui.projection.z)
|
||||
return;
|
||||
|
||||
selected_coord = projection.w;
|
||||
selected_coord = gui.projection.w;
|
||||
}
|
||||
|
||||
if (projection.w >= projection.m)
|
||||
if (gui.projection.w >= gui.projection.m)
|
||||
return;
|
||||
|
||||
switch (key)
|
||||
{
|
||||
unsigned char tmp;
|
||||
case GLFW_KEY_I:
|
||||
tmp = projection.w;
|
||||
projection.w = projection.x;
|
||||
projection.x = tmp;
|
||||
tmp = gui.projection.w;
|
||||
gui.projection.w = gui.projection.x;
|
||||
gui.projection.x = tmp;
|
||||
|
||||
animate_index = 1;
|
||||
break;
|
||||
case GLFW_KEY_O:
|
||||
tmp = projection.w;
|
||||
projection.w = projection.y;
|
||||
projection.y = tmp;
|
||||
tmp = gui.projection.w;
|
||||
gui.projection.w = gui.projection.y;
|
||||
gui.projection.y = tmp;
|
||||
animate_index = 2;
|
||||
break;
|
||||
case GLFW_KEY_P:
|
||||
tmp = projection.w;
|
||||
projection.w = projection.z;
|
||||
projection.z = tmp;
|
||||
tmp = gui.projection.w;
|
||||
gui.projection.w = gui.projection.z;
|
||||
gui.projection.z = tmp;
|
||||
animate_index = 3;
|
||||
break;
|
||||
}
|
||||
@@ -128,18 +137,20 @@ void __scroll_callback_input(GLFWwindow *window, double xoffset, double yoffset)
|
||||
glm_quat_rotatev(r, axis[2], axis[2]);
|
||||
}
|
||||
|
||||
void __drop_callback_input(GLFWwindow *window, int count, char **path)
|
||||
void __drop_callback_input(GLFWwindow *window, int count, unsigned char **path)
|
||||
{
|
||||
struct surface surface;
|
||||
|
||||
if (create_surface_klein(*path, &surface))
|
||||
return;
|
||||
|
||||
if (!(projection.mesh = create_mesh(surface)))
|
||||
if (!(gui.projection.mesh = create_mesh(surface)))
|
||||
return;
|
||||
|
||||
projection.m = surface.dim;
|
||||
set_projection_mesh(projection);
|
||||
strcpy(gui.file_name, *path);
|
||||
|
||||
gui.projection.m = surface.dim;
|
||||
set_projection_mesh(gui.projection);
|
||||
|
||||
free(surface.norm);
|
||||
free(surface.data);
|
||||
@@ -187,13 +198,5 @@ end:
|
||||
glm_quat_rotatev(p, axis[2], axis[2]);
|
||||
glm_quat_normalize(q);
|
||||
|
||||
// LOG INFO
|
||||
if (0)
|
||||
{
|
||||
printf("QUAT: %2.5f %2.5f %2.5f %2.5f\n", q[0], q[1], q[2], q[3]);
|
||||
printf("PROY: %3d %3d %3d (%3d)\n", projection.x, projection.y,
|
||||
projection.z, projection.w);
|
||||
printf("\n");
|
||||
}
|
||||
return q;
|
||||
}
|
||||
+4
-4
@@ -35,10 +35,10 @@ int create_surface_klein(unsigned char *path, struct surface *surface)
|
||||
|
||||
size = surface->dim * surface->vertex;
|
||||
|
||||
surface->data = malloc(16 * size);
|
||||
fread(surface->data, 16, size, file);
|
||||
surface->data = malloc(4 * size);
|
||||
fread(surface->data, 4, size, file);
|
||||
|
||||
surface->norm = malloc(16 * size);
|
||||
fread(surface->norm, 16, size, file);
|
||||
surface->norm = malloc(4 * size);
|
||||
fread(surface->norm, 4, size, file);
|
||||
return 0;
|
||||
}
|
||||
+1
-7
@@ -22,13 +22,7 @@ void rot_matrix_load(id_t shader, quat_t q)
|
||||
load_mat4_to_shader(shader, "rot", (mat4_t)m);
|
||||
}
|
||||
|
||||
void color_load(id_t shader, unsigned char color[4])
|
||||
void color_load(id_t shader, float res[4])
|
||||
{
|
||||
float res[4];
|
||||
|
||||
res[0] = (float)color[0] / 0xff;
|
||||
res[1] = (float)color[1] / 0xff;
|
||||
res[2] = (float)color[2] / 0xff;
|
||||
res[3] = (float)color[3] / 0xff;
|
||||
load_float4_to_shader(shader, "color", res);
|
||||
}
|
||||
+35
-19
@@ -7,6 +7,11 @@
|
||||
#define WIDTH 512
|
||||
#define HEIGHT 512
|
||||
|
||||
#include <glad.h>
|
||||
|
||||
float *generate_data_surface(unsigned int, unsigned char *);
|
||||
float *generate_normals_surface(float *, unsigned char);
|
||||
|
||||
#ifdef EMSCRIPTEN
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
@@ -15,11 +20,13 @@
|
||||
#define M_PI 3.14159
|
||||
#endif
|
||||
|
||||
struct projection projection = {.x = 0, .y = 1, .z = 2, .w = 3, .mesh = NULL};
|
||||
window_t window;
|
||||
id_t shader, shader_plain;
|
||||
|
||||
const char *wname = "manigraph: manifold grapher";
|
||||
|
||||
unsigned char color[4] = {0x2F, 0x3C, 0x7E, 0xff};
|
||||
extern volatile unsigned char animate_index;
|
||||
extern struct gui gui;
|
||||
|
||||
void mlog(char *msg)
|
||||
{
|
||||
@@ -28,11 +35,6 @@ void mlog(char *msg)
|
||||
#endif
|
||||
}
|
||||
|
||||
window_t window;
|
||||
id_t shader, shader_plain;
|
||||
|
||||
extern volatile unsigned char animate_index;
|
||||
|
||||
#ifndef EMSCRIPTEN
|
||||
static inline
|
||||
#endif
|
||||
@@ -44,10 +46,16 @@ static inline
|
||||
|
||||
q = poll_input(window);
|
||||
|
||||
gui.quat[0] = q[0];
|
||||
gui.quat[1] = q[1];
|
||||
gui.quat[2] = q[2];
|
||||
gui.quat[3] = q[3];
|
||||
|
||||
|
||||
rot_matrix_load(shader, q);
|
||||
rot_matrix_load(shader_plain, q);
|
||||
color_load(shader, color);
|
||||
color_load(shader_plain, color);
|
||||
color_load(shader, gui.picked_color);
|
||||
color_load(shader_plain, gui.picked_color);
|
||||
|
||||
{
|
||||
static float angle = 0;
|
||||
@@ -59,7 +67,7 @@ static inline
|
||||
|
||||
load_float_to_shader(shader, "angle", angle);
|
||||
load_float_to_shader(shader_plain, "angle", angle);
|
||||
set_projection_mesh(projection);
|
||||
set_projection_mesh(gui.projection);
|
||||
}
|
||||
|
||||
if (animate_index)
|
||||
@@ -74,16 +82,19 @@ static inline
|
||||
}
|
||||
clean_context();
|
||||
|
||||
if (!projection.mesh)
|
||||
return;
|
||||
|
||||
draw_mesh(shader, projection.mesh);
|
||||
draw_mesh_lines(shader_plain, projection.mesh);
|
||||
if (gui.projection.mesh)
|
||||
{
|
||||
draw_mesh(shader, gui.projection.mesh);
|
||||
draw_mesh_lines(shader_plain, gui.projection.mesh);
|
||||
}
|
||||
|
||||
draw_gui();
|
||||
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
mlog("[VENTANA] Inicializando...\n");
|
||||
{
|
||||
if (!(window = init_window(WIDTH, HEIGHT, wname)))
|
||||
@@ -129,6 +140,11 @@ int main(void)
|
||||
fix_matrix_load(shader_plain, (float)WIDTH / HEIGHT);
|
||||
}
|
||||
|
||||
mlog("[GUI] Inicializando...\n");
|
||||
{
|
||||
init_gui(window);
|
||||
}
|
||||
|
||||
mlog("[MAIN LOOP] Inicializando...\n");
|
||||
#ifdef EMSCRIPTEN
|
||||
emscripten_set_main_loop(&main_loop, 60, 1);
|
||||
@@ -140,7 +156,7 @@ int main(void)
|
||||
mlog("[MAIN LOOP] Terminando...\n");
|
||||
|
||||
mlog("[MESH] Destruyendo...\n");
|
||||
destroy_mesh(projection.mesh);
|
||||
destroy_mesh(gui.projection.mesh);
|
||||
mlog("[SHADER] Destruyendo...\n");
|
||||
destroy_shader(shader_plain);
|
||||
mlog("[SHADER] Destruyendo...\n");
|
||||
@@ -150,12 +166,12 @@ int main(void)
|
||||
return 0;
|
||||
|
||||
error_context:
|
||||
mlog("[SHADER] Destruyendo...\n");
|
||||
destroy_shader(shader_plain);
|
||||
error_shader_plain:
|
||||
mlog("[SHADER] Destruyendo...\n");
|
||||
destroy_shader(shader);
|
||||
error_shader:
|
||||
mlog("[SHADER] Destruyendo...\n");
|
||||
destroy_shader(shader_plain);
|
||||
error_shader_plain:
|
||||
mlog("[WINDOW] Destruyendo...\n");
|
||||
close_window(window);
|
||||
error_window:
|
||||
|
||||
+13
-2
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#define DEBUG
|
||||
#define GLFW_INCLUDE_NONE
|
||||
|
||||
typedef const void *window_t;
|
||||
typedef unsigned int id_t;
|
||||
@@ -22,12 +23,19 @@ typedef float *mat4_t;
|
||||
w: the coordanate of the w axis.
|
||||
*/
|
||||
|
||||
struct projection
|
||||
struct gui
|
||||
{
|
||||
float quat[4];
|
||||
float picked_color[4];
|
||||
char file_name[0xff];
|
||||
struct projection
|
||||
{
|
||||
mesh_t mesh;
|
||||
unsigned char m, x, y, z, w;
|
||||
} projection;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
this structure has all the information to generate
|
||||
a mesh, where:
|
||||
@@ -163,7 +171,7 @@ void rot_matrix_load(id_t shader, quat_t q);
|
||||
/*
|
||||
*/
|
||||
|
||||
void color_load(id_t shader, unsigned char color[4]);
|
||||
void color_load(id_t shader, float* color);
|
||||
|
||||
id_t config_texture(unsigned short type);
|
||||
|
||||
@@ -179,3 +187,6 @@ void destroy_texture(id_t texture);
|
||||
id_t create_palette_texture(const unsigned char colors[][4], unsigned char n);
|
||||
|
||||
quat_t poll_input(window_t window);
|
||||
|
||||
void draw_gui( void );
|
||||
void init_gui( window_t window );
|
||||
@@ -111,6 +111,7 @@ void draw_mesh_lines(id_t shader, mesh_t p)
|
||||
#ifndef EMSCRIPTEN
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
#else
|
||||
glDrawArrays(GL_LINES, 0, obj->vertex);
|
||||
#endif
|
||||
|
||||
+8
-2
@@ -8,6 +8,7 @@ void __mouse_callback_input(GLFWwindow *, int, int, int);
|
||||
void __scroll_callback_input(GLFWwindow *, double, double);
|
||||
void __key_callback_input(GLFWwindow *, int, int, int, int);
|
||||
void __drop_callback_input(GLFWwindow *, int, const char **);
|
||||
void __error_callback_input(int, const char *);
|
||||
|
||||
window_t init_window(unsigned int w, unsigned int h, const char *name);
|
||||
|
||||
@@ -44,6 +45,7 @@ static void __limit_fps_window(int max_fps)
|
||||
window_t init_window(unsigned int width, unsigned int height, const char *title)
|
||||
{
|
||||
window_t window;
|
||||
glfwSetErrorCallback(__error_callback_input);
|
||||
|
||||
if (!glfwInit())
|
||||
return NULL;
|
||||
@@ -51,6 +53,7 @@ window_t init_window(unsigned int width, unsigned int height, const char *title)
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, 1);
|
||||
|
||||
window = (window_t)glfwCreateWindow(width, height, title, NULL, NULL);
|
||||
if (!(window))
|
||||
@@ -67,15 +70,18 @@ window_t init_window(unsigned int width, unsigned int height, const char *title)
|
||||
glfwSetKeyCallback((GLFWwindow *)window, __key_callback_input);
|
||||
glfwSetDropCallback((GLFWwindow *)window, __drop_callback_input);
|
||||
|
||||
__window_callback_input((GLFWwindow *)window, width, height);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
void use_window(window_t window) { glfwMakeContextCurrent((void *)window); }
|
||||
|
||||
extern int window_width, window_height;
|
||||
|
||||
int is_open_window(window_t window)
|
||||
{
|
||||
/* Restore window proportions if Nuklear breaks it */
|
||||
__window_callback_input((GLFWwindow *)window, window_width, window_height);
|
||||
|
||||
glfwSwapBuffers((void *)window);
|
||||
glfwPollEvents();
|
||||
|
||||
|
||||
Reference in new issue
Block a user