Fix T81893: Cycles viewport crash changing mesh to smoke domain

Now that volume is a dedicated geometry type in Cycles, we need to re-allocate
the geometry when a mesh changes into a volume.
This commit is contained in:
Brecht Van Lommel 2020-10-26 12:15:52 +01:00
parent 6fc0d743f1
commit ae5fd92228
Notes: blender-bot 2023-02-14 02:22:07 +01:00
Referenced by issue #82027, Crash on Cycles render preview playing & stopping animation when using Quick Smoke
Referenced by issue #81893, Blender crashes when using Gas Fluid Domain in Cycles
2 changed files with 5 additions and 4 deletions

View File

@ -50,11 +50,11 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
/* Test if we can instance or if the object is modified. */
BL::ID b_ob_data = b_ob.data();
BL::ID b_key_id = (BKE_object_is_modified(b_ob)) ? b_ob_instance : b_ob_data;
GeometryKey key(b_key_id.ptr.data, use_particle_hair);
BL::Material material_override = view_layer.material_override;
Shader *default_shader = (b_ob.type() == BL::Object::type_VOLUME) ? scene->default_volume :
scene->default_surface;
Geometry::Type geom_type = determine_geom_type(b_ob, use_particle_hair);
GeometryKey key(b_key_id.ptr.data, geom_type);
/* Find shader indices. */
vector<Shader *> used_shaders;

View File

@ -19,6 +19,7 @@
#include <string.h>
#include "render/geometry.h"
#include "render/scene.h"
#include "util/util_map.h"
@ -230,9 +231,9 @@ struct ObjectKey {
struct GeometryKey {
void *id;
bool use_particle_hair;
Geometry::Type geometry_type;
GeometryKey(void *id, bool use_particle_hair) : id(id), use_particle_hair(use_particle_hair)
GeometryKey(void *id, Geometry::Type geometry_type) : id(id), geometry_type(geometry_type)
{
}
@ -242,7 +243,7 @@ struct GeometryKey {
return true;
}
else if (id == k.id) {
if (use_particle_hair < k.use_particle_hair) {
if (geometry_type < k.geometry_type) {
return true;
}
}