forked from bartvdbraak/blender
* modified vieweroperation to not calculate based on the DO_NODE_OUTPUT
flag of the editorbNode.
This commit is contained in:
parent
d46a6dc59c
commit
5024996eea
@ -37,7 +37,7 @@ void ViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
|
||||
Image *image = (Image*)this->getbNode()->id;
|
||||
ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
|
||||
bNode *editorNode = this->getbNode();
|
||||
if (imageSocket->isConnected() && (editorNode->flag & NODE_DO_OUTPUT)) {
|
||||
if (imageSocket->isConnected()) {
|
||||
ViewerOperation *viewerOperation = new ViewerOperation();
|
||||
viewerOperation->setColorManagement(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT);
|
||||
viewerOperation->setColorPredivide(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT_PREDIVIDE);
|
||||
|
@ -101,7 +101,10 @@ void BlurBaseOperation::deinitExecution()
|
||||
|
||||
void BlurBaseOperation::updateSize(MemoryBuffer **memoryBuffers)
|
||||
{
|
||||
float result[4];
|
||||
this->getInputSocketReader(1)->read(result, 0, 0, COM_PS_NEAREST, memoryBuffers);
|
||||
this->size = result[0];
|
||||
if (!this->sizeavailable) {
|
||||
float result[4];
|
||||
this->getInputSocketReader(1)->read(result, 0, 0, COM_PS_NEAREST, memoryBuffers);
|
||||
this->size = result[0];
|
||||
this->sizeavailable = true;
|
||||
}
|
||||
}
|
||||
|
@ -26,13 +26,12 @@
|
||||
|
||||
FastGaussianBlurOperation::FastGaussianBlurOperation(): BlurBaseOperation()
|
||||
{
|
||||
this->iirgaus = false;
|
||||
this->iirgaus = NULL;
|
||||
}
|
||||
|
||||
void FastGaussianBlurOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
|
||||
{
|
||||
MemoryBuffer *newData = (MemoryBuffer*)data;
|
||||
|
||||
newData->read(color, x, y);
|
||||
}
|
||||
|
||||
@ -51,10 +50,7 @@ bool FastGaussianBlurOperation::determineDependingAreaOfInterest(rcti *input, Re
|
||||
}
|
||||
else {
|
||||
if (this->iirgaus) {
|
||||
newInput.xmax = input->xmax + (sx);
|
||||
newInput.xmin = input->xmin - (sx);
|
||||
newInput.ymax = input->ymax + (sy);
|
||||
newInput.ymin = input->ymin - (sy);
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
newInput.xmin = 0;
|
||||
@ -66,38 +62,51 @@ bool FastGaussianBlurOperation::determineDependingAreaOfInterest(rcti *input, Re
|
||||
}
|
||||
}
|
||||
|
||||
void *FastGaussianBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
|
||||
void FastGaussianBlurOperation::initExecution()
|
||||
{
|
||||
MemoryBuffer *newBuf = (MemoryBuffer*)this->inputProgram->initializeTileData(rect, memoryBuffers);
|
||||
MemoryBuffer *copy = newBuf->duplicate();
|
||||
updateSize(memoryBuffers);
|
||||
|
||||
int c;
|
||||
sx = data->sizex * this->size/2.0f;
|
||||
sy = data->sizey * this->size/2.0f;
|
||||
this->iirgaus = true;
|
||||
|
||||
if ((sx == sy) && (sx > 0.f)) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sx, c, 3);
|
||||
}
|
||||
else {
|
||||
if (sx > 0.f) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sx, c, 1);
|
||||
}
|
||||
if (sy > 0.f) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sy, c, 2);
|
||||
}
|
||||
}
|
||||
return copy;
|
||||
BlurBaseOperation::initExecution();
|
||||
BlurBaseOperation::initMutex();
|
||||
}
|
||||
|
||||
void FastGaussianBlurOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
|
||||
void FastGaussianBlurOperation::deinitExecution()
|
||||
{
|
||||
MemoryBuffer *newData = (MemoryBuffer*)data;
|
||||
delete newData;
|
||||
if (this->iirgaus) {
|
||||
delete this->iirgaus;
|
||||
this->iirgaus = NULL;
|
||||
}
|
||||
BlurBaseOperation::deinitMutex();
|
||||
}
|
||||
|
||||
void *FastGaussianBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
|
||||
{
|
||||
BLI_mutex_lock(this->getMutex());
|
||||
if (!iirgaus) {
|
||||
MemoryBuffer *newBuf = (MemoryBuffer*)this->inputProgram->initializeTileData(rect, memoryBuffers);
|
||||
MemoryBuffer *copy = newBuf->duplicate();
|
||||
updateSize(memoryBuffers);
|
||||
|
||||
int c;
|
||||
sx = data->sizex * this->size/2.0f;
|
||||
sy = data->sizey * this->size/2.0f;
|
||||
|
||||
if ((sx == sy) && (sx > 0.f)) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sx, c, 3);
|
||||
}
|
||||
else {
|
||||
if (sx > 0.f) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sx, c, 1);
|
||||
}
|
||||
if (sy > 0.f) {
|
||||
for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
|
||||
IIR_gauss(copy, sy, c, 2);
|
||||
}
|
||||
}
|
||||
this->iirgaus = copy;
|
||||
}
|
||||
BLI_mutex_unlock(this->getMutex());
|
||||
return iirgaus;
|
||||
}
|
||||
|
||||
void FastGaussianBlurOperation::IIR_gauss(MemoryBuffer *src, float sigma, int chan, int xy)
|
||||
|
@ -30,7 +30,7 @@ class FastGaussianBlurOperation: public BlurBaseOperation {
|
||||
private:
|
||||
float sx;
|
||||
float sy;
|
||||
bool iirgaus;
|
||||
MemoryBuffer* iirgaus;
|
||||
public:
|
||||
FastGaussianBlurOperation();
|
||||
bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
|
||||
@ -38,7 +38,8 @@ public:
|
||||
|
||||
static void IIR_gauss(MemoryBuffer *src, float sigma, int channel, int xy);
|
||||
void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
|
||||
void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
|
||||
void deinitExecution();
|
||||
void initExecution();
|
||||
|
||||
};
|
||||
#endif
|
||||
|
@ -50,8 +50,9 @@ ViewerBaseOperation::ViewerBaseOperation() : NodeOperation()
|
||||
|
||||
void ViewerBaseOperation::initExecution()
|
||||
{
|
||||
// When initializing the tree during initial load the width and height can be zero.
|
||||
initImage();
|
||||
if (isActiveViewerOutput()) {
|
||||
initImage();
|
||||
}
|
||||
}
|
||||
|
||||
void ViewerBaseOperation::initImage()
|
||||
@ -79,7 +80,6 @@ void ViewerBaseOperation::initImage()
|
||||
}
|
||||
void ViewerBaseOperation:: updateImage(rcti *rect)
|
||||
{
|
||||
/// @todo: introduce new event to update smaller area
|
||||
WM_main_add_notifier(NC_WINDOW|ND_DRAW, NULL);
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ protected:
|
||||
bool doColorPredivide;
|
||||
|
||||
public:
|
||||
bool isOutputOperation(bool rendering) const {return true;}
|
||||
bool isOutputOperation(bool rendering) const {return isActiveViewerOutput();}
|
||||
void initExecution();
|
||||
void deinitExecution();
|
||||
void setImage(Image *image) {this->image = image;}
|
||||
|
Loading…
Reference in New Issue
Block a user