diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-14 12:20:00 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-14 12:20:00 +0300 |
commit | 78c3a5d00f77c109f07d100feb5bf3307a46f839 (patch) | |
tree | 6ed271053cf1f8f1e77266d17ba233586eb99426 /source/blender/compositor | |
parent | 8ed746683a312057c1c3e469ab41d7b1f017d257 (diff) |
Compositor: Fix image and render layer always extending edges
It was no more possible to translate two images, put one on top of
another in order to do things like mapping VR views.
Diffstat (limited to 'source/blender/compositor')
-rw-r--r-- | source/blender/compositor/operations/COM_ImageOperation.cpp | 6 | ||||
-rw-r--r-- | source/blender/compositor/operations/COM_RenderLayersProg.cpp | 24 |
2 files changed, 16 insertions, 14 deletions
diff --git a/source/blender/compositor/operations/COM_ImageOperation.cpp b/source/blender/compositor/operations/COM_ImageOperation.cpp index c55366ab370..624378f2ae9 100644 --- a/source/blender/compositor/operations/COM_ImageOperation.cpp +++ b/source/blender/compositor/operations/COM_ImageOperation.cpp @@ -159,7 +159,11 @@ static void sampleImageAtLocation(ImBuf *ibuf, float x, float y, PixelSampler sa void ImageOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) { - if (this->m_imageFloatBuffer == NULL && this->m_imageByteBuffer == NULL) { + int ix = x, iy = y; + if (ix < 0 || iy < 0 || ix >= this->m_buffer->x || iy >= this->m_buffer->y) { + zero_v4(output); + } + else if (this->m_imageFloatBuffer == NULL && this->m_imageByteBuffer == NULL) { zero_v4(output); } else { diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.cpp b/source/blender/compositor/operations/COM_RenderLayersProg.cpp index 543ca0f7c11..099208ce600 100644 --- a/source/blender/compositor/operations/COM_RenderLayersProg.cpp +++ b/source/blender/compositor/operations/COM_RenderLayersProg.cpp @@ -77,21 +77,19 @@ void RenderLayersBaseProg::doInterpolation(float output[4], float x, float y, Pi unsigned int offset; int width = this->getWidth(), height = this->getHeight(); + int ix = x, iy = y; + if (ix < 0 || iy < 0 || ix >= width || iy >= height) { + if (this->m_elementsize == 1) + output[0] = 0.0f; + else if (this->m_elementsize == 3) + zero_v3(output); + else + zero_v4(output); + return; + } + switch (sampler) { case COM_PS_NEAREST: { - int ix = x; - int iy = y; - if (ix < 0 || iy < 0 || ix >= width || iy >= height) { - if (this->m_elementsize == 1) - output[0] = 0.0f; - else if (this->m_elementsize == 3) - zero_v3(output); - else - zero_v4(output); - break; - - } - offset = (iy * width + ix) * this->m_elementsize; if (this->m_elementsize == 1) |