[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11826] branches/soc-2007-maike/source/ blender: Added Vector Math node
Miguel Torres Lima
torreslima at gmail.com
Sat Aug 25 18:49:10 CEST 2007
Revision: 11826
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11826
Author: maike
Date: 2007-08-25 18:49:10 +0200 (Sat, 25 Aug 2007)
Log Message:
-----------
Added Vector Math node
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-25 16:48:41 UTC (rev 11825)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h 2007-08-25 16:49:10 UTC (rev 11826)
@@ -19,6 +19,13 @@
#define GLSL_NODEMATH_RND 16384
+#define GLSL_NODEVMATH_ADD 1
+#define GLSL_NODEVMATH_SUB 2
+#define GLSL_NODEVMATH_AVG 4
+#define GLSL_NODEVMATH_DOT 8
+#define GLSL_NODEVMATH_CROSS 16
+#define GLSL_NODEVMATH_NORM 32
+
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-25 16:48:41 UTC (rev 11825)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c 2007-08-25 16:49:10 UTC (rev 11826)
@@ -1420,7 +1420,7 @@
bNodeStack *stack = &sock->ns;
bNodeStack *stack2 = &sock2->ns;
- if(!stack->hasinput || stack2->hasinput) in_nr = 1;
+ 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),
@@ -1435,8 +1435,36 @@
static char *glsl_generate_vectmath_node_function(bNode *node, char *name)
{
+ char *funcs[6] = { "add", "sub", "avg", "dot", "cross", "norm" };
char *code = NULL;
+ int blend_type = pow(2, node->custom1);
+ files->vectmath |= blend_type;
+
+ if(node->custom1 < 5){
+ code = glsl_string(11, 0, "node_vectmath_", 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, ", ", GFREE, glsl_generate_node_out_vars(node, name, 1),
+ 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(9, 0, "node_vectmath_", 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, ", ", GFREE, glsl_generate_node_out_vars(node, name, 1),
+ 0, ");\n");
+ }
+
return code;
}
@@ -1736,6 +1764,38 @@
return code;
}
+
+static char *glsl_vectmath_funcs(int func)
+{
+ char *code = NULL;
+
+ if(func & GLSL_NODEVMATH_ADD){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_add.gsl"));
+ }
+ if(func & GLSL_NODEVMATH_SUB){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_sub.gsl"));
+ }
+ if(func & GLSL_NODEVMATH_AVG){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_avg.gsl"));
+ }
+ if(func & GLSL_NODEVMATH_DOT){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_dot.gsl"));
+ }
+ if(func & GLSL_NODEVMATH_CROSS){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_cross.gsl"));
+ }
+ if(func & GLSL_NODEVMATH_NORM){
+ code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("node_vectmath_norm.gsl"));
+ }
+
+
+ if(!code)
+ return "";
+
+ return code;
+}
+
+
int glsl_shader_code(GLSL_MaterialTree tree, GLSL_Program program)
{
printf("\nGLSL Shader code writing...\n");
@@ -2015,6 +2075,7 @@
char *normal_funcs = NULL;
char *mapping_funcs = NULL;
char *math_funcs = NULL;
+ char *vectmath_funcs = NULL;
char *tex_funcs = NULL;
char *tex_blend_funcs = NULL;
char *tex_blendval_funcs = NULL;
@@ -2130,6 +2191,17 @@
GFREE, nodecode->node_code);
}
+ if(!(vectmath_funcs = glsl_vectmath_funcs(files->vectmath))){
+ MEM_freeN(nodecode->uniform_code);
+ MEM_freeN(nodecode->node_code);
+ MEM_freeN(nodecode);
+ return NULL;
+ }
+ else if(strcmp(vectmath_funcs, "") != 0) {
+ nodecode->node_code = glsl_string(2,
+ GFREE, vectmath_funcs,
+ GFREE, nodecode->node_code);
+ }
glsl_free_node_hash();
glsl_free_nodefiles();
More information about the Bf-blender-cvs
mailing list