From 6e8f830415a743e79b1b4042b5dc73254db76d46 Mon Sep 17 00:00:00 2001 From: Luc Date: Wed, 25 Apr 2018 02:12:23 +0200 Subject: [PATCH] add name shortener and overload for matrix --- Makefile | 12 ++- sweet_math_short.h | 6 +- sweet_matrix_short.c | 179 +++++++++++++++++++++++++++++++++++++++++++ sweet_matrix_short.h | 23 ++++++ 4 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 sweet_matrix_short.c diff --git a/Makefile b/Makefile index 5d9a967..a5a6140 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,31 @@ # Makefile - UNAME = $(shell uname) CC = gcc PROG = libsweet.so OBJS = sweet_math.o sweet_matrix.o sweet_matrix_stack.o sweet_geometry.o +OBJS_WITH_SHORT = sweet_math_short.o sweet_matrix_short.o CFLAGS = -pedantic -fPIC -Wall LD = -shared +ifeq ($(TARGET),short) +all: $(PROG) +$(PROG): $(OBJS) $(OBJS_WITH_SHORT) + $(CC) $(LD) $(OBJS) $(OBJS_WITH_SHORT) -o $(PROG) +else all: $(PROG) $(PROG): $(OBJS) $(CC) $(LD) $(OBJS) -o $(PROG) +endif .c.o: $(CC) $(CFLAGS) -c $*.c clean: - rm -rf $(OBJS) + rm -rf $(OBJS) $(OBJS_WITH_SHORT) mrproper: - rm -rf $(OBJS) $(PROG) + rm -rf $(OBJS) $(OBJS_WITH_SHORT) $(PROG) diff --git a/sweet_math_short.h b/sweet_math_short.h index dfc462a..745dfd7 100644 --- a/sweet_math_short.h +++ b/sweet_math_short.h @@ -25,9 +25,9 @@ #define VEC3_BUILDER(_1, _2, _3, NAME, ...) NAME #define VEC4_BUILDER(_1, _2, _3, _4, NAME, ...) NAME -#define vec2_new(...) VEC2_BUILDER(__VA_ARGS__, sweet_vector_new2, vec2_new_v3)(__VA_ARGS__) -#define vec3_new(...) VEC3_BUILDER(__VA_ARGS__, sweet_vector_new3, vec3_new_v2_1f, vec3_new_v4)(__VA_ARGS__) -#define vec4_new(...) VEC4_BUILDER(__VA_ARGS__, sweet_vector_new4, vec4_new_v2_2f, vec4_new_v3_1f, vec4_new_v4)(__VA_ARGS__) +#define vec2_new(...) VEC2_BUILDER(__VA_ARGS__, sweet_vector_new2, vec2_new_v3, NULL)(__VA_ARGS__) +#define vec3_new(...) VEC3_BUILDER(__VA_ARGS__, sweet_vector_new3, vec3_new_v2_1f, vec3_new_v4, NULL)(__VA_ARGS__) +#define vec4_new(...) VEC4_BUILDER(__VA_ARGS__, sweet_vector_new4, vec4_new_v2_2f, vec4_new_v3_1f, vec4_new_v4, NULL)(__VA_ARGS__) vec2 vec2_new_v3(vec3 w); vec3 vec3_new_v2_1f(vec2 w, float z); diff --git a/sweet_matrix_short.c b/sweet_matrix_short.c new file mode 100644 index 0000000..de8b412 --- /dev/null +++ b/sweet_matrix_short.c @@ -0,0 +1,179 @@ +#include "sweet_types.h" +#include "sweet_matrix_short.h" + + +mat2 mat2_new_m3 (mat3 m) +{ + mat2 n; + n.v[0] = m.v[0]; + n.v[1] = m.v[1]; + n.v[2] = m.v[3]; + n.v[3] = m.v[4]; + return n; +} + +mat2 mat2_new_2v (vec2 e1, vec2 e2) +{ + mat2 m; + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = e2.x; + m.v[3] = e2.y; + return m; +} + +mat2 mat2_new_3f (float a, float b, float c) +{ + return mat2_new_4f (a, b, c, 0); +} + +mat2 mat2_new_4f (float f0, float f1, float f2, float f3) +{ + mat2 n; + n.v[0] = f0; + n.v[1] = f1; + n.v[2] = f2; + n.v[3] = f3; + return n; +} + +mat3 mat3_new_m4 (mat4 m) +{ + mat3 n; + n.v[0] = m.v[0]; + n.v[1] = m.v[1]; + n.v[2] = m.v[2]; + + n.v[3] = m.v[4]; + n.v[4] = m.v[5]; + n.v[5] = m.v[6]; + + n.v[6] = m.v[8]; + n.v[7] = m.v[9]; + n.v[8] = m.v[10]; + return n; +} + +mat3 mat3_new_2v (vec2 e1, vec2 e2) +{ + mat3 m; + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = 0; + + m.v[3] = e2.x; + m.v[4] = e2.y; + m.v[5] = 0; + + m.v[6] = 0; + m.v[7] = 0; + m.v[8] = 1; + return m; +} + +mat3 mat3_new_3v (vec3 e1, vec3 e2, vec3 e3) +{ + mat3 m; + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = e1.z; + + m.v[3] = e2.x; + m.v[4] = e2.y; + m.v[5] = e2.z; + + m.v[6] = e3.x; + m.v[7] = e3.y; + m.v[8] = e3.z; + return m; +} + +mat4 mat4_new_m4 (mat4 m) +{ + return m; +} + +mat4 mat4_new_2v (vec2 e1, vec2 e2) +{ + mat4 m; + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = 0; + m.v[3] = 0; + + m.v[4] = e2.x; + m.v[5] = e2.y; + m.v[6] = 0; + m.v[7] = 0; + + m.v[8] = 0; + m.v[9] = 0; + m.v[10] = 1; + m.v[11] = 0; + + m.v[12] = 0; + m.v[13] = 0; + m.v[14] = 0; + m.v[15] = 1; + + return m; +} + +mat4 mat4_new_3v (vec3 e1, vec3 e2, vec3 e3) +{ + mat4 m; + + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = e1.z; + m.v[3] = 0; + + m.v[4] = e2.x; + m.v[5] = e2.y; + m.v[6] = e2.z; + m.v[7] = 0; + + m.v[8] = e3.x; + m.v[9] = e3.y; + m.v[10] = e3.z; + m.v[11] = 0; + + m.v[12] = 0; + m.v[13] = 0; + m.v[14] = 0; + m.v[15] = 1; + return m; +} + +mat4 mat4_new_4v (vec4 e1, vec4 e2, vec4 e3, vec4 e4) +{ + mat4 m; + + m.v[0] = e1.x; + m.v[1] = e1.y; + m.v[2] = e1.z; + m.v[3] = e1.w; + + m.v[4] = e2.x; + m.v[5] = e2.y; + m.v[6] = e2.z; + m.v[7] = e2.w; + + m.v[8] = e3.x; + m.v[9] = e3.y; + m.v[10] = e3.z; + m.v[11] = e3.w; + + m.v[12] = e4.x; + m.v[13] = e4.y; + m.v[14] = e4.z; + m.v[15] = e4.w; + + return m; +} + + + + + + diff --git a/sweet_matrix_short.h b/sweet_matrix_short.h index 4b6c270..9bbf6ac 100644 --- a/sweet_matrix_short.h +++ b/sweet_matrix_short.h @@ -20,6 +20,29 @@ #define SWEET_MATRIX_SHORT_H #include "sweet_matrix.h" + +#define MAT2_BUILDER(_1, _2, _3, _4, NAME, ...) NAME +#define MAT3_BUILDER(_1, _2, _3, NAME, ...) NAME +#define MAT4_BUILDER(_1, _2, _3, _4, NAME, ...) NAME + +#define mat2_new(...) MAT2_BUILDER(__VA_ARGS__, mat2_new_4f, mat2_new_3f, mat2_new_2v, mat2_new_m3, NULL)(__VA_ARGS__) +#define mat3_new(...) MAT3_BUILDER(__VA_ARGS__, mat3_new_3v, mat3_new_2v, mat3_new_m4, NULL)(__VA_ARGS__) +#define mat4_new(...) MAT4_BUILDER(__VA_ARGS__, mat4_new_4v, mat4_new_3v, mat4_new_2v, mat4_new_m4, NULL)(__VA_ARGS__) + +mat2 mat2_new_m3 (mat3 m); +mat2 mat2_new_v2 (vec2 e1, vec2 e2); +mat2 mat2_new_3f (float a, float b, float c); +mat2 mat2_new_4f (float f0, float f1, float f2, float f3); + +mat3 mat3_new_m4 (mat4 m); +mat3 mat3_new_2v (vec2 e1, vec2 e2); +mat3 mat3_new_3v (vec3 e1, vec3 e2, vec3 e3); + +mat4 mat4_new_m4 (mat4 m); +mat4 mat4_new_2v (vec2 e1, vec2 e2); +mat4 mat4_new_3v (vec3 e1, vec3 e2, vec3 e3); +mat4 mat4_new_4v (vec4 e1, vec4 e2, vec4 e3, vec4 e4); + #define mat_null2 sweet_matrix_null2 #define mat_null3 sweet_matrix_null3 #define mat_null4 sweet_matrix_null4