diff --git a/gfx/common/gl_common.c b/gfx/common/gl_common.c index 92240681db..7edbb8a19e 100644 --- a/gfx/common/gl_common.c +++ b/gfx/common/gl_common.c @@ -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 } diff --git a/libretro-common/gfx/math/matrix_4x4.c b/libretro-common/gfx/math/matrix_4x4.c index c399f75d0f..2a195eff5f 100644 --- a/libretro-common/gfx/math/matrix_4x4.c +++ b/libretro-common/gfx/math/matrix_4x4.c @@ -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. */ diff --git a/libretro-common/include/gfx/math/matrix_4x4.h b/libretro-common/include/gfx/math/matrix_4x4.h index 8448943829..6dd4c76f12 100644 --- a/libretro-common/include/gfx/math/matrix_4x4.h +++ b/libretro-common/include/gfx/math/matrix_4x4.h @@ -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 diff --git a/menu/menu_display.c b/menu/menu_display.c index 7a02702539..046a1e3fe1 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -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