22 #include "../../gfx.h"
37 ARRAY_DATA_UNKNOWN = 0,
38 ARRAY_DATA_4BITUNSIGNED = 4, ARRAY_DATA_4BITSIGNED = 5,
39 ARRAY_DATA_8BITUNSIGNED = 8, ARRAY_DATA_8BITSIGNED = 9,
40 ARRAY_DATA_10BITUNSIGNED = 10, ARRAY_DATA_10BITSIGNED = 11,
41 ARRAY_DATA_12BITUNSIGNED = 12, ARRAY_DATA_12BITSIGNED = 13,
42 ARRAY_DATA_14BITUNSIGNED = 14, ARRAY_DATA_14BITSIGNED = 15,
43 ARRAY_DATA_16BITUNSIGNED = 16, ARRAY_DATA_16BITSIGNED = 17,
49 #define gfxSampleFormatIsSigned(fmt) ((fmt) & 1)
54 #define gfxSampleFormatBits(fmt) ((fmt) & ~1)
66 #define FIXED(x) ((fixed)(x)<<16)
67 #define NONFIXED(x) ((x)>>16)
68 #define FIXED0_5 32768
69 #define FP2FIXED(x) ((fixed)((x)*65536.0))
70 #define FIXED2FP(x) ((double)(x)/65536.0)
71 #define FIXEDMUL(a,b) ((fixed)((((long long)(a))*(b))>>16))
72 #define FIXEDMULINT(a,b) ((a)*(b))
79 #define GFX_PI 3.1415926535897932384626433832795028841971693993751
85 #define FIXED_PI FP2FIXED(GFX_PI)
91 #if GFX_USE_GMISC || defined(__DOXYGEN__)
93 #if GMISC_NEED_ARRAYOPS || defined(__DOXYGEN__)
118 void gmiscArrayTranslate(
ArrayDataFormat fmt,
void *src,
void *dst, gMemSize cnt,
int trans);
120 void gmiscArrayMultiply(
ArrayDataFormat fmt,
void *src,
void *dst, gMemSize cnt,
int mult);
122 void gmiscArrayDivide(
ArrayDataFormat fmt,
void *src,
void *dst, gMemSize cnt,
int mdiv);
124 void gmiscArrayMultDiv(
ArrayDataFormat fmt,
void *src,
void *dst, gMemSize cnt,
int mult,
int div);
126 void gmiscArrayAdd(
ArrayDataFormat fmt,
void *src1,
void *src2,
void *dst, gMemSize cnt);
128 void gmiscArrayAddNoOverflow(
ArrayDataFormat fmt,
void *src1,
void *src2,
void *dst, gMemSize cnt);
132 #if GMISC_NEED_FASTTRIG || defined(__DOXYGEN__)
135 extern const double sintabledouble[];
150 double fcos(
int degrees);
167 #define FSIN(degrees) sintabledouble[degrees];
171 #if GMISC_NEED_FIXEDTRIG || defined(__DOXYGEN__)
172 extern const fixed sintablefixed[];
187 fixed ffcos(
int degrees);
204 #define FFSIN(degrees) sintablefixed[degrees];
208 #if GMISC_NEED_INVSQRT || defined(__DOXYGEN__)
227 #if GMISC_NEED_MATRIXFLOAT2D || defined(__DOXYGEN__)
345 #if GMISC_NEED_MATRIXFIXED2D || defined(__DOXYGEN__)
444 #if GMISC_NEED_FIXEDTRIG || defined(__DOXYGEN__)
464 #if GMISC_NEED_HITTEST_POLY || defined(__DOXYGEN__)
gBool gmiscHittestPoly(const gPoint *pntarray, unsigned cnt, const gPoint *p)
Check whether a point is inside or on the edge of a polygon.
void gmiscMatrixFixed2DApplyShear(MatrixFixed2D *dst, const MatrixFixed2D *src, fixed sx, fixed sy)
Add x,y shear to a matrix.
ArrayDataFormat_e
Sample data formats.
gI32 fixed
The type for a fixed point type.
void gmiscMatrixFloat2DApplyTranslation(MatrixFloat2D *dst, const MatrixFloat2D *src, float tx, float ty)
Add an x,y translation to a matrix.
void gmiscMatrixFloat2DApplyShear(MatrixFloat2D *dst, const MatrixFloat2D *src, float sx, float sy)
Add x,y shear to a matrix.
fixed ffsin(int degrees)
Fast Table Based Trig functions.
double fsin(int degrees)
Fast Table Based Trig functions.
float invsqrt(float n)
Fast inverse square root function (x^-1/2)
void gmiscMatrixFixed2DMultiply(MatrixFixed2D *dst, const MatrixFixed2D *src1, const MatrixFixed2D *src2)
Multiple two 2D matrixes together.
void gmiscMatrixFloat2DApplyRotation(MatrixFloat2D *dst, const MatrixFloat2D *src, int angle)
Add rotation to a matrix.
struct MatrixFloat2D MatrixFloat2D
A matrix for doing 2D graphics using floats.
void gmiscMatrixFloat2DSetIdentity(MatrixFloat2D *m)
Set the 2D matrix to the identity matrix.
void gmiscMatrixFixed2DApplyScale(MatrixFixed2D *dst, const MatrixFixed2D *src, fixed sx, fixed sy)
Add x,y scaling to a matrix.
void gmiscMatrixFixed2DApplyTranslation(MatrixFixed2D *dst, const MatrixFixed2D *src, fixed tx, fixed ty)
Add an x,y translation to a matrix.
void gmiscMatrixFixed2DApplyRotation(MatrixFixed2D *dst, const MatrixFixed2D *src, int angle)
Add rotation to a matrix.
void gmiscMatrixFloat2DApplyScale(MatrixFloat2D *dst, const MatrixFloat2D *src, float sx, float sy)
Add x,y scaling to a matrix.
void gmiscMatrixFloat2DApplyToPoints(gPoint *dst, const gPoint *src, const MatrixFloat2D *m, int cnt)
Apply the matrix to a set of points.
struct MatrixFixed2D MatrixFixed2D
A matrix for doing 2D graphics using fixed point maths.
void gmiscMatrixFloat2DMultiply(MatrixFloat2D *dst, const MatrixFloat2D *src1, const MatrixFloat2D *src2)
Multiple two 2D matrixes together.
void gmiscMatrixFixed2DSetIdentity(MatrixFixed2D *m)
Set the 2D matrix to the identity matrix.
void gmiscMatrixFixed2DApplyToPoints(gPoint *dst, const gPoint *src, const MatrixFixed2D *m, int cnt)
Apply the matrix to a set of points.
void gmiscArrayConvert(ArrayDataFormat srcfmt, void *src, ArrayDataFormat dstfmt, void *dst, gMemSize cnt)
Convert from one array format to another array format.
enum ArrayDataFormat_e ArrayDataFormat
Sample data formats.
A matrix for doing 2D graphics using fixed point maths.
A matrix for doing 2D graphics using floats.
Type for a 2D point on the screen.