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;
|
Image *image = (Image*)this->getbNode()->id;
|
||||||
ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
|
ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
|
||||||
bNode *editorNode = this->getbNode();
|
bNode *editorNode = this->getbNode();
|
||||||
if (imageSocket->isConnected() && (editorNode->flag & NODE_DO_OUTPUT)) {
|
if (imageSocket->isConnected()) {
|
||||||
ViewerOperation *viewerOperation = new ViewerOperation();
|
ViewerOperation *viewerOperation = new ViewerOperation();
|
||||||
viewerOperation->setColorManagement(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT);
|
viewerOperation->setColorManagement(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT);
|
||||||
viewerOperation->setColorPredivide(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT_PREDIVIDE);
|
viewerOperation->setColorPredivide(context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT_PREDIVIDE);
|
||||||
|
@ -101,7 +101,10 @@ void BlurBaseOperation::deinitExecution()
|
|||||||
|
|
||||||
void BlurBaseOperation::updateSize(MemoryBuffer **memoryBuffers)
|
void BlurBaseOperation::updateSize(MemoryBuffer **memoryBuffers)
|
||||||
{
|
{
|
||||||
float result[4];
|
if (!this->sizeavailable) {
|
||||||
this->getInputSocketReader(1)->read(result, 0, 0, COM_PS_NEAREST, memoryBuffers);
|
float result[4];
|
||||||
this->size = result[0];
|
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()
|
FastGaussianBlurOperation::FastGaussianBlurOperation(): BlurBaseOperation()
|
||||||
{
|
{
|
||||||
this->iirgaus = false;
|
this->iirgaus = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FastGaussianBlurOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
|
void FastGaussianBlurOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
|
||||||
{
|
{
|
||||||
MemoryBuffer *newData = (MemoryBuffer*)data;
|
MemoryBuffer *newData = (MemoryBuffer*)data;
|
||||||
|
|
||||||
newData->read(color, x, y);
|
newData->read(color, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,10 +50,7 @@ bool FastGaussianBlurOperation::determineDependingAreaOfInterest(rcti *input, Re
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (this->iirgaus) {
|
if (this->iirgaus) {
|
||||||
newInput.xmax = input->xmax + (sx);
|
return false;
|
||||||
newInput.xmin = input->xmin - (sx);
|
|
||||||
newInput.ymax = input->ymax + (sy);
|
|
||||||
newInput.ymin = input->ymin - (sy);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newInput.xmin = 0;
|
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);
|
BlurBaseOperation::initExecution();
|
||||||
MemoryBuffer *copy = newBuf->duplicate();
|
BlurBaseOperation::initMutex();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FastGaussianBlurOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
|
void FastGaussianBlurOperation::deinitExecution()
|
||||||
{
|
{
|
||||||
MemoryBuffer *newData = (MemoryBuffer*)data;
|
if (this->iirgaus) {
|
||||||
delete newData;
|
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)
|
void FastGaussianBlurOperation::IIR_gauss(MemoryBuffer *src, float sigma, int chan, int xy)
|
||||||
|
@ -30,7 +30,7 @@ class FastGaussianBlurOperation: public BlurBaseOperation {
|
|||||||
private:
|
private:
|
||||||
float sx;
|
float sx;
|
||||||
float sy;
|
float sy;
|
||||||
bool iirgaus;
|
MemoryBuffer* iirgaus;
|
||||||
public:
|
public:
|
||||||
FastGaussianBlurOperation();
|
FastGaussianBlurOperation();
|
||||||
bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
|
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);
|
static void IIR_gauss(MemoryBuffer *src, float sigma, int channel, int xy);
|
||||||
void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
|
void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
|
||||||
void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
|
void deinitExecution();
|
||||||
|
void initExecution();
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,8 +50,9 @@ ViewerBaseOperation::ViewerBaseOperation() : NodeOperation()
|
|||||||
|
|
||||||
void ViewerBaseOperation::initExecution()
|
void ViewerBaseOperation::initExecution()
|
||||||
{
|
{
|
||||||
// When initializing the tree during initial load the width and height can be zero.
|
if (isActiveViewerOutput()) {
|
||||||
initImage();
|
initImage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewerBaseOperation::initImage()
|
void ViewerBaseOperation::initImage()
|
||||||
@ -79,7 +80,6 @@ void ViewerBaseOperation::initImage()
|
|||||||
}
|
}
|
||||||
void ViewerBaseOperation:: updateImage(rcti *rect)
|
void ViewerBaseOperation:: updateImage(rcti *rect)
|
||||||
{
|
{
|
||||||
/// @todo: introduce new event to update smaller area
|
|
||||||
WM_main_add_notifier(NC_WINDOW|ND_DRAW, NULL);
|
WM_main_add_notifier(NC_WINDOW|ND_DRAW, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ protected:
|
|||||||
bool doColorPredivide;
|
bool doColorPredivide;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool isOutputOperation(bool rendering) const {return true;}
|
bool isOutputOperation(bool rendering) const {return isActiveViewerOutput();}
|
||||||
void initExecution();
|
void initExecution();
|
||||||
void deinitExecution();
|
void deinitExecution();
|
||||||
void setImage(Image *image) {this->image = image;}
|
void setImage(Image *image) {this->image = image;}
|
||||||
|
Loading…
Reference in New Issue
Block a user