[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11789] branches/soc-2007-maike/source/ blender: Added function to call input/ output variable name creation function
Miguel Torres Lima
torreslima at gmail.com
Wed Aug 22 19:43:05 CEST 2007
Revision: 11789
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11789
Author: maike
Date: 2007-08-22 19:43:05 +0200 (Wed, 22 Aug 2007)
Log Message:
-----------
Added function to call input/output variable name creation function
Added convertion from float to string
Modified Paths:
--------------
branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h
branches/soc-2007-maike/source/blender/src/glsl_node_util.c
branches/soc-2007-maike/source/blender/src/glsl_util.c
Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h 2007-08-22 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_util.h 2007-08-22 17:43:05 UTC (rev 11789)
@@ -1,8 +1,9 @@
#define GLSL_PROGRAM_LOG 1
#define GLSL_SHADER_LOG 2
-#define GFREE 1
-#define GINT 2
+#define GFREE 1
+#define GINT 2
+#define GFLOAT 3
/* ------------------------------------------- */
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 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c 2007-08-22 17:43:05 UTC (rev 11789)
@@ -974,10 +974,150 @@
}
+static char *glsl_generate_node_vars_decl(bNode *node, char *name)
+{
+ char *vars = NULL;
+ switch(node->type)
+ {
+ case SH_NODE_MATERIAL:
+ vars = glsl_generate_node_material_vars(node, name); break;
+ case SH_NODE_RGB:
+ vars = glsl_generate_node_rgb_vars(node, name); break;
+ case SH_NODE_VALUE:
+ vars = glsl_generate_node_value_vars(node, name); break;
+ case SH_NODE_MIX_RGB:
+ vars = glsl_generate_node_rgbmix_vars(node, name); break;
+ case SH_NODE_VALTORGB:
+ vars = glsl_generate_node_colorband_vars(node, name); break;
+ case SH_NODE_RGBTOBW:
+ vars = glsl_generate_node_rgbtobw_vars(node, name); break;
+ case SH_NODE_TEXTURE:
+ vars = glsl_generate_node_texture_vars(node, name); break;
+ case SH_NODE_NORMAL:
+ vars = glsl_generate_node_normal_vars(node, name); break;
+ case SH_NODE_GEOMETRY:
+ vars = glsl_generate_node_geometry_vars(node, name); break;
+ case SH_NODE_MAPPING:
+ vars = glsl_generate_node_mapping_vars(node, name); break;
+ case SH_NODE_CURVE_VEC:
+ vars = glsl_generate_node_veccurves_vars(node, name); break;
+ case SH_NODE_CURVE_RGB:
+ vars = glsl_generate_node_rgbcurves_vars(node, name); break;
+ case SH_NODE_CAMERA:
+ vars = glsl_generate_node_camera_vars(node, name); break;
+ case SH_NODE_MATH:
+ vars = glsl_generate_node_math_vars(node, name); break;
+ case SH_NODE_VECT_MATH:
+ vars = glsl_generate_node_vectmath_vars(node, name); break;
+ case SH_NODE_SQUEEZE:
+ vars = glsl_generate_node_squeeze_vars(node, name); break;
+ case SH_NODE_MATERIAL_EXT:
+ vars = glsl_generate_node_materialext_vars(node, name); break;
+ case SH_NODE_INVERT:
+ vars = glsl_generate_node_invert_vars(node, name); break;
+ case SH_NODE_OUTPUT:
+ vars = glsl_generate_node_output_vars(node, name); break;
+ }
+ return vars;
+}
+static char *glsl_generate_node_in_vars(bNode *node, char *name, int nr)
+{
+ char *var = NULL;
+
+ switch(node->type)
+ {
+ case SH_NODE_MATERIAL:
+ var = glsl_node_material_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_MIX_RGB:
+ var = glsl_node_rgbmix_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_VALTORGB:
+ var = glsl_node_colorband_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_RGBTOBW:
+ var = glsl_node_rgbtobw_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_TEXTURE:
+ var = glsl_node_texture_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_NORMAL:
+ var = glsl_node_normal_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_MAPPING:
+ var = glsl_node_mapping_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_CURVE_VEC:
+ var = glsl_node_veccurves_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_CURVE_RGB:
+ var = glsl_node_rgbcurves_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_MATH:
+ var = glsl_node_math_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_VECT_MATH:
+ var = glsl_node_vectmath_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_SQUEEZE:
+ var = glsl_node_squeeze_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_MATERIAL_EXT:
+ var = glsl_node_materialext_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_INVERT:
+ var = glsl_node_invert_input_vars(name, nr, 0, 0); break;
+ case SH_NODE_OUTPUT:
+ var = glsl_node_output_input_vars(name, nr, 0, 0); break;
+ }
+
+ return var;
+}
+
+
+static char *glsl_generate_node_out_vars(bNode *node, char *name, int nr)
+{
+ char *var = NULL;
+
+ switch(node->type)
+ {
+ case SH_NODE_MATERIAL:
+ var = glsl_node_material_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_RGB:
+ var = glsl_node_rgb_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_VALUE:
+ var = glsl_node_value_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_MIX_RGB:
+ var = glsl_node_rgbmix_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_VALTORGB:
+ var = glsl_node_colorband_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_RGBTOBW:
+ var = glsl_node_rgbtobw_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_TEXTURE:
+ var = glsl_node_texture_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_NORMAL:
+ var = glsl_node_normal_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_GEOMETRY:
+ var = glsl_node_geometry_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_MAPPING:
+ var = glsl_node_mapping_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_CURVE_VEC:
+ var = glsl_node_veccurves_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_CURVE_RGB:
+ var = glsl_node_rgbcurves_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_CAMERA:
+ var = glsl_node_camera_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_MATH:
+ var = glsl_node_math_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_VECT_MATH:
+ var = glsl_node_vectmath_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_SQUEEZE:
+ var = glsl_node_squeeze_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_MATERIAL_EXT:
+ var = glsl_node_materialext_output_vars(name, nr, 0, 0); break;
+ case SH_NODE_INVERT:
+ var = glsl_node_invert_output_vars(name, nr, 0, 0); break;
+ }
+
+ return var;
+}
+
+
+
+
+
+
int glsl_shader_code(GLSL_MaterialTree tree, GLSL_Program program)
{
printf("\nGLSL Shader code writing...\n");
@@ -1301,7 +1441,7 @@
{
bNodeSocket *sock;
char *name = glsl_generate_node_name(node);
- char *varsdecl = NULL;
+ char *varsdecl = glsl_generate_node_vars_decl(node, name);
char *code = NULL;
int i = 0;
@@ -1316,6 +1456,16 @@
}
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;
+ }
}
i++;
@@ -1325,56 +1475,9 @@
}
-char *glsl_generate_node_vars(bNode *node, char *name)
-{
- char *vars = NULL;
- switch(node->type)
- {
- case SH_NODE_MATERIAL:
- vars = glsl_generate_node_material_vars(node, name); break;
- case SH_NODE_RGB:
- vars = glsl_generate_node_rgb_vars(node, name); break;
- case SH_NODE_VALUE:
- vars = glsl_generate_node_value_vars(node, name); break;
- case SH_NODE_MIX_RGB:
- vars = glsl_generate_node_rgbmix_vars(node, name); break;
- case SH_NODE_VALTORGB:
- vars = glsl_generate_node_colorband_vars(node, name); break;
- case SH_NODE_RGBTOBW:
- vars = glsl_generate_node_rgbtobw_vars(node, name); break;
- case SH_NODE_TEXTURE:
- vars = glsl_generate_node_texture_vars(node, name); break;
- case SH_NODE_NORMAL:
- vars = glsl_generate_node_normal_vars(node, name); break;
- case SH_NODE_GEOMETRY:
- vars = glsl_generate_node_geometry_vars(node, name); break;
- case SH_NODE_MAPPING:
- vars = glsl_generate_node_mapping_vars(node, name); break;
- case SH_NODE_CURVE_VEC:
- vars = glsl_generate_node_veccurves_vars(node, name); break;
- case SH_NODE_CURVE_RGB:
- vars = glsl_generate_node_rgbcurves_vars(node, name); break;
- case SH_NODE_CAMERA:
- vars = glsl_generate_node_camera_vars(node, name); break;
- case SH_NODE_MATH:
- vars = glsl_generate_node_math_vars(node, name); break;
- case SH_NODE_VECT_MATH:
- vars = glsl_generate_node_vectmath_vars(node, name); break;
- case SH_NODE_SQUEEZE:
- vars = glsl_generate_node_squeeze_vars(node, name); break;
- case SH_NODE_MATERIAL_EXT:
- vars = glsl_generate_node_materialext_vars(node, name); break;
- case SH_NODE_INVERT:
- vars = glsl_generate_node_invert_vars(node, name); break;
- case SH_NODE_OUTPUT:
- vars = glsl_generate_node_output_vars(node, name); break;
- }
- return vars;
-}
-
bNode *glsl_find_node_output(bNode *node)
{
while(node){
Modified: branches/soc-2007-maike/source/blender/src/glsl_util.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_util.c 2007-08-22 16:57:19 UTC (rev 11788)
+++ branches/soc-2007-maike/source/blender/src/glsl_util.c 2007-08-22 17:43:05 UTC (rev 11789)
@@ -130,6 +130,7 @@
va_list ap;
int i;
int tmp_int;
+ float tmp_float;
int type;
char *code = NULL;
@@ -160,6 +161,17 @@
if(tmp_str)
MEM_freeN(tmp_str);
}
+ else if(type == GFLOAT){
+ tmp_float = va_arg(ap, float);
+ tmp_str = MEM_mallocN(sizeof(char) * 9, "GLSL float");
+ sprintf(tmp_str, "%f", tmp_float);
+ tmp_str[8] = '\0';
+
+ code = glsl_concat_strings(code, tmp_str);
+
+ if(tmp_str)
+ MEM_freeN(tmp_str);
+ }
else{
/* error */
}
More information about the Bf-blender-cvs
mailing list