From 39bed140a1a489488a085ae9e741386438a9c733 Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Wed, 31 Jul 2024 16:29:51 -0400 Subject: [PATCH] render/gles2: clear buffer on add rect if it matches the attached render pass buffer --- render/gles2/pass.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/render/gles2/pass.c b/render/gles2/pass.c index 9177b0a1f..e025e503d 100644 --- a/render/gles2/pass.c +++ b/render/gles2/pass.c @@ -214,15 +214,30 @@ static void render_pass_add_rect(struct wlr_render_pass *wlr_pass, struct wlr_box box; wlr_render_rect_options_get_box(options, pass->buffer->buffer, &box); + struct wlr_box pass_box = { + .width = pass->buffer->buffer->width, + .height = pass->buffer->buffer->height, + }; + + enum wlr_render_blend_mode mode = + color->a == 1.0 ? WLR_RENDER_BLEND_MODE_NONE : options->blend_mode; + push_gles2_debug(renderer); - setup_blending(color->a == 1.0 ? WLR_RENDER_BLEND_MODE_NONE : options->blend_mode); - glUseProgram(renderer->shaders.quad.program); + if (wlr_box_equal(&pass_box, &box) && mode == WLR_RENDER_BLEND_MODE_NONE) { + glClearColor(color->r, color->g, color->b, color->a); + glClear(GL_COLOR_BUFFER_BIT); + } else { + setup_blending(mode); - set_proj_matrix(renderer->shaders.quad.proj, pass->projection_matrix, &box); - glUniform4f(renderer->shaders.quad.color, color->r, color->g, color->b, color->a); + glUseProgram(renderer->shaders.quad.program); + + set_proj_matrix(renderer->shaders.quad.proj, pass->projection_matrix, &box); + glUniform4f(renderer->shaders.quad.color, color->r, color->g, color->b, color->a); + + render(&box, options->clip, renderer->shaders.quad.pos_attrib); + }; - render(&box, options->clip, renderer->shaders.quad.pos_attrib); pop_gles2_debug(renderer); }