diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-10 00:48:53 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-10 00:48:53 +0400 |
commit | 34707c19f27043d534f1b2359b4f660d513f3cb6 (patch) | |
tree | e61675e02c7f9a62dec7efab5d79970f5688527c /intern/cycles/render/mesh.cpp | |
parent | 84ba3f65210d535859357b23126c293c3987868f (diff) |
Fix 34764: cycles issue rendering instanced mesh with NaN coordinates.
Diffstat (limited to 'intern/cycles/render/mesh.cpp')
-rw-r--r-- | intern/cycles/render/mesh.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp index 8d12ace4252..ddb4a1ee2cf 100644 --- a/intern/cycles/render/mesh.cpp +++ b/intern/cycles/render/mesh.cpp @@ -135,15 +135,29 @@ void Mesh::compute_bounds() size_t verts_size = verts.size(); size_t curve_keys_size = curve_keys.size(); - for(size_t i = 0; i < verts_size; i++) - bnds.grow(verts[i]); + if(verts_size + curve_keys_size > 0) { + for(size_t i = 0; i < verts_size; i++) + bnds.grow(verts[i]); - for(size_t i = 0; i < curve_keys_size; i++) - bnds.grow(curve_keys[i].co, curve_keys[i].radius); + for(size_t i = 0; i < curve_keys_size; i++) + bnds.grow(curve_keys[i].co, curve_keys[i].radius); - /* happens mostly on empty meshes */ - if(!bnds.valid()) + if(!bnds.valid()) { + bnds = BoundBox::empty; + + /* skip nan or inf coordinates */ + for(size_t i = 0; i < verts_size; i++) + bnds.grow_safe(verts[i]); + + for(size_t i = 0; i < curve_keys_size; i++) + bnds.grow_safe(curve_keys[i].co, curve_keys[i].radius); + } + } + + if(!bnds.valid()) { + /* empty mesh */ bnds.grow(make_float3(0.0f, 0.0f, 0.0f)); + } bounds = bnds; } |