diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-08-05 18:19:19 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-08-05 18:19:19 +0300 |
commit | d95100e821483fa6c53be0117cd6169658e2fd97 (patch) | |
tree | 1c19788af39bc22de35925c5fa3c2711f5a6dbf2 /intern | |
parent | e4379971746c8b7fadb7c0c0f0933533e15376a3 (diff) |
Fix T98769: Cycles crash with multi-device rendering and BVH refits
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/bvh/bvh.h | 7 | ||||
-rw-r--r-- | intern/cycles/bvh/multi.cpp | 8 | ||||
-rw-r--r-- | intern/cycles/bvh/multi.h | 3 | ||||
-rw-r--r-- | intern/cycles/scene/geometry.cpp | 3 |
4 files changed, 19 insertions, 2 deletions
diff --git a/intern/cycles/bvh/bvh.h b/intern/cycles/bvh/bvh.h index be390f8a673..19ebf7f68ba 100644 --- a/intern/cycles/bvh/bvh.h +++ b/intern/cycles/bvh/bvh.h @@ -74,6 +74,13 @@ class BVH { { } + virtual void replace_geometry(const vector<Geometry *> &geometry, + const vector<Object *> &objects) + { + this->geometry = geometry; + this->objects = objects; + } + protected: BVH(const BVHParams ¶ms, const vector<Geometry *> &geometry, diff --git a/intern/cycles/bvh/multi.cpp b/intern/cycles/bvh/multi.cpp index 7211720b56b..d9ee2fce966 100644 --- a/intern/cycles/bvh/multi.cpp +++ b/intern/cycles/bvh/multi.cpp @@ -21,4 +21,12 @@ BVHMulti::~BVHMulti() } } +void BVHMulti::replace_geometry(const vector<Geometry *> &geometry, + const vector<Object *> &objects) +{ + foreach (BVH *bvh, sub_bvhs) { + bvh->replace_geometry(geometry, objects); + } +} + CCL_NAMESPACE_END diff --git a/intern/cycles/bvh/multi.h b/intern/cycles/bvh/multi.h index 824899f3101..aafbfae19e0 100644 --- a/intern/cycles/bvh/multi.h +++ b/intern/cycles/bvh/multi.h @@ -19,6 +19,9 @@ class BVHMulti : public BVH { const vector<Geometry *> &geometry, const vector<Object *> &objects); virtual ~BVHMulti(); + + virtual void replace_geometry(const vector<Geometry *> &geometry, + const vector<Object *> &objects); }; CCL_NAMESPACE_END diff --git a/intern/cycles/scene/geometry.cpp b/intern/cycles/scene/geometry.cpp index 67ff118692e..ae8dcaa43b6 100644 --- a/intern/cycles/scene/geometry.cpp +++ b/intern/cycles/scene/geometry.cpp @@ -217,8 +217,7 @@ void Geometry::compute_bvh(Device *device, if (bvh && !need_update_rebuild) { progress->set_status(msg, "Refitting BVH"); - bvh->geometry = geometry; - bvh->objects = objects; + bvh->replace_geometry(geometry, objects); device->build_bvh(bvh, *progress, true); } |