pepper: calculate inverse of transform matrix once
authorJunghoon <jh13.son@samsung.com>
Thu, 12 Nov 2015 06:23:53 +0000 (15:23 +0900)
committer김태균 <tkq.kim@samsung.com>
Fri, 13 Nov 2015 04:41:22 +0000 (13:41 +0900)
    - only when view's geometry is updated

Change-Id: I0923364890d4c6fb9fabeb7e1b794e4e06067db0

src/lib/pepper/pepper-output-backend.h
src/lib/pepper/plane.c
src/lib/render/gl-renderer.c

index 6abc4e2fa42242e294e4a0adcd6ae0311b94611d..f42c8f6dd0e4e7fa34480c23518092a89eecb8c8 100644 (file)
@@ -67,6 +67,7 @@ struct pepper_render_item
 {
     pepper_view_t       *view;
     pepper_mat4_t       transform;
+    pepper_mat4_t       inverse;
     pixman_region32_t   visible_region;
 };
 
index a274ddb0d5f34beffbf726bd246e18709cc40ebd..f8ceddc85312f7b82b45b8034924605243a0746a 100644 (file)
@@ -54,6 +54,7 @@ pepper_plane_update(pepper_plane_t *plane, const pepper_list_t *view_list, pixma
                 entry->base.transform = view->global_transform;
                 pepper_transform_global_to_output(&entry->base.transform, plane->output);
                 entry->need_transform_update = PEPPER_FALSE;
+                pepper_mat4_inverse(&entry->base.inverse, &entry->base.transform);
             }
 
             /* Calculate visible region (output space). */
index 9134e0ae2bdf01badcbf1e5cb635af5bc204db3b..cbd03f4306cb85ee858a0aac52639956c0713aa3 100644 (file)
@@ -993,7 +993,7 @@ calc_vertices(gl_renderer_t *gr, pepper_render_item_t *node,
     int             len;
     pepper_vec2_t   vertices[8];
     pepper_vec2_t   texcoords[8];
-    pepper_mat4_t   inverse;
+    pepper_mat4_t  *inverse = &node->inverse;
     pepper_mat4_t  *transform = &node->transform;
 
     int             nrects, surface_nrects;
@@ -1009,8 +1009,6 @@ calc_vertices(gl_renderer_t *gr, pepper_render_item_t *node,
                                 surface_nrects * nrects * (8 - 2) * 3 * 2 * 2 * sizeof(GLfloat));
     gr->triangles = 0;
 
-    pepper_mat4_inverse(&inverse /* FIXME */, transform);
-
     for (n = 0; n < surface_nrects; n++)
     {
         for (i = 0; i < nrects; i++)
@@ -1035,7 +1033,7 @@ calc_vertices(gl_renderer_t *gr, pepper_render_item_t *node,
             memcpy(texcoords, vertices, sizeof(vertices));
             for (j = 0; j < len; j++)
             {
-                pepper_mat4_transform_vec2(&inverse, &texcoords[j]);
+                pepper_mat4_transform_vec2(inverse, &texcoords[j]);
                 texcoords[j].x = texcoords[j].x / w;
                 texcoords[j].y = texcoords[j].y / h;
             }