From 5d4313eb82f05a8567dfa31e090cf91dfcb30a79 Mon Sep 17 00:00:00 2001 From: Julia Tatz Date: Tue, 12 Dec 2023 19:01:58 -0500 Subject: [PATCH] render/gles2: Implement buffer_pass_options.clear_buffer --- include/render/gles2.h | 3 ++- render/gles2/pass.c | 7 ++++++- render/gles2/renderer.c | 15 ++++++--------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/include/render/gles2.h b/include/render/gles2.h index db301c6e4..fb6d0ed0d 100644 --- a/include/render/gles2.h +++ b/include/render/gles2.h @@ -167,6 +167,7 @@ void push_gles2_debug_(struct wlr_gles2_renderer *renderer, void pop_gles2_debug(struct wlr_gles2_renderer *renderer); struct wlr_gles2_render_pass *begin_gles2_buffer_pass(struct wlr_gles2_buffer *buffer, - struct wlr_egl_context *prev_ctx, struct wlr_gles2_render_timer *timer); + struct wlr_egl_context *prev_ctx, struct wlr_gles2_render_timer *timer, + const struct wlr_render_color *clear_color); #endif diff --git a/render/gles2/pass.c b/render/gles2/pass.c index 4c9f9e28b..734f25582 100644 --- a/render/gles2/pass.c +++ b/render/gles2/pass.c @@ -248,7 +248,8 @@ static const char *reset_status_str(GLenum status) { } struct wlr_gles2_render_pass *begin_gles2_buffer_pass(struct wlr_gles2_buffer *buffer, - struct wlr_egl_context *prev_ctx, struct wlr_gles2_render_timer *timer) { + struct wlr_egl_context *prev_ctx, struct wlr_gles2_render_timer *timer, + const struct wlr_render_color *clear_color) { struct wlr_gles2_renderer *renderer = buffer->renderer; struct wlr_buffer *wlr_buffer = buffer->buffer; @@ -286,6 +287,10 @@ struct wlr_gles2_render_pass *begin_gles2_buffer_pass(struct wlr_gles2_buffer *b glViewport(0, 0, wlr_buffer->width, wlr_buffer->height); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_SCISSOR_TEST); + if (clear_color) { + glClearColor(clear_color->r, clear_color->g, clear_color->b, clear_color->a); + glClear(GL_COLOR_BUFFER_BIT); + } pop_gles2_debug(renderer); return pass; diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 5e73bcabb..dcf2ca478 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -259,23 +259,20 @@ static struct wlr_render_pass *gles2_begin_buffer_pass(struct wlr_renderer *wlr_ clock_gettime(CLOCK_MONOTONIC, &timer->cpu_start); } + const struct wlr_render_color *clear_color = NULL; + if (options->clear_buffer) { + clear_color = &options->clear_color; + } + struct wlr_gles2_buffer *buffer = gles2_buffer_get_or_create(renderer, wlr_buffer); if (!buffer) { return NULL; } - struct wlr_gles2_render_pass *pass = begin_gles2_buffer_pass(buffer, &prev_ctx, timer); + struct wlr_gles2_render_pass *pass = begin_gles2_buffer_pass(buffer, &prev_ctx, timer, clear_color); if (!pass) { return NULL; } - // TODO: switch to using `glClearColor` + `glClear` - if (options->clear_buffer) { - wlr_render_pass_add_rect(&pass->base, &(struct wlr_render_rect_options){ - .box = { .width = buffer->buffer->width, .height = buffer->buffer->height }, - .color = options->clear_color, - .blend_mode = WLR_RENDER_BLEND_MODE_NONE, - }); - } return &pass->base; }