static void vl_dri2_set_drawable(struct vl_dri_screen *scrn, Drawable drawable) { assert(scrn); assert(drawable); if (scrn->drawable == drawable) return; vl_dri2_destroy_drawable(scrn); xcb_dri2_create_drawable(scrn->conn, drawable); scrn->current_buffer = false; vl_compositor_reset_dirty_area(&scrn->dirty_areas[0]); vl_compositor_reset_dirty_area(&scrn->dirty_areas[1]); scrn->drawable = drawable; }
static void vl_dri2_screen_destroy(struct vl_screen *vscreen) { struct vl_dri_screen *scrn = (struct vl_dri_screen *)vscreen; assert(vscreen); if (scrn->flushed) { free(xcb_dri2_swap_buffers_reply(scrn->conn, scrn->swap_cookie, NULL)); free(xcb_dri2_wait_sbc_reply(scrn->conn, scrn->wait_cookie, NULL)); free(xcb_dri2_get_buffers_reply(scrn->conn, scrn->buffers_cookie, NULL)); } vl_dri2_destroy_drawable(scrn); scrn->base.pscreen->destroy(scrn->base.pscreen); pipe_loader_release(&scrn->base.dev, 1); /* There is no user provided fd */ FREE(scrn); }