Permalink
Browse files

Added integer vectors (SGIVec?).

  • Loading branch information...
darkuranium committed Nov 23, 2014
1 parent 9ef2efd commit 8c7330545ddf88da9adfcbdb6ce0ef7f7ef5953d
Showing with 423 additions and 0 deletions.
  1. +130 −0 include/siege/util/ivector.h
  2. +7 −0 include/siege/util/vector.h
  3. +273 −0 src/siege/util/ivector.c
  4. +13 −0 src/siege/util/vector.c
@@ -0,0 +1,130 @@
#ifndef __SIEGE_UTIL_IVECTOR_H__
#define __SIEGE_UTIL_IVECTOR_H__
#include "../common.h"
#include <stddef.h>
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
struct SGVec2;
struct SGVec3;
struct SGVec4;
typedef struct SGIVec2
{
SGint x, y;
} SGIVec2;
typedef struct SGIVec3
{
SGint x, y, z;
} SGIVec3;
typedef struct SGIVec4
{
SGint x, y, z, w;
} SGIVec4;
/**
\memberof SGIVec2
\brief Create a 2D vector from coordinates
\param x X coordinate
\param y Y coordinate
\return A new 2D vector.
*/
SGIVec2 SG_CALL sgIVec2i(SGint x, SGint y);
SGIVec2 SG_CALL sgIVec2ip(const SGint* xy);
SGIVec2 SG_CALL sgIVec2fv(struct SGVec2 vec);
float SG_CALL sgIVec2Length(SGIVec2 vec);
SGint SG_CALL sgIVec2Length2(SGIVec2 vec);
SGIVec2 SG_CALL sgIVec2Neg(SGIVec2 a);
SGIVec2 SG_CALL sgIVec2Add(SGIVec2 a, SGIVec2 b);
SGIVec2 SG_CALL sgIVec2Sub(SGIVec2 a, SGIVec2 b);
SGIVec2 SG_CALL sgIVec2Mul(SGIVec2 a, SGIVec2 b);
SGIVec2 SG_CALL sgIVec2Div(SGIVec2 a, SGIVec2 b);
SGIVec2 SG_CALL sgIVec2Addi(SGIVec2 a, SGint i);
SGIVec2 SG_CALL sgIVec2Subi(SGIVec2 a, SGint i);
SGIVec2 SG_CALL sgIVec2Muli(SGIVec2 a, SGint i);
SGIVec2 SG_CALL sgIVec2Divi(SGIVec2 a, SGint i);
SGIVec2 SG_CALL sgIVec2QMul2(SGIVec2 a, SGIVec2 b);
float SG_CALL sgIVec2Distance(SGIVec2 a, SGIVec2 b);
SGint SG_CALL sgIVec2Distance2(SGIVec2 a, SGIVec2 b);
SGint SG_CALL sgIVec2Dot(SGIVec2 a, SGIVec2 b);
/*
* Calculates the perpendicular dot product.
*
* This is what some call the 2D cross product, though I have opted to call the
* (IMO more mathematically correct) the generalization below "cross product".
*/
SGint SG_CALL sgIVec2PDot(SGIVec2 a, SGIVec2 b);
SGIVec2 SG_CALL sgIVec2Cross(SGIVec2 a);
SGIVec3 SG_CALL sgIVec3i(SGint x, SGint y, SGint z);
SGIVec3 SG_CALL sgIVec3ip(const SGint* xyz);
SGIVec3 SG_CALL sgIVec3fv(struct SGVec3 vec);
float SG_CALL sgIVec3Length(SGIVec3 vec);
SGint SG_CALL sgIVec3Length2(SGIVec3 vec);
SGIVec3 SG_CALL sgIVec3Neg(SGIVec3 a);
SGIVec3 SG_CALL sgIVec3Add(SGIVec3 a, SGIVec3 b);
SGIVec3 SG_CALL sgIVec3Sub(SGIVec3 a, SGIVec3 b);
SGIVec3 SG_CALL sgIVec3Mul(SGIVec3 a, SGIVec3 b);
SGIVec3 SG_CALL sgIVec3Div(SGIVec3 a, SGIVec3 b);
SGIVec3 SG_CALL sgIVec3Addi(SGIVec3 a, SGint i);
SGIVec3 SG_CALL sgIVec3Subi(SGIVec3 a, SGint i);
SGIVec3 SG_CALL sgIVec3Muli(SGIVec3 a, SGint i);
SGIVec3 SG_CALL sgIVec3Divi(SGIVec3 a, SGint i);
float SG_CALL sgIVec3Distance(SGIVec3 a, SGIVec3 b);
SGint SG_CALL sgIVec3Distance2(SGIVec3 a, SGIVec3 b);
SGint SG_CALL sgIVec3Dot(SGIVec3 a, SGIVec3 b);
SGIVec3 SG_CALL sgIVec3Cross(SGIVec3 a, SGIVec3 b);
// A dot (B cross C)
SGint SG_CALL sgIVec3Triple(SGIVec3 a, SGIVec3 b, SGIVec3 c);
SGIVec4 SG_CALL sgIVec4i(SGint x, SGint y, SGint z, SGint w);
SGIVec4 SG_CALL sgIVec4ip(const SGint* xyzw);
SGIVec4 SG_CALL sgIVec4fv(struct SGVec4 vec);
float SG_CALL sgIVec4Length(SGIVec4 vec);
SGint SG_CALL sgIVec4Length2(SGIVec4 vec);
SGIVec4 SG_CALL sgIVec4Neg(SGIVec4 a);
SGIVec4 SG_CALL sgIVec4Add(SGIVec4 a, SGIVec4 b);
SGIVec4 SG_CALL sgIVec4Sub(SGIVec4 a, SGIVec4 b);
SGIVec4 SG_CALL sgIVec4Mul(SGIVec4 a, SGIVec4 b);
SGIVec4 SG_CALL sgIVec4Div(SGIVec4 a, SGIVec4 b);
SGIVec4 SG_CALL sgIVec4Addi(SGIVec4 a, SGint i);
SGIVec4 SG_CALL sgIVec4Subi(SGIVec4 a, SGint i);
SGIVec4 SG_CALL sgIVec4Muli(SGIVec4 a, SGint i);
SGIVec4 SG_CALL sgIVec4Divi(SGIVec4 a, SGint i);
SGIVec4 SG_CALL sgIVec4QMul4(SGIVec4 a, SGIVec4 b);
float SG_CALL sgIVec4Distance(SGIVec4 a, SGIVec4 b);
SGint SG_CALL sgIVec4Distance2(SGIVec4 a, SGIVec4 b);
SGint SG_CALL sgIVec4Dot(SGIVec4 a, SGIVec4 b);
//SGIVec4 sgIVec4Cross(SGIVec4 a, SGIVec4 b, SGIVec4 c);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // __SIEGE_UTIL_IVECTOR_H__
@@ -24,6 +24,10 @@ extern "C"
{
#endif // __cplusplus
struct SGIVec2;
struct SGIVec3;
struct SGIVec4;
typedef struct SGVec2
{
float x, y;
@@ -48,6 +52,7 @@ typedef struct SGVec4
*/
SGVec2 SG_CALL sgVec2f(float x, float y);
SGVec2 SG_CALL sgVec2fp(const float* xy);
SGVec2 SG_CALL sgVec2iv(struct SGIVec2 vec);
/**
\memberof SGVec2
\brief Create a 2D vector from polar coordinates in radians
@@ -120,6 +125,7 @@ SGVec2 SG_CALL sgVec2Reject(SGVec2 v, SGVec2 target);
SGVec3 SG_CALL sgVec3f(float x, float y, float z);
SGVec3 SG_CALL sgVec3fp(const float* xyz);
SGVec3 SG_CALL sgVec3iv(struct SGIVec3 vec);
SGVec3 SG_CALL sgVec3CylindricalRads(float rads, float radius, float z);
SGVec3 SG_CALL sgVec3CylindricalDegs(float degs, float radius, float z);
SGVec3 SG_CALL sgVec3SphericalRads(float azimuth, float zenith, float radius);
@@ -167,6 +173,7 @@ SGVec3 SG_CALL sgVec3Reject(SGVec3 v, SGVec3 target);
SGVec4 SG_CALL sgVec4f(float x, float y, float z, float w);
SGVec4 SG_CALL sgVec4fp(const float* xyzw);
SGVec4 SG_CALL sgVec4iv(struct SGIVec4 vec);
//SGVec4 sgVec4PolarRads(float rads, float len);
//SGVec4 sgVec4PolarDegs(float degs, float len);
SGVec4 SG_CALL sgVec4Nan(void);
Oops, something went wrong.

0 comments on commit 8c73305

Please sign in to comment.