You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
8.4 KiB
217 lines
8.4 KiB
From e69a6ac0e44e8d5fd72d7bc60f118044b0407e8f Mon Sep 17 00:00:00 2001 |
|
From: rpm-build <rpm-build> |
|
Date: Thu, 9 Nov 2017 16:18:02 -0500 |
|
Subject: [PATCH] 0001-clutter-stage-don-t-use-deprecated-api.patch |
|
|
|
--- |
|
clutter/clutter/clutter-stage.c | 21 ++++++++++++--------- |
|
1 file changed, 12 insertions(+), 9 deletions(-) |
|
|
|
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c |
|
index 02ab07b..e4f9342 100644 |
|
--- a/clutter/clutter/clutter-stage.c |
|
+++ b/clutter/clutter/clutter-stage.c |
|
@@ -1459,64 +1459,65 @@ _clutter_stage_do_pick_on_view (ClutterStage *stage, |
|
fb_height = view_layout.height * fb_scale; |
|
cogl_push_framebuffer (fb); |
|
|
|
/* needed for when a context switch happens */ |
|
_clutter_stage_maybe_setup_viewport (stage, view); |
|
|
|
/* FIXME: For some reason leaving the cogl clip stack empty causes the |
|
* picking to not work at all, so setting it the whole framebuffer content |
|
* for now. */ |
|
cogl_framebuffer_push_scissor_clip (fb, 0, 0, |
|
view_layout.width * fb_scale, |
|
view_layout.height * fb_scale); |
|
|
|
_clutter_stage_window_get_dirty_pixel (priv->impl, view, &dirty_x, &dirty_y); |
|
|
|
if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))) |
|
{ |
|
CLUTTER_NOTE (PICK, "Pushing pick scissor clip x: %d, y: %d, 1x1", |
|
(int) dirty_x * fb_scale, |
|
(int) dirty_y * fb_scale); |
|
cogl_framebuffer_push_scissor_clip (fb, dirty_x * fb_scale, dirty_y * fb_scale, 1, 1); |
|
} |
|
|
|
viewport_offset_x = x * fb_scale - dirty_x * fb_scale; |
|
viewport_offset_y = y * fb_scale - dirty_y * fb_scale; |
|
CLUTTER_NOTE (PICK, "Setting viewport to %f, %f, %f, %f", |
|
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); |
|
- cogl_set_viewport (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); |
|
+ 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); |
|
|
|
read_x = dirty_x * fb_scale; |
|
read_y = dirty_y * fb_scale; |
|
|
|
CLUTTER_NOTE (PICK, "Performing pick at %i,%i on view %dx%d+%d+%d s: %d", |
|
x, y, |
|
view_layout.width, view_layout.height, |
|
view_layout.x, view_layout.y, fb_scale); |
|
|
|
cogl_color_init_from_4ub (&stage_pick_id, 255, 255, 255, 255); |
|
cogl_clear (&stage_pick_id, COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH); |
|
|
|
/* Disable dithering (if any) when doing the painting in pick mode */ |
|
dither_enabled_save = cogl_framebuffer_get_dither_enabled (fb); |
|
cogl_framebuffer_set_dither_enabled (fb, FALSE); |
|
|
|
/* Render the entire scence in pick mode - just single colored silhouette's |
|
* are drawn offscreen (as we never swap buffers) |
|
*/ |
|
context->pick_mode = mode; |
|
_clutter_stage_paint_view (stage, view, NULL); |
|
context->pick_mode = CLUTTER_PICK_NONE; |
|
|
|
/* Read the color of the screen co-ords pixel. RGBA_8888_PRE is used |
|
even though we don't care about the alpha component because under |
|
GLES this is the only format that is guaranteed to work so Cogl |
|
will end up having to do a conversion if any other format is |
|
used. The format is requested as pre-multiplied because Cogl |
|
assumes that all pixels in the framebuffer are premultiplied so |
|
it avoids a conversion. */ |
|
@@ -3590,123 +3591,125 @@ calculate_z_translation (float z_near) |
|
* z_2d = --------------------------- + z_near |
|
* sin (0.5°) |
|
*/ |
|
|
|
/* We expect the compiler should boil this down to z_near * CONSTANT |
|
* already, but just in case we use precomputed constants |
|
*/ |
|
#if 0 |
|
# define A tanf (_DEG_TO_RAD (30.f)) |
|
# define B sinf (_DEG_TO_RAD (120.f)) |
|
# define C cosf (_DEG_TO_RAD (30.5f)) |
|
# define D sinf (_DEG_TO_RAD (.5f)) |
|
#else |
|
# define A 0.57735025882720947265625f |
|
# define B 0.866025388240814208984375f |
|
# define C 0.86162912845611572265625f |
|
# define D 0.00872653536498546600341796875f |
|
#endif |
|
|
|
return z_near |
|
* A * B * C |
|
/ D |
|
+ z_near; |
|
} |
|
|
|
void |
|
_clutter_stage_maybe_setup_viewport (ClutterStage *stage, |
|
ClutterStageView *view) |
|
{ |
|
ClutterStagePrivate *priv = stage->priv; |
|
+ CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view); |
|
|
|
if (clutter_stage_view_is_dirty_viewport (view)) |
|
{ |
|
cairo_rectangle_int_t view_layout; |
|
ClutterPerspective perspective; |
|
float fb_scale; |
|
float viewport_offset_x; |
|
float viewport_offset_y; |
|
float z_2d; |
|
|
|
CLUTTER_NOTE (PAINT, |
|
"Setting up the viewport { w:%f, h:%f }", |
|
priv->viewport[2], |
|
priv->viewport[3]); |
|
|
|
fb_scale = clutter_stage_view_get_scale (view); |
|
clutter_stage_view_get_layout (view, &view_layout); |
|
|
|
viewport_offset_x = view_layout.x * fb_scale; |
|
viewport_offset_y = view_layout.y * fb_scale; |
|
- cogl_set_viewport (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); |
|
+ 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); |
|
|
|
perspective = priv->perspective; |
|
|
|
/* Ideally we want to regenerate the perspective matrix whenever |
|
* the size changes but if the user has provided a custom matrix |
|
* then we don't want to override it */ |
|
if (!priv->has_custom_perspective) |
|
{ |
|
perspective.aspect = priv->viewport[2] / priv->viewport[3]; |
|
z_2d = calculate_z_translation (perspective.z_near); |
|
|
|
/* NB: z_2d is only enough room for 85% of the stage_height between |
|
* the stage and the z_near plane. For behind the stage plane we |
|
* want a more consistent gap of 10 times the stage_height before |
|
* hitting the far plane so we calculate that relative to the final |
|
* height of the stage plane at the z_2d_distance we got... */ |
|
perspective.z_far = z_2d + |
|
tanf (_DEG_TO_RAD (perspective.fovy / 2.0f)) * z_2d * 20.0f; |
|
|
|
clutter_stage_set_perspective_internal (stage, &perspective); |
|
} |
|
else |
|
z_2d = calculate_z_translation (perspective.z_near); |
|
|
|
cogl_matrix_init_identity (&priv->view); |
|
cogl_matrix_view_2d_in_perspective (&priv->view, |
|
perspective.fovy, |
|
perspective.aspect, |
|
perspective.z_near, |
|
z_2d, |
|
priv->viewport[2], |
|
priv->viewport[3]); |
|
|
|
clutter_stage_view_set_dirty_viewport (view, FALSE); |
|
} |
|
|
|
if (clutter_stage_view_is_dirty_projection (view)) |
|
{ |
|
- cogl_set_projection_matrix (&priv->projection); |
|
+ cogl_framebuffer_set_projection_matrix (fb, &priv->projection); |
|
|
|
clutter_stage_view_set_dirty_projection (view, FALSE); |
|
} |
|
} |
|
|
|
#undef _DEG_TO_RAD |
|
|
|
/** |
|
* clutter_stage_ensure_redraw: |
|
* @stage: a #ClutterStage |
|
* |
|
* Ensures that @stage is redrawn |
|
* |
|
* This function should not be called by applications: it is |
|
* used when embedding a #ClutterStage into a toolkit with |
|
* another windowing system, like GTK+. |
|
* |
|
* Since: 1.0 |
|
*/ |
|
void |
|
clutter_stage_ensure_redraw (ClutterStage *stage) |
|
{ |
|
ClutterMasterClock *master_clock; |
|
ClutterStagePrivate *priv; |
|
|
|
g_return_if_fail (CLUTTER_IS_STAGE (stage)); |
|
|
|
priv = stage->priv; |
|
|
|
if (!priv->relayout_pending && !priv->redraw_pending) |
|
-- |
|
2.14.3 |
|
|
|
|