|
| 1 | +#include "../../q_arch.h" |
| 2 | + |
| 3 | + |
| 4 | +#ifdef VECTORMATH_DEBUG |
| 5 | +#include <cstdio> |
| 6 | +#endif // VECTORMATH_DEBUG |
| 7 | + |
| 8 | +#if defined( _MSC_VER ) |
| 9 | +// Visual Studio (MS compiler) |
| 10 | +#define VECTORMATH_ALIGNED( type ) __declspec( align( 16 ) ) type |
| 11 | +#define VECTORMATH_ALIGNED_TYPE_PRE __declspec( align( 16 ) ) |
| 12 | +#define VECTORMATH_ALIGNED_TYPE_POST /* nothing */ |
| 13 | +#elif defined( __GNUC__ ) |
| 14 | +// GCC or Clang |
| 15 | +#define VECTORMATH_ALIGNED( type ) type __attribute__( ( aligned( 16 ) ) ) |
| 16 | +#define VECTORMATH_ALIGNED_TYPE_PRE /* nothing */ |
| 17 | +#define VECTORMATH_ALIGNED_TYPE_POST __attribute__( ( aligned( 16 ) ) ) |
| 18 | +#else |
| 19 | +// Unknown compiler |
| 20 | +#error "Define VECTORMATH_ALIGNED for your compiler or platform!" |
| 21 | +#endif |
| 22 | + |
| 23 | +VECTORMATH_ALIGNED_TYPE_PRE struct vec4i_s { |
| 24 | + int x,y,z,w; |
| 25 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 26 | + |
| 27 | + |
| 28 | +VECTORMATH_ALIGNED_TYPE_PRE struct vec2_s { |
| 29 | + float x, y, z, w; |
| 30 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 31 | + |
| 32 | +inline const float vec2_element( const struct vec2_s *v1, uint_fast8_t index); |
| 33 | + |
| 34 | +inline const struct vec2_s vec2_create( float x, float y, float z ); |
| 35 | +inline const struct vec2_s vec2_create_single( float x); |
| 36 | +inline const struct vec2_s vec2_create_vec2( const struct vec2_s* v); |
| 37 | + |
| 38 | + |
| 39 | +inline const struct vec2_s vec2_slerp( float t, const struct vec2_s *unitVec0, const struct vec2_s *unitVec1 ); |
| 40 | +inline const struct vec2_s vec2_add( const struct vec2_s *v1, const struct vec2_s *v2 ); |
| 41 | +inline const struct vec2_s vec2_sub( const struct vec2_s *v1, const struct vec2_s *v2 ); |
| 42 | +inline const struct vec2_s vec2_mul( const struct vec2_s *v1, const struct vec2_s *v2 ); |
| 43 | + |
| 44 | +inline const struct vec3_s vec2_add_scalar( const struct vec2_s *v1, float value); |
| 45 | +inline const struct vec3_s vec2_sub_scalar( const struct vec2_s *v1, float value ); |
| 46 | +inline const struct vec3_s vec2_mul_scalar( const struct vec2_s *v1, float value ); |
| 47 | + |
| 48 | +inline const struct vec2_s vec2_max_per_element( const struct vec2_s *v1, const struct vec2_s *v2); |
| 49 | +inline const struct vec2_s vec2_min_per_element( const struct vec2_s *v1, const struct vec2_s *v2); |
| 50 | +inline const struct vec2_s vec2_copy_sign_element( const struct vec2_s *v1, const struct vec2_s *v2); |
| 51 | + |
| 52 | +inline const struct vec2_s vec2_max_element( const struct vec2_s *v1); |
| 53 | +inline const struct vec2_s vec2_min_element( const struct vec2_s *v1); |
| 54 | + |
| 55 | +inline const float vec2_normalize( const struct vec2_s *v1); |
| 56 | +inline const float vec2_length( const struct vec2_s *v1); |
| 57 | +inline const float vec2_length_sqr( const struct vec2_s *v1); |
| 58 | + |
| 59 | +inline float sum(const struct vec2_s* vec); |
| 60 | + |
| 61 | +inline const float vec2_outer( const struct vec2_s *v1, const struct vec2_s *v2); |
| 62 | + |
| 63 | +VECTORMATH_ALIGNED_TYPE_PRE struct vec3_s { |
| 64 | + float x, y, z, w; |
| 65 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 66 | + |
| 67 | +inline const float vec3_element( const struct vec3_s *v1, uint_fast8_t index); |
| 68 | + |
| 69 | +inline const struct vec3_s vec3_create( float x, float y, float z ); |
| 70 | +inline const struct vec3_s vec3_create_single_scalar( float x); |
| 71 | +inline const struct vec3_s vec3_create_vec3( const struct vec3_s* v); |
| 72 | + |
| 73 | +inline const struct vec3_s vec3_slerp( float t, const struct vec3_s *unitVec0, const struct vec3_s *unitVec1 ); |
| 74 | +inline const struct vec3_s vec3_add( const struct vec3_s *v1, const struct vec3_s *v2 ); |
| 75 | +inline const struct vec3_s vec3_sub( const struct vec3_s *v1, const struct vec3_s *v2 ); |
| 76 | +inline const struct vec3_s vec3_mul( const struct vec3_s *v1, const struct vec3_s *v2 ); |
| 77 | + |
| 78 | +inline const struct vec3_s vec3_add_scalar( const struct vec3_s *v1, float value); |
| 79 | +inline const struct vec3_s vec3_sub_scalar( const struct vec3_s *v1, float value ); |
| 80 | +inline const struct vec3_s vec3_mul_scalar( const struct vec3_s *v1, float value ); |
| 81 | + |
| 82 | +inline const struct vec3_s vec3_max_per_element( const struct vec3_s *v1, const struct vec3_s *v2); |
| 83 | +inline const struct vec3_s vec3_min_per_element( const struct vec3_s *v1, const struct vec3_s *v2); |
| 84 | +inline const struct vec3_s vec3_copy_sign_element( const struct vec3_s *v1, const struct vec3_s *v2); |
| 85 | + |
| 86 | +inline const struct vec3_s vec3_max_element( const struct vec3_s *v1); |
| 87 | +inline const struct vec3_s vec3_min_element( const struct vec3_s *v1); |
| 88 | + |
| 89 | +inline const float vec3_normalize( const struct vec3_s *v1); |
| 90 | +inline const float vec3_length( const struct vec3_s *v1); |
| 91 | +inline const float vec3_length_sqr( const struct vec3_s *v1); |
| 92 | + |
| 93 | +inline float vec3_sum(const struct vec3_s* vec); |
| 94 | + |
| 95 | +inline const float vec3_cross( const struct vec3_s *v1, const struct vec3_s *v2); |
| 96 | +inline const float vec3_outer( const struct vec3_s *v1, const struct vec3_s *v2); |
| 97 | + |
| 98 | +VECTORMATH_ALIGNED_TYPE_PRE struct vec4_s { |
| 99 | + float x, y, z, w; |
| 100 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 101 | + |
| 102 | +inline const float vec4_element( const struct vec4_s *v1, uint_fast8_t index); |
| 103 | + |
| 104 | +inline const struct vec3_s vec4_as_vec3( const struct vec4_s* v ); |
| 105 | +inline const struct vec2_s vec4_as_vec2( const struct vec4_s* v ); |
| 106 | + |
| 107 | +inline const struct vec4_s vec4_create( float x, float y, float z ); |
| 108 | + |
| 109 | +inline const struct vec4_s vec4_slerp( float t, const struct vec4_s *unitVec0, const struct vec4_s *unitVec1 ); |
| 110 | +inline const struct vec4_s vec4_add( const struct vec4_s *v1, const struct vec4_s *v2 ); |
| 111 | +inline const struct vec4_s vec4_sub( const struct vec4_s *v1, const struct vec4_s *v2 ); |
| 112 | +inline const struct vec4_s vec4_mul( const struct vec4_s *v1, const struct vec4_s *v2 ); |
| 113 | + |
| 114 | +inline const struct vec4_s vec4_add_scalar( const struct vec4_s *v1, float value); |
| 115 | +inline const struct vec4_s vec4_sub_scalar( const struct vec4_s *v1, float value ); |
| 116 | +inline const struct vec4_s vec4_mul_scalar( const struct vec4_s *v1, float value ); |
| 117 | + |
| 118 | +inline const struct vec4_s vec4_max_per_element( const struct vec4_s *v1, const struct vec4_s *v2); |
| 119 | +inline const struct vec4_s vec4_min_per_element( const struct vec4_s *v1, const struct vec4_s *v2); |
| 120 | +inline const struct vec4_s vec4_copy_sign_element( const struct vec4_s *v1, const struct vec4_s *v2); |
| 121 | + |
| 122 | +inline const struct vec4_s vec4_max_element( const struct vec4_s *v1); |
| 123 | +inline const struct vec4_s vec4_min_element( const struct vec4_s *v1); |
| 124 | + |
| 125 | +inline const float vec4_normalize( const struct vec4_s *v1); |
| 126 | +inline const float vec4_length( const struct vec4_s *v1); |
| 127 | +inline const float vec4_length_sqr( const struct vec4_s *v1); |
| 128 | + |
| 129 | +inline float vec4_sum(const struct vec4_s* vec); |
| 130 | + |
| 131 | +inline const float vec4_cross( const struct vec4_s *v1, const struct vec4_s *v2); |
| 132 | +inline const float vec4_outer( const struct vec4_s *v1, const struct vec4_s *v2); |
| 133 | + |
| 134 | +VECTORMATH_ALIGNED_TYPE_PRE struct mat4_s { |
| 135 | + struct vec4_s mCol0; |
| 136 | + struct vec4_s mCol1; |
| 137 | + struct vec4_s mCol2; |
| 138 | + struct vec4_s mCol3; |
| 139 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 140 | + |
| 141 | +inline const float mat4_element( const struct mat4_s *v1, uint_fast8_t col, uint_fast8_t row ); |
| 142 | + |
| 143 | +inline const struct vec4_s mat4_create( const struct vec4_s *col0, const struct vec4_s *col1, const struct vec4_s *col2, const struct vec4_s *col3 ); |
| 144 | + |
| 145 | +VECTORMATH_ALIGNED_TYPE_PRE struct mat3_s { |
| 146 | + struct vec3_s mCol0; |
| 147 | + struct vec3_s mCol1; |
| 148 | + struct vec3_s mCol2; |
| 149 | + struct vec3_s mCol3; |
| 150 | +} VECTORMATH_ALIGNED_TYPE_POST; |
| 151 | + |
| 152 | +inline const float mat3_element( const struct mat3_s *v1, uint_fast8_t col, uint_fast8_t row ); |
| 153 | + |
| 154 | +inline const struct vec4_s mat3_create( const struct vec3_s *col0, const struct vec3_s *col1, const struct vec3_s *col2, const struct vec3_s *col3 ); |
| 155 | + |
| 156 | +//inline const struct vec3_s vec3_slerp( float t, const struct vec3_s *unitVec0, const struct vec3_s *unitVec1 ) { |
| 157 | +// v |
| 158 | +//} |
0 commit comments