static void set_damage_object_internal (CoglContext *ctx, CoglTexturePixmapX11 *tex_pixmap, Damage damage, CoglTexturePixmapX11ReportLevel report_level) { Display *display = cogl_xlib_renderer_get_display (ctx->display->renderer); if (tex_pixmap->damage) { cogl_xlib_renderer_remove_filter (ctx->display->renderer, _cogl_texture_pixmap_x11_filter, tex_pixmap); if (tex_pixmap->damage_owned) { XDamageDestroy (display, tex_pixmap->damage); tex_pixmap->damage_owned = FALSE; } } tex_pixmap->damage = damage; tex_pixmap->damage_report_level = report_level; if (damage) cogl_xlib_renderer_add_filter (ctx->display->renderer, _cogl_texture_pixmap_x11_filter, tex_pixmap); }
gboolean _cogl_xlib_renderer_connect (CoglRenderer *renderer, CoglError **error) { CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer); CoglX11Renderer *x11_renderer = (CoglX11Renderer *) xlib_renderer; int damage_error; int randr_error; if (!assert_xlib_display (renderer, error)) return FALSE; if (getenv ("COGL_X11_SYNC")) XSynchronize (xlib_renderer->xdpy, TRUE); /* Check whether damage events are supported on this display */ if (!XDamageQueryExtension (xlib_renderer->xdpy, &x11_renderer->damage_base, &damage_error)) x11_renderer->damage_base = -1; /* Check whether randr is supported on this display */ if (!XRRQueryExtension (xlib_renderer->xdpy, &x11_renderer->randr_base, &randr_error)) x11_renderer->randr_base = -1; xlib_renderer->trap_state = NULL; if (renderer->xlib_enable_event_retrieval) { _cogl_poll_renderer_add_fd (renderer, ConnectionNumber (xlib_renderer->xdpy), COGL_POLL_FD_EVENT_IN, prepare_xlib_events_timeout, dispatch_xlib_events, renderer); } XRRSelectInput(xlib_renderer->xdpy, DefaultRootWindow (xlib_renderer->xdpy), RRScreenChangeNotifyMask | RRCrtcChangeNotifyMask | RROutputPropertyNotifyMask); update_outputs (renderer, FALSE); register_xlib_renderer (renderer); cogl_xlib_renderer_add_filter (renderer, randr_filter, renderer); return TRUE; }
static CoglBool _cogl_winsys_egl_context_init (CoglContext *context, CoglError **error) { cogl_xlib_renderer_add_filter (context->display->renderer, event_filter_cb, context); COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_ONSCREEN_MULTIPLE, TRUE); COGL_FLAGS_SET (context->winsys_features, COGL_WINSYS_FEATURE_MULTIPLE_ONSCREEN, TRUE); /* We'll manually handle queueing dirty events in response to * Expose events from X */ COGL_FLAGS_SET (context->private_features, COGL_PRIVATE_FEATURE_DIRTY_EVENTS, TRUE); return TRUE; }