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; }
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; }