Index: source/blender/blenkernel/intern/node.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/node.c,v retrieving revision 1.41 diff -u -r1.41 node.c --- source/blender/blenkernel/intern/node.c 31 Jul 2006 02:24:34 -0000 1.41 +++ source/blender/blenkernel/intern/node.c 31 Jul 2006 11:57:58 -0000 @@ -1,5 +1,5 @@ /** - * $Id: node.c,v 1.41 2006/07/31 02:24:34 broken Exp $ + * $Id: node.c,v 1.40 2006/07/09 11:54:41 ton Exp $ * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -767,6 +767,11 @@ node->storage= curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f); else if(type==SH_NODE_CURVE_RGB) node->storage= curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f); + else if(type==SH_NODE_TIME) { + node->custom1= G.scene->r.sfra; + node->custom2= G.scene->r.efra; + node->storage= curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + } } else if(ntree->type==NTREE_COMPOSIT) { if(type==CMP_NODE_VALTORGB) @@ -829,7 +834,7 @@ if(nnode->storage) { /* another candidate for handlerizing! */ if(ntree->type==NTREE_SHADER) { - if(node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB) + if(ELEM3(node->type, SH_NODE_TIME, SH_NODE_CURVE_VEC, SH_NODE_CURVE_RGB)) nnode->storage= curvemapping_copy(node->storage); else nnode->storage= MEM_dupallocN(nnode->storage); @@ -1023,7 +1028,7 @@ if(node->storage) { /* could be handlerized at some point, now only 1 exception still */ if(ntree->type==NTREE_SHADER) { - if(node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB) + if(ELEM3(node->type, SH_NODE_TIME, SH_NODE_CURVE_VEC, SH_NODE_CURVE_RGB)) curvemapping_free(node->storage); else MEM_freeN(node->storage); Index: source/blender/blenkernel/intern/node_shaders.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/node_shaders.c,v retrieving revision 1.8 diff -u -r1.8 node_shaders.c --- source/blender/blenkernel/intern/node_shaders.c 9 Jul 2006 11:54:41 -0000 1.8 +++ source/blender/blenkernel/intern/node_shaders.c 31 Jul 2006 11:58:01 -0000 @@ -480,6 +480,40 @@ }; +/* **************** CURVE Time ******************** */ + +/* custom1 = sfra, custom2 = efra */ +static bNodeSocketType sh_node_time_out[]= { + { SOCK_VALUE, 0, "Fac", 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}, + { -1, 0, "" } +}; + +static void node_shader_exec_time(void *data, bNode *node, bNodeStack **in, bNodeStack **out) +{ + /* stack order output: fac */ + float fac= 0.0f; + + if (data) { + ShadeInput *shi= ((ShaderCallData *)data)->shi; + + if(node->custom1 < node->custom2) + fac= (shi->cfra - node->custom1)/(float)(node->custom2-node->custom1); + + out[0]->vec[0]= curvemapping_evaluateF(node->storage, 0, fac); + } +} + +static bNodeType sh_node_time= { + /* type code */ SH_NODE_TIME, + /* name */ "Time", + /* width+range */ 140, 100, 320, + /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS, + /* input sock */ NULL, + /* output sock */ sh_node_time_out, + /* storage */ "CurveMapping", + /* execfunc */ node_shader_exec_time +}; + /* **************** CURVE VEC ******************** */ static bNodeSocketType sh_node_curve_vec_in[]= { { SOCK_VECTOR, 1, "Vector", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f}, @@ -715,6 +749,7 @@ &sh_node_mapping, &sh_node_curve_vec, &sh_node_curve_rgb, + &sh_node_time, NULL }; Index: source/blender/blenloader/intern/readfile.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenloader/intern/readfile.c,v retrieving revision 1.282 diff -u -r1.282 readfile.c --- source/blender/blenloader/intern/readfile.c 26 Jul 2006 22:29:22 -0000 1.282 +++ source/blender/blenloader/intern/readfile.c 31 Jul 2006 11:58:10 -0000 @@ -1292,7 +1292,7 @@ if(node->storage) { /* could be handlerized at some point */ - if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB)) + if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_TIME || node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB)) direct_link_curvemapping(fd, node->storage); else if(ntree->type==NTREE_COMPOSIT && (node->type==CMP_NODE_TIME || node->type==CMP_NODE_CURVE_VEC || node->type==CMP_NODE_CURVE_RGB)) direct_link_curvemapping(fd, node->storage); Index: source/blender/blenloader/intern/writefile.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenloader/intern/writefile.c,v retrieving revision 1.67 diff -u -r1.67 writefile.c --- source/blender/blenloader/intern/writefile.c 26 Jul 2006 22:29:22 -0000 1.67 +++ source/blender/blenloader/intern/writefile.c 31 Jul 2006 11:58:15 -0000 @@ -391,7 +391,7 @@ for(node= ntree->nodes.first; node; node= node->next) { if(node->storage) { /* could be handlerized at some point, now only 1 exception still */ - if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB)) + if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_TIME || node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB)) write_curvemapping(wd, node->storage); else if(ntree->type==NTREE_COMPOSIT && (node->type==CMP_NODE_TIME || node->type==CMP_NODE_CURVE_VEC || node->type==CMP_NODE_CURVE_RGB)) write_curvemapping(wd, node->storage); Index: source/blender/render/intern/source/rendercore.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/intern/source/rendercore.c,v retrieving revision 1.171 diff -u -r1.171 rendercore.c --- source/blender/render/intern/source/rendercore.c 9 Jul 2006 11:54:41 -0000 1.171 +++ source/blender/render/intern/source/rendercore.c 31 Jul 2006 11:58:22 -0000 @@ -2399,6 +2399,7 @@ shi.thread= shpi->thread; shi.do_preview= R.r.scemode & R_NODE_PREVIEW; + shi.cfra= R.r.cfra; /* current frame, to pass through for shader time node */ shi.lay= shpi->lay; /* mask is used to indicate amount of samples (ray shad/mir and AO) */ Index: source/blender/render/extern/include/RE_shader_ext.h =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/render/extern/include/RE_shader_ext.h,v retrieving revision 1.11 diff -u -r1.11 RE_shader_ext.h --- source/blender/render/extern/include/RE_shader_ext.h 9 Jul 2006 11:54:41 -0000 1.11 +++ source/blender/render/extern/include/RE_shader_ext.h 31 Jul 2006 11:58:22 -0000 @@ -107,6 +107,7 @@ int mask; int depth; /* 1 or larger on raytrace shading */ unsigned int lay; + int cfra; /* current frame, used for material time node */ } ShadeInput; Index: source/blender/src/drawnode.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/src/drawnode.c,v retrieving revision 1.34 diff -u -r1.34 drawnode.c --- source/blender/src/drawnode.c 31 Jul 2006 02:24:34 -0000 1.34 +++ source/blender/src/drawnode.c 31 Jul 2006 11:58:26 -0000 @@ -373,6 +373,28 @@ return 19; } +static int node_buts_time(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) +{ + if(block) { + short dx= (butr->xmax-butr->xmin)/2; + + uiDefBut(block, BUT_CURVE, B_NODE_EXEC+node->nr, "", + butr->xmin, butr->ymin+24, butr->xmax-butr->xmin, butr->ymax-butr->ymin-24, + node->storage, 0.0f, 1.0f, 0, 0, ""); + + uiBlockBeginAlign(block); + uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "Sta:", + butr->xmin, butr->ymin, dx, 19, + &node->custom1, 1.0, 20000.0, 0, 0, "Start frame"); + uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "End:", + butr->xmin+dx, butr->ymin, dx, 19, + &node->custom2, 1.0, 20000.0, 0, 0, "End frame"); + + } + + return node->width-NODE_DY; +} + /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */ @@ -592,6 +614,9 @@ case SH_NODE_CURVE_RGB: ntype->butfunc= node_buts_curvecol; break; + case SH_NODE_TIME: + ntype->butfunc= node_buts_time; + break; case SH_NODE_MAPPING: ntype->butfunc= node_shader_buts_mapping; break; @@ -935,28 +960,6 @@ return 80; } -static int node_composit_buts_time(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) -{ - if(block) { - short dx= (butr->xmax-butr->xmin)/2; - - uiDefBut(block, BUT_CURVE, B_NODE_EXEC+node->nr, "", - butr->xmin, butr->ymin+24, butr->xmax-butr->xmin, butr->ymax-butr->ymin-24, - node->storage, 0.0f, 1.0f, 0, 0, ""); - - uiBlockBeginAlign(block); - uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "Sta:", - butr->xmin, butr->ymin, dx, 19, - &node->custom1, 1.0, 20000.0, 0, 0, "Start frame"); - uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "End:", - butr->xmin+dx, butr->ymin, dx, 19, - &node->custom2, 1.0, 20000.0, 0, 0, "End frame"); - - } - - return node->width-NODE_DY; -} - static int node_composit_buts_alphaover(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) { if(block) { @@ -1045,7 +1048,7 @@ ntype->butfunc= node_composit_buts_map_value; break; case CMP_NODE_TIME: - ntype->butfunc= node_composit_buts_time; + ntype->butfunc= node_buts_time; break; case CMP_NODE_ALPHAOVER: ntype->butfunc= node_composit_buts_alphaover;