mirror of
https://github.com/libretro/RetroArch
synced 2025-02-28 22:13:51 +00:00
Start turning most matrix 4x4 functions into macros
This commit is contained in:
parent
793930b352
commit
809bce6cd9
@ -50,7 +50,7 @@ void gl_ff_matrix(const math_matrix_4x4 *mat)
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadMatrixf(mat->data);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
matrix_4x4_identity(&ident);
|
||||
matrix_4x4_identity(ident);
|
||||
glLoadMatrixf(ident.data);
|
||||
#endif
|
||||
}
|
||||
|
@ -163,53 +163,6 @@ void matrix_4x4_ortho(math_matrix_4x4 *mat,
|
||||
MAT_ELEM_4X4(*mat, 3, 3) = 1.0f;
|
||||
}
|
||||
|
||||
void matrix_4x4_scale(math_matrix_4x4 *out, float x, float y,
|
||||
float z)
|
||||
{
|
||||
MAT_ELEM_4X4(*out, 0, 0) = x;
|
||||
MAT_ELEM_4X4(*out, 0, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 0, 2) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 0, 3) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 1) = y;
|
||||
MAT_ELEM_4X4(*out, 1, 2) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 3) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 2) = z;
|
||||
MAT_ELEM_4X4(*out, 2, 3) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 2) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 3) = 1.0f;
|
||||
}
|
||||
|
||||
/*
|
||||
* Builds a translation matrix. All other elements in
|
||||
* the matrix will be set to zero except for the
|
||||
* diagonal which is set to 1.0
|
||||
*/
|
||||
void matrix_4x4_translate(math_matrix_4x4 *out, float x,
|
||||
float y, float z)
|
||||
{
|
||||
MAT_ELEM_4X4(*out, 0, 0) = 1.0f;
|
||||
MAT_ELEM_4X4(*out, 0, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 0, 2) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 0, 3) = x;
|
||||
MAT_ELEM_4X4(*out, 1, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 1) = 1.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 2) = 1.0f;
|
||||
MAT_ELEM_4X4(*out, 1, 3) = y;
|
||||
MAT_ELEM_4X4(*out, 2, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 2) = 1.0f;
|
||||
MAT_ELEM_4X4(*out, 2, 3) = z;
|
||||
MAT_ELEM_4X4(*out, 3, 0) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 1) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 2) = 0.0f;
|
||||
MAT_ELEM_4X4(*out, 3, 3) = 1.0f;
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a perspective projection matrix.
|
||||
*/
|
||||
|
@ -45,28 +45,23 @@ typedef struct math_matrix_4x4
|
||||
/*
|
||||
* Sets mat to an identity matrix
|
||||
*/
|
||||
static INLINE void matrix_4x4_identity(math_matrix_4x4 *mat)
|
||||
{
|
||||
MAT_ELEM_4X4(*mat, 0, 0) = 1.0f;
|
||||
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, 1) = 1.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, 2) = 1.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;
|
||||
MAT_ELEM_4X4(*mat, 3, 3) = 1.0f;
|
||||
}
|
||||
#define matrix_4x4_identity(mat) \
|
||||
MAT_ELEM_4X4(mat, 0, 0) = 1.0f; \
|
||||
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, 1) = 1.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, 2) = 1.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; \
|
||||
MAT_ELEM_4X4(mat, 3, 3) = 1.0f
|
||||
|
||||
void matrix_4x4_copy(math_matrix_4x4 *dst, const math_matrix_4x4 *src);
|
||||
void matrix_4x4_transpose(math_matrix_4x4 *out, const math_matrix_4x4 *in);
|
||||
@ -87,8 +82,48 @@ void matrix_4x4_lookat(math_matrix_4x4 *out,
|
||||
|
||||
void matrix_4x4_multiply(math_matrix_4x4 *out, const math_matrix_4x4 *a, const math_matrix_4x4 *b);
|
||||
|
||||
void matrix_4x4_scale(math_matrix_4x4 *out, float x, float y, float z);
|
||||
void matrix_4x4_translate(math_matrix_4x4 *out, float x, float y, float z);
|
||||
#define matrix_4x4_scale(mat, x, y, z) \
|
||||
MAT_ELEM_4X4(mat, 0, 0) = x; \
|
||||
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, 1) = y; \
|
||||
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, 2) = z; \
|
||||
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; \
|
||||
MAT_ELEM_4X4(mat, 3, 3) = 1.0f
|
||||
|
||||
/*
|
||||
* Builds a translation matrix. All other elements in
|
||||
* the matrix will be set to zero except for the
|
||||
* diagonal which is set to 1.0
|
||||
*/
|
||||
|
||||
#define matrix_4x4_translate(mat, x, y, z) \
|
||||
MAT_ELEM_4X4(mat, 0, 0) = 1.0f; \
|
||||
MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 0, 3) = x; \
|
||||
MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 1, 1) = 1.0f; \
|
||||
MAT_ELEM_4X4(mat, 1, 2) = 1.0f; \
|
||||
MAT_ELEM_4X4(mat, 1, 3) = y; \
|
||||
MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 2, 2) = 1.0f; \
|
||||
MAT_ELEM_4X4(mat, 2, 3) = z; \
|
||||
MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \
|
||||
MAT_ELEM_4X4(mat, 3, 3) = 1.0f
|
||||
|
||||
void matrix_4x4_projection(math_matrix_4x4 *out, float y_fov, float aspect, float znear, float zfar);
|
||||
|
||||
RETRO_END_DECLS
|
||||
|
@ -912,7 +912,7 @@ void menu_display_rotate_z(menu_display_ctx_rotate_draw_t *draw)
|
||||
if (!draw->scale_enable)
|
||||
return;
|
||||
|
||||
matrix_4x4_scale(&matrix_scaled,
|
||||
matrix_4x4_scale(matrix_scaled,
|
||||
draw->scale_x, draw->scale_y, draw->scale_z);
|
||||
matrix_4x4_multiply(draw->matrix, &matrix_scaled, draw->matrix);
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user