diff options
Diffstat (limited to 'source/blender/compositor')
4 files changed, 30 insertions, 12 deletions
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.cpp b/source/blender/compositor/intern/COM_ExecutionGroup.cpp index 827b93c350e..255630daff2 100644 --- a/source/blender/compositor/intern/COM_ExecutionGroup.cpp +++ b/source/blender/compositor/intern/COM_ExecutionGroup.cpp @@ -518,17 +518,15 @@ bool ExecutionGroup::scheduleAreaWhenPossible(ExecutionSystem *graph, rcti *area // find all chunks inside the rect // determine minxchunk, minychunk, maxxchunk, maxychunk where x and y are chunknumbers - float chunkSizef = this->m_chunkSize; - int indexx, indexy; - int minxchunk = floor((area->xmin - this->m_viewerBorder.xmin) / chunkSizef); - int maxxchunk = ceil((area->xmax - 1) / chunkSizef); - int minychunk = floor((area->ymin - this->m_viewerBorder.ymin) / chunkSizef); - int maxychunk = ceil((area->ymax - 1) / chunkSizef); - minxchunk = max(minxchunk, 0); - minychunk = max(minychunk, 0); - maxxchunk = min(maxxchunk, (int)this->m_numberOfXChunks); - maxychunk = min(maxychunk, (int)this->m_numberOfYChunks); + int minxchunk = (area->xmin - m_viewerBorder.xmin) / m_chunkSize; + int maxxchunk = (area->xmax + m_chunkSize - 1) / m_chunkSize; + int minychunk = (area->ymin - m_viewerBorder.ymin) / m_chunkSize; + int maxychunk = (area->ymax + m_chunkSize - 1) / m_chunkSize; + minxchunk = max_ii(minxchunk, 0); + minychunk = max_ii(minychunk, 0); + maxxchunk = min_ii(maxxchunk, m_numberOfXChunks); + maxychunk = min_ii(maxychunk, m_numberOfYChunks); bool result = true; for (indexx = minxchunk; indexx < maxxchunk; indexx++) { diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.cpp b/source/blender/compositor/operations/COM_RenderLayersProg.cpp index 8a32502982c..ea6ad86d92c 100644 --- a/source/blender/compositor/operations/COM_RenderLayersProg.cpp +++ b/source/blender/compositor/operations/COM_RenderLayersProg.cpp @@ -234,6 +234,27 @@ RenderLayersDepthProg::RenderLayersDepthProg() : RenderLayersBaseProg(SCE_PASS_Z this->addOutputSocket(COM_DT_VALUE); } +void RenderLayersDepthProg::executePixel(float output[4], float x, float y, PixelSampler sampler) +{ + int ix = x; + int iy = y; + float *inputBuffer = this->getInputBuffer(); + + if (inputBuffer == NULL || ix < 0 || iy < 0 || ix >= (int)this->getWidth() || iy >= (int)this->getHeight() ) { + output[0] = 0.0f; + output[1] = 0.0f; + output[2] = 0.0f; + output[3] = 0.0f; + } + else { + unsigned int offset = (iy * this->getWidth() + ix); + output[0] = inputBuffer[offset]; + output[1] = 0.0f; + output[2] = 0.0f; + output[3] = 0.0f; + } +} + /* ******** Render Layers Diffuse Operation ******** */ RenderLayersDiffuseOperation::RenderLayersDiffuseOperation() : RenderLayersBaseProg(SCE_PASS_DIFFUSE, 3) diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.h b/source/blender/compositor/operations/COM_RenderLayersProg.h index 48aaa47cc50..04861174387 100644 --- a/source/blender/compositor/operations/COM_RenderLayersProg.h +++ b/source/blender/compositor/operations/COM_RenderLayersProg.h @@ -111,7 +111,6 @@ class RenderLayersAlphaProg : public RenderLayersBaseProg { public: RenderLayersAlphaProg(); void executePixel(float output[4], float x, float y, PixelSampler sampler); - }; class RenderLayersColorOperation : public RenderLayersBaseProg { @@ -127,6 +126,7 @@ public: class RenderLayersDepthProg : public RenderLayersBaseProg { public: RenderLayersDepthProg(); + void executePixel(float output[4], float x, float y, PixelSampler sampler); }; class RenderLayersDiffuseOperation : public RenderLayersBaseProg { diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp index f18493dc334..cf462607936 100644 --- a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp +++ b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp @@ -75,7 +75,6 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber) for (x = x1; x < x2; x++) { this->m_input->read(&(buffer[offset4]), x, y, data); offset4 += COM_NUMBER_OF_CHANNELS; - } if (isBreaked()) { breaked = true; |