[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11930] branches/soc-2007-maike/source/ blender: Added extended material node (not working)
Miguel Torres Lima
torreslima at gmail.com
Mon Sep 3 18:51:04 CEST 2007
Revision: 11930
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11930
Author: maike
Date: 2007-09-03 18:51:04 +0200 (Mon, 03 Sep 2007)
Log Message:
-----------
Added extended material node (not working)
Added structural things for texface implementation as a variable for texture id in GLSL_Material structure
Modified Paths:
--------------
branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
branches/soc-2007-maike/source/blender/src/glsl_material.c
branches/soc-2007-maike/source/blender/src/glsl_materialtree.c
branches/soc-2007-maike/source/blender/src/glsl_node_util.c
Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h 2007-09-03 16:00:12 UTC (rev 11929)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h 2007-09-03 16:51:04 UTC (rev 11930)
@@ -19,6 +19,12 @@
short specular_shader;
short texface;
+#ifdef __APPLE__
+ unsigned long texf;
+#else
+ unsigned int texf;
+#endif
+
void (*unlink)(struct GLSL_Material_ * material, struct Material *mat);
void (*free)(struct GLSL_Material_ * material, struct Material *mat);
Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-09-03 16:00:12 UTC (rev 11929)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-09-03 16:51:04 UTC (rev 11930)
@@ -302,6 +302,7 @@
break;
case B_MAT_TEXFACE:
printf("\nGLSL Material texface toggle changed.\n");
+ material->redo_prog(material);
break;
case B_MAT_CB_REWR:
printf("\nGLSL Colorband changed\n");
Modified: branches/soc-2007-maike/source/blender/src/glsl_materialtree.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_materialtree.c 2007-09-03 16:00:12 UTC (rev 11929)
+++ branches/soc-2007-maike/source/blender/src/glsl_materialtree.c 2007-09-03 16:51:04 UTC (rev 11930)
@@ -85,7 +85,8 @@
static void glsl_tree_del_mat_child(GLSL_MaterialTree tree, GLSL_Material material, Material *mat)
{
BLI_ghash_remove(tree->hash, mat, 0, 0);
- material->del_parent(material, tree);
+ if(mat && material)
+ material->del_parent(material, tree);
}
@@ -269,7 +270,6 @@
GLSL_MaterialTree tree = (struct GLSL_MaterialTree_ *) BLI_ghash_lookup(treeHash, mat);
if(mat == &defmaterial || !tree || !mat){
- printf("\n defmaterial prog: %d\n", glsl_defmaterial->shaded_program->program);
return glsl_defmaterial->shaded_program;
}
return((struct GLSL_Program_ *) tree->shaded_program);
Modified: branches/soc-2007-maike/source/blender/src/glsl_node_util.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_node_util.c 2007-09-03 16:00:12 UTC (rev 11929)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c 2007-09-03 16:51:04 UTC (rev 11930)
@@ -1044,7 +1044,7 @@
switch(node->type)
{
case SH_NODE_MATERIAL:
- vars = glsl_generate_node_material_vars(node, name); break;
+ vars = glsl_generate_node_materialext_vars(node, name); break;
case SH_NODE_RGB:
vars = glsl_generate_node_rgb_vars(node, name); break;
case SH_NODE_VALUE:
@@ -1094,7 +1094,7 @@
switch(node->type)
{
case SH_NODE_MATERIAL:
- var = glsl_node_material_input_vars(name, nr, 0, 0); break;
+ var = glsl_node_materialext_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:
@@ -1136,7 +1136,7 @@
switch(node->type)
{
case SH_NODE_MATERIAL:
- var = glsl_node_material_output_vars(name, nr, 0, 0); break;
+ var = glsl_node_materialext_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:
@@ -1199,10 +1199,84 @@
}
-static char *glsl_generate_material_node_function(bNode *node, char *name)
+static char *glsl_generate_material_node_function(bNode *node, char *name, int num)
{
char *code = NULL;
+ char *color = glsl_generate_node_out_vars(node, name, 0);
+ char *alpha = glsl_generate_node_out_vars(node, name, 1);
+ char *normal = glsl_generate_node_out_vars(node, name, 2);
+ char *norm = glsl_generate_node_in_vars(node, name, 3);
+ char *diff_color = glsl_generate_node_out_vars(node, name, 3);
+ char *spec_color = glsl_generate_node_out_vars(node, name, 4);
+ char *ao = glsl_generate_node_out_vars(node, name, 5);
+
+ char *diff1 = glsl_generate_node_in_vars(node, name, 2);
+ char *diff2 = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_diff2");
+ char *diff3 = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_diff3");
+ char *spec1 = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_spec1");
+ char *spec2 = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_spec2");
+ char *spec3 = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_spec3");
+
+ char *mirror, *ambcolor, *ambfac, *spectra, *raymir, *transl;
+
+ char *emit = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_emit");
+ char *hard = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_hard");
+ char *tanv = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_tanv");
+ char *shless = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_shless");
+
+ char *assign_diff = glsl_string(4, 0, diff_color, 0, " = ", GFREE, glsl_generate_node_in_vars(node, name, 0), 0, ";\n");
+ char *assign_spec = glsl_string(4, 0, spec_color, 0, " = ", GFREE, glsl_generate_node_in_vars(node, name, 1), 0, ";\n");
+ char *assign_alpha = glsl_string(4, 0, alpha, 0, " = ", GFREE, glsl_generate_node_in_vars(node, name, 9), 0, ";\n");
+ char *assign_normal = glsl_string(2, 0, norm, 0, " = normal;\n");
+
+ if(node->type == SH_NODE_MATERIAL_EXT){
+ mirror = glsl_generate_node_in_vars(node, name, 4);
+ ambcolor = glsl_generate_node_in_vars(node, name, 5);
+ ambfac = glsl_generate_node_in_vars(node, name, 6);
+ spectra = glsl_generate_node_in_vars(node, name, 7);
+ raymir = glsl_generate_node_in_vars(node, name, 8);
+ transl = glsl_generate_node_in_vars(node, name, 10);
+ }
+ else{
+ mirror = "vec4(0.0, 0.0, 0.0, 0.0)";
+ ambcolor = "amb_color";
+ ambfac = glsl_string(3, 0, "u_mat_", GINT, num, 0, "_amb_fac");
+ spectra = "0.0";
+ raymir = "0.0";
+ transl = "0.0";
+ }
+
+ code = glsl_string(53,
+ GFREE, assign_diff,
+ GFREE, assign_spec,
+ GFREE, assign_alpha,
+ GFREE, assign_normal,
+ 0, "material_", GINT, num, 0, "(",
+ GFREE, color, 0, ", ",
+ GFREE, alpha, 0, ", ",
+ GFREE, normal, 0, ", ",
+ GFREE, norm, 0, ", ",
+ GFREE, diff_color, 0, ", ",
+ GFREE, spec_color, 0, ", ",
+ GFREE, ao, 0, ", ",
+ GFREE, diff1, 0, ", ",
+ GFREE, diff2, 0, ", ",
+ GFREE, diff3, 0, ", ",
+ GFREE, spec1, 0, ", ",
+ GFREE, spec2, 0, ", ",
+ GFREE, spec3, 0, ", ",
+ GFREE, mirror, 0, ", ",
+ GFREE, ambcolor, 0, ", ",
+ GFREE, ambfac, 0, ", ",
+ GFREE, spectra, 0, ", ",
+ GFREE, raymir, 0, ", ",
+ GFREE, transl, 0, ", ",
+ GFREE, emit, 0, ", ",
+ GFREE, hard, 0, ", ",
+ GFREE, tanv, 0, ", ",
+ GFREE, shless, 0, ");\n");
+
return code;
}
@@ -1523,14 +1597,14 @@
}
-static char *glsl_generate_node_function(GLSL_MaterialTree tree, bNode *node, char *name)
+static char *glsl_generate_node_function(GLSL_MaterialTree tree, bNode *node, char *name, int num)
{
char *code = NULL;
switch(node->type)
{
case SH_NODE_MATERIAL:
- code = glsl_generate_material_node_function(node, name);
+ code = glsl_generate_material_node_function(node, name, num);
break;
case SH_NODE_RGB:
code = glsl_generate_rgb_node_function(node, name);
@@ -1578,7 +1652,7 @@
code = glsl_generate_squeeze_node_function(node, name);
break;
case SH_NODE_MATERIAL_EXT:
- code = glsl_generate_materialext_node_function(node, name);
+ code = glsl_generate_material_node_function(node, name, num);
break;
case SH_NODE_INVERT:
code = glsl_generate_invert_node_function(node, name);
@@ -1992,7 +2066,7 @@
" float tanv = u_mat_0_tanv;"
" float shless = u_mat_0_shless;"
- " material_0(color, alpha, norm, diff_color, spec_color, ao, diff1, diff2, diff3, spec1, spec2, spec3, vec4(0.0, 0.0, 0.0, 0.0), amb_color, amb_fac, 0.0, 0.0, 0.0, emit, hard, tanv, shless);"
+ " material_0(color, alpha, norm, vec3(0.0, 0.0, 0.0), diff_color, spec_color, ao, diff1, diff2, diff3, spec1, spec2, spec3, vec4(0.0, 0.0, 0.0, 0.0), amb_color, amb_fac, 0.0, 0.0, 0.0, emit, hard, tanv, shless);"
" gl_FragColor = color;"
"}\n"
@@ -2318,6 +2392,7 @@
char *varsdecl = glsl_generate_node_vars_decl(node, name);
char *code = NULL;
int i = 0;
+ int num = BLI_ghash_size(tree->hash);
BLI_ghash_insert(read, node, name);
@@ -2413,12 +2488,11 @@
i++;
}
- nodecode->main_code = glsl_string(3, GFREE, nodecode->main_code, GFREE, code, GFREE, glsl_generate_node_function(tree, node, name));
+ nodecode->main_code = glsl_string(3, GFREE, nodecode->main_code, GFREE, code, GFREE, glsl_generate_node_function(tree, node, name, num));
nodecode->var_code = glsl_string(2, GFREE, nodecode->var_code, GFREE, varsdecl);
if((node->type == SH_NODE_MATERIAL || node->type == SH_NODE_MATERIAL_EXT) && node->id){
- int num = BLI_ghash_size(tree->hash);
GLSL_NodeCode material_code = NULL;
BLI_ghash_insert(tree->hash, (Material *) node->id, tree);
More information about the Bf-blender-cvs
mailing list