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:
authorJeroen Bakker <j.bakker@atmind.nl>2012-09-11 20:57:05 +0400
committerJeroen Bakker <j.bakker@atmind.nl>2012-09-11 20:57:05 +0400
commit773ea9b93d01c27187b60928a5fbf84e464c150a (patch)
tree2b0afe2be7422da1751504d1ad80a60039a5f34f /source
parentbecd442a36d949b7e678b4f44445ada9f4880b85 (diff)
Fix for [#32536] Mixing with translated images in compositor produces
garbage strips for each tile Promoted the behaviour of combine channels to node operation so that all nodes use the same implementation. (CombineChannel had a better implementation)
Diffstat (limited to 'source')
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.cpp29
-rw-r--r--source/blender/compositor/operations/COM_CombineChannelsOperation.cpp26
-rw-r--r--source/blender/compositor/operations/COM_CombineChannelsOperation.h2
3 files changed, 18 insertions, 39 deletions
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cpp b/source/blender/compositor/intern/COM_NodeOperation.cpp
index bae884d713e..4ae114bd031 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cpp
+++ b/source/blender/compositor/intern/COM_NodeOperation.cpp
@@ -124,19 +124,26 @@ bool NodeOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOper
return false;
}
else {
- unsigned int index;
- vector<InputSocket *> &inputsockets = this->getInputSockets();
-
- for (index = 0; index < inputsockets.size(); index++) {
- InputSocket *inputsocket = inputsockets[index];
- if (inputsocket->isConnected()) {
- NodeOperation *inputoperation = (NodeOperation *)inputsocket->getConnection()->getFromNode();
- bool result = inputoperation->determineDependingAreaOfInterest(input, readOperation, output);
- if (result) {
- return true;
+ rcti tempOutput;
+ bool first = true;
+ for (int i = 0 ; i < getNumberOfInputSockets() ; i ++) {
+ NodeOperation * inputOperation = this->getInputOperation(i);
+ if (inputOperation && inputOperation->determineDependingAreaOfInterest(input, readOperation, &tempOutput)) {
+ if (first) {
+ output->xmin = tempOutput.xmin;
+ output->ymin = tempOutput.ymin;
+ output->xmax = tempOutput.xmax;
+ output->ymax = tempOutput.ymax;
+ first = false;
+ }
+ else {
+ output->xmin = MIN2(output->xmin, tempOutput.xmin);
+ output->ymin = MIN2(output->ymin, tempOutput.ymin);
+ output->xmax = MAX2(output->xmax, tempOutput.xmax);
+ output->ymax = MAX2(output->ymax, tempOutput.ymax);
}
}
}
- return false;
+ return !first;
}
}
diff --git a/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp b/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp
index ded686bb5de..3ced0548bb8 100644
--- a/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp
+++ b/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp
@@ -37,31 +37,6 @@ CombineChannelsOperation::CombineChannelsOperation() : NodeOperation()
this->m_inputChannel4Operation = NULL;
}
-bool CombineChannelsOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
-{
- rcti tempOutput;
- bool first = true;
- for (int i = 0 ; i < 4 ; i ++) {
- NodeOperation * inputOperation = this->getInputOperation(i);
- if (inputOperation->determineDependingAreaOfInterest(input, readOperation, &tempOutput)) {
- if (first) {
- output->xmin = tempOutput.xmin;
- output->ymin = tempOutput.ymin;
- output->xmax = tempOutput.xmax;
- output->ymax = tempOutput.ymax;
- first = false;
- }
- else {
- output->xmin = MIN2(output->xmin, tempOutput.xmin);
- output->ymin = MIN2(output->ymin, tempOutput.ymin);
- output->xmax = MAX2(output->xmax, tempOutput.xmax);
- output->ymax = MAX2(output->ymax, tempOutput.ymax);
- }
- }
- }
- return !first;
-}
-
void CombineChannelsOperation::initExecution()
{
this->m_inputChannel1Operation = this->getInputSocketReader(0);
@@ -82,7 +57,6 @@ void CombineChannelsOperation::deinitExecution()
void CombineChannelsOperation::executePixel(float output[4], float x, float y, PixelSampler sampler)
{
float input[4];
- /// @todo: remove if statements
if (this->m_inputChannel1Operation) {
this->m_inputChannel1Operation->read(input, x, y, sampler);
output[0] = input[0];
diff --git a/source/blender/compositor/operations/COM_CombineChannelsOperation.h b/source/blender/compositor/operations/COM_CombineChannelsOperation.h
index 460eb9bdcb1..7c8742b1557 100644
--- a/source/blender/compositor/operations/COM_CombineChannelsOperation.h
+++ b/source/blender/compositor/operations/COM_CombineChannelsOperation.h
@@ -37,8 +37,6 @@ public:
void initExecution();
void deinitExecution();
-
- bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
};
#endif