Bugfix #3463
authorTon Roosendaal <ton@blender.org>
Sat, 26 Nov 2005 17:56:39 +0000 (17:56 +0000)
committerTon Roosendaal <ton@blender.org>
Sat, 26 Nov 2005 17:56:39 +0000 (17:56 +0000)
Very ancient bug in boxfilter for image texture popped up with new code
for correct bumpmapping. Caused texture type "Extend" not to work when
using for bump.

source/blender/render/intern/source/imagetexture.c

index 2a7d794249062e92d07387f96baa5767f06c3640..9a2bb06aded053645dfc1d7d4f6ac47d3cf7e042 100644 (file)
@@ -483,6 +483,7 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max
      * If global variable 'imaprepeat' has been set, the
      *  clipped-away parts are sampled as well.
      */
+       /* note: actually minx etc isnt in the proper range... this due to filter size and offset vectors for bump */
        TexResult texr;
        rctf *rf, stack[8];
        float opp, tot, alphaclip= 1.0;
@@ -494,7 +495,10 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max
        rf->ymin= miny*(ibuf->y);
        rf->ymax= maxy*(ibuf->y);
 
-       if(imapextend);
+       if(imapextend) {
+               CLAMP(rf->xmin, 0.0f, ibuf->x-1);
+               CLAMP(rf->xmax, 0.0f, ibuf->x-1);
+       }
        else if(imaprepeat) clipx_rctf_swap(stack, &count, 0.0, (float)(ibuf->x));
        else {
                alphaclip= clipx_rctf(rf, 0.0, (float)(ibuf->x));
@@ -505,7 +509,10 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max
                }
        }
 
-       if(imapextend);
+       if(imapextend) {
+               CLAMP(rf->ymin, 0.0f, ibuf->y-1);
+               CLAMP(rf->ymax, 0.0f, ibuf->y-1);
+       }
        else if(imaprepeat) clipy_rctf_swap(stack, &count, 0.0, (float)(ibuf->y));
        else {
                alphaclip*= clipy_rctf(rf, 0.0, (float)(ibuf->y));
@@ -871,7 +878,6 @@ int imagewraposa(Tex *tex, Image *ima, float *texvec, float *dxt, float *dyt, Te
                                val2= texr.tr + texr.tg + texr.tb;
                                boxsample(ibuf, fx-minx+dyt[0], fy-miny+dyt[1], fx+minx+dyt[0], fy+miny+dyt[1], &texr);
                                val3= texr.tr + texr.tg + texr.tb;
-
                                /* don't switch x or y! */
                                texres->nor[0]= (val1-val2);
                                texres->nor[1]= (val1-val3);