]> git.mdlowis.com Git - proto/labwc.git/commitdiff
chase wlroots: simplify transforms in scene-helpers (MR 4819/4845)
authortokyo4j <hrak1529@gmail.com>
Fri, 25 Apr 2025 09:35:05 +0000 (18:35 +0900)
committerJohan Malm <johanmalm@users.noreply.github.com>
Wed, 21 May 2025 05:36:08 +0000 (06:36 +0100)
Ref: 009515161bd97d8f920d72d31ef462f2608688e8
("scene: Only accept buffer coordinates for damage")

Note:
MR 4819 is immediately followed by MR 4845.
MR 4819 removes return value of wlr_damage_ring_add().
MR 4845 applies applies buffer-local coordinates for
scene_output->damage_ring instead of transformed coordinates.

src/common/scene-helpers.c
subprojects/wlroots.wrap

index 56ac0c572a431b7a4400c5a1b207be78d2c0494b..e4a5e4c4608301922cbdd0d13d6ef404062af3c4 100644 (file)
@@ -48,30 +48,21 @@ lab_wlr_scene_get_prev_node(struct wlr_scene_node *node)
  */
 static void
 scene_output_damage(struct wlr_scene_output *scene_output,
-               const pixman_region32_t *region)
+               const pixman_region32_t *damage)
 {
-       wlr_damage_ring_add(&scene_output->damage_ring, region);
-
        struct wlr_output *output = scene_output->output;
-       enum wl_output_transform transform =
-               wlr_output_transform_invert(scene_output->output->transform);
-
-       int width = output->width;
-       int height = output->height;
-       if (transform & WL_OUTPUT_TRANSFORM_90) {
-               width = output->height;
-               height = output->width;
-       }
 
-       pixman_region32_t frame_damage;
-       pixman_region32_init(&frame_damage);
-       wlr_region_transform(&frame_damage, region, transform, width, height);
+       pixman_region32_t clipped;
+       pixman_region32_init(&clipped);
+       pixman_region32_intersect_rect(&clipped, damage, 0, 0, output->width, output->height);
 
-       pixman_region32_union(&scene_output->pending_commit_damage,
-               &scene_output->pending_commit_damage, &frame_damage);
-       pixman_region32_intersect_rect(&scene_output->pending_commit_damage,
-               &scene_output->pending_commit_damage, 0, 0, output->width, output->height);
-       pixman_region32_fini(&frame_damage);
+       if (pixman_region32_not_empty(&clipped)) {
+               wlr_damage_ring_add(&scene_output->damage_ring, &clipped);
+               pixman_region32_union(&scene_output->pending_commit_damage,
+                       &scene_output->pending_commit_damage, &clipped);
+       }
+
+       pixman_region32_fini(&clipped);
 }
 
 /*
@@ -141,13 +132,6 @@ lab_wlr_scene_output_commit(struct wlr_scene_output *scene_output,
                pixman_region32_init_rect(&region,
                        additional_damage.x, additional_damage.y,
                        additional_damage.width, additional_damage.height);
-               /*
-                * Region passed to scene_output_damage() should have the same
-                * scale as the output buffer but have a different transform.
-                */
-               wlr_region_transform(&region, &region, wlr_output->transform,
-                       wlr_output->width, wlr_output->height);
-
                scene_output_damage(scene_output, &region);
                pixman_region32_fini(&region);
        }
index 606bb44c8103d6960e93d8773f2dc60cd7c61202..b51516a2a3c79c9a416ffac9cf460feb3aa703f9 100644 (file)
@@ -1,6 +1,6 @@
 [wrap-git]
 url = https://gitlab.freedesktop.org/wlroots/wlroots.git
-revision = 502eb38d80eb5a273f5481ec8559cb35d726f5da
+revision = 009515161bd97d8f920d72d31ef462f2608688e8
 
 [provide]
 dependency_names = wlroots-0.19