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/object.cpp')
-rw-r--r--intern/cycles/render/object.cpp39
1 files changed, 10 insertions, 29 deletions
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index b9702cfe531..6201775b992 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -57,7 +57,8 @@ struct UpdateObjectTransformState {
/* Packed object arrays. Those will be filled in. */
uint *object_flag;
KernelObject *objects;
- Transform *objects_vector;
+ Transform *object_motion_pass;
+ DecomposedTransform *object_motion;
/* Flags which will be synchronized to Integrator. */
bool have_motion;
@@ -274,27 +275,7 @@ void Object::tag_update(Scene *scene)
scene->object_manager->need_update = true;
}
-vector<float> Object::motion_times()
-{
- /* compute times at which we sample motion for this object */
- vector<float> times;
-
- if(!mesh || mesh->motion_steps == 1)
- return times;
-
- int motion_steps = mesh->motion_steps;
-
- for(int step = 0; step < motion_steps; step++) {
- if(step != motion_steps / 2) {
- float time = 2.0f * step / (motion_steps - 1) - 1.0f;
- times.push_back(time);
- }
- }
-
- return times;
-}
-
-bool Object::is_traceable()
+bool Object::is_traceable() const
{
/* Mesh itself can be empty,can skip all such objects. */
if(!bounds.valid() || bounds.size() == make_float3(0.0f, 0.0f, 0.0f)) {
@@ -332,7 +313,7 @@ void ObjectManager::device_update_object_transform(UpdateObjectTransformState *s
int object_index)
{
KernelObject& kobject = state->objects[object_index];
- Transform *objects_vector = state->objects_vector;
+ Transform *object_motion_pass = state->object_motion_pass;
Mesh *mesh = ob->mesh;
uint flag = 0;
@@ -434,8 +415,8 @@ void ObjectManager::device_update_object_transform(UpdateObjectTransformState *s
mtfm.post = mtfm.post * itfm;
}
- objects_vector[object_index*OBJECT_VECTOR_SIZE+0] = mtfm.pre;
- objects_vector[object_index*OBJECT_VECTOR_SIZE+1] = mtfm.post;
+ object_motion_pass[object_index*OBJECT_MOTION_PASS_SIZE+0] = mtfm.pre;
+ object_motion_pass[object_index*OBJECT_MOTION_PASS_SIZE+1] = mtfm.post;
}
else if(state->need_motion == Scene::MOTION_BLUR) {
if(ob->use_motion) {
@@ -528,10 +509,10 @@ void ObjectManager::device_update_transforms(DeviceScene *dscene,
state.objects = dscene->objects.alloc(scene->objects.size());
state.object_flag = dscene->object_flag.alloc(scene->objects.size());
- state.objects_vector = NULL;
+ state.object_motion_pass = NULL;
if(state.need_motion == Scene::MOTION_PASS) {
- state.objects_vector = dscene->objects_vector.alloc(OBJECT_VECTOR_SIZE*scene->objects.size());
+ state.object_motion_pass = dscene->object_motion_pass.alloc(OBJECT_MOTION_PASS_SIZE*scene->objects.size());
}
/* Particle system device offsets
@@ -574,7 +555,7 @@ void ObjectManager::device_update_transforms(DeviceScene *dscene,
dscene->objects.copy_to_device();
if(state.need_motion == Scene::MOTION_PASS) {
- dscene->objects_vector.copy_to_device();
+ dscene->object_motion_pass.copy_to_device();
}
dscene->data.bvh.have_motion = state.have_motion;
@@ -724,7 +705,7 @@ void ObjectManager::device_update_mesh_offsets(Device *, DeviceScene *dscene, Sc
void ObjectManager::device_free(Device *, DeviceScene *dscene)
{
dscene->objects.free();
- dscene->objects_vector.free();
+ dscene->object_motion_pass.free();
dscene->object_flag.free();
}