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,
|
_cogl_context_set_current_modelview_entry (CoglContext *context,
|
||||||
CoglMatrixEntry *entry);
|
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 */
|
#endif /* __COGL_CONTEXT_PRIVATE_H */
|
||||||
|
|
|
@ -56,10 +56,6 @@
|
||||||
#define GL_POINT_SPRITE 0x8861
|
#define GL_POINT_SPRITE 0x8861
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_NUM_EXTENSIONS
|
|
||||||
#define GL_NUM_EXTENSIONS 0x821D
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is a relatively new extension */
|
/* This is a relatively new extension */
|
||||||
#ifndef GL_PURGED_CONTEXT_RESET_NV
|
#ifndef GL_PURGED_CONTEXT_RESET_NV
|
||||||
#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
|
#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
|
||||||
|
@ -469,94 +465,6 @@ _cogl_context_set_current_modelview_entry (CoglContext *context,
|
||||||
context->current_modelview_entry = entry;
|
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
|
int64_t
|
||||||
cogl_get_clock_time (CoglContext *context)
|
cogl_get_clock_time (CoglContext *context)
|
||||||
{
|
{
|
||||||
|
|
|
@ -94,6 +94,20 @@ _cogl_gl_util_catch_out_of_memory (CoglContext *ctx, GError **error);
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_driver_gl_is_hardware_accelerated (CoglContext *context);
|
_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
|
/* 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
|
* 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
|
* 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;
|
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
|
gboolean
|
||||||
_cogl_gl_util_parse_gl_version (const char *version_string,
|
_cogl_gl_util_parse_gl_version (const char *version_string,
|
||||||
int *major_out,
|
int *major_out,
|
||||||
|
|
Loading…
Reference in a new issue