diff options
-rw-r--r-- | intern/cycles/render/camera.cpp | 16 | ||||
-rw-r--r-- | intern/cycles/render/camera.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/scene.cpp | 16 |
3 files changed, 24 insertions, 9 deletions
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp index 9d03a9e360e..ea9b853d454 100644 --- a/intern/cycles/render/camera.cpp +++ b/intern/cycles/render/camera.cpp @@ -278,11 +278,20 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene) kcam->nearclip = nearclip; kcam->cliplength = (farclip == FLT_MAX)? FLT_MAX: farclip - nearclip; - need_device_update = false; - previous_need_motion = need_motion; - /* Camera in volume. */ kcam->is_inside_volume = 0; + + previous_need_motion = need_motion; +} + +void Camera::device_update_volume(Device *device, + DeviceScene *dscene, + Scene *scene) +{ + if(!need_device_update) { + return; + } + KernelCamera *kcam = &dscene->data.cam; BoundBox viewplane_boundbox = viewplane_bounds_get(); for(size_t i = 0; i < scene->objects.size(); ++i) { Object *object = scene->objects[i]; @@ -294,6 +303,7 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene) break; } } + need_device_update = false; } void Camera::device_free(Device *device, DeviceScene *dscene) diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h index 1b431e88ac4..e1faee3543d 100644 --- a/intern/cycles/render/camera.h +++ b/intern/cycles/render/camera.h @@ -116,6 +116,7 @@ public: void update(); void device_update(Device *device, DeviceScene *dscene, Scene *scene); + void device_update_volume(Device *device, DeviceScene *dscene, Scene *scene); void device_free(Device *device, DeviceScene *dscene); bool modified(const Camera& cam); diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp index bb7c03cbe6d..64d6fa4b9b9 100644 --- a/intern/cycles/render/scene.cpp +++ b/intern/cycles/render/scene.cpp @@ -165,6 +165,11 @@ void Scene::device_update(Device *device_, Progress& progress) if(progress.get_cancel() || device->have_error()) return; + progress.set_status("Updating Camera"); + camera->device_update(device, &dscene, this); + + if(progress.get_cancel() || device->have_error()) return; + progress.set_status("Updating Objects"); object_manager->device_update(device, &dscene, this, progress); @@ -185,6 +190,11 @@ void Scene::device_update(Device *device_, Progress& progress) if(progress.get_cancel() || device->have_error()) return; + progress.set_status("Updating Camera Volume"); + camera->device_update_volume(device, &dscene, this); + + if(progress.get_cancel() || device->have_error()) return; + progress.set_status("Updating Hair Systems"); curve_system_manager->device_update(device, &dscene, this, progress); @@ -195,12 +205,6 @@ void Scene::device_update(Device *device_, Progress& progress) if(progress.get_cancel() || device->have_error()) return; - /* TODO(sergey): Make sure camera is not needed above. */ - progress.set_status("Updating Camera"); - camera->device_update(device, &dscene, this); - - if(progress.get_cancel() || device->have_error()) return; - progress.set_status("Updating Lights"); light_manager->device_update(device, &dscene, this, progress); |