[Bf-blender-cvs] [aae4262b603] cycles_procedural_api: do not clear hair arrays when synchronizing

Kévin Dietrich noreply at git.blender.org
Sat Sep 26 19:24:34 CEST 2020


Commit: aae4262b603a760b209d74c5038f7e70491950f7
Author: Kévin Dietrich
Date:   Tue Sep 22 17:34:37 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rBaae4262b603a760b209d74c5038f7e70491950f7

do not clear hair arrays when synchronizing

===================================================================

M	intern/cycles/blender/blender_curves.cpp
M	intern/cycles/blender/blender_mesh.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index e79c5c6933e..1af592fc8ab 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -822,27 +822,37 @@ void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph,
                             Hair *hair,
                             array<Node *> &used_shaders)
 {
-  hair->clear();
-  hair->set_used_shaders(used_shaders);
+  Hair new_hair;
+  new_hair.set_used_shaders(used_shaders);
 
   if (view_layer.use_hair) {
     if (b_ob.type() == BL::Object::type_HAIR) {
       /* Hair object. */
-      sync_hair(hair, b_ob, false);
+      sync_hair(&new_hair, b_ob, false);
     }
     else {
       /* Particle hair. */
-      bool need_undeformed = hair->need_attribute(scene, ATTR_STD_GENERATED);
+      bool need_undeformed = new_hair.need_attribute(scene, ATTR_STD_GENERATED);
       BL::Mesh b_mesh = object_to_mesh(
           b_data, b_ob, b_depsgraph, need_undeformed, Mesh::SUBDIVISION_NONE);
 
       if (b_mesh) {
-        sync_particle_hair(hair, b_mesh, b_ob, false);
+        sync_particle_hair(&new_hair, b_mesh, b_ob, false);
         free_object_to_mesh(b_data, b_ob, b_mesh);
       }
     }
   }
 
+  /* update original sockets */
+
+  for (const SocketType &socket : new_hair.type->inputs) {
+    hair->set_value(socket, new_hair, socket);
+  }
+
+  foreach (Attribute &attr, new_hair.attributes.attributes) {
+    hair->attributes.attributes.push_back(std::move(attr));
+  }
+
   /* tag update */
 
   /* Compares curve_keys rather than strands in order to handle quick hair
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 865a470b437..a656bad2b2c 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1056,6 +1056,8 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph,
   /* mesh fluid motion mantaflow */
   sync_mesh_fluid_motion(b_ob, scene, &new_mesh);
 
+  /* update original sockets */
+
   for (const SocketType &socket : new_mesh.type->inputs) {
     mesh->set_value(socket, new_mesh, socket);
   }



More information about the Bf-blender-cvs mailing list