[mutter] clutter/stage: Round viewport coordinates before setting
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/stage: Round viewport coordinates before setting
- Date: Wed, 5 Dec 2018 10:40:02 +0000 (UTC)
commit 4baefe46b30fcc9b22849a5ccab0622d04fbe451
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Oct 27 04:37:46 2017 -0500
clutter/stage: Round viewport coordinates before setting
cogl_(fromebuffer)_set_viewport will implicitly cast away the fraction
of a floating point number, meaning if a coordinate calculation
resulted in just below the integer (which for example ~1.75 scaling on
a 1920x1080 did), we'd set a one pixel too narrow viewport. Fix this by
always rounding the floating point to the closest int before passing,
avoiding the precision loss.
https://bugzilla.gnome.org/show_bug.cgi?id=765011
clutter/clutter/clutter-stage.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 828071a48..8fa92dd7f 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -3627,6 +3627,10 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
float fb_scale;
float viewport_offset_x;
float viewport_offset_y;
+ float viewport_x;
+ float viewport_y;
+ float viewport_width;
+ float viewport_height;
float z_2d;
CLUTTER_NOTE (PAINT,
@@ -3639,11 +3643,13 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
viewport_offset_x = view_layout.x * fb_scale;
viewport_offset_y = view_layout.y * fb_scale;
+ viewport_x = roundf (priv->viewport[0] * fb_scale - viewport_offset_x);
+ viewport_y = roundf (priv->viewport[1] * fb_scale - viewport_offset_y);
+ viewport_width = roundf (priv->viewport[2] * fb_scale);
+ viewport_height = roundf (priv->viewport[3] * fb_scale);
cogl_framebuffer_set_viewport (fb,
- priv->viewport[0] * fb_scale - viewport_offset_x,
- priv->viewport[1] * fb_scale - viewport_offset_y,
- priv->viewport[2] * fb_scale,
- priv->viewport[3] * fb_scale);
+ viewport_x, viewport_y,
+ viewport_width, viewport_height);
perspective = priv->perspective;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]