Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2006-12-22 11:10:29 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2006-12-22 11:10:29 +0300
commit058ceb0b947fed204bad6f6df1463b6bb31c80ca (patch)
treecf70125ff9ba8bf45cf73fbfaf70840934d617f0 /source
parentd892aac06bfca5841897bf26c1885d0131d76d5c (diff)
Added Vertex Color material node, making render engine support for multiple
vertex color layers actually useful.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_node.h3
-rw-r--r--source/blender/blenkernel/intern/node.c2
-rw-r--r--source/blender/blenkernel/intern/node_shaders.c45
-rw-r--r--source/blender/makesdna/DNA_node_types.h4
-rw-r--r--source/blender/src/drawnode.c14
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;
}