diff options
author | Mai Lavelle <mai.lavelle@gmail.com> | 2018-04-04 06:36:35 +0300 |
---|---|---|
committer | Mai Lavelle <mai.lavelle@gmail.com> | 2018-04-04 06:37:12 +0300 |
commit | fa01a1738bd1e3a6750ffbe523a282bc22de3991 (patch) | |
tree | 4e8d93acfccf9972e55f73666dc58e7e2c2c669c /intern | |
parent | 8c4d28cdb907d212a190147151f2e90459542813 (diff) |
Fix T54337: Cycles crash with simple subd object in debug build
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/mesh_subdivision.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/intern/cycles/render/mesh_subdivision.cpp b/intern/cycles/render/mesh_subdivision.cpp index 585ed77b026..ea71f71b655 100644 --- a/intern/cycles/render/mesh_subdivision.cpp +++ b/intern/cycles/render/mesh_subdivision.cpp @@ -204,7 +204,9 @@ public: src = dest; } - patch_table->ComputeLocalPointValues(&verts[0], &verts[num_refiner_verts]); + if(num_refiner_verts) { + patch_table->ComputeLocalPointValues(&verts[0], &verts[num_refiner_verts]); + } /* create patch map */ patch_map = new Far::PatchMap(*patch_table); @@ -236,13 +238,15 @@ public: src = dest; } - if(attr.same_storage(attr.type, TypeDesc::TypeFloat)) { - patch_table->ComputeLocalPointValues((OsdValue<float>*)&attr.buffer[0], - (OsdValue<float>*)&attr.buffer[num_refiner_verts * attr.data_sizeof()]); - } - else { - patch_table->ComputeLocalPointValues((OsdValue<float4>*)&attr.buffer[0], - (OsdValue<float4>*)&attr.buffer[num_refiner_verts * attr.data_sizeof()]); + if(num_refiner_verts) { + if(attr.same_storage(attr.type, TypeDesc::TypeFloat)) { + patch_table->ComputeLocalPointValues((OsdValue<float>*)&attr.buffer[0], + (OsdValue<float>*)&attr.buffer[num_refiner_verts * attr.data_sizeof()]); + } + else { + patch_table->ComputeLocalPointValues((OsdValue<float4>*)&attr.buffer[0], + (OsdValue<float4>*)&attr.buffer[num_refiner_verts * attr.data_sizeof()]); + } } } else if(attr.element == ATTR_ELEMENT_CORNER || attr.element == ATTR_ELEMENT_CORNER_BYTE) { |