summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cogl/Makefile.am2
-rw-r--r--cogl/cogl-config-private.h37
-rw-r--r--cogl/cogl-config.c117
-rw-r--r--cogl/cogl-debug.c11
-rw-r--r--cogl/cogl-debug.h5
-rw-r--r--cogl/cogl-renderer.c6
-rw-r--r--cogl/cogl.c2
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);
}