[mutter] clutter/stage-cogl: Stop doing subpixel compensation
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/stage-cogl: Stop doing subpixel compensation
- Date: Wed, 13 May 2020 11:36:34 +0000 (UTC)
commit 8c52b431bbc0190b7256d0cc7fbe10a62ea7dcab
Author: Jonas Dreßler <verdre v0yd nl>
Date: Fri Mar 6 11:56:19 2020 +0100
clutter/stage-cogl: Stop doing subpixel compensation
This was introduced with commit 9ab338d7b6 because the clipping of
fractionally scaled redraws caused glitches, it seems like this is no
longer needed nowadays, so let's remove it.
This should make obscured region culling work a bit better for
fractionally scaled framebuffers because because we overdraw a slightly
smaller region than the actually damaged one. We still do overdraw
though since the clipping region is stored using integers and thus
any non-integer values have to be extended to the bounding rect.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1113
clutter/clutter/cogl/clutter-stage-cogl.c | 66 ++++---------------------------
1 file changed, 8 insertions(+), 58 deletions(-)
---
diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c
index 7f01587d0..3ac09038d 100644
--- a/clutter/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/clutter/cogl/clutter-stage-cogl.c
@@ -555,28 +555,6 @@ transform_swap_region_to_onscreen (ClutterStageView *view,
return transformed_region;
}
-static void
-calculate_scissor_region (cairo_rectangle_int_t *fb_clip_region,
- int subpixel_compensation,
- int fb_width,
- int fb_height,
- cairo_rectangle_int_t *out_scissor_rect)
-{
- *out_scissor_rect = *fb_clip_region;
-
- if (subpixel_compensation == 0)
- return;
-
- if (fb_clip_region->x > 0)
- out_scissor_rect->x += subpixel_compensation;
- if (fb_clip_region->y > 0)
- out_scissor_rect->y += subpixel_compensation;
- if (fb_clip_region->x + fb_clip_region->width < fb_width)
- out_scissor_rect->width -= 2 * subpixel_compensation;
- if (fb_clip_region->y + fb_clip_region->height < fb_height)
- out_scissor_rect->height -= 2 * subpixel_compensation;
-}
-
static inline gboolean
is_buffer_age_enabled (void)
{
@@ -611,7 +589,6 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
cairo_rectangle_int_t redraw_rect;
gboolean clip_region_empty;
float fb_scale;
- int subpixel_compensation = 0;
int fb_width, fb_height;
int buffer_age;
@@ -662,27 +639,6 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
-view_rect.x,
-view_rect.y,
fb_scale);
-
- if (fb_scale != floorf (fb_scale))
- {
- int n_rects, i;
- cairo_rectangle_int_t *rects;
-
- subpixel_compensation = ceilf (fb_scale);
-
- n_rects = cairo_region_num_rectangles (fb_clip_region);
- rects = g_newa (cairo_rectangle_int_t, n_rects);
- for (i = 0; i < n_rects; i++)
- {
- cairo_region_get_rectangle (fb_clip_region, i, &rects[i]);
- rects[i].x -= subpixel_compensation;
- rects[i].y -= subpixel_compensation;
- rects[i].width += 2 * subpixel_compensation;
- rects[i].height += 2 * subpixel_compensation;
- }
- cairo_region_destroy (fb_clip_region);
- fb_clip_region = cairo_region_create_rectangles (rects, n_rects);
- }
}
else
{
@@ -770,29 +726,23 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
else if (use_clipped_redraw)
{
cairo_rectangle_int_t clip_rect;
- cairo_rectangle_int_t scissor_rect;
if (cairo_region_num_rectangles (fb_clip_region) == 1)
{
cairo_region_get_extents (fb_clip_region, &clip_rect);
- calculate_scissor_region (&clip_rect,
- subpixel_compensation,
- fb_width, fb_height,
- &scissor_rect);
-
CLUTTER_NOTE (CLIPPING,
"Stage clip pushed: x=%d, y=%d, width=%d, height=%d\n",
- scissor_rect.x,
- scissor_rect.y,
- scissor_rect.width,
- scissor_rect.height);
+ clip_rect.x,
+ clip_rect.y,
+ clip_rect.width,
+ clip_rect.height);
cogl_framebuffer_push_scissor_clip (fb,
- scissor_rect.x,
- scissor_rect.y,
- scissor_rect.width,
- scissor_rect.height);
+ clip_rect.x,
+ clip_rect.y,
+ clip_rect.width,
+ clip_rect.height);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]