[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11789] branches/soc-2007-maike/source/ blender: Added function to call input/ output variable name creation function

Miguel Torres Lima torreslima at gmail.com
Wed Aug 22 19:43:05 CEST 2007


Revision: 11789
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11789
Author:   maike
Date:     2007-08-22 19:43:05 +0200 (Wed, 22 Aug 2007)

Log Message:
-----------
Added function to call input/output variable name creation function
Added convertion from float to string

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h
    branches/soc-2007-maike/source/blender/src/glsl_node_util.c
    branches/soc-2007-maike/source/blender/src/glsl_util.c

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h	2007-08-22 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h	2007-08-22 17:43:05 UTC (rev 11789)
@@ -1,8 +1,9 @@
 #define GLSL_PROGRAM_LOG   1
 #define GLSL_SHADER_LOG    2
 
-#define GFREE 1
-#define GINT  2
+#define GFREE  1
+#define GINT   2
+#define GFLOAT 3
 
 /* ------------------------------------------- */
 

Modified: branches/soc-2007-maike/source/blender/src/glsl_node_util.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-22 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-22 17:43:05 UTC (rev 11789)
@@ -974,10 +974,150 @@
 }
 
 
+static char *glsl_generate_node_vars_decl(bNode *node, char *name)
+{
+  char *vars = NULL;
 
+  switch(node->type)
+    {
+    case SH_NODE_MATERIAL:
+      vars = glsl_generate_node_material_vars(node, name); break;
+    case SH_NODE_RGB:
+      vars = glsl_generate_node_rgb_vars(node, name); break;
+    case SH_NODE_VALUE:
+      vars = glsl_generate_node_value_vars(node, name); break;
+    case SH_NODE_MIX_RGB:
+      vars = glsl_generate_node_rgbmix_vars(node, name); break;
+    case SH_NODE_VALTORGB:
+      vars = glsl_generate_node_colorband_vars(node, name); break;
+    case SH_NODE_RGBTOBW:
+      vars = glsl_generate_node_rgbtobw_vars(node, name); break;
+    case SH_NODE_TEXTURE:
+      vars = glsl_generate_node_texture_vars(node, name); break;
+    case SH_NODE_NORMAL:
+      vars = glsl_generate_node_normal_vars(node, name); break;
+    case SH_NODE_GEOMETRY:
+      vars = glsl_generate_node_geometry_vars(node, name); break;
+    case SH_NODE_MAPPING:
+      vars = glsl_generate_node_mapping_vars(node, name); break;
+    case SH_NODE_CURVE_VEC:
+      vars = glsl_generate_node_veccurves_vars(node, name); break;
+    case SH_NODE_CURVE_RGB:
+      vars = glsl_generate_node_rgbcurves_vars(node, name); break;
+    case SH_NODE_CAMERA:
+      vars = glsl_generate_node_camera_vars(node, name); break;
+    case SH_NODE_MATH:
+      vars = glsl_generate_node_math_vars(node, name); break;
+    case SH_NODE_VECT_MATH:
+      vars = glsl_generate_node_vectmath_vars(node, name); break;
+    case SH_NODE_SQUEEZE:
+      vars = glsl_generate_node_squeeze_vars(node, name); break;
+    case SH_NODE_MATERIAL_EXT:
+      vars = glsl_generate_node_materialext_vars(node, name); break;
+    case SH_NODE_INVERT:
+      vars = glsl_generate_node_invert_vars(node, name); break;
+    case SH_NODE_OUTPUT:
+      vars = glsl_generate_node_output_vars(node, name); break;
+    }
 
+  return vars;
+}
 
 
+static char *glsl_generate_node_in_vars(bNode *node, char *name, int nr)
+{
+  char *var = NULL;
+
+  switch(node->type)
+    {
+    case SH_NODE_MATERIAL:
+      var = glsl_node_material_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_MIX_RGB:
+      var = glsl_node_rgbmix_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_VALTORGB:
+      var = glsl_node_colorband_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_RGBTOBW:
+      var = glsl_node_rgbtobw_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_TEXTURE:
+      var = glsl_node_texture_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_NORMAL:
+      var = glsl_node_normal_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_MAPPING:
+      var = glsl_node_mapping_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_CURVE_VEC:
+      var = glsl_node_veccurves_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_CURVE_RGB:
+      var = glsl_node_rgbcurves_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_MATH:
+      var = glsl_node_math_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_VECT_MATH:
+      var = glsl_node_vectmath_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_SQUEEZE:
+      var = glsl_node_squeeze_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_MATERIAL_EXT:
+      var = glsl_node_materialext_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_INVERT:
+      var = glsl_node_invert_input_vars(name, nr, 0, 0); break;
+    case SH_NODE_OUTPUT:
+      var = glsl_node_output_input_vars(name, nr, 0, 0); break;
+    }
+
+  return var;
+}
+
+
+static char *glsl_generate_node_out_vars(bNode *node, char *name, int nr)
+{
+  char *var = NULL;
+
+  switch(node->type)
+    {
+    case SH_NODE_MATERIAL:
+      var = glsl_node_material_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_RGB:
+      var = glsl_node_rgb_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_VALUE:
+      var = glsl_node_value_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_MIX_RGB:
+      var = glsl_node_rgbmix_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_VALTORGB:
+      var = glsl_node_colorband_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_RGBTOBW:
+      var = glsl_node_rgbtobw_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_TEXTURE:
+      var = glsl_node_texture_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_NORMAL:
+      var = glsl_node_normal_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_GEOMETRY:
+      var = glsl_node_geometry_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_MAPPING:
+      var = glsl_node_mapping_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_CURVE_VEC:
+      var = glsl_node_veccurves_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_CURVE_RGB:
+      var = glsl_node_rgbcurves_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_CAMERA:
+      var = glsl_node_camera_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_MATH:
+      var = glsl_node_math_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_VECT_MATH:
+      var = glsl_node_vectmath_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_SQUEEZE:
+      var = glsl_node_squeeze_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_MATERIAL_EXT:
+      var = glsl_node_materialext_output_vars(name, nr, 0, 0); break;
+    case SH_NODE_INVERT:
+      var = glsl_node_invert_output_vars(name, nr, 0, 0); break;
+    }
+  
+  return var;
+}
+
+
+
+
+
+
 int glsl_shader_code(GLSL_MaterialTree tree, GLSL_Program program)
 {
   printf("\nGLSL Shader code writing...\n");
@@ -1301,7 +1441,7 @@
 {
   bNodeSocket *sock;
   char *name = glsl_generate_node_name(node);
-  char *varsdecl = NULL;
+  char *varsdecl = glsl_generate_node_vars_decl(node, name);
   char *code = NULL;
   int i = 0;
 
@@ -1316,6 +1456,16 @@
     }
     else{
       stack = &sock->ns;
+
+      switch(stack->sockettype)
+	{
+	case SOCK_VALUE:
+	  code = glsl_string(5, GFREE, code, GFREE, glsl_generate_node_in_vars(node, name, i), 0, " = ", GFLOAT, stack->vec[0], 0, ";\n");
+	  break;
+	default:
+	  code = glsl_string(9, GFREE, code, GFREE, glsl_generate_node_in_vars(node, name, i), 0, " = vec3(", GFLOAT, stack->vec[0], 0, ",", GFLOAT, stack->vec[1], 0, ",", GFLOAT, stack->vec[2], 0, ");\n");
+	  break;
+	}
     }
 
     i++;
@@ -1325,56 +1475,9 @@
 }
 
 
-char *glsl_generate_node_vars(bNode *node, char *name)
-{
-  char *vars = NULL;
 
-  switch(node->type)
-    {
-    case SH_NODE_MATERIAL:
-      vars = glsl_generate_node_material_vars(node, name); break;
-    case SH_NODE_RGB:
-      vars = glsl_generate_node_rgb_vars(node, name); break;
-    case SH_NODE_VALUE:
-      vars = glsl_generate_node_value_vars(node, name); break;
-    case SH_NODE_MIX_RGB:
-      vars = glsl_generate_node_rgbmix_vars(node, name); break;
-    case SH_NODE_VALTORGB:
-      vars = glsl_generate_node_colorband_vars(node, name); break;
-    case SH_NODE_RGBTOBW:
-      vars = glsl_generate_node_rgbtobw_vars(node, name); break;
-    case SH_NODE_TEXTURE:
-      vars = glsl_generate_node_texture_vars(node, name); break;
-    case SH_NODE_NORMAL:
-      vars = glsl_generate_node_normal_vars(node, name); break;
-    case SH_NODE_GEOMETRY:
-      vars = glsl_generate_node_geometry_vars(node, name); break;
-    case SH_NODE_MAPPING:
-      vars = glsl_generate_node_mapping_vars(node, name); break;
-    case SH_NODE_CURVE_VEC:
-      vars = glsl_generate_node_veccurves_vars(node, name); break;
-    case SH_NODE_CURVE_RGB:
-      vars = glsl_generate_node_rgbcurves_vars(node, name); break;
-    case SH_NODE_CAMERA:
-      vars = glsl_generate_node_camera_vars(node, name); break;
-    case SH_NODE_MATH:
-      vars = glsl_generate_node_math_vars(node, name); break;
-    case SH_NODE_VECT_MATH:
-      vars = glsl_generate_node_vectmath_vars(node, name); break;
-    case SH_NODE_SQUEEZE:
-      vars = glsl_generate_node_squeeze_vars(node, name); break;
-    case SH_NODE_MATERIAL_EXT:
-      vars = glsl_generate_node_materialext_vars(node, name); break;
-    case SH_NODE_INVERT:
-      vars = glsl_generate_node_invert_vars(node, name); break;
-    case SH_NODE_OUTPUT:
-      vars = glsl_generate_node_output_vars(node, name); break;
-    }
 
-  return vars;
-}
 
-
 bNode *glsl_find_node_output(bNode *node)
 {
   while(node){

Modified: branches/soc-2007-maike/source/blender/src/glsl_util.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_util.c	2007-08-22 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/src/glsl_util.c	2007-08-22 17:43:05 UTC (rev 11789)
@@ -130,6 +130,7 @@
   va_list ap;
   int i;
   int tmp_int;
+  float tmp_float;
   int type;
   
   char *code = NULL;
@@ -160,6 +161,17 @@
       if(tmp_str)
 	MEM_freeN(tmp_str);
     }
+    else if(type == GFLOAT){
+      tmp_float = va_arg(ap, float);
+      tmp_str = MEM_mallocN(sizeof(char) * 9, "GLSL float");
+      sprintf(tmp_str, "%f", tmp_float);
+      tmp_str[8] = '\0';
+
+      code = glsl_concat_strings(code, tmp_str);
+
+      if(tmp_str)
+	MEM_freeN(tmp_str);
+    }
     else{
       /* error */
     }





More information about the Bf-blender-cvs mailing list