Fix T43784: Compositing scale node border error

This was still the known issue with pixel center, original commit didn't cover all the
cases by the looks of it.

Should be all fine now, but much more intense testing is welcome.
This commit is contained in:
Sergey Sharybin 2015-02-24 12:42:31 +05:00
parent 1f527c6033
commit 4c75f77669
Notes: blender-bot 2023-02-14 09:27:16 +01:00
Referenced by issue #43908, Mask render bug, one pixel black line
Referenced by issue #43784, Compositing scale node border error
3 changed files with 6 additions and 6 deletions

View File

@ -185,7 +185,7 @@ void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber)
for (y = y1; y < y2 && (!breaked); y++) {
for (x = x1; x < x2 && (!breaked); x++) {
int input_x = x + dx, input_y = y + dy;
float input_x = (float)x + dx + 0.5f, input_y = (float)y + dy + 0.5f;
this->m_imageInput->readSampled(color, input_x, input_y, COM_PS_NEAREST);
if (this->m_useAlphaInput) {

View File

@ -100,12 +100,12 @@ void ViewerOperation::executeRegion(rcti *rect, unsigned int tileNumber)
for (y = y1; y < y2 && (!breaked); y++) {
for (x = x1; x < x2; x++) {
this->m_imageInput->readSampled(&(buffer[offset4]), x, y, COM_PS_NEAREST);
this->m_imageInput->readSampled(&(buffer[offset4]), (float)x + 0.5f, (float)y + 0.5f, COM_PS_NEAREST);
if (this->m_useAlphaInput) {
this->m_alphaInput->readSampled(alpha, x, y, COM_PS_NEAREST);
this->m_alphaInput->readSampled(alpha, (float)x + 0.5f, (float)y + 0.5f, COM_PS_NEAREST);
buffer[offset4 + 3] = alpha[0];
}
this->m_depthInput->readSampled(depth, x, y, COM_PS_NEAREST);
this->m_depthInput->readSampled(depth, (float)x + 0.5f, (float)y + 0.5f, COM_PS_NEAREST);
depthbuffer[offset] = depth[0];
offset ++;

View File

@ -74,7 +74,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber)
for (y = y1; y < y2 && (!breaked); y++) {
int offset4 = (y * memoryBuffer->getWidth() + x1) * num_channels;
for (x = x1; x < x2; x++) {
this->m_input->read(&(buffer[offset4]), x, y, data);
this->m_input->read(&(buffer[offset4]), (float)x + 0.5f, (float)y + 0.5f, data);
offset4 += num_channels;
}
if (isBreaked()) {
@ -99,7 +99,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber)
for (y = y1; y < y2 && (!breaked); y++) {
int offset4 = (y * memoryBuffer->getWidth() + x1) * num_channels;
for (x = x1; x < x2; x++) {
this->m_input->readSampled(&(buffer[offset4]), x, y, COM_PS_NEAREST);
this->m_input->readSampled(&(buffer[offset4]), (float)x + 0.5f, (float)y + 0.5f, COM_PS_NEAREST);
offset4 += num_channels;
}
if (isBreaked()) {