forked from bartvdbraak/blender
Fix T45946: Cycles texture interpolation bug
Coordinate clamping was done in the wrong order.
This commit is contained in:
parent
2c2f075929
commit
0bc4bc2e61
@ -173,16 +173,11 @@ template<typename T> struct texture_image {
|
||||
}
|
||||
/* Fall through. */
|
||||
case EXTENSION_EXTEND:
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
|
||||
ix = wrap_clamp(ix, width);
|
||||
iy = wrap_clamp(iy, height);
|
||||
|
||||
if (x >= 0.0f && y >= 0.0f && x <= 1.0f && y <= 1.0f) {
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
}
|
||||
else {
|
||||
return read(data[ix + iy*width]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -195,8 +190,8 @@ template<typename T> struct texture_image {
|
||||
}
|
||||
else {
|
||||
/* Bicubic b-spline interpolation. */
|
||||
const float tx = frac(x*(float)width - 0.5f, &ix);
|
||||
const float ty = frac(y*(float)height - 0.5f, &iy);
|
||||
float tx = frac(x*(float)width - 0.5f, &ix);
|
||||
float ty = frac(y*(float)height - 0.5f, &iy);
|
||||
int pix, piy, nnix, nniy;
|
||||
switch(extension) {
|
||||
case EXTENSION_REPEAT:
|
||||
@ -218,22 +213,17 @@ template<typename T> struct texture_image {
|
||||
}
|
||||
/* Fall through. */
|
||||
case EXTENSION_EXTEND:
|
||||
pix = wrap_clamp(ix-1, width);
|
||||
piy = wrap_clamp(iy-1, height);
|
||||
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
|
||||
nnix = wrap_clamp(ix+2, width);
|
||||
nniy = wrap_clamp(iy+2, height);
|
||||
|
||||
ix = wrap_clamp(ix, width);
|
||||
iy = wrap_clamp(iy, height);
|
||||
|
||||
if (x >= 0.0f && y >= 0.0f && x <= 1.0f && y <= 1.0f) {
|
||||
pix = wrap_clamp(ix-1, width);
|
||||
piy = wrap_clamp(iy-1, height);
|
||||
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
|
||||
nnix = wrap_clamp(ix+2, width);
|
||||
nniy = wrap_clamp(iy+2, height);
|
||||
}
|
||||
else {
|
||||
return read(data[ix + iy*width]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -323,18 +313,13 @@ template<typename T> struct texture_image {
|
||||
}
|
||||
/* Fall through. */
|
||||
case EXTENSION_EXTEND:
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
niz = wrap_clamp(iz+1, depth);
|
||||
|
||||
ix = wrap_clamp(ix, width);
|
||||
iy = wrap_clamp(iy, height);
|
||||
iz = wrap_clamp(iz, depth);
|
||||
|
||||
if (x >= 0.0f && y >= 0.0f && x <= 1.0f && y <= 1.0f) {
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
niz = wrap_clamp(iz+1, depth);
|
||||
}
|
||||
else {
|
||||
return read(data[ix + iy*width + iz*width*height]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -383,26 +368,21 @@ template<typename T> struct texture_image {
|
||||
}
|
||||
/* Fall through. */
|
||||
case EXTENSION_EXTEND:
|
||||
pix = wrap_clamp(ix-1, width);
|
||||
piy = wrap_clamp(iy-1, height);
|
||||
piz = wrap_clamp(iz-1, depth);
|
||||
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
niz = wrap_clamp(iz+1, depth);
|
||||
|
||||
nnix = wrap_clamp(ix+2, width);
|
||||
nniy = wrap_clamp(iy+2, height);
|
||||
nniz = wrap_clamp(iz+2, depth);
|
||||
|
||||
ix = wrap_clamp(ix, width);
|
||||
iy = wrap_clamp(iy, height);
|
||||
iz = wrap_clamp(iz, depth);
|
||||
|
||||
if (x >= 0.0f && y >= 0.0f && x <= 1.0f && y <= 1.0f) {
|
||||
pix = wrap_clamp(ix-1, width);
|
||||
piy = wrap_clamp(iy-1, height);
|
||||
piz = wrap_clamp(iz-1, depth);
|
||||
|
||||
nix = wrap_clamp(ix+1, width);
|
||||
niy = wrap_clamp(iy+1, height);
|
||||
niz = wrap_clamp(iz+1, depth);
|
||||
|
||||
nnix = wrap_clamp(ix+2, width);
|
||||
nniy = wrap_clamp(iy+2, height);
|
||||
nniz = wrap_clamp(iz+2, depth);
|
||||
}
|
||||
else {
|
||||
return read(data[ix + iy*width + iz*width*height]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user