mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 03:48:02 +02:00
compositor: weston_surface_draw() to use bounding box
Use the proper bounding box in clipping the surface repaint area. Fixes excessive clipping for transformed surfaces. Also don't leak the region32 on early return. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
parent
60921e5787
commit
a9f8a21c75
1 changed files with 8 additions and 6 deletions
|
|
@ -666,14 +666,15 @@ weston_surface_draw(struct weston_surface *es, struct weston_output *output)
|
|||
GLint filter;
|
||||
int n;
|
||||
|
||||
pixman_region32_init_rect(&repaint,
|
||||
es->geometry.x, es->geometry.y,
|
||||
es->geometry.width, es->geometry.height);
|
||||
pixman_region32_intersect(&repaint, &repaint, &output->region);
|
||||
weston_surface_update_transform(es);
|
||||
|
||||
pixman_region32_init(&repaint);
|
||||
pixman_region32_intersect(&repaint, &es->transform.boundingbox,
|
||||
&output->region);
|
||||
pixman_region32_intersect(&repaint, &repaint, &es->damage);
|
||||
|
||||
if (!pixman_region32_not_empty(&repaint))
|
||||
return;
|
||||
goto out;
|
||||
|
||||
switch (es->visual) {
|
||||
case WESTON_ARGB_VISUAL:
|
||||
|
|
@ -708,7 +709,6 @@ weston_surface_draw(struct weston_surface *es, struct weston_output *output)
|
|||
glUniform1f(es->shader->texwidth_uniform,
|
||||
(GLfloat)es->geometry.width / es->pitch);
|
||||
|
||||
weston_surface_update_transform(es);
|
||||
if (es->transform.enabled)
|
||||
filter = GL_LINEAR;
|
||||
else
|
||||
|
|
@ -733,6 +733,8 @@ weston_surface_draw(struct weston_surface *es, struct weston_output *output)
|
|||
|
||||
ec->vertices.size = 0;
|
||||
ec->indices.size = 0;
|
||||
|
||||
out:
|
||||
pixman_region32_fini(&repaint);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue