Turn matrix_4x4_identity into inline function

This commit is contained in:
twinaphex 2016-11-04 15:58:32 +01:00
parent cd2599456a
commit 01961cbf5e
2 changed files with 32 additions and 30 deletions

View File

@ -26,8 +26,6 @@
#include <gfx/math/matrix_4x4.h>
#include <gfx/math/vector_3.h>
#define MAT_ELEM_4X4(mat, row, column) ((mat).data[4 * (column) + (row)])
void matrix_4x4_copy(math_matrix_4x4 *dst, const math_matrix_4x4 *src)
{
unsigned i, j;
@ -37,33 +35,6 @@ void matrix_4x4_copy(math_matrix_4x4 *dst, const math_matrix_4x4 *src)
MAT_ELEM_4X4(*dst, i, j) = MAT_ELEM_4X4(*src, i, j);
}
/*
* Sets mat to an identity matrix
*/
void matrix_4x4_identity(math_matrix_4x4 *mat)
{
unsigned i;
MAT_ELEM_4X4(*mat, 0, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 0, 2) = 0.0f;
MAT_ELEM_4X4(*mat, 0, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 2) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 2) = 0.0f;
for (i = 0; i < 4; i++)
MAT_ELEM_4X4(*mat, i, i) = 1.0f;
}
/*
* Sets out to the transposed matrix of in
*/

View File

@ -23,18 +23,49 @@
#ifndef __LIBRETRO_SDK_GFX_MATH_MATRIX_4X4_H__
#define __LIBRETRO_SDK_GFX_MATH_MATRIX_4X4_H__
#include <retro_inline.h>
/* Column-major matrix (OpenGL-style).
* Reimplements functionality from FF OpenGL pipeline to be able
* to work on GLES 2.0 and modern GL variants.
*/
#define MAT_ELEM_4X4(mat, row, column) ((mat).data[4 * (column) + (row)])
typedef struct math_matrix_4x4
{
float data[16];
} math_matrix_4x4;
/*
* Sets mat to an identity matrix
*/
static INLINE void matrix_4x4_identity(math_matrix_4x4 *mat)
{
unsigned i;
MAT_ELEM_4X4(*mat, 0, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 0, 2) = 0.0f;
MAT_ELEM_4X4(*mat, 0, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 2) = 0.0f;
MAT_ELEM_4X4(*mat, 1, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 2, 3) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 0) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 1) = 0.0f;
MAT_ELEM_4X4(*mat, 3, 2) = 0.0f;
for (i = 0; i < 4; i++)
MAT_ELEM_4X4(*mat, i, i) = 1.0f;
}
void matrix_4x4_copy(math_matrix_4x4 *dst, const math_matrix_4x4 *src);
void matrix_4x4_identity(math_matrix_4x4 *mat);
void matrix_4x4_transpose(math_matrix_4x4 *out, const math_matrix_4x4 *in);
void matrix_4x4_rotate_x(math_matrix_4x4 *mat, float rad);