summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-01-14 15:43:53 +0100
committerTimm Bäder <mail@baedert.org>2020-01-18 08:49:52 +0100
commit3091679ffa935720d3a2b45f881aa845b6c04167 (patch)
tree5691c15054b91fa1db2c135cbe32b73f1421df95
parent2e89c5360aafc089835d9be556ab828e5c9faeb1 (diff)
downloadgtk+-3091679ffa935720d3a2b45f881aa845b6c04167.tar.gz
gl renderer: Render simple border nodes in a simple way
Roughly 80% of the border nodes are just one color and have the same width on all sides, so we can draw them by uploading just one rect and not four.
-rw-r--r--gsk/gl/gskglrenderer.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 91de970cac..7928da3096 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -761,6 +761,26 @@ render_border_node (GskGLRenderer *self,
float h;
} sizes[4];
+ if (og_widths[0] == og_widths[1] &&
+ og_widths[0] == og_widths[2] &&
+ og_widths[0] == og_widths[3] &&
+ gdk_rgba_equal (&colors[0], &colors[1]) &&
+ gdk_rgba_equal (&colors[0], &colors[2]) &&
+ gdk_rgba_equal (&colors[0], &colors[3]))
+ {
+ OpShadow *op;
+
+ ops_set_program (builder, &self->inset_shadow_program);
+ op = ops_begin (builder, OP_CHANGE_INSET_SHADOW);
+ op->color = &colors[0];
+ op->outline = transform_rect (self, builder, rounded_outline);
+ op->spread = og_widths[0] * scale;
+ op->offset[0] = 0;
+ op->offset[1] = 0;
+
+ load_vertex_data (ops_draw (builder, NULL), node, builder);
+ return;
+ }
for (i = 0; i < 4; i ++)
widths[i] = og_widths[i];