diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-23 18:29:43 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-23 18:29:43 +0400 |
commit | 4ee0087e3584c762d02d5d049557131fa0ed47c6 (patch) | |
tree | fdefa065bec5c67a30aa262b096225ea4aa98c46 /intern/cycles/render/mesh_displace.cpp | |
parent | 789b2acd772c2856a09017972e9cc7278f60c4ab (diff) |
Fix cycles displacement not working well with OSL and multiple objects.
Diffstat (limited to 'intern/cycles/render/mesh_displace.cpp')
-rw-r--r-- | intern/cycles/render/mesh_displace.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp index dea694a811e..fdfaaf4d7de 100644 --- a/intern/cycles/render/mesh_displace.cpp +++ b/intern/cycles/render/mesh_displace.cpp @@ -19,6 +19,7 @@ #include "device.h" #include "mesh.h" +#include "object.h" #include "scene.h" #include "shader.h" @@ -41,6 +42,19 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p if(!has_displacement) return false; + string msg = string_printf("Computing Displacement %s", mesh->name.c_str()); + progress.set_status("Updating Mesh", msg); + + /* find object index. todo: is arbitrary */ + size_t object_index = ~0; + + for(size_t i = 0; i < scene->objects.size(); i++) { + if(scene->objects[i]->mesh == mesh) { + object_index = i; + break; + } + } + /* setup input for device task */ vector<bool> done(mesh->verts.size(), false); device_vector<uint4> d_input; @@ -61,8 +75,8 @@ bool MeshManager::displace(Device *device, Scene *scene, Mesh *mesh, Progress& p done[t.v[j]] = true; /* set up object, primitive and barycentric coordinates */ - /* when used, non-instanced convention: object = -object-1; */ - int object = ~0; /* todo */ + /* when used, non-instanced convention: object = ~object */ + int object = ~object_index; int prim = mesh->tri_offset + i; float u, v; |