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:
authorMiika Hamalainen <blender@miikah.org>2011-10-22 20:16:14 +0400
committerMiika Hamalainen <blender@miikah.org>2011-10-22 20:16:14 +0400
commit30cba27987362054d16b10e73ddf2601af93be68 (patch)
treed971f10db56b5d024cf5f7d6f3d48d1e3c20d698 /source/blender/render/intern/source/shadeinput.c
parent8be3249537e7930e0fa5adb59bc343455da309e9 (diff)
Dynamic Paint:
* Some changes and cleanup pointed on the codereview.
Diffstat (limited to 'source/blender/render/intern/source/shadeinput.c')
-rw-r--r--source/blender/render/intern/source/shadeinput.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index f3e5fc63bda..e20c6ee174c 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -1103,6 +1103,7 @@ void shade_input_set_shade_texco(ShadeInput *shi)
for (i=0; (mcol=RE_vlakren_get_mcol(obr, vlr, i, &name, 0)); i++) {
ShadeInputCol *scol= &shi->col[i];
char *cp1, *cp2, *cp3;
+ float a[3];
shi->totcol++;
scol->name= name;
@@ -1111,18 +1112,21 @@ void shade_input_set_shade_texco(ShadeInput *shi)
cp2= (char *)(mcol+j2);
cp3= (char *)(mcol+j3);
- /* alpha value */
- scol->col[3]= (l*((float)cp3[0]) - u*((float)cp1[0]) - v*((float)cp2[0]))/255.0f;
-
- /* try to prevent invalid color sampling of zero alpha points */
- if (!cp1[0]) cp1 = cp2; if (!cp1[0]) cp1 = cp3;
- if (!cp2[0]) cp2 = cp1; if (!cp2[0]) cp2 = cp3;
- if (!cp3[0]) cp3 = cp1; if (!cp3[0]) cp3 = cp2;
-
- /* sample color value */
- scol->col[0]= (l*((float)cp3[3]) - u*((float)cp1[3]) - v*((float)cp2[3]))/255.0f;
- scol->col[1]= (l*((float)cp3[2]) - u*((float)cp1[2]) - v*((float)cp2[2]))/255.0f;
- scol->col[2]= (l*((float)cp3[1]) - u*((float)cp1[1]) - v*((float)cp2[1]))/255.0f;
+ /* alpha values */
+ a[0] = ((float)cp1[0])/255.f;
+ a[1] = ((float)cp2[0])/255.f;
+ a[2] = ((float)cp3[0])/255.f;
+ scol->col[3]= l*a[2] - u*a[0] - v*a[1];
+
+ /* sample premultiplied color value */
+ scol->col[0]= (l*((float)cp3[3])*a[2] - u*((float)cp1[3])*a[0] - v*((float)cp2[3])*a[1])/255.f;
+ scol->col[1]= (l*((float)cp3[2])*a[2] - u*((float)cp1[2])*a[0] - v*((float)cp2[2])*a[1])/255.f;
+ scol->col[2]= (l*((float)cp3[1])*a[2] - u*((float)cp1[1])*a[0] - v*((float)cp2[1])*a[1])/255.f;
+
+ /* if not zero alpha, restore non-multiplied color */
+ if (scol->col[3]) {
+ mul_v3_fl(scol->col, 1.0f/scol->col[3]);
+ }
}
if(shi->totcol) {