diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-04 16:30:17 +0400 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-04 16:30:17 +0400 |
commit | 7cde835c2e15d39692bd6715e8d3acaffe3a5c92 (patch) | |
tree | 0a8b8695b309ba5be3e7f6963d2379234f4a0f65 /source/blender | |
parent | 4d2a6a8e21031702f1ca6fdd1130af73362dcb91 (diff) |
relay the original node to a different place holder to resolve some
crashes.
Diffstat (limited to 'source/blender')
4 files changed, 7 insertions, 7 deletions
diff --git a/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp b/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp index f96a92068f4..683093302c1 100644 --- a/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp +++ b/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp @@ -35,6 +35,7 @@ void BilateralBlurNode::convertToOperations(ExecutionSystem *graph, CompositorCo { NodeBilateralBlurData *data = (NodeBilateralBlurData *)this->getbNode()->storage; BilateralBlurOperation *operation = new BilateralBlurOperation(); + operation->setbNode(this->getbNode()); operation->setQuality(context->getQuality()); operation->setData(data); this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph); diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp index b23c1a02b9f..b8c7478b2f7 100644 --- a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp +++ b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp @@ -64,7 +64,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber, Me float *buffer = memoryBuffer->getBuffer(); if (this->m_input->isComplex()) { bNode* bnode = this->m_input->getbNode(); -// if (bnode&& bnode->new_node) bnode->new_node->highlight++; + if (bnode&& bnode->original) bnode->original->highlight++; void *data = this->m_input->initializeTileData(rect, memoryBuffers); int x1 = rect->xmin; @@ -90,7 +90,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber, Me this->m_input->deinitializeTileData(rect, memoryBuffers, data); data = NULL; } -// if (bnode&& bnode->new_node) bnode->new_node->highlight++; + if (bnode&& bnode->original) bnode->original->highlight++; } else { int x1 = rect->xmin; @@ -144,7 +144,7 @@ void WriteBufferOperation::executeOpenCLRegion(OpenCLDevice* device, rcti *rect, clMemToCleanUp->push_back(clOutputBuffer); list<cl_kernel> *clKernelsToCleanUp = new list<cl_kernel>(); bNode* bnode = this->m_input->getbNode(); -// if (bnode&& bnode->new_node) bnode->new_node->highlight++; + if (bnode&& bnode->original) bnode->original->highlight++; this->m_input->executeOpenCL(device, outputBuffer, clOutputBuffer, inputMemoryBuffers, clMemToCleanUp, clKernelsToCleanUp); @@ -163,7 +163,7 @@ void WriteBufferOperation::executeOpenCLRegion(OpenCLDevice* device, rcti *rect, this->getMemoryProxy()->getBuffer()->copyContentFrom(outputBuffer); -// if (bnode&& bnode->new_node) bnode->new_node->highlight++; + if (bnode&& bnode->original) bnode->original->highlight++; // STEP 4 diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 21cf142d1cd..e4b5a264ba3 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -166,6 +166,7 @@ typedef struct bNode { struct bNode *parent; /* parent node */ struct ID *id; /* optional link to libdata */ void *storage; /* custom data, must be struct, for storage in file */ + struct bNode *original; /* the original node in the tree (for localized tree) */ float locx, locy; /* root offset for drawing */ float width, height; /* node custom width and height */ diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index 58357bdd59d..b9acf821efe 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -132,6 +132,7 @@ static void localize(bNodeTree *localtree, bNodeTree *ntree) for (node= ntree->nodes.first; node; node= node->next) { /* ensure new user input gets handled ok */ node->need_exec= 0; + node->new_node->original = node; /* move over the compbufs */ /* right after ntreeCopyTree() oldsock pointers are valid */ @@ -191,8 +192,6 @@ static void local_sync(bNodeTree *localtree, bNodeTree *ntree) /* move over the compbufs and previews */ for (lnode= localtree->nodes.first; lnode; lnode= lnode->next) { - lnode->new_node->new_node = lnode; - lnode->highlight = 0; if ( (lnode->exec & NODE_READY) && !(lnode->exec & NODE_SKIPPED) ) { if (ntreeNodeExists(ntree, lnode->new_node)) { @@ -214,7 +213,6 @@ static void local_merge(bNodeTree *localtree, bNodeTree *ntree) /* move over the compbufs and previews */ for (lnode= localtree->nodes.first; lnode; lnode= lnode->next) { - lnode->highlight = 0; if (ntreeNodeExists(ntree, lnode->new_node)) { if (ELEM(lnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { if (lnode->id && (lnode->flag & NODE_DO_OUTPUT)) { |