[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11784] branches/soc-2007-maike/source/ blender: Added nodes variable names generation

Miguel Torres Lima torreslima at gmail.com
Wed Aug 22 18:13:18 CEST 2007


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

Log Message:
-----------
Added nodes variable names generation

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

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h	2007-08-22 10:07:42 UTC (rev 11783)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h	2007-08-22 16:13:18 UTC (rev 11784)
@@ -1,10 +1,16 @@
+#define GLSL_LINK_IN  0 
+#define GLSL_LINK_OUT 1
 
+
 struct GLSL_MaterialTree_;
 struct GLSL_Program_;
 struct GLSL_NodeCode_;
+struct bNode;
+struct bNodeTree;
 
 /* --------------------------------------------------------------------- */
 
+
 int glsl_shader_code(struct GLSL_MaterialTree_ *tree, struct GLSL_Program_ *program);
 
 #ifdef __APPLE__
@@ -18,7 +24,15 @@
 char *glsl_declare_lightstruct(int num);
 
 struct GLSL_NodeCode_ *glsl_generate_shader_code(struct GLSL_MaterialTree_ *tree);
+struct GLSL_NodeCode_ *glsl_generate_shader_node_code(struct GLSL_MaterialTree_ *tree);
 
+void glsl_exec_nodetree(struct bNodeTree *nodetree, struct bNode *node, struct GLSL_NodeCode_ *nodecode);
+
+
+struct bNode *glsl_find_node_output(struct bNode *node);
+struct bNode *glsl_find_node_material(struct bNode *node);
+struct bNode *glsl_find_node_materialext(struct bNode *node);
+
 char *glsl_get_shader_func(char *name);
 char *glsl_get_func(char *file);
 

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 10:07:42 UTC (rev 11783)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-22 16:13:18 UTC (rev 11784)
@@ -27,18 +27,486 @@
 #include "DNA_material_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_userdef_types.h"
+#include "DNA_node_types.h"
 
 #include "MEM_guardedalloc.h"
 
 #include "BKE_bad_level_calls.h"
 #include "BKE_global.h"
+#include "BKE_node.h"
 
 #include "../python/api2_2x/EXPP_interface.h"
 
 /* ------------------------------------------------------------------------------- */
 
+#define DOINVAR char *var = glsl_construct_var_name(name, vars[nr], GLSL_LINK_IN); \
+                if(decl) \
+                var = glsl_construct_var_decl(var, vartype);
+
+
+#define DOOUTVAR char *var = glsl_construct_var_name(name, vars[nr], GLSL_LINK_OUT); \
+                if(decl) \
+                var = glsl_construct_var_decl(var, vartype);
+
+/* ------------------------------------------------------------------------------- */
+
 char *install_dir = NULL;
+static GHash *read = NULL;
+static GHash *done = NULL;
 
+
+
+static void glsl_init_node_hash(void)
+{
+  read = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+  done = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+}
+
+
+static void glsl_free_node_hash(void)
+{
+  GHashIterator *iter = BLI_ghashIterator_new(read);
+  int i;
+
+  for(i = 0; i < BLI_ghash_size(read); i++, BLI_ghashIterator_step(iter)){
+    char *name = BLI_ghashIterator_getValue(iter);
+    MEM_freeN(name);
+  }
+
+  BLI_ghashIterator_free(iter);
+
+  
+  iter = BLI_ghashIterator_new(done);
+ 
+  for(i = 0; i < BLI_ghash_size(done); i++, BLI_ghashIterator_step(iter)){
+    char *name = BLI_ghashIterator_getValue(iter);
+    MEM_freeN(name);
+  }
+
+  BLI_ghashIterator_free(iter);
+
+
+  BLI_ghash_free(read, NULL, NULL);
+  BLI_ghash_free(done, NULL, NULL);
+}
+
+
+static char *glsl_construct_var_name(char *name, char *vars, short type)
+{
+  if(type == GLSL_LINK_IN)
+    return glsl_string(3, 0, name, 0, "_in_", 0, vars);
+ 
+  return glsl_string(3, 0, name, 0, "_out_", 0, vars);
+}
+
+
+static char *glsl_construct_var_decl(char *name, short vartype)
+{
+  char *type = { "float ", "vec3 ", "vec3 " };
+
+  return glsl_string(3, 0, type[vartype], GFREE, name, 0, ";\n");
+}
+
+
+static char *glsl_node_material_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[4] = { "color", "spec", "refl", "normal" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_material_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[3] = { "color", "alpha", "normal" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_rgb_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_value_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "value" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+static char *glsl_node_mixrgb_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[3] = { "fac", "color1", "color2" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_mixrgb_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+static char *glsl_node_colorband_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "fac" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_colorband_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "color", "alpha" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_rgbtobw_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_rgbtobw_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "value" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+static char *glsl_node_texture_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "vector" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_texture_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[3] = { "color", "alpha", "normal" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_geometry_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[8] = { "global", "local", "view", "orco", "uv", "normal", "vertcol", "fb" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_normal_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "normal" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_normal_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "normal" , "dot" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+static char *glsl_node_mapping_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "vector" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_mapping_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "vector" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_vectcurves_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "vector" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_vectcurves_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "vector" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_rgbcurves_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_rgbcurves_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_camera_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[3] = { "vector", "depth", "distance" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_math_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "value1" , "value2" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_math_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "value" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_vectmath_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "vector1", "vector2" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_vectmath_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "vector", "value" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_squeeze_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[3] = { "value", "width", "center" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_squeeze_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "value" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_materialext_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[12] = { "color", "spec", "refl", "normal" , "mirror", "ambcol", "amb", "emit", "spectra", "raymir", "alpha", "transl" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_materialext_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[6] = { "color", "alpha", "normal", "diff", "spec", "ao" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_invert_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "fac", "color" };
+  
+  DOINVAR
+
+  return var;
+}
+
+
+static char *glsl_node_invert_output_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[1] = { "color" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_node_output_input_vars(char *name, int nr, short vartype, short decl)
+{
+  char *vars[2] = { "color" , "alpha" };
+
+  DOOUTVAR
+
+  return var;  
+}
+
+
+static char *glsl_generate_node_name(bNode *node)
+{
+  char *name = NULL;
+
+  switch(node->type)
+    {
+    case SH_NODE_MATERIAL:
+      name = glsl_string(2, 0, "node_mat_", GINT, node->nr);
+      break;
+    case SH_NODE_RGB:
+      name = glsl_string(2, 0, "node_rgb_", GINT, node->nr);
+      break;
+    case SH_NODE_VALUE:
+      name = glsl_string(2, 0, "node_val_", GINT, node->nr);
+      break;
+    case SH_NODE_MIX_RGB:
+      name = glsl_string(2, 0, "node_mix_", GINT, node->nr);
+      break;
+    case SH_NODE_VALTORGB:
+      name = glsl_string(2, 0, "node_valtorgb_", GINT, node->nr);
+      break;
+    case SH_NODE_RGBTOBW:
+      name = glsl_string(2, 0, "node_rgbtobw_", GINT, node->nr);
+      break;
+    case SH_NODE_TEXTURE:
+      name = glsl_string(2, 0, "node_tex_", GINT, node->nr);
+      break;
+    case SH_NODE_NORMAL:
+      name = glsl_string(2, 0, "node_norm_", GINT, node->nr);
+      break;
+    case SH_NODE_GEOMETRY:

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list