diff --git a/src/core/lv_refr.c b/src/core/lv_refr.c index 9897698319..a284e1aa92 100644 --- a/src/core/lv_refr.c +++ b/src/core/lv_refr.c @@ -794,21 +794,48 @@ static void refr_configured_layer(lv_layer_t * layer) if(rotation != LV_DISPLAY_ROTATION_0) { lv_display_rotate_area(disp_refr, &layer->phy_clip_area); - /* The screen rotation direction defined by LVGL is opposite to the drawing angle */ + /** + * The screen rotation direction defined by LVGL is opposite to the drawing angle. + * Use direct matrix assignment to reduce precision loss and improve efficiency. + */ switch(rotation) { case LV_DISPLAY_ROTATION_90: - lv_matrix_rotate(&layer->matrix, 270); - lv_matrix_translate(&layer->matrix, -disp_refr->ver_res, 0); + /** + * lv_matrix_rotate(&layer->matrix, 270); + * lv_matrix_translate(&layer->matrix, -disp_refr->ver_res, 0); + */ + layer->matrix.m[0][0] = 0; + layer->matrix.m[0][1] = 1; + layer->matrix.m[0][2] = 0; + layer->matrix.m[1][0] = -1; + layer->matrix.m[1][1] = 0; + layer->matrix.m[1][2] = disp_refr->ver_res; break; case LV_DISPLAY_ROTATION_180: - lv_matrix_rotate(&layer->matrix, 180); - lv_matrix_translate(&layer->matrix, -disp_refr->hor_res, -disp_refr->ver_res); + /** + * lv_matrix_rotate(&layer->matrix, 180); + * lv_matrix_translate(&layer->matrix, -disp_refr->hor_res, -disp_refr->ver_res); + */ + layer->matrix.m[0][0] = -1; + layer->matrix.m[0][1] = 0; + layer->matrix.m[0][2] = disp_refr->hor_res; + layer->matrix.m[1][0] = 0; + layer->matrix.m[1][1] = -1; + layer->matrix.m[1][2] = disp_refr->ver_res; break; case LV_DISPLAY_ROTATION_270: - lv_matrix_rotate(&layer->matrix, 90); - lv_matrix_translate(&layer->matrix, 0, -disp_refr->hor_res); + /** + * lv_matrix_rotate(&layer->matrix, 90); + * lv_matrix_translate(&layer->matrix, 0, -disp_refr->hor_res); + */ + layer->matrix.m[0][0] = 0; + layer->matrix.m[0][1] = -1; + layer->matrix.m[0][2] = disp_refr->hor_res; + layer->matrix.m[1][0] = 1; + layer->matrix.m[1][1] = 0; + layer->matrix.m[1][2] = 0; break; default: diff --git a/tests/ref_imgs_vg_lite/display_matrix_rotation_180.png b/tests/ref_imgs_vg_lite/display_matrix_rotation_180.png index b93e886829..7fc5d0d697 100644 Binary files a/tests/ref_imgs_vg_lite/display_matrix_rotation_180.png and b/tests/ref_imgs_vg_lite/display_matrix_rotation_180.png differ diff --git a/tests/ref_imgs_vg_lite/display_matrix_rotation_270.png b/tests/ref_imgs_vg_lite/display_matrix_rotation_270.png index ab56163be4..6e0f52dccc 100644 Binary files a/tests/ref_imgs_vg_lite/display_matrix_rotation_270.png and b/tests/ref_imgs_vg_lite/display_matrix_rotation_270.png differ diff --git a/tests/ref_imgs_vg_lite/display_matrix_rotation_90.png b/tests/ref_imgs_vg_lite/display_matrix_rotation_90.png index 48fa92117d..6101836a29 100644 Binary files a/tests/ref_imgs_vg_lite/display_matrix_rotation_90.png and b/tests/ref_imgs_vg_lite/display_matrix_rotation_90.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp32.png index c08383228f..c94ec89546 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp64.png index c08383228f..ef55914ce7 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_180_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp32.png index d559acce2e..ca5c61efab 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp64.png index 2bc1836f65..b0f9dc7d33 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_lines_disp_rotation_90_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png index 789c4bb50a..a3769260bd 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png index f2d1324c64..958f3c0786 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_180_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png index cd44ed4435..86308cefc0 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png index 1a2f8fc821..beea70faec 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_270_during_rendering.lp64.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png index a941493a98..f4b4952a9d 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp32.png differ diff --git a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png index f333a16b53..2b0ef25a68 100644 Binary files a/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png and b/tests/ref_imgs_vg_lite/draw/vector_draw_shapes_disp_rotation_90_during_rendering.lp64.png differ