mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-18 06:47:31 -04:00
render/gles2: Implement buffer_pass_options.clear_buffer
This commit is contained in:
parent
4cef4e0e56
commit
5d4313eb82
3 changed files with 14 additions and 11 deletions
|
|
@ -167,6 +167,7 @@ void push_gles2_debug_(struct wlr_gles2_renderer *renderer,
|
||||||
void pop_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_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
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -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_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_gles2_renderer *renderer = buffer->renderer;
|
||||||
struct wlr_buffer *wlr_buffer = buffer->buffer;
|
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);
|
glViewport(0, 0, wlr_buffer->width, wlr_buffer->height);
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glDisable(GL_SCISSOR_TEST);
|
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);
|
pop_gles2_debug(renderer);
|
||||||
|
|
||||||
return pass;
|
return pass;
|
||||||
|
|
|
||||||
|
|
@ -259,23 +259,20 @@ static struct wlr_render_pass *gles2_begin_buffer_pass(struct wlr_renderer *wlr_
|
||||||
clock_gettime(CLOCK_MONOTONIC, &timer->cpu_start);
|
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);
|
struct wlr_gles2_buffer *buffer = gles2_buffer_get_or_create(renderer, wlr_buffer);
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
return NULL;
|
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) {
|
if (!pass) {
|
||||||
return NULL;
|
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;
|
return &pass->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue