paint-node: Consider view-alpha for is_fully_opaque

In order to be more in line with weston_view_is_opaque() - which we
use in most cases to set the value - and ensure the expectations of
existing places in the code are honored, see usages in both
draw_paint_node() implementations.

An exception here are holes - these always need to get painted as fully
opaque in the renderer path.

Signed-off-by: Robert Mader <robert.mader@collabora.com>
This commit is contained in:
Robert Mader 2025-10-15 17:24:22 +02:00
parent c2b60e6651
commit e9fc189189
3 changed files with 8 additions and 8 deletions

View file

@ -230,7 +230,8 @@ paint_node_update_early(struct weston_paint_node *pnode)
pnode->censored = false;
if (buffer->type == WESTON_BUFFER_SOLID) {
pnode->draw_solid = true;
pnode->is_fully_opaque = (buffer->solid.a == 1.0f);
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f &&
buffer->solid.a == 1.0f);
pnode->is_fully_blended = !pnode->is_fully_opaque;
pnode->solid = buffer->solid;
if (pnode->solid.a == 0.0f)
@ -254,8 +255,8 @@ paint_node_update_early(struct weston_paint_node *pnode)
(recording_censor || unprotected_censor)) {
pnode->draw_solid = true;
pnode->censored = true;
pnode->is_fully_opaque = true;
pnode->is_fully_blended = false;
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f);
pnode->is_fully_blended = !pnode->is_fully_opaque;
get_placeholder_color(pnode, &pnode->solid);
}
@ -355,8 +356,8 @@ paint_node_update_late(struct weston_paint_node *pnode)
};
} else if (buffer->direct_display && !pnode->censored) {
pnode->draw_solid = true;
pnode->is_fully_opaque = true;
pnode->is_fully_blended = false;
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f);
pnode->is_fully_blended = !pnode->is_fully_opaque;
get_placeholder_color(pnode, &pnode->solid);
}

View file

@ -2076,8 +2076,8 @@ draw_paint_node(struct weston_paint_node *pnode,
}
if (!gr->debug_mode && pnode->draw_solid && pnode->is_fully_opaque &&
pnode->view->alpha == 1.0f && pnode->valid_transform &&
(pnode->surf_xform_valid && !pnode->surf_xform.transform)) {
pnode->valid_transform && (pnode->surf_xform_valid &&
!pnode->surf_xform.transform)) {
clear_region(gr, pnode, &repaint);
gs->used_in_output_repaint = true;
goto out;

View file

@ -1804,7 +1804,6 @@ draw_paint_node(struct weston_paint_node *pnode,
image_view, sampler,
&vb->descriptor_set);
/* XXX: Should we be using ev->transform.opaque here? */
if (pnode->is_fully_opaque) {
pixman_region32_init_rect(&surface_opaque, 0, 0,
pnode->surface->width,