[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