render: Introduce wlr_render_texture_options.blend_mode

This commit is contained in:
Alexander Orzechowski 2023-06-19 13:16:34 -04:00
parent 693005ac99
commit 2044cc2311
5 changed files with 39 additions and 30 deletions

View file

@ -121,6 +121,17 @@ static void set_tex_matrix(GLint loc, enum wl_output_transform trans,
glUniformMatrix3fv(loc, 1, GL_FALSE, tex_matrix);
}
static void setup_blending(enum wlr_render_blend_mode mode) {
switch (mode) {
case WLR_RENDER_BLEND_MODE_PREMULTIPLIED:
glEnable(GL_BLEND);
break;
case WLR_RENDER_BLEND_MODE_NONE:
glDisable(GL_BLEND);
break;
}
}
static void render_pass_add_texture(struct wlr_render_pass *wlr_pass,
const struct wlr_render_texture_options *options) {
struct wlr_gles2_render_pass *pass = get_render_pass(wlr_pass);
@ -159,12 +170,8 @@ static void render_pass_add_texture(struct wlr_render_pass *wlr_pass,
src_fbox.height /= options->texture->height;
push_gles2_debug(renderer);
if (!texture->has_alpha && alpha == 1.0) {
glDisable(GL_BLEND);
} else {
glEnable(GL_BLEND);
}
setup_blending(!texture->has_alpha && alpha == 1.0 ?
WLR_RENDER_BLEND_MODE_NONE : options->blend_mode);
glUseProgram(shader->program);
@ -202,19 +209,7 @@ static void render_pass_add_rect(struct wlr_render_pass *wlr_pass,
const struct wlr_box *box = &options->box;
push_gles2_debug(renderer);
switch (options->blend_mode) {
case WLR_RENDER_BLEND_MODE_PREMULTIPLIED:
if (color->a == 1.0) {
glDisable(GL_BLEND);
} else {
glEnable(GL_BLEND);
}
break;
case WLR_RENDER_BLEND_MODE_NONE:
glDisable(GL_BLEND);
break;
}
setup_blending(color->a == 1.0 ? WLR_RENDER_BLEND_MODE_NONE : options->blend_mode);
glUseProgram(renderer->shaders.quad.program);