605dfb8fd0
Clutter is able to show debug messages written using the CLUTTER_NOTE() macro at runtime, either by using an environment variable: CLUTTER_DEBUG=... or by using a command line switch: --clutter-debug=... --clutter-no-debug=... Both are parsed during the initialization process by using the GOption API. COGL would benefit from having the same support. In order to do this, we need a cogl_get_option_group() function in COGL that sets up a GOptionGroup for COGL and adds a pre-parse hook that will check the COGL_DEBUG environment variable. The OptionGroup will also install two command line switches: --cogl-debug --cogl-no-debug With the same semantics of the Clutter ones. During Clutter initialization, the COGL option group will be attached to the GOptionContext used to parse the command line options passed to a Clutter application. Every debug message written using: COGL_NOTE (SECTION, "message format", arguments); Will then be printed only if SECTION was enabled at runtime. This whole machinery, like the equivalent one in Clutter, depends on a compile time switch, COGL_ENABLE_DEBUG, which is enabled at the same time as CLUTTER_ENABLE_DEBUG. Having two different symbols allows greater granularity.
46 lines
1.2 KiB
C
46 lines
1.2 KiB
C
#ifndef __COGL_DEBUG_H__
|
|
#define __COGL_DEBUG_H__
|
|
|
|
#include <glib.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef enum {
|
|
COGL_DEBUG_MISC = 1 << 0,
|
|
COGL_DEBUG_TEXTURE = 1 << 1,
|
|
COGL_DEBUG_MATERIAL = 1 << 2,
|
|
COGL_DEBUG_SHADER = 1 << 3,
|
|
COGL_DEBUG_OFFSCREEN = 1 << 4,
|
|
COGL_DEBUG_DRAW = 1 << 5
|
|
} CoglDebugFlags;
|
|
|
|
#ifdef COGL_ENABLE_DEBUG
|
|
|
|
#ifdef __GNUC__
|
|
#define COGL_NOTE(type,x,a...) G_STMT_START { \
|
|
if (cogl_debug_flags & COGL_DEBUG_##type) { \
|
|
g_message ("[" #type "] " G_STRLOC ": " x, ##a); \
|
|
} } G_STMT_END
|
|
|
|
#else
|
|
#define COGL_NOTE(type,...) G_STMT_START { \
|
|
if (cogl_debug_flags & COGL_DEBUG_##type) { \
|
|
gchar *_fmt = g_strdup_printf (__VA_ARGS__); \
|
|
g_message ("[" #type "] " G_STRLOC ": %s", _fmt); \
|
|
g_free (_fmt); \
|
|
} } G_STMT_END
|
|
|
|
#endif /* __GNUC__ */
|
|
|
|
#else /* !COGL_ENABLE_DEBUG */
|
|
|
|
#define COGL_NOTE(type,...)
|
|
|
|
#endif /* COGL_ENABLE_DEBUG */
|
|
|
|
extern guint cogl_debug_flags;
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __COGL_DEBUG_H__ */
|