示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}