diff options
Diffstat (limited to 'intern/cycles/render/mesh_displace.cpp')
-rw-r--r-- | intern/cycles/render/mesh_displace.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp index c4f3e43bfba..a6f8e3f6be8 100644 --- a/intern/cycles/render/mesh_displace.cpp +++ b/intern/cycles/render/mesh_displace.cpp @@ -89,7 +89,7 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p return false; /* run device task */ - device_vector<float3> d_output; + device_vector<float4> d_output; d_output.resize(d_input.size()); device->mem_alloc(d_input, MEM_READ_ONLY); @@ -106,7 +106,7 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p device->task_add(task); device->task_wait(); - device->mem_copy_from(d_output, 0, 1, d_output.size(), sizeof(float3)); + device->mem_copy_from(d_output, 0, 1, d_output.size(), sizeof(float4)); device->mem_free(d_input); device->mem_free(d_output); @@ -118,7 +118,7 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p done.resize(mesh->verts.size(), false); int k = 0; - float3 *offset = (float3*)d_output.data_pointer; + float4 *offset = (float4*)d_output.data_pointer; for(size_t i = 0; i < mesh->triangles.size(); i++) { Mesh::Triangle t = mesh->triangles[i]; @@ -130,7 +130,8 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p for(int j = 0; j < 3; j++) { if(!done[t.v[j]]) { done[t.v[j]] = true; - mesh->verts[t.v[j]] += offset[k++]; + float3 off = float4_to_float3(offset[k++]); + mesh->verts[t.v[j]] += off; } } } |