diff --git a/cogl/cogl-debug-options.h b/cogl/cogl-debug-options.h
new file mode 100644
index 000000000..a73d7e1f6
--- /dev/null
+++ b/cogl/cogl-debug-options.h
@@ -0,0 +1,145 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2010 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 .
+ *
+ *
+ */
+
+OPT (HANDLE,
+ "Cogl Tracing",
+ "ref-counts",
+ "CoglObject references",
+ "Debug ref counting issues for CoglObjects")
+OPT (SLICING,
+ "Cogl Tracing",
+ "slicing",
+ "Trace Texture Slicing",
+ "debug the creation of texture slices")
+OPT (ATLAS,
+ "Cogl Tracing",
+ "atlas",
+ "Trace Atlas Textures",
+ "Debug texture atlas management")
+OPT (BLEND_STRINGS,
+ "Cogl Tracing",
+ "blend-strings",
+ "Trace Blend Strings",
+ "Debug CoglBlendString parsing")
+OPT (JOURNAL,
+ "Cogl Tracing",
+ "journal",
+ "Trace Journal",
+ "View all the geometry passing through the journal")
+OPT (BATCHING,
+ "Cogl Tracing",
+ "batching",
+ "Trace Batching",
+ "Show how geometry is being batched in the journal")
+OPT (MATRICES,
+ "Cogl Tracing",
+ "matrices",
+ "Trace matrices",
+ "Trace all matrix manipulation")
+/* XXX we should replace the "draw" option its very hand wavy... */
+OPT (DRAW,
+ "Cogl Tracing",
+ "draw",
+ "Trace Misc Drawing",
+ "Trace some misc drawing operations")
+OPT (PANGO,
+ "Cogl Tracing",
+ "pango",
+ "Trace Pango Renderer",
+ "Trace the Cogl Pango renderer")
+OPT (TEXTURE_PIXMAP,
+ "Cogl Tracing",
+ "texture-pixmap",
+ "Trace CoglTexturePixmap backend",
+ "Trace the Cogl texture pixmap backend")
+OPT (RECTANGLES,
+ "Visualize",
+ "rectangles",
+ "Outline rectangles",
+ "Add wire outlines for all rectangular geometry")
+OPT (DISABLE_BATCHING,
+ "Root Cause",
+ "disable-batching",
+ "Disable Journal batching",
+ "Disable batching of geometry in the Cogl Journal.")
+OPT (DISABLE_VBOS,
+ "Root Cause",
+ "disable-vbos",
+ "Disable GL Vertex Buffers",
+ "Disable use of OpenGL vertex buffer objects")
+OPT (DISABLE_PBOS,
+ "Root Cause",
+ "disable-pbos",
+ "Disable GL Pixel Buffers",
+ "Disable use of OpenGL pixel buffer objects")
+OPT (DISABLE_SOFTWARE_TRANSFORM,
+ "Root Cause",
+ "disable-software-transform",
+ "Disable software rect transform",
+ "Use the GPU to transform rectangular geometry")
+OPT (DUMP_ATLAS_IMAGE,
+ "Cogl Specialist",
+ "dump-atlas-image",
+ "Dump atlas images",
+ "Dump texture atlas changes to an image file")
+OPT (DISABLE_ATLAS,
+ "Root Cause",
+ "disable-atlas",
+ "Disable texture atlasing",
+ "Disable use of texture atlasing")
+OPT (DISABLE_TEXTURING,
+ "Root Cause",
+ "disable-texturing",
+ "Disable texturing",
+ "Disable texturing any primitives")
+OPT (DISABLE_ARBFP,
+ "Root Cause",
+ "disable-arbfp",
+ "Disable arbfp",
+ "Disable use of ARB fragment programs")
+OPT (DISABLE_GLSL,
+ "Root Cause",
+ "disable-glsl",
+ "Disable GLSL",
+ "Disable use of GLSL")
+OPT (DISABLE_BLENDING,
+ "Root Cause",
+ "disable-blending",
+ "Disable blending",
+ "Disable use of blending")
+OPT (SHOW_SOURCE,
+ "Cogl Tracing",
+ "show-source",
+ "Show source",
+ "Show generated ARBfp/GLSL source code")
+OPT (OPENGL,
+ "Cogl Tracing",
+ "opengl",
+ "Trace some OpenGL",
+ "Traces some select OpenGL calls")
+OPT (OFFSCREEN,
+ "Cogl Tracing",
+ "offscreen",
+ "Trace offscreen support",
+ "Debug offscreen support")
+
diff --git a/cogl/cogl-debug.c b/cogl/cogl-debug.c
index 0dbf7f254..2289af2ab 100644
--- a/cogl/cogl-debug.c
+++ b/cogl/cogl-debug.c
@@ -103,37 +103,14 @@ _cogl_parse_debug_string (const char *value,
else if (strcmp (value, "help") == 0)
{
g_printerr ("\n\n%28s\n", "Supported debug values:");
-#define OPT(NAME, HELP) \
- g_printerr ("%28s %s\n", NAME, HELP);
- OPT ("handle:", "debug ref counting issues for Cogl objects");
- OPT ("slicing:", "debug the creation of texture slices");
- OPT ("atlas:", "debug texture atlas management");
- OPT ("blend-strings:", "debug blend-string parsing");
- OPT ("journal:", "view all geometry passing through the journal");
- OPT ("batching:", "show how geometry is being batched in the journal");
- OPT ("matrices:", "trace all matrix manipulation");
- /* XXX: we should replace the "draw" option its very hand wavy... */
- OPT ("draw:", "misc tracing of some drawing operations");
- OPT ("pango:", "trace the pango renderer");
- OPT ("texture-pixmap:", "trace the Cogl texture pixmap backend");
- OPT ("rectangles:", "add wire outlines for all rectangular geometry");
- OPT ("disable-batching:", "disable the journal batching");
- OPT ("disable-vbos:", "disable use of OpenGL vertex buffer objects");
- OPT ("disable-pbos:", "disable use of OpenGL pixel buffer objects");
- OPT ("disable-software-transform",
- "use the GPU to transform rectangular geometry");
- OPT ("dump-atlas-image:", "dump atlas changes to an image file");
- OPT ("disable-atlas:", "disable texture atlasing");
- OPT ("disable-texturing:", "disable texturing primitives");
- OPT ("disable-arbfp:", "disable use of ARBfp");
- OPT ("disable-glsl:", "disable use of GLSL");
- OPT ("disable-blending:", "disable use of blending");
- OPT ("show-source:", "show generated ARBfp/GLSL");
- OPT ("opengl:", "traces some select OpenGL calls");
- OPT ("offscreen:", "debug offscreen support");
+#define OPT(MASK_NAME, GROUP, NAME, NAME_FORMATTED, DESCRIPTION) \
+ g_printerr ("%28s %s\n", NAME ":", DESCRIPTION);
+#include "cogl-debug-options.h"
g_printerr ("\n%28s\n", "Special debug values:");
- OPT ("all:", "Enables all non-behavioural debug options");
- OPT ("verbose:", "Enables all non-behavioural debug options");
+ OPT (IGNORED, "ignored", "all", "ignored", \
+ "Enables all non-behavioural debug options");
+ OPT (IGNORED, "ignored", "verbose", "ignored", \
+ "Enables all non-behavioural debug options");
#undef OPT
exit (1);
}
diff --git a/cogl/cogl-debug.h b/cogl/cogl-debug.h
index 4adc23676..e9029afb2 100644
--- a/cogl/cogl-debug.h
+++ b/cogl/cogl-debug.h
@@ -24,6 +24,8 @@
#ifndef __COGL_DEBUG_H__
#define __COGL_DEBUG_H__
+#include "cogl-profile.h"
+
#include
G_BEGIN_DECLS
@@ -59,17 +61,17 @@ typedef enum {
#ifdef COGL_ENABLE_DEBUG
#ifdef __GNUC__
-#define COGL_NOTE(type,x,a...) G_STMT_START { \
- if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_##type)) { \
- g_message ("[" #type "] " G_STRLOC ": " x, ##a); \
+#define COGL_NOTE(type,x,a...) G_STMT_START { \
+ if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_##type)) { \
+ _cogl_profile_trace_message ("[" #type "] " G_STRLOC " & " x, ##a); \
} } G_STMT_END
#else
-#define COGL_NOTE(type,...) G_STMT_START { \
- if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_##type)) { \
- char *_fmt = g_strdup_printf (__VA_ARGS__); \
- g_message ("[" #type "] " G_STRLOC ": %s", _fmt); \
- g_free (_fmt); \
+#define COGL_NOTE(type,...) G_STMT_START { \
+ if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_##type)) { \
+ char *_fmt = g_strdup_printf (__VA_ARGS__); \
+ _cogl_profile_trace_message ("[" #type "] " G_STRLOC " & %s", _fmt);\
+ g_free (_fmt); \
} } G_STMT_END
#endif /* __GNUC__ */
diff --git a/cogl/cogl-profile.c b/cogl/cogl-profile.c
index e17acda38..c8d11dd76 100644
--- a/cogl/cogl-profile.c
+++ b/cogl/cogl-profile.c
@@ -2,16 +2,51 @@
#ifdef COGL_ENABLE_PROFILE
#include "cogl-profile.h"
+#include "cogl-debug.h"
#include
UProfContext *_cogl_uprof_context;
+static gboolean
+debug_option_getter (void *user_data)
+{
+ unsigned int shift = GPOINTER_TO_UINT (user_data);
+ return (cogl_debug_flags & (1 << shift)) ? TRUE : FALSE;
+}
+
+static void
+debug_option_setter (gboolean value, void *user_data)
+{
+ unsigned int shift = GPOINTER_TO_UINT (user_data);
+
+ if (value)
+ cogl_debug_flags |= (1 << shift);
+ else
+ cogl_debug_flags &= ~(1 << shift);
+}
static void __attribute__ ((constructor))
cogl_uprof_constructor (void)
{
_cogl_uprof_context = uprof_context_new ("Cogl");
+#define OPT(MASK_NAME, GROUP, NAME, NAME_FORMATTED, DESCRIPTION) \
+ G_STMT_START { \
+ int shift; \
+ for (shift = 0; (COGL_DEBUG_ ## MASK_NAME >> shift) != 1; shift++) \
+ ; \
+ uprof_context_add_boolean_option (_cogl_uprof_context, \
+ GROUP, \
+ NAME, \
+ NAME_FORMATTED, \
+ DESCRIPTION, \
+ debug_option_getter, \
+ debug_option_setter, \
+ GUINT_TO_POINTER (shift)); \
+ } G_STMT_END;
+
+#include "cogl-debug-options.h"
+#undef OPT
}
static void __attribute__ ((destructor))
@@ -27,4 +62,17 @@ cogl_uprof_destructor (void)
uprof_context_unref (_cogl_uprof_context);
}
+void
+_cogl_profile_trace_message (const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+ g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, ap);
+ va_end (ap);
+
+ if (_cogl_uprof_context)
+ uprof_context_vtrace_message (_cogl_uprof_context, format, ap);
+}
+
#endif
diff --git a/cogl/cogl-profile.h b/cogl/cogl-profile.h
index a918e44b8..5473dd67a 100644
--- a/cogl/cogl-profile.h
+++ b/cogl/cogl-profile.h
@@ -38,6 +38,9 @@ extern UProfContext *_cogl_uprof_context;
#define COGL_TIMER_START UPROF_TIMER_START
#define COGL_TIMER_STOP UPROF_TIMER_STOP
+void
+_cogl_profile_trace_message (const char *format, ...);
+
#else
#define COGL_STATIC_TIMER(A,B,C,D,E) extern void _cogl_dummy_decl (void)
@@ -47,6 +50,7 @@ extern UProfContext *_cogl_uprof_context;
#define COGL_TIMER_START(A,B) G_STMT_START{ (void)0; }G_STMT_END
#define COGL_TIMER_STOP(A,B) G_STMT_START{ (void)0; }G_STMT_END
+#define _cogl_profile_trace_message g_message
#endif
diff --git a/cogl/cogl-texture-3d.c b/cogl/cogl-texture-3d.c
index b684fb3c2..d6d705020 100644
--- a/cogl/cogl-texture-3d.c
+++ b/cogl/cogl-texture-3d.c
@@ -35,6 +35,7 @@
#include "cogl-context.h"
#include "cogl-handle.h"
#include "cogl-journal-private.h"
+#include "cogl-material-private.h"
#include "cogl-material-opengl-private.h"
#include