diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-27 00:59:35 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-27 00:59:35 +0400 |
commit | 7cbfe1839bf1402f430715292418f2cd5180107d (patch) | |
tree | 152efcdc8bfb4efb2a86215ed030f37c3c93324f /intern/cycles/render/mesh_displace.cpp | |
parent | b28848063fec337443af9b77c13143f82d52a53f (diff) |
Fix part of #33662: cycles crash using displacement on meshes with vertices not
attached to any face.
Diffstat (limited to 'intern/cycles/render/mesh_displace.cpp')
-rw-r--r-- | intern/cycles/render/mesh_displace.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp index fdfaaf4d7de..04267697b29 100644 --- a/intern/cycles/render/mesh_displace.cpp +++ b/intern/cycles/render/mesh_displace.cpp @@ -59,7 +59,7 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p vector<bool> done(mesh->verts.size(), false); device_vector<uint4> d_input; uint4 *d_input_data = d_input.resize(mesh->verts.size()); - size_t d_input_offset = 0; + size_t d_input_size = 0; for(size_t i = 0; i < mesh->triangles.size(); i++) { Mesh::Triangle t = mesh->triangles[i]; @@ -95,16 +95,16 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p /* back */ uint4 in = make_uint4(object, prim, __float_as_int(u), __float_as_int(v)); - d_input_data[d_input_offset++] = in; + d_input_data[d_input_size++] = in; } } - if(d_input_offset == 0) + if(d_input_size == 0) return false; /* run device task */ device_vector<float4> d_output; - d_output.resize(d_input.size()); + d_output.resize(d_input_size); device->mem_alloc(d_input, MEM_READ_ONLY); device->mem_copy_to(d_input); @@ -115,7 +115,7 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p task.shader_output = d_output.device_pointer; task.shader_eval_type = SHADER_EVAL_DISPLACE; task.shader_x = 0; - task.shader_w = d_input.size(); + task.shader_w = d_output.size(); device->task_add(task); device->task_wait(); |