From 34707c19f27043d534f1b2359b4f660d513f3cb6 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 9 Apr 2013 20:48:53 +0000 Subject: Fix 34764: cycles issue rendering instanced mesh with NaN coordinates. --- intern/cycles/util/util_boundbox.h | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'intern/cycles/util/util_boundbox.h') diff --git a/intern/cycles/util/util_boundbox.h b/intern/cycles/util/util_boundbox.h index 7564c1f3c5c..3ee35b992f7 100644 --- a/intern/cycles/util/util_boundbox.h +++ b/intern/cycles/util/util_boundbox.h @@ -80,6 +80,31 @@ public: grow(bbox.max); } + __forceinline void grow_safe(const float3& pt) + { + /* the order of arguments to min is such that if pt is nan, it will not + * influence the resulting bounding box */ + if(isfinite(pt.x) && isfinite(pt.y) && isfinite(pt.z)) { + min = ccl::min(pt, min); + max = ccl::max(pt, max); + } + } + + __forceinline void grow_safe(const float3& pt, float border) + { + if(isfinite(pt.x) && isfinite(pt.y) && isfinite(pt.z) && isfinite(border)) { + float3 shift = {border, border, border, 0.0f}; + min = ccl::min(pt - shift, min); + max = ccl::max(pt + shift, max); + } + } + + __forceinline void grow_safe(const BoundBox& bbox) + { + grow_safe(bbox.min); + grow_safe(bbox.max); + } + __forceinline void intersect(const BoundBox& bbox) { min = ccl::max(min, bbox.min); @@ -120,7 +145,7 @@ public: { return max - min; } - + __forceinline bool valid() const { return (min.x <= max.x) && (min.y <= max.y) && (min.z <= max.z) && -- cgit v1.2.3