diff --git a/gst-libs/gst/gl/gstglsl.c b/gst-libs/gst/gl/gstglsl.c index daf4e35260..dca6edfebf 100644 --- a/gst-libs/gst/gl/gstglsl.c +++ b/gst-libs/gst/gl/gstglsl.c @@ -33,6 +33,21 @@ * @see_also: #GstGLSLStage, #GstGLShader */ +#define GST_CAT_DEFAULT gst_glsl_debug +GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); + +static void +_init_debug (void) +{ + static volatile gsize _init = 0; + + if (g_once_init_enter (&_init)) { + GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "glsl", 0, + "OpenGL Shading Language"); + g_once_init_leave (&_init, 1); + } +} + GQuark gst_glsl_error_quark (void) { @@ -255,6 +270,8 @@ gst_glsl_version_profile_from_string (const gchar * string, GstGLSLProfile profile = GST_GLSL_PROFILE_NONE; gint i; + _init_debug (); + if (!string) goto error; @@ -265,6 +282,7 @@ gst_glsl_version_profile_from_string (const gchar * string, if (str[0] == '#') { if (!(version_s = (gchar *) _check_valid_version_preprocessor_string (version_s))) { + GST_WARNING ("Invalid preprocesser directive detected: %s", version_s); g_free (str); goto error; } @@ -277,6 +295,8 @@ gst_glsl_version_profile_from_string (const gchar * string, i++; /* wrong version length */ if (i != 3) { + GST_WARNING ("version number has the wrong number of digits: %s", + version_s); g_free (str); goto error; } @@ -293,13 +313,24 @@ gst_glsl_version_profile_from_string (const gchar * string, g_free (str); /* check whether the parsed data is valid */ - if (!version) + if (!version) { + GST_WARNING ("Could not map the version number to a valid GLSL version:"); goto error; - if (!_is_valid_version_profile (version, profile)) + } + if (!_is_valid_version_profile (version, profile)) { + GST_WARNING ("Invalid version/profile combination specified: %s %s", + gst_glsl_version_to_string (version), + gst_glsl_profile_to_string (profile)); goto error; + } /* got a profile when none was expected */ - if (version <= GST_GLSL_VERSION_150 && profile != GST_GLSL_PROFILE_NONE) + if (version <= GST_GLSL_VERSION_150 && profile != GST_GLSL_PROFILE_NONE) { + GST_WARNING + ("Found a profile (%s) with a version (%s) that does not support " + "profiles", gst_glsl_version_to_string (version), + gst_glsl_profile_to_string (profile)); goto error; + } _fixup_version_profile (&version, &profile); @@ -329,6 +360,8 @@ _gst_glsl_shader_string_find_version (const gchar * str) gboolean newline = TRUE; gint i = 0; + _init_debug (); + /* search for #version while allowing for preceeding comments/whitespace as * permitted by the GLSL specification */ while (str && str[i] != '\0' && i < 1024) { @@ -366,8 +399,10 @@ _gst_glsl_shader_string_find_version (const gchar * str) } if (str[i] == '#') { - if (newline && _check_valid_version_preprocessor_string (&str[i])) + if (newline && _check_valid_version_preprocessor_string (&str[i])) { + GST_DEBUG ("found #version declaration at index %i", i); return &str[i]; + } break; } @@ -376,6 +411,8 @@ _gst_glsl_shader_string_find_version (const gchar * str) i++; } + GST_DEBUG ("no #version declaration found in the first 1K"); + return NULL; } @@ -410,6 +447,8 @@ gst_gl_version_to_glsl_version (GstGLAPI gl_api, gint maj, gint min) { g_return_val_if_fail (gl_api != GST_GL_API_NONE, 0); + _init_debug (); + if (gl_api & GST_GL_API_GLES2) { if (maj == 2 && min == 0) return 100; @@ -417,6 +456,7 @@ gst_gl_version_to_glsl_version (GstGLAPI gl_api, gint maj, gint min) if (maj == 3 && min >= 0 && min <= 2) return maj * 100 + min * 10; + GST_WARNING ("unknown GLES version"); return 0; } @@ -436,9 +476,11 @@ gst_gl_version_to_glsl_version (GstGLAPI gl_api, gint maj, gint min) if (maj == 2 && min == 0) return 110; + GST_WARNING ("unknown GL version"); return 0; } + GST_WARNING ("unknown GL API"); return 0; } @@ -737,6 +779,8 @@ _gst_glsl_mangle_shader (const gchar * str, guint shader_type, { gchar *tmp, *tmp2; + _init_debug (); + _mangle_version_profile_from_gl_api (gl_api, gl_major, gl_minor, version, profile); tmp = _mangle_texture_access (str, from, to, gl_api, gl_major, gl_minor);