forked from bartvdbraak/blender
Limit out of screen tiles to be scheduled.
This commit is contained in:
parent
a0c6371b7f
commit
ea5e0d0212
@ -485,14 +485,18 @@ bool ExecutionGroup::scheduleAreaWhenPossible(ExecutionSystem *graph, rcti *area
|
||||
float chunkSizef = this->m_chunkSize;
|
||||
|
||||
int indexx, indexy;
|
||||
const int minxchunk = floor(area->xmin / chunkSizef);
|
||||
const int maxxchunk = ceil((area->xmax - 1) / chunkSizef);
|
||||
const int minychunk = floor(area->ymin / chunkSizef);
|
||||
const int maxychunk = ceil((area->ymax - 1) / chunkSizef);
|
||||
int minxchunk = floor(area->xmin / chunkSizef);
|
||||
int maxxchunk = ceil((area->xmax - 1) / chunkSizef);
|
||||
int minychunk = floor(area->ymin / chunkSizef);
|
||||
int maxychunk = ceil((area->ymax - 1) / chunkSizef);
|
||||
minxchunk = MAX2(minxchunk, 0);
|
||||
minychunk = MAX2(minychunk, 0);
|
||||
maxxchunk = MIN2(maxxchunk, this->m_numberOfXChunks);
|
||||
maxychunk = MIN2(maxychunk, this->m_numberOfYChunks);
|
||||
|
||||
bool result = true;
|
||||
for (indexx = max(minxchunk, 0); indexx < maxxchunk; indexx++) {
|
||||
for (indexy = max(minychunk, 0); indexy < maxychunk; indexy++) {
|
||||
for (indexx = minxchunk; indexx < maxxchunk; indexx++) {
|
||||
for (indexy = minychunk; indexy < maxychunk; indexy++) {
|
||||
if (!scheduleChunkWhenPossible(graph, indexx, indexy)) {
|
||||
result = false;
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ ProjectorLensDistortionOperation::ProjectorLensDistortionOperation() : NodeOpera
|
||||
}
|
||||
void ProjectorLensDistortionOperation::initExecution()
|
||||
{
|
||||
this->initMutex();
|
||||
this->m_inputProgram = this->getInputSocketReader(0);
|
||||
}
|
||||
|
||||
@ -65,6 +66,7 @@ void ProjectorLensDistortionOperation::executePixel(float *color, int x, int y,
|
||||
|
||||
void ProjectorLensDistortionOperation::deinitExecution()
|
||||
{
|
||||
this->deinitMutex();
|
||||
this->m_inputProgram = NULL;
|
||||
}
|
||||
|
||||
@ -77,16 +79,18 @@ bool ProjectorLensDistortionOperation::determineDependingAreaOfInterest(rcti *in
|
||||
newInput.xmin = input->xmin - this->m_kr2 - 2;
|
||||
newInput.xmax = input->xmax + this->m_kr2 + 2;
|
||||
} else {
|
||||
newInput.xmin = 0;
|
||||
newInput.xmin = input->xmin-7; //(0.25f*20*1)+2 == worse case dispersion
|
||||
newInput.ymin = input->ymin;
|
||||
newInput.ymax = input->ymax;
|
||||
newInput.xmax = this->m_inputProgram->getWidth();
|
||||
newInput.xmax = input->xmax+7; //(0.25f*20*1)+2 == worse case dispersion
|
||||
}
|
||||
return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
|
||||
}
|
||||
|
||||
void ProjectorLensDistortionOperation::updateDispersion(MemoryBuffer **inputBuffers)
|
||||
{
|
||||
if (this->m_dispersionAvailable) return;
|
||||
this->lockMutex();
|
||||
if (!this->m_dispersionAvailable) {
|
||||
float result[4];
|
||||
this->getInputSocketReader(1)->read(result, 0, 0, COM_PS_NEAREST, inputBuffers);
|
||||
@ -95,4 +99,5 @@ void ProjectorLensDistortionOperation::updateDispersion(MemoryBuffer **inputBuff
|
||||
this->m_kr2 = this->m_kr * 20;
|
||||
this->m_dispersionAvailable = true;
|
||||
}
|
||||
this->unlockMutex();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user