forked from bartvdbraak/blender
Cycles: Solve dependency between camera and object synchronization
IN theory object might depend on camera location (spatial adaptive subdivisions for example) which became not possible to achieve after camera in volume support. Should be no functional changes for artists.
This commit is contained in:
parent
ddba5c27a7
commit
30e4009f0a
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user