Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-10-06 12:20:03 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-10-06 12:36:41 +0300
commitc7567876948fd27f88b248baf51d7beb126e7dde (patch)
treef1b5dc0c69f32709ea362ed7864ebdf81a7a2e9c
parent55b7adb9e586efba51caf87e69781a30523a27be (diff)
Fix T52940: VSE Glow Effect Strip on transparent images has no blur
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c26
1 files changed, 19 insertions, 7 deletions
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];
}
}