From 50873f7c38af3f116da8c32cca924983f795968f Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Sun, 3 Jul 2022 17:38:09 +0200 Subject: [PATCH] Simplify gfx_display_rotate_z --- gfx/gfx_display.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index 5c78414b22..797c38d35b 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -959,30 +959,43 @@ void gfx_display_draw_texture_slice( void gfx_display_rotate_z(gfx_display_t *p_disp, gfx_display_ctx_rotate_draw_t *draw, void *data) { - math_matrix_4x4 matrix_rotated, matrix_scaled; - math_matrix_4x4 *b = NULL; - gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; + float cosine, sine, radians; + math_matrix_4x4 matrix_rotated = { + { 0.0f, 0.0f, 0.0f, 0.0f , + 0.0f, 0.0f, 0.0f, 0.0f , + 0.0f, 0.0f, 1.0f, 0.0f , + 0.0f, 0.0f, 0.0f, 1.0f } + }; + math_matrix_4x4 *b = NULL; + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if ( - !draw || - !dispctx || - !dispctx->get_default_mvp || - dispctx->handles_transform + dispctx->handles_transform + || !dispctx->get_default_mvp + || !(b = (math_matrix_4x4*)dispctx->get_default_mvp(data)) ) return; - if (!(b = (math_matrix_4x4*)dispctx->get_default_mvp(data))) - return; + radians = draw->rotation; + cosine = cosf(radians); + sine = sinf(radians); + MAT_ELEM_4X4(matrix_rotated, 0, 0) = cosine; + MAT_ELEM_4X4(matrix_rotated, 0, 1) = -sine; + MAT_ELEM_4X4(matrix_rotated, 1, 0) = sine; + MAT_ELEM_4X4(matrix_rotated, 1, 1) = cosine; - matrix_4x4_rotate_z(matrix_rotated, draw->rotation); matrix_4x4_multiply(*draw->matrix, matrix_rotated, *b); - if (!draw->scale_enable) - return; - - matrix_4x4_scale(matrix_scaled, - draw->scale_x, draw->scale_y, draw->scale_z); - matrix_4x4_multiply(*draw->matrix, matrix_scaled, *draw->matrix); + if (draw->scale_enable) + { + math_matrix_4x4 matrix_scaled = { + { draw->scale_x, 0.0f, 0.0f, 0.0f , + 0.0f, draw->scale_y, 0.0f, 0.0f , + 0.0f, 0.0f, draw->scale_z, 0.0f , + 0.0f, 0.0f, 0.0f, 1.0f } + }; + matrix_4x4_multiply(*draw->matrix, matrix_scaled, *draw->matrix); + } } /*