Merge branch 'experimental'
This commit is contained in:
37
Makefile
37
Makefile
@@ -39,41 +39,28 @@ help:
|
||||
@echo " $(MAKE) CC=emcc wasm"
|
||||
@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
|
||||
|
||||
src/main.o: src/data/shaders.h src/data/axis.h
|
||||
|
||||
# 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
|
||||
cd ext; $(MAKE) -f glfw.mk cocoa; cd -
|
||||
$(CC) -framework OpenGL -o $(BIN) $(OBJ) ext/glfw.a -lGL -lglfw
|
||||
|
||||
wasm: $(OBJ)
|
||||
$(CC) -sUSE_WEBGL2=1 -sUSE_GLFW=3 -o $(BIN).js $(OBJ)
|
||||
@@ -83,9 +70,11 @@ libglfw.so:
|
||||
$(CC) -fPIC -shared $(DFLAGS) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@
|
||||
|
||||
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 $@ $<
|
||||
|
||||
71
ext/glfw.mk
Normal file
71
ext/glfw.mk
Normal file
@@ -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
|
||||
12
src/input.c
12
src/input.c
@@ -112,13 +112,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)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
error of the shaders.
|
||||
*/
|
||||
|
||||
/* #define DEBUG */
|
||||
/* #define GLAD */
|
||||
/* #define DEBUG */
|
||||
#define GLAD
|
||||
|
||||
typedef const void * window_t;
|
||||
typedef unsigned int id_t;
|
||||
|
||||
105
src/surface.c
105
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,45 +71,84 @@ 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 *s)
|
||||
{
|
||||
unsigned int i, j, k = 0;
|
||||
long size;
|
||||
unsigned int i, j, k, o, p, l, n, m;
|
||||
long size, q=0;
|
||||
function_t f;
|
||||
float *d_surface;
|
||||
|
||||
f = klein;
|
||||
*m = 4;
|
||||
const int dim =2;
|
||||
int cara[dim];
|
||||
char bits[dim+1];
|
||||
bits[dim]=0;
|
||||
|
||||
size = grid_size * grid_size * 6 * (*m);
|
||||
f =klein ;
|
||||
*s = 4;
|
||||
|
||||
size = grid_size * grid_size * 6 * (*s) * 24;
|
||||
d_surface = malloc((size + 1) * sizeof(float));
|
||||
d_surface[0] = size;
|
||||
|
||||
for (i = 0; i < grid_size; i++)
|
||||
for(o = 0; o < dim; o ++)
|
||||
{
|
||||
for (j = 0; j < grid_size; j++)
|
||||
for (p = 0; p < o; p++)
|
||||
{
|
||||
// triangle 1, Front
|
||||
f(&d_surface[k + 1], (int[2]){i, j}, grid_size);
|
||||
k += *m;
|
||||
f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size);
|
||||
k += *m;
|
||||
f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size);
|
||||
k += *m;
|
||||
for (k = 0; k < (1 << (dim-2)); k++)
|
||||
{
|
||||
unsigned char skip=0;
|
||||
for(n = 0; n < dim-2; n++)
|
||||
{
|
||||
if( n==(o-1) || n==p )
|
||||
skip++;
|
||||
|
||||
// triangle 2, Back
|
||||
f(&d_surface[k + 1], (int[2]){i, j}, grid_size);
|
||||
k += *m;
|
||||
f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size);
|
||||
k += *m;
|
||||
f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size);
|
||||
k += *m;
|
||||
cara[n+skip] = (k & (1<<n))?grid_size:0;
|
||||
}
|
||||
|
||||
for(i = 0; i < grid_size; i++)
|
||||
{
|
||||
for (j = 0; j < grid_size; j++)
|
||||
{
|
||||
cara[o] = i;
|
||||
cara[p] = j;
|
||||
f(&d_surface[q + 1], cara, grid_size);
|
||||
q += *s;
|
||||
|
||||
cara[o] = i + 1;
|
||||
cara[p] = j;
|
||||
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[o] = i;
|
||||
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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user