diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2006-12-22 11:10:29 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2006-12-22 11:10:29 +0300 |
commit | 058ceb0b947fed204bad6f6df1463b6bb31c80ca (patch) | |
tree | cf70125ff9ba8bf45cf73fbfaf70840934d617f0 | |
parent | d892aac06bfca5841897bf26c1885d0131d76d5c (diff) |
Added Vertex Color material node, making render engine support for multiple
vertex color layers actually useful.
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node_shaders.c | 45 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_node_types.h | 4 | ||||
-rw-r--r-- | source/blender/src/drawnode.c | 14 |
5 files changed, 67 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index ab4d5b70e6e..c9a8ae86438 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -178,10 +178,11 @@ struct ShadeResult; #define SH_NODE_MAPPING 109 #define SH_NODE_CURVE_VEC 110 #define SH_NODE_CURVE_RGB 111 -#define SH_NODE_CAMERA 114 +#define SH_NODE_CAMERA 114 #define SH_NODE_MATH 115 #define SH_NODE_VECT_MATH 116 #define SH_NODE_SQUEEZE 117 +#define SH_NODE_VERTEX_COL 118 /* custom defines: options for Material node */ #define SH_NODE_MAT_DIFF 1 #define SH_NODE_MAT_SPEC 2 diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index d5fd43ac5ca..5437accd9fb 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -787,6 +787,8 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup) node->storage= curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f); else if(type==SH_NODE_GEOMETRY) node->storage= MEM_callocN(sizeof(NodeGeometry), "NodeGeometry"); + else if(type==SH_NODE_VERTEX_COL) + node->storage= MEM_callocN(sizeof(NodeVertexCol), "NodeVertexCol"); } else if(ntree->type==NTREE_COMPOSIT) { if(type==CMP_NODE_VALTORGB) diff --git a/source/blender/blenkernel/intern/node_shaders.c b/source/blender/blenkernel/intern/node_shaders.c index f332873de49..93bd1fc2352 100644 --- a/source/blender/blenkernel/intern/node_shaders.c +++ b/source/blender/blenkernel/intern/node_shaders.c @@ -1069,6 +1069,50 @@ static bNodeType sh_node_rgbtobw= { }; +/* **************** VERTEX COLOR ******************** */ + +/* output socket type definition */ +static bNodeSocketType sh_node_vertexcol_out[]= { + { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, + { -1, 0, "" } +}; + +/* node execute callback */ +static void node_shader_exec_vertexcol(void *data, bNode *node, bNodeStack **in, bNodeStack **out) +{ + if(data) { + ShadeInput *shi= ((ShaderCallData *)data)->shi; + ShadeInputCol *scol= &shi->col[0]; + NodeVertexCol *nvcol= (NodeVertexCol*)node->storage; + int i; + + if(nvcol->name[0]) { + for(i = 0; i < shi->totcol; i++) { + if(strcmp(shi->col[i].name, nvcol->name)==0) { + scol= &shi->col[i]; + break; + } + } + } + + VECCOPY(out[0]->vec, scol->col); + out[0]->vec[3]= 1.0f; + } +} + +/* node type definition */ +static bNodeType sh_node_vertexcol= { + /* type code */ SH_NODE_VERTEX_COL, + /* name */ "Vertex Color", + /* width+range */ 120, 80, 160, + /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS, + /* input sock */ NULL, + /* output sock */ sh_node_vertexcol_out, + /* storage */ "NodeVertexCol", + /* execfunc */ node_shader_exec_vertexcol + +}; + /* ****************** types array for all shaders ****************** */ @@ -1091,6 +1135,7 @@ bNodeType *node_all_shaders[]= { &sh_node_math, &sh_node_vect_math, &sh_node_squeeze, + &sh_node_vertexcol, NULL }; diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index e2eea44925d..905767d9f66 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -217,6 +217,10 @@ typedef struct NodeGeometry { char uvname[32]; } NodeGeometry; +typedef struct NodeVertexCol { + char name[32]; +} NodeVertexCol; + /* qdn: Defocus blur node */ typedef struct NodeDefocus { char bktype, rotation, preview, gamco; diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c index d0b47023a63..80cc90bcb87 100644 --- a/source/blender/src/drawnode.c +++ b/source/blender/src/drawnode.c @@ -610,6 +610,17 @@ static int node_shader_buts_geometry(uiBlock *block, bNodeTree *ntree, bNode *no return 20; } +static int node_shader_buts_vertexcol(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) +{ + if(block) { + NodeVertexCol *nvcol= (NodeVertexCol*)node->storage; + + uiDefBut(block, TEX, B_NODE_EXEC+node->nr, "Name:", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, nvcol->name, 0, 31, 0, 0, "Set name of vertex color layer to use, default is active vertex color layer"); + } + + return 20; +} + /* only once called */ static void node_shader_set_butfunc(bNodeType *ntype) @@ -657,6 +668,9 @@ static void node_shader_set_butfunc(bNodeType *ntype) case SH_NODE_GEOMETRY: ntype->butfunc= node_shader_buts_geometry; break; + case SH_NODE_VERTEX_COL: + ntype->butfunc= node_shader_buts_vertexcol; + break; default: ntype->butfunc= NULL; } |