cogl: Move GL context/version details into the driver
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1194
This commit is contained in:
parent
d6f5ac5603
commit
1285619bcf
4 changed files with 102 additions and 106 deletions
|
@ -310,18 +310,4 @@ void
|
|||
_cogl_context_set_current_modelview_entry (CoglContext *context,
|
||||
CoglMatrixEntry *entry);
|
||||
|
||||
/*
|
||||
* _cogl_context_get_gl_extensions:
|
||||
* @context: A CoglContext
|
||||
*
|
||||
* Return value: a NULL-terminated array of strings representing the
|
||||
* supported extensions by the current driver. This array is owned
|
||||
* by the caller and should be freed with g_strfreev().
|
||||
*/
|
||||
char **
|
||||
_cogl_context_get_gl_extensions (CoglContext *context);
|
||||
|
||||
const char *
|
||||
_cogl_context_get_gl_version (CoglContext *context);
|
||||
|
||||
#endif /* __COGL_CONTEXT_PRIVATE_H */
|
||||
|
|
|
@ -56,10 +56,6 @@
|
|||
#define GL_POINT_SPRITE 0x8861
|
||||
#endif
|
||||
|
||||
#ifndef GL_NUM_EXTENSIONS
|
||||
#define GL_NUM_EXTENSIONS 0x821D
|
||||
#endif
|
||||
|
||||
/* This is a relatively new extension */
|
||||
#ifndef GL_PURGED_CONTEXT_RESET_NV
|
||||
#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
|
||||
|
@ -469,94 +465,6 @@ _cogl_context_set_current_modelview_entry (CoglContext *context,
|
|||
context->current_modelview_entry = entry;
|
||||
}
|
||||
|
||||
char **
|
||||
_cogl_context_get_gl_extensions (CoglContext *context)
|
||||
{
|
||||
const char *env_disabled_extensions;
|
||||
char **ret;
|
||||
|
||||
/* In GL 3, querying GL_EXTENSIONS is deprecated so we have to build
|
||||
* the array using glGetStringi instead */
|
||||
#ifdef HAVE_COGL_GL
|
||||
if (context->driver == COGL_DRIVER_GL3)
|
||||
{
|
||||
int num_extensions, i;
|
||||
|
||||
context->glGetIntegerv (GL_NUM_EXTENSIONS, &num_extensions);
|
||||
|
||||
ret = g_malloc (sizeof (char *) * (num_extensions + 1));
|
||||
|
||||
for (i = 0; i < num_extensions; i++)
|
||||
{
|
||||
const char *ext =
|
||||
(const char *) context->glGetStringi (GL_EXTENSIONS, i);
|
||||
ret[i] = g_strdup (ext);
|
||||
}
|
||||
|
||||
ret[num_extensions] = NULL;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const char *all_extensions =
|
||||
(const char *) context->glGetString (GL_EXTENSIONS);
|
||||
|
||||
ret = g_strsplit (all_extensions, " ", 0 /* max tokens */);
|
||||
}
|
||||
|
||||
if ((env_disabled_extensions = g_getenv ("COGL_DISABLE_GL_EXTENSIONS")))
|
||||
{
|
||||
char **split_env_disabled_extensions;
|
||||
char **src, **dst;
|
||||
|
||||
if (env_disabled_extensions)
|
||||
split_env_disabled_extensions =
|
||||
g_strsplit (env_disabled_extensions,
|
||||
",",
|
||||
0 /* no max tokens */);
|
||||
else
|
||||
split_env_disabled_extensions = NULL;
|
||||
|
||||
for (dst = ret, src = ret;
|
||||
*src;
|
||||
src++)
|
||||
{
|
||||
char **d;
|
||||
|
||||
if (split_env_disabled_extensions)
|
||||
for (d = split_env_disabled_extensions; *d; d++)
|
||||
if (!strcmp (*src, *d))
|
||||
goto disabled;
|
||||
|
||||
*(dst++) = *src;
|
||||
continue;
|
||||
|
||||
disabled:
|
||||
g_free (*src);
|
||||
continue;
|
||||
}
|
||||
|
||||
*dst = NULL;
|
||||
|
||||
if (split_env_disabled_extensions)
|
||||
g_strfreev (split_env_disabled_extensions);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *
|
||||
_cogl_context_get_gl_version (CoglContext *context)
|
||||
{
|
||||
const char *version_override;
|
||||
|
||||
if ((version_override = g_getenv ("COGL_OVERRIDE_GL_VERSION")))
|
||||
return version_override;
|
||||
else
|
||||
return (const char *) context->glGetString (GL_VERSION);
|
||||
|
||||
}
|
||||
|
||||
int64_t
|
||||
cogl_get_clock_time (CoglContext *context)
|
||||
{
|
||||
|
|
|
@ -94,6 +94,20 @@ _cogl_gl_util_catch_out_of_memory (CoglContext *ctx, GError **error);
|
|||
gboolean
|
||||
_cogl_driver_gl_is_hardware_accelerated (CoglContext *context);
|
||||
|
||||
/*
|
||||
* _cogl_context_get_gl_extensions:
|
||||
* @context: A CoglContext
|
||||
*
|
||||
* Return value: a NULL-terminated array of strings representing the
|
||||
* supported extensions by the current driver. This array is owned
|
||||
* by the caller and should be freed with g_strfreev().
|
||||
*/
|
||||
char **
|
||||
_cogl_context_get_gl_extensions (CoglContext *context);
|
||||
|
||||
const char *
|
||||
_cogl_context_get_gl_version (CoglContext *context);
|
||||
|
||||
/* Parses a GL version number stored in a string. @version_string must
|
||||
* point to the beginning of the version number (ie, it can't point to
|
||||
* the "OpenGL ES" part on GLES). The version number can be followed
|
||||
|
|
|
@ -147,6 +147,94 @@ _cogl_gl_util_catch_out_of_memory (CoglContext *ctx, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
char **
|
||||
_cogl_context_get_gl_extensions (CoglContext *context)
|
||||
{
|
||||
const char *env_disabled_extensions;
|
||||
char **ret;
|
||||
|
||||
/* In GL 3, querying GL_EXTENSIONS is deprecated so we have to build
|
||||
* the array using glGetStringi instead */
|
||||
#ifdef HAVE_COGL_GL
|
||||
if (context->driver == COGL_DRIVER_GL3)
|
||||
{
|
||||
int num_extensions, i;
|
||||
|
||||
context->glGetIntegerv (GL_NUM_EXTENSIONS, &num_extensions);
|
||||
|
||||
ret = g_malloc (sizeof (char *) * (num_extensions + 1));
|
||||
|
||||
for (i = 0; i < num_extensions; i++)
|
||||
{
|
||||
const char *ext =
|
||||
(const char *) context->glGetStringi (GL_EXTENSIONS, i);
|
||||
ret[i] = g_strdup (ext);
|
||||
}
|
||||
|
||||
ret[num_extensions] = NULL;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const char *all_extensions =
|
||||
(const char *) context->glGetString (GL_EXTENSIONS);
|
||||
|
||||
ret = g_strsplit (all_extensions, " ", 0 /* max tokens */);
|
||||
}
|
||||
|
||||
if ((env_disabled_extensions = g_getenv ("COGL_DISABLE_GL_EXTENSIONS")))
|
||||
{
|
||||
char **split_env_disabled_extensions;
|
||||
char **src, **dst;
|
||||
|
||||
if (env_disabled_extensions)
|
||||
split_env_disabled_extensions =
|
||||
g_strsplit (env_disabled_extensions,
|
||||
",",
|
||||
0 /* no max tokens */);
|
||||
else
|
||||
split_env_disabled_extensions = NULL;
|
||||
|
||||
for (dst = ret, src = ret;
|
||||
*src;
|
||||
src++)
|
||||
{
|
||||
char **d;
|
||||
|
||||
if (split_env_disabled_extensions)
|
||||
for (d = split_env_disabled_extensions; *d; d++)
|
||||
if (!strcmp (*src, *d))
|
||||
goto disabled;
|
||||
|
||||
*(dst++) = *src;
|
||||
continue;
|
||||
|
||||
disabled:
|
||||
g_free (*src);
|
||||
continue;
|
||||
}
|
||||
|
||||
*dst = NULL;
|
||||
|
||||
if (split_env_disabled_extensions)
|
||||
g_strfreev (split_env_disabled_extensions);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *
|
||||
_cogl_context_get_gl_version (CoglContext *context)
|
||||
{
|
||||
const char *version_override;
|
||||
|
||||
if ((version_override = g_getenv ("COGL_OVERRIDE_GL_VERSION")))
|
||||
return version_override;
|
||||
else
|
||||
return (const char *) context->glGetString (GL_VERSION);
|
||||
|
||||
}
|
||||
|
||||
gboolean
|
||||
_cogl_gl_util_parse_gl_version (const char *version_string,
|
||||
int *major_out,
|
||||
|
|
Loading…
Reference in a new issue