diff options
-rw-r--r-- | cogl/Makefile.am | 2 | ||||
-rw-r--r-- | cogl/cogl-config-private.h | 37 | ||||
-rw-r--r-- | cogl/cogl-config.c | 117 | ||||
-rw-r--r-- | cogl/cogl-debug.c | 11 | ||||
-rw-r--r-- | cogl/cogl-debug.h | 5 | ||||
-rw-r--r-- | cogl/cogl-renderer.c | 6 | ||||
-rw-r--r-- | cogl/cogl.c | 2 |
7 files changed, 179 insertions, 1 deletions
diff --git a/cogl/Makefile.am b/cogl/Makefile.am index 7a9e0eaf..91dac5e7 100644 --- a/cogl/Makefile.am +++ b/cogl/Makefile.am @@ -306,6 +306,8 @@ cogl_sources_c = \ $(srcdir)/winsys/cogl-winsys-stub-private.h \ $(srcdir)/cogl-queue.h \ $(srcdir)/winsys/cogl-winsys-stub.c \ + $(srcdir)/cogl-config-private.h \ + $(srcdir)/cogl-config.c \ $(NULL) if SUPPORT_XLIB diff --git a/cogl/cogl-config-private.h b/cogl/cogl-config-private.h new file mode 100644 index 00000000..14b43bb6 --- /dev/null +++ b/cogl/cogl-config-private.h @@ -0,0 +1,37 @@ +/* + * Cogl + * + * An object oriented GL/GLES Abstraction/Utility Layer + * + * Copyright (C) 2011 Intel Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * + * + * Authors: + * Robert Bragg <robert@linux.intel.com> + */ + +#ifndef __COGL_CONFIG_PRIVATE_H +#define __COGL_CONFIG_PRIVATE_H + +void +_cogl_config_read (void); + +extern char *_cogl_config_driver; +extern char *_cogl_config_renderer; + +#endif /* __COGL_CONFIG_PRIVATE_H */ diff --git a/cogl/cogl-config.c b/cogl/cogl-config.c new file mode 100644 index 00000000..8f0082ec --- /dev/null +++ b/cogl/cogl-config.c @@ -0,0 +1,117 @@ +/* + * Cogl + * + * An object oriented GL/GLES Abstraction/Utility Layer + * + * Copyright (C) 2011 Intel Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * + * Authors: + * Robert Bragg <robert@linux.intel.com> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cogl-debug.h" + +#include <glib.h> + +char *_cogl_config_driver; +char *_cogl_config_renderer; + +static void +_cogl_config_process (GKeyFile *key_file) +{ + char *value; + + value = g_key_file_get_string (key_file, "global", "COGL_DEBUG", NULL); + if (value) + { + _cogl_parse_debug_string (value, + TRUE /* enable the flags */, + TRUE /* ignore help option */); + g_free (value); + } + + value = g_key_file_get_string (key_file, "global", "COGL_NO_DEBUG", NULL); + if (value) + { + _cogl_parse_debug_string (value, + FALSE /* disable the flags */, + TRUE /* ignore help option */); + g_free (value); + } + + value = g_key_file_get_string (key_file, "global", "COGL_DRIVER", NULL); + if (value) + { + if (_cogl_config_driver) + g_free (_cogl_config_driver); + + _cogl_config_driver = value; + } + + value = g_key_file_get_string (key_file, "global", "COGL_RENDERER", NULL); + if (value) + { + if (_cogl_config_renderer) + g_free (_cogl_config_renderer); + + _cogl_config_renderer = value; + } +} + +void +_cogl_config_read (void) +{ + GKeyFile *key_file = g_key_file_new (); + const char * const *system_dirs = g_get_system_config_dirs (); + char *filename; + gboolean status = FALSE; + int i; + + for (i = 0; system_dirs[i]; i++) + { + filename = g_build_filename (system_dirs[i], "cogl", "cogl.conf", NULL); + status = g_key_file_load_from_file (key_file, + filename, + 0, + NULL); + g_free (filename); + if (status) + { + _cogl_config_process (key_file); + g_key_file_free (key_file); + key_file = g_key_file_new (); + break; + } + } + + filename = g_build_filename (g_get_user_config_dir (), "cogl", "cogl.conf", NULL); + status = g_key_file_load_from_file (key_file, + filename, + 0, + NULL); + g_free (filename); + + if (status) + _cogl_config_process (key_file); + + g_key_file_free (key_file); +} diff --git a/cogl/cogl-debug.c b/cogl/cogl-debug.c index 51163486..bc22f78e 100644 --- a/cogl/cogl-debug.c +++ b/cogl/cogl-debug.c @@ -126,7 +126,7 @@ _cogl_parse_debug_string_for_keys (const char *value, } } -static void +void _cogl_parse_debug_string (const char *value, gboolean enable, gboolean ignore_help) @@ -223,6 +223,15 @@ _cogl_debug_check_environment (void) FALSE /* don't ignore help */); env_string = NULL; } + + env_string = g_getenv ("COGL_NO_DEBUG"); + if (env_string != NULL) + { + _cogl_parse_debug_string (env_string, + FALSE /* disable the flags */, + FALSE /* don't ignore help */); + env_string = NULL; + } } static gboolean diff --git a/cogl/cogl-debug.h b/cogl/cogl-debug.h index bf2d3190..3c8c73ae 100644 --- a/cogl/cogl-debug.h +++ b/cogl/cogl-debug.h @@ -119,6 +119,11 @@ extern GHashTable *_cogl_debug_instances; void _cogl_debug_check_environment (void); +void +_cogl_parse_debug_string (const char *value, + gboolean enable, + gboolean ignore_help); + G_END_DECLS #endif /* __COGL_DEBUG_H__ */ diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c index 5a4f570e..7bd4746c 100644 --- a/cogl/cogl-renderer.c +++ b/cogl/cogl-renderer.c @@ -42,6 +42,7 @@ #include "cogl-winsys-private.h" #include "cogl-winsys-stub-private.h" #include "cogl-winsys-egl-private.h" +#include "cogl-config-private.h" #ifdef COGL_HAS_GLX_SUPPORT extern const CoglWinsysVtable *_cogl_winsys_glx_get_vtable (void); @@ -178,6 +179,9 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer, const char *driver_name = g_getenv ("COGL_DRIVER"); const char *libgl_name; + if (!driver_name) + driver_name = _cogl_config_driver; + #ifdef HAVE_COGL_GL if (driver_name == NULL || !strcmp (driver_name, "gl")) { @@ -263,6 +267,8 @@ cogl_renderer_connect (CoglRenderer *renderer, GError **error) else { char *user_choice = getenv ("COGL_RENDERER"); + if (!user_choice) + user_choice = _cogl_config_renderer; if (user_choice && strcmp (winsys->name, user_choice) != 0) continue; } diff --git a/cogl/cogl.c b/cogl/cogl.c index e9621c2f..10c2cd84 100644 --- a/cogl/cogl.c +++ b/cogl/cogl.c @@ -47,6 +47,7 @@ #include "cogl-attribute-private.h" #include "cogl-framebuffer-private.h" #include "cogl-renderer-private.h" +#include "cogl-config-private.h" #ifndef GL_PACK_INVERT_MESA #define GL_PACK_INVERT_MESA 0x8758 @@ -1122,6 +1123,7 @@ _cogl_init (void) { g_type_init (); + _cogl_config_read (); _cogl_debug_check_environment (); g_once_init_leave (&init_status, 1); } |