mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 21:18:15 +02:00
compositor: Fix rotated opaque surfaces
When a paint node is drawing rotated content, it's treated like its axis aligned bounding box. Even if it only contains fully opaque content, the parts of the axis aligned bounding box outside of that content are not opaque. We need to ensure we don't claim a paint node that isn't axis aligned is fully opaque, or we'll improperly update regions outside of the really opaque content. Fixes485e1796afSigned-off-by: Derek Foreman <derek.foreman@collabora.com> (cherry picked from commit1f7bdea5c4)
This commit is contained in:
parent
f8d466fefa
commit
f0fa8b9b18
1 changed files with 8 additions and 4 deletions
|
|
@ -231,7 +231,8 @@ paint_node_update_early(struct weston_paint_node *pnode)
|
|||
if (buffer->type == WESTON_BUFFER_SOLID) {
|
||||
pnode->draw_solid = true;
|
||||
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f &&
|
||||
buffer->solid.a == 1.0f);
|
||||
buffer->solid.a == 1.0f &&
|
||||
pnode->valid_transform);
|
||||
pnode->is_fully_blended = !pnode->is_fully_opaque;
|
||||
pnode->solid = buffer->solid;
|
||||
if (pnode->solid.a == 0.0f)
|
||||
|
|
@ -255,14 +256,16 @@ paint_node_update_early(struct weston_paint_node *pnode)
|
|||
(recording_censor || unprotected_censor)) {
|
||||
pnode->draw_solid = true;
|
||||
pnode->censored = true;
|
||||
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f);
|
||||
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f) &&
|
||||
pnode->valid_transform;
|
||||
pnode->is_fully_blended = !pnode->is_fully_opaque;
|
||||
get_placeholder_color(pnode, &pnode->solid);
|
||||
}
|
||||
|
||||
if (!pnode->draw_solid && (was_solid || view_dirty)) {
|
||||
pnode->is_fully_opaque = weston_view_is_opaque(pnode->view,
|
||||
&pnode->view->transform.boundingbox);
|
||||
&pnode->view->transform.boundingbox) &&
|
||||
pnode->valid_transform;
|
||||
pnode->is_fully_blended = weston_view_is_fully_blended(pnode->view,
|
||||
&pnode->view->transform.boundingbox);
|
||||
}
|
||||
|
|
@ -369,7 +372,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 = (pnode->view->alpha == 1.0f);
|
||||
pnode->is_fully_opaque = (pnode->view->alpha == 1.0f) &&
|
||||
pnode->valid_transform;
|
||||
pnode->is_fully_blended = !pnode->is_fully_opaque;
|
||||
get_placeholder_color(pnode, &pnode->solid);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue