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
path: root/intern
diff options
context:
space:
mode:
authorThomas Dinges <blender@dingto.org>2013-06-27 20:08:06 +0400
committerThomas Dinges <blender@dingto.org>2013-06-27 20:08:06 +0400
commitc15b13f78f359728a2b458126a907ff1a1b80365 (patch)
treecf937bd1e54131d96362e8d6ebbf73eebe2ba24e /intern
parentc6ce8de20ef628c454916dbee8b7a655437fd208 (diff)
Cycles / Ramp closures:
* Fix crash with negative values in Phong Ramp, and add some checks to survive INF and NAN values. Patch by Brecht and myself.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/closure/bsdf_diffuse_ramp.h2
-rw-r--r--intern/cycles/kernel/closure/bsdf_phong_ramp.h4
2 files changed, 6 insertions, 0 deletions
diff --git a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
index 579145bdd80..2e43e16693f 100644
--- a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
@@ -41,6 +41,8 @@ __device float3 bsdf_diffuse_ramp_get_color(const ShaderClosure *sc, const float
float npos = pos * (float)(MAXCOLORS - 1);
int ipos = float_to_int(npos);
+ if (ipos < 0)
+ return colors[0];
if (ipos >= (MAXCOLORS - 1))
return colors[MAXCOLORS - 1];
float offset = npos - (float)ipos;
diff --git a/intern/cycles/kernel/closure/bsdf_phong_ramp.h b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
index b51d41486c7..1e332933287 100644
--- a/intern/cycles/kernel/closure/bsdf_phong_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
@@ -41,6 +41,8 @@ __device float3 bsdf_phong_ramp_get_color(const ShaderClosure *sc, const float3
float npos = pos * (float)(MAXCOLORS - 1);
int ipos = float_to_int(npos);
+ if (ipos < 0)
+ return colors[0];
if (ipos >= (MAXCOLORS - 1))
return colors[MAXCOLORS - 1];
float offset = npos - (float)ipos;
@@ -49,6 +51,8 @@ __device float3 bsdf_phong_ramp_get_color(const ShaderClosure *sc, const float3
__device int bsdf_phong_ramp_setup(ShaderClosure *sc)
{
+ sc->data0 = max(sc->data0, 0.0f);
+
sc->type = CLOSURE_BSDF_PHONG_RAMP_ID;
return SD_BSDF | SD_BSDF_HAS_EVAL | SD_BSDF_GLOSSY;
}