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:
parent
6fc0d743f1
commit
ae5fd92228
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user