summaryrefslogtreecommitdiff
path: root/gsk/gskshaderbuilder.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2016-07-03 22:38:27 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2016-10-18 11:49:07 +0100
commit8bb0c9a226baa66585a901c1f7c4e96b35cf5919 (patch)
tree5479a8b77afe531049efe30a4a8d2d730a40391b /gsk/gskshaderbuilder.c
parent28b490f14feaea74cbd406a053b30f62e5832005 (diff)
downloadgtk+-8bb0c9a226baa66585a901c1f7c4e96b35cf5919.tar.gz
gsk: Add debugging notes to ShaderBuilder
Print out the generated shader and the list of available uniforms and attributes.
Diffstat (limited to 'gsk/gskshaderbuilder.c')
-rw-r--r--gsk/gskshaderbuilder.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/gsk/gskshaderbuilder.c b/gsk/gskshaderbuilder.c
index 16a0e1e3c2..5142e43ae1 100644
--- a/gsk/gskshaderbuilder.c
+++ b/gsk/gskshaderbuilder.c
@@ -2,6 +2,8 @@
#include "gskshaderbuilderprivate.h"
+#include "gskdebugprivate.h"
+
#include <gdk/gdk.h>
#include <epoxy/gl.h>
@@ -194,6 +196,8 @@ gsk_shader_builder_compile_shader (GskShaderBuilder *builder,
return -1;
}
+ g_string_append_c (code, '\n');
+
if (!lookup_shader_code (code, builder->resource_base_path, shader_source, error))
{
g_string_free (code, TRUE);
@@ -206,6 +210,16 @@ gsk_shader_builder_compile_shader (GskShaderBuilder *builder,
glShaderSource (shader_id, 1, (const GLchar **) &source, NULL);
glCompileShader (shader_id);
+#ifdef G_ENABLE_DEBUG
+ if (GSK_DEBUG_CHECK (OPENGL))
+ {
+ g_print ("*** Compiling %s shader ***\n"
+ "%s\n",
+ shader_type == GL_VERTEX_SHADER ? "vertex" : "fragment",
+ source);
+ }
+#endif
+
g_free (source);
glGetShaderiv (shader_id, GL_COMPILE_STATUS, &status);
@@ -311,6 +325,30 @@ gsk_shader_builder_create_program (GskShaderBuilder *builder,
builder->program_id = program_id;
+#ifdef G_ENABLE_DEBUG
+ if (GSK_DEBUG_CHECK (OPENGL))
+ {
+ GHashTableIter iter;
+ gpointer name_p, location_p;
+
+ g_hash_table_iter_init (&iter, builder->uniform_locations);
+ while (g_hash_table_iter_next (&iter, &name_p, &location_p))
+ {
+ g_print ("Uniform '%s' - location: %d\n",
+ g_quark_to_string (GPOINTER_TO_INT (name_p)),
+ GPOINTER_TO_INT (location_p));
+ }
+
+ g_hash_table_iter_init (&iter, builder->attribute_locations);
+ while (g_hash_table_iter_next (&iter, &name_p, &location_p))
+ {
+ g_print ("Attribute '%s' - location: %d\n",
+ g_quark_to_string (GPOINTER_TO_INT (name_p)),
+ GPOINTER_TO_INT (location_p));
+ }
+ }
+#endif
+
out:
glDetachShader (program_id, vertex_id);
glDetachShader (program_id, fragment_id);