Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2020-02-25 13:52:32 +0300
committerBrecht Van Lommel <brecht@blender.org>2020-02-25 13:53:25 +0300
commit7463da6c72a0fb2bc72bda53ece27670d5af2c72 (patch)
treec34870a0748e63cdd400686b8ffb194412765a6b /intern
parente0085bfd24da3dcfb30498ad8c579620042aa6c5 (diff)
Fix T74095: crash deleting all faces in edit mode with Cycles rendering
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_curves.cpp8
-rw-r--r--intern/cycles/blender/blender_geometry.cpp8
-rw-r--r--intern/cycles/blender/blender_mesh.cpp8
-rw-r--r--intern/cycles/blender/blender_sync.h12
-rw-r--r--intern/cycles/blender/blender_volume.cpp5
5 files changed, 30 insertions, 11 deletions
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index affd5685337..fe0f8f3b88a 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -1154,7 +1154,10 @@ void BlenderSync::sync_particle_hair(
}
}
-void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Geometry *geom)
+void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph,
+ BL::Object b_ob,
+ Geometry *geom,
+ const vector<Shader *> &used_shaders)
{
Hair *hair = (geom->type == Geometry::HAIR) ? static_cast<Hair *>(geom) : NULL;
Mesh *mesh = (geom->type == Geometry::MESH) ? static_cast<Mesh *>(geom) : NULL;
@@ -1172,6 +1175,9 @@ void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Geometry
oldtriangles.steal_data(mesh->triangles);
}
+ geom->clear();
+ geom->used_shaders = used_shaders;
+
if (view_layer.use_hair && scene->curve_system_manager->use_curves) {
/* Particle hair. */
bool need_undeformed = geom->need_attribute(scene, ATTR_STD_GENERATED);
diff --git a/intern/cycles/blender/blender_geometry.cpp b/intern/cycles/blender/blender_geometry.cpp
index 8b803835b62..304b3d18e27 100644
--- a/intern/cycles/blender/blender_geometry.cpp
+++ b/intern/cycles/blender/blender_geometry.cpp
@@ -117,20 +117,18 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
geometry_synced.insert(geom);
- geom->clear();
- geom->used_shaders = used_shaders;
geom->name = ustring(b_ob_data.name().c_str());
if (use_particle_hair) {
- sync_hair(b_depsgraph, b_ob, geom);
+ sync_hair(b_depsgraph, b_ob, geom, used_shaders);
}
else if (object_fluid_gas_domain_find(b_ob)) {
Mesh *mesh = static_cast<Mesh *>(geom);
- sync_volume(b_ob, mesh);
+ sync_volume(b_ob, mesh, used_shaders);
}
else {
Mesh *mesh = static_cast<Mesh *>(geom);
- sync_mesh(b_depsgraph, b_ob, mesh);
+ sync_mesh(b_depsgraph, b_ob, mesh, used_shaders);
}
return geom;
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 42300f6eb6f..075c9250e8c 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -941,7 +941,10 @@ static void sync_mesh_fluid_motion(BL::Object &b_ob, Scene *scene, Mesh *mesh)
}
}
-void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *mesh)
+void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph,
+ BL::Object b_ob,
+ Mesh *mesh,
+ const vector<Shader *> &used_shaders)
{
array<int> oldtriangles;
array<Mesh::SubdFace> oldsubd_faces;
@@ -950,6 +953,9 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *me
oldsubd_faces.steal_data(mesh->subd_faces);
oldsubd_face_corners.steal_data(mesh->subd_face_corners);
+ mesh->clear();
+ mesh->used_shaders = used_shaders;
+
mesh->subdivision_type = Mesh::SUBDIVISION_NONE;
if (view_layer.use_surfaces) {
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index efd4511eb1e..219a3615835 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -137,14 +137,20 @@ class BlenderSync {
bool *use_portal);
/* Volume */
- void sync_volume(BL::Object &b_ob, Mesh *mesh);
+ void sync_volume(BL::Object &b_ob, Mesh *mesh, const vector<Shader *> &used_shaders);
/* Mesh */
- void sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *mesh);
+ void sync_mesh(BL::Depsgraph b_depsgraph,
+ BL::Object b_ob,
+ Mesh *mesh,
+ const vector<Shader *> &used_shaders);
void sync_mesh_motion(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *mesh, int motion_step);
/* Hair */
- void sync_hair(BL::Depsgraph b_depsgraph, BL::Object b_ob, Geometry *geom);
+ void sync_hair(BL::Depsgraph b_depsgraph,
+ BL::Object b_ob,
+ Geometry *geom,
+ const vector<Shader *> &used_shaders);
void sync_hair_motion(BL::Depsgraph b_depsgraph,
BL::Object b_ob,
Geometry *geom,
diff --git a/intern/cycles/blender/blender_volume.cpp b/intern/cycles/blender/blender_volume.cpp
index 87fb9620725..ae70e60d60e 100644
--- a/intern/cycles/blender/blender_volume.cpp
+++ b/intern/cycles/blender/blender_volume.cpp
@@ -80,10 +80,13 @@ static void sync_smoke_volume(Scene *scene, BL::Object &b_ob, Mesh *mesh, float
}
}
-void BlenderSync::sync_volume(BL::Object &b_ob, Mesh *mesh)
+void BlenderSync::sync_volume(BL::Object &b_ob, Mesh *mesh, const vector<Shader *> &used_shaders)
{
bool old_has_voxel_attributes = mesh->has_voxel_attributes();
+ mesh->clear();
+ mesh->used_shaders = used_shaders;
+
/* Smoke domain. */
sync_smoke_volume(scene, b_ob, mesh, b_scene.frame_current());