[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11884] branches/soc-2007-maike/source/ blender: Added colorband node
Miguel Torres Lima
torreslima at gmail.com
Wed Aug 29 18:42:08 CEST 2007
Revision: 11884
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11884
Author: maike
Date: 2007-08-29 18:42:08 +0200 (Wed, 29 Aug 2007)
Log Message:
-----------
Added colorband node
Altered some functions to be able to pass the tree between them in order to add colorband nodes to tree->cbs hash table
Colorband update not done as none of the nodes events.
Modified Paths:
--------------
branches/soc-2007-maike/source/blender/include/BIF_glsl_materialtree.h
branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.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
branches/soc-2007-maike/source/blender/src/glsl_uniforms.c
Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_materialtree.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_materialtree.h 2007-08-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_materialtree.h 2007-08-29 16:42:08 UTC (rev 11884)
@@ -4,6 +4,7 @@
#define GLSL_MAT 0
#define GLSL_NODES 1
+
/* ------------------------------------------------ */
struct Object;
@@ -21,6 +22,8 @@
struct GLSL_Program_ *shaded_program; /* pointer to GLSL_Program structure for shaded mode */
struct GHash *hash;
+ struct GHash *cbs;
+ struct GHash *textures;
struct Material *mat;
void (*add_material)(struct GLSL_MaterialTree_ * tree, struct Material *mat);
@@ -37,6 +40,7 @@
void (*free)(struct GLSL_MaterialTree_ * tree);
short type;
+ short flag;
short exec;
};
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-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_node_util.h 2007-08-29 16:42:08 UTC (rev 11884)
@@ -50,7 +50,7 @@
struct GLSL_NodeCode_ *glsl_generate_shader_code(struct GLSL_MaterialTree_ *tree);
struct GLSL_NodeCode_ *glsl_generate_shader_node_code(struct GLSL_MaterialTree_ *tree);
-void glsl_exec_nodetree(struct bNodeTree *nodetree, struct bNode *node, struct GLSL_NodeCode_ *nodecode);
+void glsl_exec_nodetree(struct GLSL_MaterialTree_ *tree, struct bNodeTree *nodetree, struct bNode *node, struct GLSL_NodeCode_ *nodecode);
char *glsl_get_shader_func(char *name);
char *glsl_get_func(char *file);
Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-08-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-08-29 16:42:08 UTC (rev 11884)
@@ -158,7 +158,8 @@
{
GLSL_ColorBand colorband = material->diff_ramp;
- colorband->add_tex(colorband, colorband->index);
+ if(colorband)
+ colorband->add_tex(colorband, colorband->index);
}
@@ -166,7 +167,8 @@
{
GLSL_ColorBand colorband = material->spec_ramp;
- colorband->add_tex(colorband, colorband->index);
+ if(colorband)
+ colorband->add_tex(colorband, colorband->index);
}
@@ -321,9 +323,15 @@
GHashIterator *iter = BLI_ghashIterator_new(treeHash);
int i;
+ if(glsl_defmaterial){
+ glsl_defmaterial->free(glsl_defmaterial);
+ glsl_defmaterial = NULL;
+ }
+
for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iter)){
GLSL_MaterialTree tree = BLI_ghashIterator_getValue(iter);
-
+ Material *mat = BLI_ghashIterator_getKey(iter);
+
if(tree)
tree->free(tree);
}
Modified: branches/soc-2007-maike/source/blender/src/glsl_materialtree.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_materialtree.c 2007-08-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/src/glsl_materialtree.c 2007-08-29 16:42:08 UTC (rev 11884)
@@ -57,7 +57,8 @@
BLI_ghash_insert(matHash, mat, material);
- material->init_cb(material, mat);
+ if(tree != glsl_defmaterial)
+ material->init_cb(material, mat);
}
tree->add_mat_child(tree, material, mat);
@@ -103,7 +104,7 @@
static int glsl_tree_program(GLSL_MaterialTree tree)
{
tree->shaded_program = glsl_init_program(tree);
-
+
if(tree->shaded_program != NULL){
glsl_update_all_light_uniforms(tree);
return 1;
@@ -143,8 +144,23 @@
BLI_ghashIterator_free(iter);
BLI_ghash_free(tree->hash, NULL, NULL);
+
+ iter = BLI_ghashIterator_new(tree->cbs);
+
+ for(i = 0; i < BLI_ghash_size(tree->cbs); i++, BLI_ghashIterator_step(iter)){
+ GLSL_ColorBand colorband = BLI_ghashIterator_getKey(iter);
+
+ colorband->free(colorband);
+ }
+
+ BLI_ghashIterator_free(iter);
+ BLI_ghash_free(tree->cbs, NULL, NULL);
+
+ BLI_ghash_free(tree->textures, NULL, NULL);
+
+
iter = BLI_ghashIterator_new(treeHash);
-
+
for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iter)){
if(BLI_ghashIterator_getValue(iter) == tree){
material = BLI_ghashIterator_getKey(iter);
@@ -154,6 +170,8 @@
BLI_ghashIterator_free(iter);
+ BLI_ghash_remove(treeHash, material, 0, 0);
+
if(tree->shaded_program)
tree->shaded_program->free(tree->shaded_program);
@@ -180,7 +198,9 @@
tree->type = type;
tree->mat = mat;
tree->hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
-
+ tree->cbs = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+ tree->textures = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+
tree->add_material = glsl_tree_add_mat;
tree->del_material = glsl_tree_del_mat;
@@ -200,6 +220,9 @@
printf("\n GLSL MaterialTree created.\n");
+ if(mat == &defmaterial)
+ glsl_defmaterial = tree;
+
if(!(tree->create_programs(tree))){
G.vd->drawtype = OB_SHADED;
glsl_change_state();
@@ -210,9 +233,6 @@
glsl_update_tree_world_uniforms(tree);
glsl_update_tree_texture_uniforms(tree);
glsl_update_all_light_uniforms(tree);
-
- if(mat == &defmaterial)
- glsl_defmaterial = tree;
}
@@ -248,9 +268,10 @@
{
GLSL_MaterialTree tree = (struct GLSL_MaterialTree_ *) BLI_ghash_lookup(treeHash, mat);
- if(mat == &defmaterial || !tree || !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-08-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c 2007-08-29 16:42:08 UTC (rev 11884)
@@ -20,6 +20,7 @@
#include "BIF_glsl_shader_util.h"
#include "BIF_glsl_material_node.h"
#include "BIF_glsl_node_util.h"
+#include "BIF_glsl_colorband.h"
#include "BIF_glsl_colorband_node.h"
#include "BIF_glsl_texture_node.h"
#include "BIF_glsl_texture.h"
@@ -1266,11 +1267,27 @@
}
-static char *glsl_generate_colorband_node_function(bNode *node, char *name)
+static char *glsl_generate_colorband_node_function(GLSL_MaterialTree tree, bNode *node, char *name)
{
char *code = NULL;
+ GLSL_ColorBand colorband = glsl_init_colorband(NULL, node->storage);
+ colorband->add_tex(colorband, colorband->index);
+
+ BLI_ghash_insert(tree->cbs, colorband, tree);
+
+ code = glsl_string(10, GFREE, glsl_generate_node_out_vars(node, name, 0),
+ 0, " = texture2D(colorband_tex, vec2(clamp(",
+ GFREE, glsl_generate_node_in_vars(node, name, 0),
+ 0, ", 0.000, 0.999),",
+ GINT, colorband->index,
+ 0, ".0));\n",
+ GFREE, glsl_generate_node_out_vars(node, name, 1),
+ 0, " = ",
+ GFREE, glsl_generate_node_out_vars(node, name, 0),
+ 0, ".a;\n");
+
return code;
}
@@ -1511,7 +1528,7 @@
}
-static char *glsl_generate_node_function(bNode *node, char *name)
+static char *glsl_generate_node_function(GLSL_MaterialTree tree, bNode *node, char *name)
{
char *code = NULL;
@@ -1530,7 +1547,7 @@
code = glsl_generate_rgbmix_node_function(node, name);
break;
case SH_NODE_VALTORGB:
- code = glsl_generate_colorband_node_function(node, name);
+ code = glsl_generate_colorband_node_function(tree, node, name);
break;
case SH_NODE_RGBTOBW:
code = glsl_generate_rgbtobw_node_function(node, name);
@@ -2122,7 +2139,7 @@
}
}
- glsl_exec_nodetree(nodetree, node, nodecode);
+ glsl_exec_nodetree(tree, nodetree, node, nodecode);
nodecode->main_code = glsl_string(2, GFREE, nodecode->uniform_code, GFREE, nodecode->main_code);
@@ -2256,7 +2273,7 @@
}
-void glsl_exec_nodetree(bNodeTree *nodetree, bNode *node, GLSL_NodeCode nodecode)
+void glsl_exec_nodetree(GLSL_MaterialTree tree, bNodeTree *nodetree, bNode *node, GLSL_NodeCode nodecode)
{
bNodeSocket *sock;
char *name = glsl_generate_node_name(node);
@@ -2329,7 +2346,7 @@
int socknr = glsl_find_output_sock_nr(fromnode, fromsock);
char *fromname = glsl_generate_node_name(fromnode);
- glsl_exec_nodetree(nodetree, fromnode, nodecode);
+ glsl_exec_nodetree(tree, nodetree, fromnode, nodecode);
code = glsl_convert_socket_type(node, code, sock->type, fromsock->type, tovar, fromvar);
}
@@ -2358,7 +2375,7 @@
i++;
}
- nodecode->main_code = glsl_string(3, GFREE, nodecode->main_code, GFREE, code, GFREE, glsl_generate_node_function(node, name));
+ nodecode->main_code = glsl_string(3, GFREE, nodecode->main_code, GFREE, code, GFREE, glsl_generate_node_function(tree, node, name));
nodecode->uniform_code = glsl_string(2, GFREE, nodecode->uniform_code, GFREE, varsdecl);
BLI_ghash_insert(done, node, name);
Modified: branches/soc-2007-maike/source/blender/src/glsl_uniforms.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_uniforms.c 2007-08-29 16:39:46 UTC (rev 11883)
+++ branches/soc-2007-maike/source/blender/src/glsl_uniforms.c 2007-08-29 16:42:08 UTC (rev 11884)
@@ -428,10 +428,11 @@
char *colorband_tex = "colorband_tex";
GLSL_Material material = BLI_ghash_lookup(matHash, mat);
+ GLSL_MaterialTree tree = BLI_ghash_lookup(treeHash, mat);
if(!material) return;
- if(mat->mode & MA_RAMP_COL || mat->mode & MA_RAMP_SPEC){
+ if(mat->mode & MA_RAMP_COL || mat->mode & MA_RAMP_SPEC || (tree && BLI_ghash_size(tree->cbs) > 0)){
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_1D, glsl_get_colorband_tex_id());
glUniform1i(glsl_uniform_location(program, colorband_tex), 1);
More information about the Bf-blender-cvs
mailing list