Commit: 3ad84309df65e2eaac2b400a34479ce124a17b30
Author: Sergey Sharybin
Date:   Fri Oct 6 14:20:03 2017 +0500
Branches: blender-v2.79a-release
https://developer.blender.org/rB3ad84309df65e2eaac2b400a34479ce124a17b30

Fix T52940: VSE Glow Effect Strip on transparent images has no blur

===================================================================

M       source/blender/blenkernel/intern/seqeffects.c

===================================================================

diff --git a/source/blender/blenkernel/intern/seqeffects.c 
b/source/blender/blenkernel/intern/seqeffects.c
index e435d87024e..894bc3c726f 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -1861,7 +1861,7 @@ static void RVBlurBitmap2_float(float *map, int width, 
int height, float blur, i
        float *filter = NULL;
        int x, y, i, fx, fy;
        int index, ix, halfWidth;
-       float fval, k, curColor[3], curColor2[3], weight = 0;
+       float fval, k, curColor[4], curColor2[4], weight = 0;
 
        /* If we're not really blurring, bail out */
        if (blur <= 0)
@@ -1908,28 +1908,32 @@ static void RVBlurBitmap2_float(float *map, int width, 
int height, float blur, i
                for (x = 0; x < halfWidth; x++) {
                        index = (x + y * width) * 4;
                        fx = 0;
-                       curColor[0] = curColor[1] = curColor[2] = 0.0f;
-                       curColor2[0] = curColor2[1] = curColor2[2] = 0.0f;
+                       zero_v4(curColor);
+                       zero_v4(curColor2);
 
                        for (i = x - halfWidth; i < x + halfWidth; i++) {
                                if ((i >= 0) && (i < width)) {
                                        curColor[0] += map[(i + y * width) * 4 
+ GlowR] * filter[fx];
                                        curColor[1] += map[(i + y * width) * 4 
+ GlowG] * filter[fx];
                                        curColor[2] += map[(i + y * width) * 4 
+ GlowB] * filter[fx];
+                                       curColor[3] += map[(i + y * width) * 4 
+ GlowA] * filter[fx];
 
                                        curColor2[0] += map[(width - 1 - i + y 
* width) * 4 + GlowR] * filter[fx];
                                        curColor2[1] += map[(width - 1 - i + y 
* width) * 4 + GlowG] * filter[fx];
                                        curColor2[2] += map[(width - 1 - i + y 
* width) * 4 + GlowB] * filter[fx];
+                                       curColor2[3] += map[(width - 1 - i + y 
* width) * 4 + GlowA] * filter[fx];
                                }
                                fx++;
                        }
                        temp[index + GlowR] = curColor[0];
                        temp[index + GlowG] = curColor[1];
                        temp[index + GlowB] = curColor[2];
+                       temp[index + GlowA] = curColor[3];
 
                        temp[((width - 1 - x + y * width) * 4) + GlowR] = 
curColor2[0];
                        temp[((width - 1 - x + y * width) * 4) + GlowG] = 
curColor2[1];
                        temp[((width - 1 - x + y * width) * 4) + GlowB] = 
curColor2[2];
+                       temp[((width - 1 - x + y * width) * 4) + GlowA] = 
curColor2[3];
 
                }
 
@@ -1937,16 +1941,18 @@ static void RVBlurBitmap2_float(float *map, int width, 
int height, float blur, i
                for (x = halfWidth; x < width - halfWidth; x++) {
                        index = (x + y * width) * 4;
                        fx = 0;
-                       zero_v3(curColor);
+                       zero_v4(curColor);
                        for (i = x - halfWidth; i < x + halfWidth; i++) {
                                curColor[0] += map[(i + y * width) * 4 + GlowR] 
* filter[fx];
                                curColor[1] += map[(i + y * width) * 4 + GlowG] 
* filter[fx];
                                curColor[2] += map[(i + y * width) * 4 + GlowB] 
* filter[fx];
+                               curColor[3] += map[(i + y * width) * 4 + GlowA] 
* filter[fx];
                                fx++;
                        }
                        temp[index + GlowR] = curColor[0];
                        temp[index + GlowG] = curColor[1];
                        temp[index + GlowB] = curColor[2];
+                       temp[index + GlowA] = curColor[3];
                }
        }
 
@@ -1959,44 +1965,50 @@ static void RVBlurBitmap2_float(float *map, int width, 
int height, float blur, i
                for (y = 0; y < halfWidth; y++) {
                        index = (x + y * width) * 4;
                        fy = 0;
-                       zero_v3(curColor);
-                       zero_v3(curColor2);
+                       zero_v4(curColor);
+                       zero_v4(curColor2);
                        for (i = y - halfWidth; i < y + halfWidth; i++) {
                                if ((i >= 0) && (i < height)) {
                                        /* Bottom */
                                        curColor[0] += map[(x + i * width) * 4 
+ GlowR] * filter[fy];
                                        curColor[1] += map[(x + i * width) * 4 
+ GlowG] * filter[fy];
                                        curColor[2] += map[(x + i * width) * 4 
+ GlowB] * filter[fy];
+                                       curColor[3] += map[(x + i * width) * 4 
+ GlowA] * filter[fy];
 
                                        /* Top */
                                        curColor2[0] += map[(x + (height - 1 - 
i) * width) * 4 + GlowR] * filter[fy];
                                        curColor2[1] += map[(x + (height - 1 - 
i) * width) * 4 + GlowG] * filter[fy];
                                        curColor2[2] += map[(x + (height - 1 - 
i) * width) * 4 + GlowB] * filter[fy];
+                                       curColor2[3] += map[(x + (height - 1 - 
i) * width) * 4 + GlowA] * filter[fy];
                                }
                                fy++;
                        }
                        temp[index + GlowR] = curColor[0];
                        temp[index + GlowG] = curColor[1];
                        temp[index + GlowB] = curColor[2];
+                       temp[index + GlowA] = curColor[3];
                        temp[((x + (height - 1 - y) * width) * 4) + GlowR] = 
curColor2[0];
                        temp[((x + (height - 1 - y) * width) * 4) + GlowG] = 
curColor2[1];
                        temp[((x + (height - 1 - y) * width) * 4) + GlowB] = 
curColor2[2];
+                       temp[((x + (height - 1 - y) * width) * 4) + GlowA] = 
curColor2[3];
                }
        
                /* Do the main body */
                for (y = halfWidth; y < height - halfWidth; y++) {
                        index = (x + y * width) * 4;
                        fy = 0;
-                       zero_v3(curColor);
+                       zero_v4(curColor);
                        for (i = y - halfWidth; i < y + halfWidth; i++) {
                                curColor[0] += map[(x + i * width) * 4 + GlowR] 
* filter[fy];
                                curColor[1] += map[(x + i * width) * 4 + GlowG] 
* filter[fy];
                                curColor[2] += map[(x + i * width) * 4 + GlowB] 
* filter[fy];
+                               curColor[3] += map[(x + i * width) * 4 + GlowA] 
* filter[fy];
                                fy++;
                        }
                        temp[index + GlowR] = curColor[0];
                        temp[index + GlowG] = curColor[1];
                        temp[index + GlowB] = curColor[2];
+                       temp[index + GlowA] = curColor[3];
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to