static CoglBool check_flags(CoglRenderer *renderer) {
    if (cogl_renderer_get_driver (renderer) != COGL_DRIVER_GL &&
            cogl_renderer_get_driver (renderer) != COGL_DRIVER_GL3) {
        return FALSE;
    }

#if 0
    //wait for cogl patch merged
    if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_SHADER_TEXTURE_LOD)) {
        return FALSE;
    }
#endif

    if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_NPOT)) {
        return FALSE;
    }

    if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_GLSL)) {
        return FALSE;
    }

    if (!cogl_has_feature (test_ctx, COGL_FEATURE_ID_OFFSCREEN)) {
        return FALSE;
    }

    return TRUE;
}
Esempio n. 2
0
static gboolean
check_gl_extensions (void)
{
  ClutterBackend *backend;
  CoglContext *cogl_context;
  CoglDisplay *cogl_display;
  CoglRenderer *cogl_renderer;

  backend = clutter_get_default_backend ();
  cogl_context = clutter_backend_get_cogl_context (backend);
  cogl_display = cogl_context_get_display (cogl_context);
  cogl_renderer = cogl_display_get_renderer (cogl_display);

  switch (cogl_renderer_get_driver (cogl_renderer))
    {
    case COGL_DRIVER_GL3:
      {
        int num_extensions, i;
        gboolean arb_sync = FALSE;
        gboolean x11_sync_object = FALSE;

        meta_gl_get_integerv (GL_NUM_EXTENSIONS, &num_extensions);

        for (i = 0; i < num_extensions; ++i)
          {
            const char *ext = meta_gl_get_stringi (GL_EXTENSIONS, i);

            if (g_strcmp0 ("GL_ARB_sync", ext) == 0)
              arb_sync = TRUE;
            else if (g_strcmp0 ("GL_EXT_x11_sync_object", ext) == 0)
              x11_sync_object = TRUE;
          }

        return arb_sync && x11_sync_object;
      }
    case COGL_DRIVER_GL:
      {
        const char *extensions = meta_gl_get_string (GL_EXTENSIONS);
        return (extensions != NULL &&
                strstr (extensions, "GL_ARB_sync") != NULL &&
                strstr (extensions, "GL_EXT_x11_sync_object") != NULL);
      }
    default:
      break;
    }

  return FALSE;
}