cogl-program: Add private functions to check if have each shader type
authorNeil Roberts <neil@linux.intel.com>
Thu, 2 Dec 2010 13:54:15 +0000 (13:54 +0000)
committerNeil Roberts <neil@linux.intel.com>
Mon, 13 Dec 2010 17:22:57 +0000 (17:22 +0000)
This adds two internal functions:

gboolean
_cogl_program_has_fragment_shader (CoglHandle handle);

gboolean
_cogl_program_has_vertex_shader (CoglHandle handle);

They just check whether any of the contained shaders are of that type.

clutter/cogl/cogl/cogl-program-private.h
clutter/cogl/cogl/cogl-program.c

index f2d2e90..0474744 100644 (file)
@@ -75,4 +75,10 @@ _cogl_program_flush_uniforms (CoglProgram *program,
 CoglShaderLanguage
 _cogl_program_get_language (CoglHandle handle);
 
+gboolean
+_cogl_program_has_fragment_shader (CoglHandle handle);
+
+gboolean
+_cogl_program_has_vertex_shader (CoglHandle handle);
+
 #endif /* __COGL_PROGRAM_H */
index 00d613c..a41c577 100644 (file)
@@ -681,3 +681,32 @@ _cogl_program_get_language (CoglHandle handle)
   else
     return COGL_SHADER_LANGUAGE_GLSL;
 }
+
+static gboolean
+_cogl_program_has_shader_type (CoglProgram *program,
+                               CoglShaderType type)
+{
+  GSList *l;
+
+  for (l = program->attached_shaders; l; l = l->next)
+    {
+      CoglShader *shader = l->data;
+
+      if (shader->type == type)
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
+gboolean
+_cogl_program_has_fragment_shader (CoglHandle handle)
+{
+  return _cogl_program_has_shader_type (handle, COGL_SHADER_TYPE_FRAGMENT);
+}
+
+gboolean
+_cogl_program_has_vertex_shader (CoglHandle handle)
+{
+  return _cogl_program_has_shader_type (handle, COGL_SHADER_TYPE_VERTEX);
+}