[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11790] branches/soc-2007-maike/source/ blender/src/glsl_node_util.c: Just some more code for nodes added and comments on how the recursive function for node shader code generation will be done

Miguel Torres Lima torreslima at gmail.com
Wed Aug 22 20:26:35 CEST 2007


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

Log Message:
-----------
Just some more code for nodes added and comments on how the recursive function for node shader code generation will be done

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/src/glsl_node_util.c

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 17:43:05 UTC (rev 11789)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-22 18:26:35 UTC (rev 11790)
@@ -102,7 +102,7 @@
 
 static char *glsl_construct_var_decl(char *name, short vartype)
 {
-  char *type = { "float ", "vec3 ", "vec3 " };
+  char *type[3] = { "float ", "vec3 ", "vec3 " };
 
   return glsl_string(3, 0, type[vartype], GFREE, name, 0, ";\n");
 }
@@ -1443,6 +1443,7 @@
   char *name = glsl_generate_node_name(node);
   char *varsdecl = glsl_generate_node_vars_decl(node, name);
   char *code = NULL;
+  bNode *fromnode = NULL;
   int i = 0;
 
   BLI_ghash_insert(read, node, name);
@@ -1453,6 +1454,48 @@
 
     if(sock->link){
       link = sock->link;
+      fromnode = link->fromnode;
+      
+      if(BLI_ghash_lookup(read, fromnode)){
+	if(BLI_ghash_lookup(done, fromnode)){
+	  /* assign node.input = linked_node.output */
+	  /* convert values if needed */
+	}
+	else{
+	  if(fromnode->type == SH_NODE_MATERIAL){
+	    /* handle node not complete exception */
+	    /* assign node.input = linked_node.output */
+	    /* convert values if needed */
+	  }
+	  else if(fromnode->type == SH_NODE_MATERIAL_EXT){
+	    /* handle node not complete exception */
+	    /* assign node.input = linked_node.output */
+	    /* convert values if needed */
+	  }
+	  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;
+	      }
+	  }
+	}
+      }
+      else{  /* call this function for linked node */
+	glsl_exec_nodetree(nodetree, fromnode, nodecode);
+
+	/* assign node.input = linked_node.output */
+	/* convert values if needed */
+      }
+      
+      fromnode = NULL;
     }
     else{
       stack = &sock->ns;
@@ -1463,7 +1506,8 @@
 	  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");
+	  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;
 	}
     }
@@ -1471,6 +1515,11 @@
     i++;
   }
 
+  /* node function call */
+  /* node function can be generated (materials, extended materials and textures) or read from file */
+
+  /* concatenate the generated code */
+
   BLI_ghash_insert(done, node, name);
 }
 





More information about the Bf-blender-cvs mailing list