Fix T53833: Particle Info node and Displacement Crash
authorMai Lavelle <mai.lavelle@gmail.com>
Fri, 19 Jan 2018 03:40:48 +0000 (22:40 -0500)
committerMai Lavelle <mai.lavelle@gmail.com>
Fri, 19 Jan 2018 03:40:48 +0000 (22:40 -0500)
The displacement shared was running before particle data was copied to the
device causing bad memory access when the particle info node was used. Fix
is simply to move particle update before mesh update so the data is
available to displacement shaders.

(Altho this fixes the crash the particle info node is still mostly useless
with displacement for now...)

intern/cycles/render/scene.cpp

index 09a69265de892d77d919637ae85d22df2d4b883e..e34601a36a94d13df611f3daf530d71aea64a0f1 100644 (file)
@@ -214,6 +214,11 @@ void Scene::device_update(Device *device_, Progress& progress)
 
        if(progress.get_cancel() || device->have_error()) return;
 
+       progress.set_status("Updating Particle Systems");
+       particle_system_manager->device_update(device, &dscene, this, progress);
+
+       if(progress.get_cancel() || device->have_error()) return;
+
        progress.set_status("Updating Meshes");
        mesh_manager->device_update(device, &dscene, this, progress);
 
@@ -249,11 +254,6 @@ void Scene::device_update(Device *device_, Progress& progress)
 
        if(progress.get_cancel() || device->have_error()) return;
 
-       progress.set_status("Updating Particle Systems");
-       particle_system_manager->device_update(device, &dscene, this, progress);
-
-       if(progress.get_cancel() || device->have_error()) return;
-
        progress.set_status("Updating Integrator");
        integrator->device_update(device, &dscene, this);