e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_MATRIX_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_MATRIX_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "chromium.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/cdefs.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Note: m[col][row] matches OpenGL's column-major memory layout
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float m00, m01, m02, m03;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float m10, m11, m12, m13;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float m20, m21, m22, m23;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float m30, m31, m32, m33;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRmatrix;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct { GLfloat x,y,z,w; } GLvectorf;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct { GLdouble x,y,z,w; } GLvectord;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInit(CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInitFromString(CRmatrix *m, const char *s);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInitFromFloats(CRmatrix *m, const float *v);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInitFromDoubles(CRmatrix *m, const double *v);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixPrint(const char *msg, const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixGetFloats(float *values, const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(int)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixIsEqual(const CRmatrix *m, const CRmatrix *n);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(int)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixIsIdentity(const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(int)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixIsOrthographic(const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixCopy(CRmatrix *dest, const CRmatrix *src);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixMultiply(CRmatrix *p, const CRmatrix *a, const CRmatrix *b);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTransformPointf(const CRmatrix *m, GLvectorf *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTransformPointd(const CRmatrix *m, GLvectord *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInvertTranspose(CRmatrix *inv, const CRmatrix *mat);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTranspose(CRmatrix *t, const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTranslate(CRmatrix *m, float x, float y, float z);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixRotate(CRmatrix *m, float angle, float x, float y, float z);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixScale(CRmatrix *m, float x, float y, float z);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixFrustum(CRmatrix *m,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float left, float right,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float bottom, float top,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float zNear, float zFar);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern DECLEXPORT(void)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixOrtho(CRmatrix *m,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float left, float right,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float bottom, float top,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float znear, float zfar);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif