add name shortener and overload for matrix

This commit is contained in:
Luc 2018-04-25 02:12:23 +02:00
parent 0e24b6b03f
commit 6e8f830415
4 changed files with 214 additions and 6 deletions

View File

@ -1,25 +1,31 @@
# Makefile # Makefile
UNAME = $(shell uname) UNAME = $(shell uname)
CC = gcc CC = gcc
PROG = libsweet.so PROG = libsweet.so
OBJS = sweet_math.o sweet_matrix.o sweet_matrix_stack.o sweet_geometry.o 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 CFLAGS = -pedantic -fPIC -Wall
LD = -shared LD = -shared
ifeq ($(TARGET),short)
all: $(PROG)
$(PROG): $(OBJS) $(OBJS_WITH_SHORT)
$(CC) $(LD) $(OBJS) $(OBJS_WITH_SHORT) -o $(PROG)
else
all: $(PROG) all: $(PROG)
$(PROG): $(OBJS) $(PROG): $(OBJS)
$(CC) $(LD) $(OBJS) -o $(PROG) $(CC) $(LD) $(OBJS) -o $(PROG)
endif
.c.o: .c.o:
$(CC) $(CFLAGS) -c $*.c $(CC) $(CFLAGS) -c $*.c
clean: clean:
rm -rf $(OBJS) rm -rf $(OBJS) $(OBJS_WITH_SHORT)
mrproper: mrproper:
rm -rf $(OBJS) $(PROG) rm -rf $(OBJS) $(OBJS_WITH_SHORT) $(PROG)

View File

@ -25,9 +25,9 @@
#define VEC3_BUILDER(_1, _2, _3, NAME, ...) NAME #define VEC3_BUILDER(_1, _2, _3, NAME, ...) NAME
#define VEC4_BUILDER(_1, _2, _3, _4, 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 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)(__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)(__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); vec2 vec2_new_v3(vec3 w);
vec3 vec3_new_v2_1f(vec2 w, float z); vec3 vec3_new_v2_1f(vec2 w, float z);

179
sweet_matrix_short.c Normal file
View File

@ -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;
}

View File

@ -20,6 +20,29 @@
#define SWEET_MATRIX_SHORT_H #define SWEET_MATRIX_SHORT_H
#include "sweet_matrix.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_null2 sweet_matrix_null2
#define mat_null3 sweet_matrix_null3 #define mat_null3 sweet_matrix_null3
#define mat_null4 sweet_matrix_null4 #define mat_null4 sweet_matrix_null4