[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11817] branches/soc-2007-maike/source/ blender: Math node added but the results aren't right

Miguel Torres Lima torreslima at gmail.com
Fri Aug 24 20:34:32 CEST 2007


Revision: 11817
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11817
Author:   maike
Date:     2007-08-24 20:34:32 +0200 (Fri, 24 Aug 2007)

Log Message:
-----------
Math node added but the results aren't right

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-24 18:33:38 UTC (rev 11816)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h	2007-08-24 18:34:32 UTC (rev 11817)
@@ -2,6 +2,23 @@
 #define GLSL_LINK_OUT 1
 
 
+#define GLSL_NODEMATH_ADD         1
+#define GLSL_NODEMATH_SUB         2
+#define GLSL_NODEMATH_MUL         4
+#define GLSL_NODEMATH_DIV         8
+#define GLSL_NODEMATH_SIN        16
+#define GLSL_NODEMATH_COS        32
+#define GLSL_NODEMATH_TAN        64
+#define GLSL_NODEMATH_ASIN      128
+#define GLSL_NODEMATH_ACOS      256
+#define GLSL_NODEMATH_ATAN      512
+#define GLSL_NODEMATH_POW      1024
+#define GLSL_NODEMATH_LOG      2048
+#define GLSL_NODEMATH_MIN      4096
+#define GLSL_NODEMATH_MAX      8192
+#define GLSL_NODEMATH_RND     16384
+
+
 struct GLSL_MaterialTree_;
 struct GLSL_Program_;
 struct GLSL_NodeCode_;

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-24 18:33:38 UTC (rev 11816)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-24 18:34:32 UTC (rev 11817)
@@ -1399,8 +1399,36 @@
 
 static char *glsl_generate_math_node_function(bNode *node, char *name)
 {
+  char *funcs[15] = { "add", "sub", "mul", "div", "sin", "cos", "tan", "asin", "acos", "atan", "pow", "log", "min", "max", "round" };
   char *code = NULL;
+  int blen_type = pow(2, node->custom1);
 
+
+  files->math |= blen_type;
+  
+  if(node->custom1 < 4 || (node->custom1 > 9 && node->custom1 < 14)){
+    code = glsl_string(9, 0, "node_math_", 0, funcs[node->custom1], 
+		       0, "(",  GFREE, glsl_generate_node_in_vars(node, name, 0), 
+		       0, ", ", GFREE, glsl_generate_node_in_vars(node, name, 1),
+		       0, ", ", GFREE, glsl_generate_node_out_vars(node, name, 0),
+		       0, ");\n");
+  }
+  else{
+    int in_nr = 0;
+    bNodeSocket *sock = node->inputs.first;
+    bNodeSocket *sock2 = sock->next;
+    bNodeStack *stack = &sock->ns;
+    bNodeStack *stack2 = &sock2->ns;
+    
+    if(!stack->hasinput || stack2->hasinput) in_nr = 1;
+
+    code = glsl_string(7, 0, "node_math_", 0, funcs[node->custom1],
+		       0, "(", GFREE, glsl_generate_node_in_vars(node, name, in_nr),
+		       0, ", ", GFREE, glsl_generate_node_out_vars(node, name, 0),
+		       0, ");\n");
+
+  }
+
   return code;
 }
 
@@ -1652,6 +1680,62 @@
 }
 
 
+static char *glsl_math_funcs(int func)
+{
+  char *code = NULL;
+
+  if(func & GLSL_NODEMATH_ADD){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_add.gsl"));
+  }
+  if(func & GLSL_NODEMATH_SUB){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_sub.gsl"));
+  }
+  if(func & GLSL_NODEMATH_MUL){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_mul.gsl"));
+  }
+  if(func & GLSL_NODEMATH_DIV){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_div.gsl"));
+  }
+  if(func & GLSL_NODEMATH_SIN){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_sin.gsl"));
+  }
+  if(func & GLSL_NODEMATH_COS){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_cos.gsl"));
+  }
+  if(func & GLSL_NODEMATH_TAN){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_tan.gsl"));
+  }
+  if(func & GLSL_NODEMATH_ASIN){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_asin.gsl"));
+  }
+  if(func & GLSL_NODEMATH_ACOS){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_acos.gsl"));
+  }
+  if(func & GLSL_NODEMATH_ATAN){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_atan.gsl"));
+  }
+  if(func & GLSL_NODEMATH_POW){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_pow.gsl"));
+  }
+  if(func & GLSL_NODEMATH_LOG){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_log.gsl"));
+  }
+  if(func & GLSL_NODEMATH_MIN){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_min.gsl"));
+  }
+  if(func & GLSL_NODEMATH_MAX){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_max.gsl"));
+  }
+  if(func & GLSL_NODEMATH_RND){
+    code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_math_round.gsl"));
+  }
+
+  if(!code)
+    return "";
+
+  return code;
+}
+
 int glsl_shader_code(GLSL_MaterialTree tree, GLSL_Program program)
 {
   printf("\nGLSL Shader code writing...\n");
@@ -1930,6 +2014,7 @@
   char *rgbtobw_funcs = NULL;
   char *normal_funcs = NULL;
   char *mapping_funcs = NULL;
+  char *math_funcs = NULL;
   char *tex_funcs = NULL;
   char *tex_blend_funcs = NULL;
   char *tex_blendval_funcs = NULL;
@@ -2031,6 +2116,21 @@
     else
       nodecode->node_code = glsl_string(2, GFREE, mapping_funcs, GFREE, nodecode->node_code);
   }
+
+
+  if(!(math_funcs = glsl_math_funcs(files->math))){
+    MEM_freeN(nodecode->uniform_code);
+    MEM_freeN(nodecode->node_code);
+    MEM_freeN(nodecode);
+    return NULL;
+  }
+  else if(strcmp(math_funcs, "") != 0) {
+    nodecode->node_code = glsl_string(2,
+					  GFREE, math_funcs,
+					  GFREE, nodecode->node_code);
+  }
+
+
   glsl_free_node_hash();
   glsl_free_nodefiles();
 





More information about the Bf-blender-cvs mailing list