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
diff options
context:
space:
mode:
authorMiika Hamalainen <blender@miikah.org>2011-10-22 20:43:23 +0400
committerMiika Hamalainen <blender@miikah.org>2011-10-22 20:43:23 +0400
commitd4541fd891a246f851f647c3259fc26648fc926d (patch)
tree5397c3a85424b8c08854fa4f9711db4344a790b7 /source/blender/nodes
parent30cba27987362054d16b10e73ddf2601af93be68 (diff)
parent952560dc028516d60a5318eadbcbd5f2c0668335 (diff)
Merge with trunk r41197
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/composite/node_composite_tree.c27
-rw-r--r--source/blender/nodes/composite/node_composite_util.c4
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_directionalblur.c5
-rw-r--r--source/blender/nodes/intern/node_common.c10
-rw-r--r--source/blender/nodes/intern/node_exec.c4
-rw-r--r--source/blender/nodes/intern/node_socket.c47
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c7
-rw-r--r--source/blender/nodes/texture/node_texture_tree.c2
8 files changed, 76 insertions, 30 deletions
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c
index 5c58070be9d..6f4939ecbdd 100644
--- a/source/blender/nodes/composite/node_composite_tree.c
+++ b/source/blender/nodes/composite/node_composite_tree.c
@@ -183,6 +183,11 @@ static void local_merge(bNodeTree *localtree, bNodeTree *ntree)
}
}
+static void update(bNodeTree *ntree)
+{
+ ntreeSetOutput(ntree);
+}
+
bNodeTreeType ntreeType_Composite = {
/* type */ NTREE_COMPOSIT,
/* idname */ "NTCompositing Nodetree",
@@ -195,7 +200,7 @@ bNodeTreeType ntreeType_Composite = {
/* localize */ localize,
/* local_sync */ local_sync,
/* local_merge */ local_merge,
- /* update */ NULL,
+ /* update */ update,
/* update_node */ update_node
};
@@ -716,9 +721,9 @@ void ntreeCompositTagRender(Scene *curscene)
for(node= sce->nodetree->nodes.first; node; node= node->next) {
if(node->id==(ID *)curscene || node->type==CMP_NODE_COMPOSITE)
- NodeTagChanged(sce->nodetree, node);
+ nodeUpdate(sce->nodetree, node);
else if(node->type==CMP_NODE_TEXTURE) /* uses scene sizex/sizey */
- NodeTagChanged(sce->nodetree, node);
+ nodeUpdate(sce->nodetree, node);
}
}
}
@@ -745,7 +750,7 @@ static int node_animation_properties(bNodeTree *ntree, bNode *node)
for (index=0; index<len; index++) {
if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
return 1;
}
}
@@ -763,7 +768,7 @@ static int node_animation_properties(bNodeTree *ntree, bNode *node)
for (index=0; index<len; index++) {
if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
return 1;
}
}
@@ -789,18 +794,18 @@ int ntreeCompositTagAnimated(bNodeTree *ntree)
if(node->type==CMP_NODE_IMAGE) {
Image *ima= (Image *)node->id;
if(ima && ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
tagged= 1;
}
}
else if(node->type==CMP_NODE_TIME) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
tagged= 1;
}
/* here was tag render layer, but this is called after a render, so re-composites fail */
else if(node->type==NODE_GROUP) {
if( ntreeCompositTagAnimated((bNodeTree *)node->id) ) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
}
}
}
@@ -818,12 +823,12 @@ void ntreeCompositTagGenerators(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
if( ELEM(node->type, CMP_NODE_R_LAYERS, CMP_NODE_IMAGE))
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
}
}
/* XXX after render animation system gets a refresh, this call allows composite to end clean */
-void ntreeClearTags(bNodeTree *ntree)
+void ntreeCompositClearTags(bNodeTree *ntree)
{
bNode *node;
@@ -832,6 +837,6 @@ void ntreeClearTags(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
node->need_exec= 0;
if(node->type==NODE_GROUP)
- ntreeClearTags((bNodeTree *)node->id);
+ ntreeCompositClearTags((bNodeTree *)node->id);
}
}
diff --git a/source/blender/nodes/composite/node_composite_util.c b/source/blender/nodes/composite/node_composite_util.c
index 78f97c5289e..2047a9089f4 100644
--- a/source/blender/nodes/composite/node_composite_util.c
+++ b/source/blender/nodes/composite/node_composite_util.c
@@ -1320,7 +1320,7 @@ void IIR_gauss(CompBuf* src, float sigma, int chan, int xy)
if ((xy < 1) || (xy > 3)) xy = 3;
- // XXX The YVV macro defined below explicitely expects sources of at least 3x3 pixels,
+ // XXX The YVV macro defined below explicitly expects sources of at least 3x3 pixels,
// so just skiping blur along faulty direction if src's def is below that limit!
if (src->x < 3) xy &= ~(int) 1;
if (src->y < 3) xy &= ~(int) 2;
@@ -1346,7 +1346,7 @@ void IIR_gauss(CompBuf* src, float sigma, int chan, int xy)
// it seems to work, not entirely sure if it is actually totally correct,
// Besides J.M.Geusebroek's anigauss.c (see http://www.science.uva.nl/~mark),
// found one other implementation by Cristoph Lampert,
- // but neither seem to be quite the same, result seems to be ok sofar anyway.
+ // but neither seem to be quite the same, result seems to be ok so far anyway.
// Extra scale factor here to not have to do it in filter,
// though maybe this had something to with the precision errors
sc = cf[0]/((1.0 + cf[1] - cf[2] + cf[3])*(1.0 - cf[1] - cf[2] - cf[3])*(1.0 + cf[2] + (cf[1] - cf[3])*cf[3]));
diff --git a/source/blender/nodes/composite/nodes/node_composite_directionalblur.c b/source/blender/nodes/composite/nodes/node_composite_directionalblur.c
index 1a5e3150f53..34815fcb24c 100644
--- a/source/blender/nodes/composite/nodes/node_composite_directionalblur.c
+++ b/source/blender/nodes/composite/nodes/node_composite_directionalblur.c
@@ -86,8 +86,9 @@ static CompBuf *dblur(bNode *node, CompBuf *img, int iterations, int wrap,
getpix(tmp, cs * u + ss * v + center_x_pix, cs * v - ss * u + center_y_pix, col);
/* mix img and transformed tmp */
- for(j= 0; j < 4; ++j)
- img->rect[p + j]= AVG2(img->rect[p + j], col[j]);
+ for(j= 0; j < 4; ++j) {
+ img->rect[p + j]= 0.5f * (img->rect[p + j] + col[j]);
+ }
}
}
diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c
index 56f80840112..6214f39dc0a 100644
--- a/source/blender/nodes/intern/node_common.c
+++ b/source/blender/nodes/intern/node_common.c
@@ -239,9 +239,11 @@ bNode *node_group_make_from_selected(bNodeTree *ntree)
}
}
+ /* update of the group tree */
ngroup->update |= NTREE_UPDATE;
ntreeUpdateTree(ngroup);
- ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS;
+ /* update of the tree containing the group instance node */
+ ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
ntreeUpdateTree(ntree);
return gnode;
@@ -559,7 +561,7 @@ int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
/* free the group tree (takes care of user count) */
free_libblock(&G.main->nodetree, wgroup);
- ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS;
+ ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
ntreeUpdateTree(ntree);
return 1;
@@ -716,7 +718,7 @@ static bNodeSocket *group_verify_socket(bNodeTree *ntree, ListBase *lb, int in_o
if(sock) {
sock->groupsock = gsock;
- strcpy(sock->name, gsock->name);
+ BLI_strncpy(sock->name, gsock->name, sizeof(sock->name));
sock->type= gsock->type;
/* XXX hack: group socket input/output roles are inverted internally,
@@ -901,7 +903,7 @@ static void loop_sync(bNodeTree *ntree, int sync_in_out)
if (mirror->own_index == GET_INT_FROM_POINTER(sock->storage))
break;
/* make sure the name is the same (only for identification by user, no deeper meaning) */
- strcpy(mirror->name, sock->name);
+ BLI_strncpy(mirror->name, sock->name, sizeof(mirror->name));
/* fix the socket order if necessary */
if (mirror != sync) {
BLI_remlink(sync_lb, mirror);
diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c
index 53bbb27f9b0..154f7613223 100644
--- a/source/blender/nodes/intern/node_exec.c
+++ b/source/blender/nodes/intern/node_exec.c
@@ -180,7 +180,7 @@ bNodeTreeExec *ntree_exec_begin(bNodeTree *ntree)
/* prepare group tree inputs */
for (sock=ntree->inputs.first; sock; sock=sock->next) {
- ns = setup_stack(exec->stack, sock);
+ /* ns = */ setup_stack(exec->stack, sock);
}
/* prepare all internal nodes for execution */
for(n=0, nodeexec= exec->nodeexec; n < totnodes; ++n, ++nodeexec) {
@@ -198,7 +198,7 @@ bNodeTreeExec *ntree_exec_begin(bNodeTree *ntree)
/* tag all outputs */
for (sock=node->outputs.first; sock; sock=sock->next) {
- ns = setup_stack(exec->stack, sock);
+ /* ns = */ setup_stack(exec->stack, sock);
}
if(node->typeinfo->initexecfunc)
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index aabaf5b86de..74f15af88a2 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -128,6 +128,21 @@ static bNodeSocketType node_socket_type_boolean = {
/* buttonfunc */ NULL,
};
+/****************** SHADER ******************/
+
+static bNodeSocketType node_socket_type_shader = {
+ /* type */ SOCK_SHADER,
+ /* ui_name */ "Shader",
+ /* ui_description */ "Shader",
+ /* ui_icon */ 0,
+ /* ui_color */ {100,200,100,255},
+
+ /* value_structname */ NULL,
+ /* value_structsize */ 0,
+
+ /* buttonfunc */ NULL,
+};
+
/****************** MESH ******************/
static bNodeSocketType node_socket_type_mesh = {
@@ -153,6 +168,7 @@ void node_socket_type_init(bNodeSocketType *types[])
INIT_TYPE(rgba);
INIT_TYPE(int);
INIT_TYPE(boolean);
+ INIT_TYPE(shader);
INIT_TYPE(mesh);
#undef INIT_TYPE
@@ -241,6 +257,17 @@ struct bNodeSocket *nodeAddOutputRGBA(struct bNodeTree *ntree, struct bNode *nod
return sock;
}
+struct bNodeSocket *nodeAddInputShader(struct bNodeTree *ntree, struct bNode *node, const char *name)
+{
+ bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_IN, name, SOCK_SHADER);
+ return sock;
+}
+struct bNodeSocket *nodeAddOutputShader(struct bNodeTree *ntree, struct bNode *node, const char *name)
+{
+ bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_OUT, name, SOCK_SHADER);
+ return sock;
+}
+
struct bNodeSocket *nodeAddInputMesh(struct bNodeTree *ntree, struct bNode *node, const char *name)
{
bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_IN, name, SOCK_MESH);
@@ -271,6 +298,9 @@ struct bNodeSocket *node_add_input_from_template(struct bNodeTree *ntree, struct
case SOCK_RGBA:
sock = nodeAddInputRGBA(ntree, node, stemp->name, stemp->val1, stemp->val2, stemp->val3, stemp->val4);
break;
+ case SOCK_SHADER:
+ sock = nodeAddInputShader(ntree, node, stemp->name);
+ break;
case SOCK_MESH:
sock = nodeAddInputMesh(ntree, node, stemp->name);
break;
@@ -299,6 +329,9 @@ struct bNodeSocket *node_add_output_from_template(struct bNodeTree *ntree, struc
case SOCK_RGBA:
sock = nodeAddOutputRGBA(ntree, node, stemp->name);
break;
+ case SOCK_SHADER:
+ sock = nodeAddOutputShader(ntree, node, stemp->name);
+ break;
case SOCK_MESH:
sock = nodeAddOutputMesh(ntree, node, stemp->name);
break;
@@ -372,15 +405,15 @@ static bNodeSocket *verify_socket_template(bNodeTree *ntree, bNode *node, int in
static void verify_socket_template_list(bNodeTree *ntree, bNode *node, int in_out, ListBase *socklist, bNodeSocketTemplate *stemp_first)
{
- bNodeSocket *sock;
+ bNodeSocket *sock, *nextsock;
bNodeSocketTemplate *stemp;
/* no inputs anymore? */
if(stemp_first==NULL) {
- while(socklist->first) {
- sock = (bNodeSocket*)socklist->first;
+ for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
+ nextsock = sock->next;
if (!(sock->flag & SOCK_DYNAMIC))
- nodeRemoveSocket(ntree, node, socklist->first);
+ nodeRemoveSocket(ntree, node, sock);
}
}
else {
@@ -391,10 +424,10 @@ static void verify_socket_template_list(bNodeTree *ntree, bNode *node, int in_ou
stemp++;
}
/* leftovers are removed */
- while(socklist->first) {
- sock = (bNodeSocket*)socklist->first;
+ for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
+ nextsock = sock->next;
if (!(sock->flag & SOCK_DYNAMIC))
- nodeRemoveSocket(ntree, node, socklist->first);
+ nodeRemoveSocket(ntree, node, sock);
}
/* and we put back the verified sockets */
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 28f0f983454..9f3e7ce3c73 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -85,6 +85,11 @@ static void local_sync(bNodeTree *localtree, bNodeTree *ntree)
}
}
+static void update(bNodeTree *ntree)
+{
+ ntreeSetOutput(ntree);
+}
+
bNodeTreeType ntreeType_Shader = {
/* type */ NTREE_SHADER,
/* id_name */ "NTShader Nodetree",
@@ -97,7 +102,7 @@ bNodeTreeType ntreeType_Shader = {
/* localize */ NULL,
/* local_sync */ local_sync,
/* local_merge */ NULL,
- /* update */ NULL,
+ /* update */ update,
/* update_node */ NULL
};
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c
index 603aa7ceb77..2b016177820 100644
--- a/source/blender/nodes/texture/node_texture_tree.c
+++ b/source/blender/nodes/texture/node_texture_tree.c
@@ -108,7 +108,7 @@ int ntreeTexTagAnimated(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
if(node->type==TEX_NODE_CURVE_TIME) {
- NodeTagChanged(ntree, node);
+ nodeUpdate(ntree, node);
return 1;
}
else if(node->type==NODE_GROUP) {