diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/render/geometry.cpp | 9 | ||||
-rw-r--r-- | intern/cycles/render/geometry.h | 1 |
2 files changed, 8 insertions, 2 deletions
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp index 6fc217f2d76..74907292943 100644 --- a/intern/cycles/render/geometry.cpp +++ b/intern/cycles/render/geometry.cpp @@ -61,6 +61,7 @@ Geometry::Geometry(const NodeType *node_type, const Type type) : Node(node_type), geometry_type(type), attributes(this, ATTR_PRIM_GEOMETRY) { need_update_rebuild = false; + need_update_bvh_for_offset = false; transform_applied = false; transform_negative_scaled = false; @@ -242,6 +243,7 @@ void Geometry::compute_bvh( clear_modified(); need_update_rebuild = false; + need_update_bvh_for_offset = false; } bool Geometry::has_motion_blur() const @@ -944,7 +946,8 @@ void GeometryManager::mesh_calc_offset(Scene *scene, BVHLayout bvh_layout) const bool has_optix_bvh = bvh_layout == BVH_LAYOUT_OPTIX || bvh_layout == BVH_LAYOUT_MULTI_OPTIX || bvh_layout == BVH_LAYOUT_MULTI_OPTIX_EMBREE; - geom->tag_bvh_update(has_optix_bvh); + geom->need_update_rebuild |= has_optix_bvh; + geom->need_update_bvh_for_offset = true; } if (geom->geometry_type == Geometry::MESH || geom->geometry_type == Geometry::VOLUME) { @@ -1590,7 +1593,9 @@ void GeometryManager::device_update(Device *device, displacement_done = true; } } + } + if (geom->is_modified() || geom->need_update_bvh_for_offset) { if (geom->need_build_bvh(bvh_layout)) { num_bvh++; } @@ -1632,7 +1637,7 @@ void GeometryManager::device_update(Device *device, size_t i = 0; foreach (Geometry *geom, scene->geometry) { - if (geom->is_modified()) { + if (geom->is_modified() || geom->need_update_bvh_for_offset) { pool.push(function_bind( &Geometry::compute_bvh, geom, device, dscene, &scene->params, &progress, i, num_bvh)); if (geom->need_build_bvh(bvh_layout)) { diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h index b124e950ad2..0e7c839d3d9 100644 --- a/intern/cycles/render/geometry.h +++ b/intern/cycles/render/geometry.h @@ -90,6 +90,7 @@ class Geometry : public Node { /* Update Flags */ bool need_update_rebuild; + bool need_update_bvh_for_offset; /* Index into scene->geometry (only valid during update) */ size_t index; |