From 8b806c86e12e92ffc8b486a69ce4de5938f09b4a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 30 Oct 2020 17:28:08 +0100 Subject: Fix T82027, T81718: Cycles crash with volume animation playback --- intern/cycles/render/geometry.cpp | 5 ++++- intern/cycles/render/volume.cpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'intern') diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp index 455959512fd..fdfce63bbeb 100644 --- a/intern/cycles/render/geometry.cpp +++ b/intern/cycles/render/geometry.cpp @@ -1129,7 +1129,10 @@ void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Pro } } - if (geom->need_update_rebuild && geom->type == Geometry::VOLUME) { + /* Re-create volume mesh if we will rebuild or refit the BVH. Note we + * should only do it in that case, otherwise the BVH and mesh can go + * out of sync. */ + if (geom->need_update && geom->type == Geometry::VOLUME) { /* Create volume meshes if there is voxel data. */ if (!volume_images_updated) { progress.set_status("Updating Meshes Volume Bounds"); diff --git a/intern/cycles/render/volume.cpp b/intern/cycles/render/volume.cpp index 89777d8669b..a8edc04f8a9 100644 --- a/intern/cycles/render/volume.cpp +++ b/intern/cycles/render/volume.cpp @@ -583,6 +583,7 @@ void GeometryManager::create_volume_mesh(Volume *volume, Progress &progress) volume->clear(); volume->reserve_mesh(vertices.size(), indices.size() / 3); volume->used_shaders.push_back(volume_shader); + volume->need_update = true; volume->need_update_rebuild = true; for (size_t i = 0; i < vertices.size(); ++i) { -- cgit v1.2.3