static CoglBool _cogl_winsys_egl_context_created (CoglDisplay *display, CoglError **error) { CoglRenderer *renderer = display->renderer; CoglRendererEGL *egl_renderer = renderer->winsys; CoglDisplayEGL *egl_display = display->winsys; if ((egl_renderer->private_features & COGL_EGL_WINSYS_FEATURE_SURFACELESS_CONTEXT) == 0 && !make_dummy_surface(display, error)) return FALSE; if (!_cogl_winsys_egl_make_current (display, egl_display->dummy_surface, egl_display->dummy_surface, egl_display->egl_context)) { _cogl_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_CREATE_CONTEXT, "%s", "Unable to eglMakeCurrent with dummy surface"); } return TRUE; }
static gboolean clutter_backend_wayland_create_context (ClutterBackend *backend, GError **error) { ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); const gchar *egl_extensions = NULL; gboolean status; int retry_cookie; gboolean try_fallback; GError *try_error = NULL; if (backend_wayland->egl_context != EGL_NO_CONTEXT) return TRUE; #if defined(HAVE_COGL_GL) eglBindAPI (EGL_OPENGL_API); #else eglBindAPI (EGL_OPENGL_ES_API); #endif egl_extensions = eglQueryString (backend_wayland->edpy, EGL_EXTENSIONS); if (!_cogl_check_extension (_COGL_SURFACELESS_EXTENSION, egl_extensions)) { g_debug("Could not find the " _COGL_SURFACELESS_EXTENSION " extension; falling back to binding a dummy surface"); if (!make_dummy_surface(backend_wayland)) { g_set_error (error, CLUTTER_INIT_ERROR, CLUTTER_INIT_ERROR_BACKEND, "Could not create dummy surface"); return FALSE; } } else { backend_wayland->egl_config = NULL; backend_wayland->egl_surface = EGL_NO_SURFACE; } retry_cookie = 0; while (!(status = try_create_context (backend, retry_cookie, &try_fallback, &try_error)) && try_fallback) { g_warning ("Failed to create context: %s\nWill try fallback...", try_error->message); g_error_free (try_error); try_error = NULL; retry_cookie++; } if (!status) g_propagate_error (error, try_error); return status; }