From: Georges Basile Stavracas Neto Date: Sat, 1 Apr 2023 14:38:22 +0000 (-0300) Subject: gsk/gl/renderjob: Decompose matrix for 3D transforms X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~4^2~10^2~57 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e09a5bc2dd05e90595e3aff0e09731a9d993f1a1;p=gtk4.git gsk/gl/renderjob: Decompose matrix for 3D transforms While this can be more expensive, it's also correct. --- diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c index 9aa5123cdc..863d1efd31 100644 --- a/gsk/gl/gskglrenderjob.c +++ b/gsk/gl/gskglrenderjob.c @@ -563,23 +563,21 @@ extract_matrix_metadata (GskGLRenderModelview *modelview) case GSK_TRANSFORM_CATEGORY_ANY: case GSK_TRANSFORM_CATEGORY_3D: { - graphene_vec3_t col1; - graphene_vec3_t col2; - - /* TODO: 90% sure this is incorrect. But we should never hit this code - * path anyway. */ - graphene_vec3_init (&col1, - graphene_matrix_get_value (&modelview->matrix, 0, 0), - graphene_matrix_get_value (&modelview->matrix, 1, 0), - graphene_matrix_get_value (&modelview->matrix, 2, 0)); - - graphene_vec3_init (&col2, - graphene_matrix_get_value (&modelview->matrix, 0, 1), - graphene_matrix_get_value (&modelview->matrix, 1, 1), - graphene_matrix_get_value (&modelview->matrix, 2, 1)); - - modelview->scale_x = graphene_vec3_length (&col1); - modelview->scale_y = graphene_vec3_length (&col2); + graphene_quaternion_t rotation; + graphene_vec4_t perspective; + graphene_vec3_t translation; + graphene_vec3_t scale; + graphene_vec3_t shear; + + graphene_matrix_decompose (&modelview->matrix, + &translation, + &scale, + &rotation, + &shear, + &perspective); + + modelview->scale_x = graphene_vec3_get_x (&scale); + modelview->scale_y = graphene_vec3_get_y (&scale); modelview->dx = 0; modelview->dy = 0; }