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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-03-13 18:55:35 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-03-13 18:55:35 +0300
commitabc79af9752516198d0d417b3d7308303d997657 (patch)
treee0448428fd2a928e6794c0ef86a12ae0d7d3499d
parentb3dab572328e1989276f6f4ef2dd1b6b1f82e86e (diff)
Fix for bug #8437: white borders in envmap reflection, cause was
change in imagewraposa that de-premuls colors, while envmap code was expecting premultiplied colors.
-rw-r--r--source/blender/render/intern/source/envmap.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index eb106591096..26151ff8b91 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -636,7 +636,7 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe
/* texvec should be the already reflected normal */
EnvMap *env;
ImBuf *ibuf;
- float fac, vec[3], sco[3], dxts[3], dyts[3];
+ float fac, vec[3], sco[3], dxts[3], dyts[3], w[3];
int face, face1;
env= tex->env;
@@ -717,10 +717,16 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe
fac= (texres->ta+texr1.ta+texr2.ta);
if(fac!=0.0) {
fac= 1.0/fac;
+
+ /* weight contributions based on alpha */
+ w[0]= texres->ta*fac;
+ w[1]= texr1.ta*fac;
+ w[2]= texr2.ta*fac;
- texres->tr= fac*(texres->ta*texres->tr + texr1.ta*texr1.tr + texr2.ta*texr2.tr );
- texres->tg= fac*(texres->ta*texres->tg + texr1.ta*texr1.tg + texr2.ta*texr2.tg );
- texres->tb= fac*(texres->ta*texres->tb + texr1.ta*texr1.tb + texr2.ta*texr2.tb );
+ /* interpolate premultiplied result (imagewraposa returns key) */
+ texres->tr= (w[0]*texres->ta*texres->tr + w[1]*texr1.ta*texr1.tr + w[2]*texr2.ta*texr2.tr);
+ texres->tg= (w[0]*texres->ta*texres->tg + w[1]*texr1.ta*texr1.tg + w[2]*texr2.ta*texr2.tg);
+ texres->tb= (w[0]*texres->ta*texres->tb + w[1]*texr1.ta*texr1.tb + w[2]*texr2.ta*texr2.tb);
}
texres->ta= 1.0;
}