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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-03-29 16:03:46 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-03-29 16:03:46 +0400
commit24ad7e0bea77d942267344990d22e931610c3d07 (patch)
tree5fe78f862e08bfb9e26e1d29cea2c2e403718df1 /intern/cycles/render/mesh.cpp
parent41d1675053b457370e70be137fd8105b9cd1890b (diff)
Cycles code refactor: add support for motion vertex attributes.
Diffstat (limited to 'intern/cycles/render/mesh.cpp')
-rw-r--r--intern/cycles/render/mesh.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 93f24886dc9..1c92eb584c1 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -46,6 +46,8 @@ Mesh::Mesh()
displacement_method = DISPLACE_BUMP;
bounds = BoundBox::empty;
+ motion_steps = 3;
+
bvh = NULL;
tri_offset = 0;
@@ -641,6 +643,7 @@ static void update_attribute_element_offset(Mesh *mesh, vector<float>& attr_floa
size_t size = mattr->element_size(
mesh->verts.size(),
mesh->triangles.size(),
+ mesh->motion_steps,
mesh->curves.size(),
mesh->curve_keys.size());
@@ -663,19 +666,21 @@ static void update_attribute_element_offset(Mesh *mesh, vector<float>& attr_floa
attr_float3[offset+k] = (&tfm->x)[k];
}
else {
- float3 *data = mattr->data_float3();
+ float4 *data = mattr->data_float4();
offset = attr_float3.size();
attr_float3.resize(attr_float3.size() + size);
for(size_t k = 0; k < size; k++)
- attr_float3[offset+k] = float3_to_float4(data[k]);
+ attr_float3[offset+k] = data[k];
}
/* mesh vertex/curve index is global, not per object, so we sneak
* a correction for that in here */
if(element == ATTR_ELEMENT_VERTEX)
offset -= mesh->vert_offset;
+ else if(element == ATTR_ELEMENT_VERTEX_MOTION)
+ offset -= mesh->vert_offset;
else if(element == ATTR_ELEMENT_FACE)
offset -= mesh->tri_offset;
else if(element == ATTR_ELEMENT_CORNER)
@@ -684,6 +689,8 @@ static void update_attribute_element_offset(Mesh *mesh, vector<float>& attr_floa
offset -= mesh->curve_offset;
else if(element == ATTR_ELEMENT_CURVE_KEY)
offset -= mesh->curvekey_offset;
+ else if(element == ATTR_ELEMENT_CURVE_KEY_MOTION)
+ offset -= mesh->curvekey_offset;
}
else {
/* attribute not found */
@@ -750,8 +757,8 @@ void MeshManager::device_update_attributes(Device *device, DeviceScene *dscene,
/* create attribute lookup maps */
if(scene->shader_manager->use_osl())
update_osl_attributes(device, scene, mesh_attributes);
- else
- update_svm_attributes(device, dscene, scene, mesh_attributes);
+
+ update_svm_attributes(device, dscene, scene, mesh_attributes);
if(progress.get_cancel()) return;