diff options
author | Timm Bäder <mail@baedert.org> | 2020-01-14 15:43:53 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-01-18 08:49:52 +0100 |
commit | 3091679ffa935720d3a2b45f881aa845b6c04167 (patch) | |
tree | 5691c15054b91fa1db2c135cbe32b73f1421df95 | |
parent | 2e89c5360aafc089835d9be556ab828e5c9faeb1 (diff) | |
download | gtk+-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.c | 20 |
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]; |