glDisableVertexAttribArray(window->gl.pos);
glDisableVertexAttribArray(window->gl.col);
- eglSwapBuffers(window->display->egl.dpy, window->egl_surface);
-
if (window->opaque || window->fullscreen) {
region = wl_compositor_create_region(window->display->compositor);
wl_region_add(region, 0, 0,
wl_region_destroy(region);
}
+ eglSwapBuffers(window->display->egl.dpy, window->egl_surface);
+
window->callback = wl_surface_frame(window->surface);
wl_callback_add_listener(window->callback, &frame_listener, window);
}
wl_shell_surface_set_toplevel(window->shell_surface);
}
+ if (window->opaque_region) {
+ wl_surface_set_opaque_region(window->surface,
+ window->opaque_region);
+ wl_region_destroy(window->opaque_region);
+ window->opaque_region = NULL;
+ }
+
switch (window->buffer_type) {
#ifdef HAVE_CAIRO_EGL
case WINDOW_BUFFER_TYPE_EGL_WINDOW:
wl_region_destroy(window->input_region);
window->input_region = NULL;
}
-
- if (window->opaque_region) {
- wl_surface_set_opaque_region(window->surface,
- window->opaque_region);
- wl_region_destroy(window->opaque_region);
- window->opaque_region = NULL;
- }
}
int
surface->pending.buffer_destroy_listener.notify =
surface_handle_pending_buffer_destroy;
pixman_region32_init(&surface->pending.damage);
+ pixman_region32_init(&surface->pending.opaque);
return surface;
}
if (weston_surface_is_mapped(surface))
weston_surface_unmap(surface);
+ pixman_region32_fini(&surface->pending.opaque);
pixman_region32_fini(&surface->pending.damage);
if (surface->pending.buffer)
if (surface->geometry.width != buffer->width ||
surface->geometry.height != buffer->height) {
undef_region(&surface->input);
- pixman_region32_fini(&surface->opaque);
- pixman_region32_init(&surface->opaque);
}
} else {
if (weston_surface_is_mapped(surface))
struct weston_surface *surface = resource->data;
struct weston_region *region;
- pixman_region32_fini(&surface->opaque);
-
if (region_resource) {
region = region_resource->data;
- pixman_region32_init_rect(&surface->opaque, 0, 0,
- surface->geometry.width,
- surface->geometry.height);
- pixman_region32_intersect(&surface->opaque,
- &surface->opaque, ®ion->region);
+ pixman_region32_copy(&surface->pending.opaque,
+ ®ion->region);
} else {
- pixman_region32_init(&surface->opaque);
+ empty_region(&surface->pending.opaque);
}
-
- surface->geometry.dirty = 1;
}
static void
&surface->pending.damage);
empty_region(&surface->pending.damage);
weston_surface_schedule_repaint(surface);
+
+ /* wl_surface.set_opaque_region */
+ pixman_region32_fini(&surface->opaque);
+ pixman_region32_init_rect(&surface->opaque, 0, 0,
+ surface->geometry.width,
+ surface->geometry.height);
+ pixman_region32_intersect(&surface->opaque,
+ &surface->opaque, &surface->pending.opaque);
+ surface->geometry.dirty = 1;
}
static const struct wl_surface_interface surface_interface = {