Merge branch 'buffer-pass-clear' into 'master'

render: optionally clear buffer before rendering

See merge request wlroots/wlroots!4518
This commit is contained in:
Julia Tatz 2024-04-22 06:05:12 +00:00
commit 229f89b416
19 changed files with 254 additions and 118 deletions

View file

@ -247,7 +247,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;
@ -285,6 +286,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;

View file

@ -258,12 +258,17 @@ 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;
}