[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