static gboolean _cogl_winsys_context_init (CoglContext *context, GError **error) { CoglRenderer *renderer = context->display->renderer; CoglDisplayEGL *egl_display = context->display->winsys; CoglRendererEGL *egl_renderer = renderer->winsys; context->winsys = g_new0 (CoglContextEGL, 1); _COGL_RETURN_VAL_IF_FAIL (egl_display->egl_context, FALSE); memset (context->winsys_features, 0, sizeof (context->winsys_features)); check_egl_extensions (renderer); if (!_cogl_context_update_features (context, error)) return FALSE; if (egl_renderer->private_features & COGL_EGL_WINSYS_FEATURE_SWAP_REGION) { COGL_FLAGS_SET (context->winsys_features, COGL_WINSYS_FEATURE_SWAP_REGION, TRUE); COGL_FLAGS_SET (context->winsys_features, COGL_WINSYS_FEATURE_SWAP_REGION_THROTTLE, TRUE); } if (egl_renderer->platform_vtable->context_init && !egl_renderer->platform_vtable->context_init (context, error)) return FALSE; return TRUE; }
static bool _cg_winsys_device_init(cg_device_t *dev, cg_error_t **error) { cg_renderer_t *renderer = dev->display->renderer; cg_display_egl_t *egl_display = dev->display->winsys; cg_renderer_egl_t *egl_renderer = renderer->winsys; dev->winsys = c_new0(cg_device_egl_t, 1); c_return_val_if_fail(egl_display->egl_context, false); memset(dev->winsys_features, 0, sizeof(dev->winsys_features)); check_egl_extensions(renderer); if (!_cg_device_update_features(dev, error)) return false; if (egl_renderer->private_features & CG_EGL_WINSYS_FEATURE_SWAP_REGION) { CG_FLAGS_SET(dev->winsys_features, CG_WINSYS_FEATURE_SWAP_REGION, true); CG_FLAGS_SET(dev->winsys_features, CG_WINSYS_FEATURE_SWAP_REGION_THROTTLE, true); } if ((egl_renderer->private_features & CG_EGL_WINSYS_FEATURE_FENCE_SYNC) && _cg_has_private_feature(dev, CG_PRIVATE_FEATURE_OES_EGL_SYNC)) CG_FLAGS_SET(dev->features, CG_FEATURE_ID_FENCE, true); if (egl_renderer->private_features & CG_EGL_WINSYS_FEATURE_BUFFER_AGE) CG_FLAGS_SET(dev->winsys_features, CG_WINSYS_FEATURE_BUFFER_AGE, true); /* NB: We currently only support creating standalone GLES2 contexts * for offscreen rendering and so we need a dummy (non-visible) * surface to be able to bind those contexts */ if (egl_display->dummy_surface != EGL_NO_SURFACE && dev->driver == CG_DRIVER_GLES2) CG_FLAGS_SET(dev->features, CG_FEATURE_ID_GLES2_CONTEXT, true); if (egl_renderer->platform_vtable->device_init && !egl_renderer->platform_vtable->device_init(dev, error)) return false; return true; }
static CoglBool _cogl_winsys_context_init (CoglContext *context, CoglError **error) { CoglRenderer *renderer = context->display->renderer; CoglDisplayEGL *egl_display = context->display->winsys; CoglRendererEGL *egl_renderer = renderer->winsys; context->winsys = g_new0 (CoglContextEGL, 1); _COGL_RETURN_VAL_IF_FAIL (egl_display->egl_context, FALSE); memset (context->winsys_features, 0, sizeof (context->winsys_features)); check_egl_extensions (renderer); if (!_cogl_context_update_features (context, error)) return FALSE; if (egl_renderer->private_features & COGL_EGL_WINSYS_FEATURE_SWAP_REGION) { COGL_FLAGS_SET (context->winsys_features, COGL_WINSYS_FEATURE_SWAP_REGION, TRUE); COGL_FLAGS_SET (context->winsys_features, COGL_WINSYS_FEATURE_SWAP_REGION_THROTTLE, TRUE); } if ((egl_renderer->private_features & COGL_EGL_WINSYS_FEATURE_FENCE_SYNC) && (context->private_feature_flags & COGL_PRIVATE_FEATURE_OES_EGL_SYNC)) COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_FENCE, TRUE); /* NB: We currently only support creating standalone GLES2 contexts * for offscreen rendering and so we need a dummy (non-visible) * surface to be able to bind those contexts */ if (egl_display->dummy_surface != EGL_NO_SURFACE && context->driver == COGL_DRIVER_GLES2) COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_GLES2_CONTEXT, TRUE); if (egl_renderer->platform_vtable->context_init && !egl_renderer->platform_vtable->context_init (context, error)) return FALSE; return TRUE; }
bool _cg_winsys_egl_renderer_connect_common(cg_renderer_t *renderer, cg_error_t **error) { cg_renderer_egl_t *egl_renderer = renderer->winsys; if (!eglInitialize(egl_renderer->edpy, &egl_renderer->egl_version_major, &egl_renderer->egl_version_minor)) { _cg_set_error(error, CG_WINSYS_ERROR, CG_WINSYS_ERROR_INIT, "Couldn't initialize EGL"); return false; } check_egl_extensions(renderer); return true; }
gboolean _cogl_winsys_egl_renderer_connect_common (CoglRenderer *renderer, GError **error) { CoglRendererEGL *egl_renderer = renderer->winsys; if (!eglInitialize (egl_renderer->edpy, &egl_renderer->egl_version_major, &egl_renderer->egl_version_minor)) { g_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_INIT, "Couldn't initialize EGL"); return FALSE; } check_egl_extensions (renderer); return TRUE; }