# HG changeset patch # User John Tsiombikas # Date 1379805941 -10800 # Node ID 61d97b17cd2b70ffb04ee64295b5b35c4a17e500 # Parent 5ff8ce78059ad989c3a6233fe7219586810bce99 shortened the name fixed_point.c/h to fixedp diff -r 5ff8ce78059a -r 61d97b17cd2b Makefile --- a/Makefile Sun Sep 22 02:21:30 2013 +0300 +++ b/Makefile Sun Sep 22 02:25:41 2013 +0300 @@ -1,7 +1,7 @@ obj = src/test.o \ src/mingl.o src/mglrast.o src/mglgen.o \ src/texture.o src/palman.o \ - src/scene.o src/cvec.o src/fixed_point.o \ + src/scene.o src/cvec.o src/fixedp.o \ dosemu/dosemu.o dep = $(obj:.o=.d) bin = deepstone diff -r 5ff8ce78059a -r 61d97b17cd2b src/fixed_point.c --- a/src/fixed_point.c Sun Sep 22 02:21:30 2013 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -#include -#include "fixed_point.h" - -const fixed fixed_zero = 0; -const fixed fixed_one = fixedi(1); -const fixed fixed_half = fixedf(0.5); -const fixed fixed_tenth = fixedf(0.1); -const fixed fixed_255 = fixedi(255); - -#ifndef DBG_USE_FLOAT - -#define PI 3.1415927 -#define TWO_PI 6.2831853 - -#define LUT_SIZE 256 - -static fixed sin_lut[LUT_SIZE], cos_lut[LUT_SIZE]; -static int initialized; - -static void precalc_lut(void) -{ - int i; - - for(i=0; i= 0 ? sin_lut[a] : -sin_lut[-a]; -} - -fixed fixed_cos(fixed angle) { - int a; - - if(!initialized) precalc_lut(); - a = FIXED_INT_PART(fixed_div(angle, fix_two_pi) * 255) % 256; - return a >= 0 ? cos_lut[a] : cos_lut[-a]; -} - -#endif diff -r 5ff8ce78059a -r 61d97b17cd2b src/fixed_point.h --- a/src/fixed_point.h Sun Sep 22 02:21:30 2013 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -#ifndef FIXED_POINT_H_ -#define FIXED_POINT_H_ - -#include "inttypes.h" - -#ifdef DBG_USE_FLOAT -typedef float fixed; -#else -typedef int32_t fixed; -#endif - -/* valid choices for DECIMAL_BITS - * 8: for fixed point 24:8 - * 16: for fixed point 16:16 - */ -#define DECIMAL_BITS 16 - -#if DECIMAL_BITS == 8 -#define FIXED_SHIFT 8 -#define FLT_SCALE 256.0f -#define FRAC_MASK 0xff -#else /* DECIMAL_BITS == 16 */ -#define FIXED_SHIFT 16 -#define FLT_SCALE 65536.0f -#define FRAC_MASK 0xffff -#endif /* DECIMAL_BITS */ - -/*extern const fixed fixed_zero; -extern const fixed fixed_one; -extern const fixed fixed_half; -extern const fixed fixed_tenth; -extern const fixed fixed_255;*/ - -#ifdef DBG_USE_FLOAT -/* ------- debug mode, use floating point -------- */ -#define FIXED_INT_PART(n) ((int)(n)) -#define FIXED_FRAC_PART(n) ((n) > 0.0f ? (FIXED_INT_PART(n) - (n)) : (FIXED_INT_PART(n) + (n))) -#define FIXED_ROUND(n) FIXED_INT_PART((n) >= 0.0 ? (n) + 0.5f : (n) - 0.5f) - -#define FIXED_TO_FLOAT(n) (n) -#define FLOAT_TO_FIXED(n) (n) -#define INT_TO_FIXED(n) ((float)(n)) - -#define FIXED_EPSILON (1e-6) - -#else /* ---- really fixed point ---- */ - -#define FIXED_INT_PART(n) ((n) >> FIXED_SHIFT) -#define FIXED_FRAC_PART(n) ((n) & FRAC_MASK) -#define FIXED_ROUND(n) FIXED_INT_PART((n) >= 0 ? (n) + fixedf(0.5) : (n) - fixedf(0.5)) -/*#define FIXED_ROUND(n) FIXED_INT_PART(n)*/ - -#define FIXED_TO_FLOAT(n) (float)((n) / FLT_SCALE) -#define FLOAT_TO_FIXED(n) (fixed)((n) * FLT_SCALE) -#define INT_TO_FIXED(n) (fixed)((n) << FIXED_SHIFT) - -#define FIXED_EPSILON (1) - -#endif - - -#define fixed_int(n) FIXED_INT_PART(n) -#define fixed_frac(n) FIXED_FRAC_PART(n) -#define fixed_float(n) FIXED_TO_FLOAT(n) -#define fixed_round(n) FIXED_ROUND(n) - -#define fixedf(n) FLOAT_TO_FIXED(n) -#define fixedi(n) INT_TO_FIXED(n) - -#define fixed_add(n1, n2) ((n1) + (n2)) -#define fixed_sub(n1, n2) ((n1) - (n2)) - - - -#ifdef DBG_USE_FLOAT - -#define fixed_mul(n1, n2) ((n1) * (n2)) -#define fixed_div(n1, n2) ((n1) / (n2)) - -#define fixed_sin(x) (fixed)sin(x) -#define fixed_cos(x) (fixed)cos(x) - -#else - -#if DECIMAL_BITS == 8 -#define fixed_mul(n1, n2) (fixed)((n1) * (n2) >> FIXED_SHIFT) -#define fixed_div(n1, n2) (((n1) << FIXED_SHIFT) / (n2)) -#else -#define fixed_div(n1, n2) (((int64_t)(n1) << FIXED_SHIFT) / (int64_t)(n2)) -#define fixed_mul(n1, n2) (((n1) >> 8) * ((n2) >> 8)) -#endif /* DECIMAL_BITS */ - -#ifdef __cplusplus -extern "C" { -#endif - -fixed fixed_sin(fixed angle); -fixed fixed_cos(fixed angle); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif /* FIXED_POINT_H_ */ diff -r 5ff8ce78059a -r 61d97b17cd2b src/fixedp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fixedp.c Sun Sep 22 02:25:41 2013 +0300 @@ -0,0 +1,52 @@ +#include +#include "fixedp.h" + +const fixed fixed_zero = 0; +const fixed fixed_one = fixedi(1); +const fixed fixed_half = fixedf(0.5); +const fixed fixed_tenth = fixedf(0.1); +const fixed fixed_255 = fixedi(255); + +#ifndef DBG_USE_FLOAT + +#define PI 3.1415927 +#define TWO_PI 6.2831853 + +#define LUT_SIZE 256 + +static fixed sin_lut[LUT_SIZE], cos_lut[LUT_SIZE]; +static int initialized; + +static void precalc_lut(void) +{ + int i; + + for(i=0; i= 0 ? sin_lut[a] : -sin_lut[-a]; +} + +fixed fixed_cos(fixed angle) { + int a; + + if(!initialized) precalc_lut(); + a = FIXED_INT_PART(fixed_div(angle, fix_two_pi) * 255) % 256; + return a >= 0 ? cos_lut[a] : cos_lut[-a]; +} + +#endif diff -r 5ff8ce78059a -r 61d97b17cd2b src/fixedp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fixedp.h Sun Sep 22 02:25:41 2013 +0300 @@ -0,0 +1,106 @@ +#ifndef FIXED_POINT_H_ +#define FIXED_POINT_H_ + +#include "inttypes.h" + +#ifdef DBG_USE_FLOAT +typedef float fixed; +#else +typedef int32_t fixed; +#endif + +/* valid choices for DECIMAL_BITS + * 8: for fixed point 24:8 + * 16: for fixed point 16:16 + */ +#define DECIMAL_BITS 16 + +#if DECIMAL_BITS == 8 +#define FIXED_SHIFT 8 +#define FLT_SCALE 256.0f +#define FRAC_MASK 0xff +#else /* DECIMAL_BITS == 16 */ +#define FIXED_SHIFT 16 +#define FLT_SCALE 65536.0f +#define FRAC_MASK 0xffff +#endif /* DECIMAL_BITS */ + +/*extern const fixed fixed_zero; +extern const fixed fixed_one; +extern const fixed fixed_half; +extern const fixed fixed_tenth; +extern const fixed fixed_255;*/ + +#ifdef DBG_USE_FLOAT +/* ------- debug mode, use floating point -------- */ +#define FIXED_INT_PART(n) ((int)(n)) +#define FIXED_FRAC_PART(n) ((n) > 0.0f ? (FIXED_INT_PART(n) - (n)) : (FIXED_INT_PART(n) + (n))) +#define FIXED_ROUND(n) FIXED_INT_PART((n) >= 0.0 ? (n) + 0.5f : (n) - 0.5f) + +#define FIXED_TO_FLOAT(n) (n) +#define FLOAT_TO_FIXED(n) (n) +#define INT_TO_FIXED(n) ((float)(n)) + +#define FIXED_EPSILON (1e-6) + +#else /* ---- really fixed point ---- */ + +#define FIXED_INT_PART(n) ((n) >> FIXED_SHIFT) +#define FIXED_FRAC_PART(n) ((n) & FRAC_MASK) +#define FIXED_ROUND(n) FIXED_INT_PART((n) >= 0 ? (n) + fixedf(0.5) : (n) - fixedf(0.5)) +/*#define FIXED_ROUND(n) FIXED_INT_PART(n)*/ + +#define FIXED_TO_FLOAT(n) (float)((n) / FLT_SCALE) +#define FLOAT_TO_FIXED(n) (fixed)((n) * FLT_SCALE) +#define INT_TO_FIXED(n) (fixed)((n) << FIXED_SHIFT) + +#define FIXED_EPSILON (1) + +#endif + + +#define fixed_int(n) FIXED_INT_PART(n) +#define fixed_frac(n) FIXED_FRAC_PART(n) +#define fixed_float(n) FIXED_TO_FLOAT(n) +#define fixed_round(n) FIXED_ROUND(n) + +#define fixedf(n) FLOAT_TO_FIXED(n) +#define fixedi(n) INT_TO_FIXED(n) + +#define fixed_add(n1, n2) ((n1) + (n2)) +#define fixed_sub(n1, n2) ((n1) - (n2)) + + + +#ifdef DBG_USE_FLOAT + +#define fixed_mul(n1, n2) ((n1) * (n2)) +#define fixed_div(n1, n2) ((n1) / (n2)) + +#define fixed_sin(x) (fixed)sin(x) +#define fixed_cos(x) (fixed)cos(x) + +#else + +#if DECIMAL_BITS == 8 +#define fixed_mul(n1, n2) (fixed)((n1) * (n2) >> FIXED_SHIFT) +#define fixed_div(n1, n2) (((n1) << FIXED_SHIFT) / (n2)) +#else +#define fixed_div(n1, n2) (((int64_t)(n1) << FIXED_SHIFT) / (int64_t)(n2)) +#define fixed_mul(n1, n2) (((n1) >> 8) * ((n2) >> 8)) +#endif /* DECIMAL_BITS */ + +#ifdef __cplusplus +extern "C" { +#endif + +fixed fixed_sin(fixed angle); +fixed fixed_cos(fixed angle); + +#ifdef __cplusplus +} +#endif + +#endif + +#endif /* FIXED_POINT_H_ */ diff -r 5ff8ce78059a -r 61d97b17cd2b src/vmath.h --- a/src/vmath.h Sun Sep 22 02:21:30 2013 +0300 +++ b/src/vmath.h Sun Sep 22 02:25:41 2013 +0300 @@ -2,7 +2,7 @@ #define VMATH_H_ #include -#include "fixed_point.h" +#include "fixedp.h" #ifndef M_PI #define M_PI 3.1415926536