[gtk/wip/baedert/for-master: 9/11] gl renderer: Refactor render_clipped_child
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/for-master: 9/11] gl renderer: Refactor render_clipped_child
- Date: Sun, 24 May 2020 15:15:32 +0000 (UTC)
commit 094788f1a37e090ffab3ffb37c380dae764e2252
Author: Timm Bäder <mail baedert org>
Date: Sun May 24 08:31:55 2020 +0200
gl renderer: Refactor render_clipped_child
gsk/gl/gskglrenderer.c | 78 ++++++++++++++++++++++++++------------------------
1 file changed, 40 insertions(+), 38 deletions(-)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 592796287f..8212ca30fd 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -1164,52 +1164,54 @@ render_clipped_child (GskGLRenderer *self,
ops_transform_bounds_modelview (builder, clip, &transformed_clip);
+ if (builder->clip_is_rectilinear)
+ {
+ /* Simple case: */
+ graphene_rect_intersection (&transformed_clip,
+ &builder->current_clip->bounds,
+ &intersection);
+
+ gsk_rounded_rect_init_from_rect (&child_clip, &intersection, 0.0f);
+
+ ops_push_clip (builder, &child_clip);
+ gsk_gl_renderer_add_render_ops (self, child, builder);
+ ops_pop_clip (builder);
+ return;
+ }
+
/* Intersection might end up having rounded corners again */
- if (!gsk_rounded_rect_is_rectilinear (builder->current_clip))
+ if (!rounded_inner_rect_contains_rect (builder->current_clip,
+ &transformed_clip))
{
- if (!rounded_inner_rect_contains_rect (builder->current_clip,
- &transformed_clip))
- {
- /* well fuck */
- const float scale = ops_get_scale (builder);
- gboolean is_offscreen;
- TextureRegion region;
- GskRoundedRect scaled_clip;
-
- memset (&scaled_clip, 0, sizeof (GskRoundedRect));
-
- scaled_clip.bounds.origin.x = clip->origin.x * scale;
- scaled_clip.bounds.origin.y = clip->origin.y * scale;
- scaled_clip.bounds.size.width = clip->size.width * scale;
- scaled_clip.bounds.size.height = clip->size.height * scale;
-
- ops_push_clip (builder, &scaled_clip);
- if (!add_offscreen_ops (self, builder, &child->bounds,
- child,
- ®ion, &is_offscreen,
- RESET_OPACITY | FORCE_OFFSCREEN))
- g_assert_not_reached ();
- ops_pop_clip (builder);
+ /* well fuck */
+ const float scale = ops_get_scale (builder);
+ gboolean is_offscreen;
+ TextureRegion region;
+ GskRoundedRect scaled_clip;
+ memset (&scaled_clip, 0, sizeof (GskRoundedRect));
- ops_set_program (builder, &self->programs->blit_program);
- ops_set_texture (builder, region.texture_id);
+ scaled_clip.bounds.origin.x = clip->origin.x * scale;
+ scaled_clip.bounds.origin.y = clip->origin.y * scale;
+ scaled_clip.bounds.size.width = clip->size.width * scale;
+ scaled_clip.bounds.size.height = clip->size.height * scale;
- load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
- return;
- }
- }
+ ops_push_clip (builder, &scaled_clip);
+ if (!add_offscreen_ops (self, builder, &child->bounds,
+ child,
+ ®ion, &is_offscreen,
+ RESET_OPACITY | FORCE_OFFSCREEN))
+ g_assert_not_reached ();
+ ops_pop_clip (builder);
- /* Simple case: */
- graphene_rect_intersection (&transformed_clip,
- &builder->current_clip->bounds,
- &intersection);
- gsk_rounded_rect_init_from_rect (&child_clip, &intersection, 0.0f);
+ ops_set_program (builder, &self->programs->blit_program);
+ ops_set_texture (builder, region.texture_id);
+
+ load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
+ return;
+ }
- ops_push_clip (builder, &child_clip);
- gsk_gl_renderer_add_render_ops (self, child, builder);
- ops_pop_clip (builder);
}
static inline void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]