i did the coding tutorial from http://mediawiki.blender.org/index.php/BlenderDev/AddingANode
in source/blender/blenkernel/intern/node_shaders.c
(click to view source-snippet)
source/blender/blenkernel/intern/node_shaders.c
/* **************** Value Verblendet ******************** */
static bNodeSocketType sh_node_verblendet_in[]= {
{ SOCK_VALUE, 1, "Value 1", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
{ SOCK_VALUE, 1, "Value 2", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 2, "Color 1", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 2, "Color 2", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
{ SOCK_VALUE, 3, "Alpha 1", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ SOCK_VALUE, 3, "Alpha 2", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ -1, 0, "" }
};
static bNodeSocketType sh_node_verblendet_out[]= {
{ SOCK_VALUE, 0, "Value Out", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 1, "Color Out", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
{ SOCK_VALUE, 2, "Alpha Out", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ -1, 0, "" }
};
static void node_shader_exec_verblendet(void *data, bNode *node, bNodeStack **in,
bNodeStack **out)
{
/* stack order in: fac, col1, col2 */
/* stack order out: col */
float val1= in[0]->vec[0];
float val2= in[1]->vec[0];
float aval1= in[4]->vec[0];
float aval2= in[5]->vec[0];
float col[3];
/*float col[4], *nor;*/
float fac= in[1]->vec[0];
CLAMP(fac, 0.0f, 1.0f);
VECCOPY(col, in[1]->vec);
ramp_blend(node->custom1, col, col+1, col+2, fac, in[2]->vec);
VECCOPY(out[1]->vec, col);
switch(node->custom1){
case 0: // Middle
out[0]->vec[0] = (val1 + val2) / 2;
out[2]->vec[0] = (aval1 + aval2) / 2;
break;
case 1: // Add
out[0]->vec[0] = val1 + val2;
out[2]->vec[0] = aval1 + aval2;
break;
case 2: // Subtract
out[0]->vec[0] = val1 - val2;
out[2]->vec[0] = aval1 - aval2;
break;
case 3: // Multiply
out[0]->vec[0] = val1 * val2;
out[2]->vec[0] = aval1 * aval2;
break;
case 4: // Divide
if (val2 != 0) {
out[0]->vec[0] = val1 / val2;
}
if (aval2 != 0) {
out[2]->vec[0] = aval1 / aval2;
}
break;
}
}
in source/blender/src/draw_node.c
(click to view source-snippet)
source/blender/blenkernel/intern/node_shaders.c
static int node_shader_buts_verblendet(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
{
if(block) {
uiBut *bt;
/* blend type */
bt=uiDefButS(block, MENU, B_NODE_EXEC,
"Select Math%t|Middle %x0|Add %x1|Subtract %x2|Multiply %x3 |Divide %x4",
butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, &node->custom1, 0, 0, 0, 0, "");
uiButSetFunc(bt, node_but_title_cb, node, bt);
bNodeSocket *sock= node->outputs.first;
/* first socket stores value */
uiDefBut(block, LABEL, B_NOP, "0.8765",
butr->xmin, butr->ymin+64, butr->xmax-butr->xmin, 20,
sock->ns.vec, 0.0f, 0.0f, 0, 0, "Value");
}
return 20;
}
yeah, what i want is having a control-value of the resulting value, i just figured out how to add text in the node, so how can i make that text a variable?
|