forked from bartvdbraak/blender
Fix T45885: Cycles coordinate extension modes not working as expected
Fix T45769: Image Texture Node clipping bug Simple mistakes in the normalized/pixel-space coordinates handling. Render tests for this feature are coming.
This commit is contained in:
parent
8cc8ce3d46
commit
aac6ee6b87
@ -144,7 +144,7 @@ template<typename T> struct texture_image {
|
||||
iy = wrap_periodic(iy, height);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -168,7 +168,7 @@ template<typename T> struct texture_image {
|
||||
niy = wrap_periodic(iy+1, height);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -176,8 +176,13 @@ template<typename T> struct texture_image {
|
||||
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;
|
||||
}
|
||||
|
||||
@ -208,7 +213,7 @@ template<typename T> struct texture_image {
|
||||
nniy = wrap_periodic(iy+2, height);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -216,6 +221,7 @@ template<typename T> struct texture_image {
|
||||
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);
|
||||
|
||||
@ -224,6 +230,10 @@ template<typename T> struct texture_image {
|
||||
|
||||
nnix = wrap_clamp(ix+2, width);
|
||||
nniy = wrap_clamp(iy+2, height);
|
||||
}
|
||||
else {
|
||||
return read(data[ix + iy*width]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -279,7 +289,7 @@ template<typename T> struct texture_image {
|
||||
iz = wrap_periodic(iz, depth);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -308,7 +318,7 @@ template<typename T> struct texture_image {
|
||||
niz = wrap_periodic(iz+1, depth);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -317,9 +327,14 @@ template<typename T> struct texture_image {
|
||||
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;
|
||||
}
|
||||
|
||||
@ -363,7 +378,7 @@ template<typename T> struct texture_image {
|
||||
nniz = wrap_periodic(iz+2, depth);
|
||||
break;
|
||||
case EXTENSION_CLIP:
|
||||
if (x < 0.0f || y < 0.0f || x >= width || y >= height) {
|
||||
if (x < 0.0f || y < 0.0f || x > 1.0f || y > 1.0f) {
|
||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
/* Fall through. */
|
||||
@ -372,6 +387,7 @@ template<typename T> struct texture_image {
|
||||
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);
|
||||
@ -383,6 +399,10 @@ template<typename T> struct texture_image {
|
||||
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