[Bf-blender-cvs] [987198521d0] cycles_procedural_api: Merge branch 'master' into cycles_procedural_api

Kévin Dietrich noreply at git.blender.org
Mon Oct 26 23:27:07 CET 2020


Commit: 987198521d0d3b38140f2bdf045a7272b6cfc8eb
Author: Kévin Dietrich
Date:   Sun Oct 25 16:07:13 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB987198521d0d3b38140f2bdf045a7272b6cfc8eb

Merge branch 'master' into cycles_procedural_api

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



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

diff --cc intern/cycles/blender/blender_object.cpp
index 115195dad54,23faacc15da..9a6703ce523
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@@ -463,24 -393,22 +463,29 @@@ void BlenderSync::sync_objects(BL::Deps
      /* Load per-object culling data. */
      culling.init_object(scene, b_ob);
  
+     /* Ensure the object geom supporting the hair is processed before adding
+      * the hair processing task to the task pool, calling .to_mesh() on the
+      * same object in parallel does not work. */
+     const bool sync_hair = b_instance.show_particles() && object_has_particle_hair(b_ob);
+ 
      /* Object itself. */
      if (b_instance.show_self()) {
 -      sync_object(b_depsgraph,
 -                  b_view_layer,
 -                  b_instance,
 -                  motion_time,
 -                  false,
 -                  show_lights,
 -                  culling,
 -                  &use_portal,
 -                  sync_hair ? NULL : &geom_task_pool);
 +      BL::MeshSequenceCacheModifier b_mesh_cache = object_alembic_cache_find(b_ob);
 +
 +      if (b_mesh_cache) {
 +        sync_procedural(b_ob, b_mesh_cache, b_depsgraph.scene().frame_current(), motion_time);
 +      }
- 	  else {
- 		  sync_object(b_depsgraph,
- 					  b_view_layer,
- 					  b_instance,
- 					  motion_time,
- 					  false,
- 					  show_lights,
- 					  culling,
- 					  &use_portal,
- 					  &geom_task_pool);
- 	  }
++      else {
++        sync_object(b_depsgraph,
++                    b_view_layer,
++                    b_instance,
++                    motion_time,
++                    false,
++                    show_lights,
++                    culling,
++                    &use_portal,
++                    sync_hair ? NULL : &geom_task_pool);
++      }
      }
  
      /* Particle hair as separate object. */
diff --cc intern/cycles/bvh/bvh_embree.cpp
index cb482b8bb17,53776a55257..910e3780b2e
--- a/intern/cycles/bvh/bvh_embree.cpp
+++ b/intern/cycles/bvh/bvh_embree.cpp
@@@ -928,21 -948,23 +949,23 @@@ void BVHEmbree::refit_nodes(
    /* Update all vertex buffers, then tell Embree to rebuild/-fit the BVHs. */
    unsigned geom_id = 0;
    foreach (Object *ob, objects) {
 -    if (!params.top_level || (ob->is_traceable() && !ob->geometry->is_instanced())) {
 -      Geometry *geom = ob->geometry;
 +    if (!params.top_level || (ob->is_traceable() && !ob->get_geometry()->is_instanced())) {
 +      Geometry *geom = ob->get_geometry();
  
 -      if (geom->type == Geometry::MESH || geom->type == Geometry::VOLUME) {
 +      if (geom->geometry_type == Geometry::MESH || geom->geometry_type == Geometry::VOLUME) {
          Mesh *mesh = static_cast<Mesh *>(geom);
          if (mesh->num_triangles() > 0) {
-           update_tri_vertex_buffer(rtcGetGeometry(scene, geom_id), mesh);
-           rtcCommitGeometry(rtcGetGeometry(scene, geom_id));
+           RTCGeometry geom = rtcGetGeometry(scene, geom_id);
+           set_tri_vertex_buffer(geom, mesh, true);
+           rtcCommitGeometry(geom);
          }
        }
 -      else if (geom->type == Geometry::HAIR) {
 +      else if (geom->geometry_type == Geometry::HAIR) {
          Hair *hair = static_cast<Hair *>(geom);
          if (hair->num_curves() > 0) {
-           update_curve_vertex_buffer(rtcGetGeometry(scene, geom_id + 1), hair);
-           rtcCommitGeometry(rtcGetGeometry(scene, geom_id + 1));
+           RTCGeometry geom = rtcGetGeometry(scene, geom_id + 1);
+           set_curve_vertex_buffer(geom, hair, true);
+           rtcCommitGeometry(geom);
          }
        }
      }



More information about the Bf-blender-cvs mailing list