/* Updates all the function pointers */ static void check_egl_extensions (CoglRenderer *renderer) { CoglRendererEGL *egl_renderer = renderer->winsys; const char *egl_extensions; char **split_extensions; int i; egl_extensions = eglQueryString (egl_renderer->edpy, EGL_EXTENSIONS); split_extensions = g_strsplit (egl_extensions, " ", 0 /* max_tokens */); COGL_NOTE (WINSYS, " EGL Extensions: %s", egl_extensions); egl_renderer->private_features = 0; for (i = 0; i < G_N_ELEMENTS (winsys_feature_data); i++) if (_cogl_feature_check (renderer, "EGL", winsys_feature_data + i, 0, 0, COGL_DRIVER_GL, /* the driver isn't used */ split_extensions, egl_renderer)) { egl_renderer->private_features |= winsys_feature_data[i].feature_flags_private; } g_strfreev (split_extensions); }
void _cogl_features_init (void) { CoglFeatureFlags flags = 0; const char *gl_extensions; GLint max_clip_planes = 0; GLint num_stencil_bits = 0; int gl_major = 0, gl_minor = 0; int i; _COGL_GET_CONTEXT (ctx, NO_RETVAL); _cogl_get_gl_version (&gl_major, &gl_minor); flags = (COGL_FEATURE_TEXTURE_READ_PIXELS | COGL_FEATURE_UNSIGNED_INT_INDICES); gl_extensions = (const char*) glGetString (GL_EXTENSIONS); if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 2, 0) || _cogl_check_extension ("GL_ARB_texture_non_power_of_two", gl_extensions)) { #ifdef HAVE_CLUTTER_OSX if (really_enable_npot ()) #endif flags |= COGL_FEATURE_TEXTURE_NPOT; } #ifdef GL_YCBCR_MESA if (_cogl_check_extension ("GL_MESA_ycbcr_texture", gl_extensions)) { flags |= COGL_FEATURE_TEXTURE_YUV; } #endif GE( glGetIntegerv (GL_STENCIL_BITS, &num_stencil_bits) ); /* We need at least three stencil bits to combine clips */ if (num_stencil_bits > 2) flags |= COGL_FEATURE_STENCIL_BUFFER; GE( glGetIntegerv (GL_MAX_CLIP_PLANES, &max_clip_planes) ); if (max_clip_planes >= 4) flags |= COGL_FEATURE_FOUR_CLIP_PLANES; for (i = 0; i < G_N_ELEMENTS (cogl_feature_data); i++) if (_cogl_feature_check (cogl_feature_data + i, gl_major, gl_minor, gl_extensions)) flags |= cogl_feature_data[i].feature_flags; /* Cache features */ ctx->feature_flags = flags; ctx->features_cached = TRUE; }