Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/mesh_displace.cpp')
-rw-r--r--intern/cycles/render/mesh_displace.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/intern/cycles/render/mesh_displace.cpp b/intern/cycles/render/mesh_displace.cpp
index 1ba0c7f7291..dccfd74f17a 100644
--- a/intern/cycles/render/mesh_displace.cpp
+++ b/intern/cycles/render/mesh_displace.cpp
@@ -54,9 +54,10 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
}
/* setup input for device task */
- vector<bool> done(mesh->verts.size(), false);
+ const size_t num_verts = mesh->verts.size();
+ vector<bool> done(num_verts, false);
device_vector<uint4> d_input;
- uint4 *d_input_data = d_input.resize(mesh->verts.size());
+ uint4 *d_input_data = d_input.resize(num_verts);
size_t d_input_size = 0;
for(size_t i = 0; i < mesh->triangles.size(); i++) {
@@ -78,7 +79,7 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
int prim = mesh->tri_offset + i;
float u, v;
- switch (j) {
+ switch(j) {
case 0:
u = 1.0f;
v = 0.0f;
@@ -137,11 +138,12 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
/* read result */
done.clear();
- done.resize(mesh->verts.size(), false);
+ done.resize(num_verts, false);
int k = 0;
float4 *offset = (float4*)d_output.data_pointer;
+ Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
for(size_t i = 0; i < mesh->triangles.size(); i++) {
Mesh::Triangle t = mesh->triangles[i];
Shader *shader = scene->shaders[mesh->shader[i]];
@@ -154,6 +156,12 @@ bool MeshManager::displace(Device *device, DeviceScene *dscene, Scene *scene, Me
done[t.v[j]] = true;
float3 off = float4_to_float3(offset[k++]);
mesh->verts[t.v[j]] += off;
+ if(attr_mP != NULL) {
+ for(int step = 0; step < mesh->motion_steps - 1; step++) {
+ float3 *mP = attr_mP->data_float3() + step*num_verts;
+ mP[t.v[j]] += off;
+ }
+ }
}
}
}