[Bf-blender-cvs] [8262c2577e2] spreadsheet-active-node: cleanup
Jacques Lucke
noreply at git.blender.org
Wed Mar 31 13:31:15 CEST 2021
Commit: 8262c2577e22959a2f52b0c037c8ce115db7dc19
Author: Jacques Lucke
Date: Wed Mar 31 12:52:45 2021 +0200
Branches: spreadsheet-active-node
https://developer.blender.org/rB8262c2577e22959a2f52b0c037c8ce115db7dc19
cleanup
===================================================================
M source/blender/blenkernel/BKE_object.h
M source/blender/blenkernel/intern/object.c
M source/blender/modifiers/intern/MOD_nodes.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 0c2c6313dde..9122d030f3c 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -34,6 +34,7 @@ struct Base;
struct BoundBox;
struct Curve;
struct Depsgraph;
+struct GeometrySet;
struct GpencilModifierData;
struct HookGpencilModifierData;
struct HookModifierData;
@@ -69,6 +70,8 @@ void BKE_object_free_curve_cache(struct Object *ob);
void BKE_object_free_derived_caches(struct Object *ob);
void BKE_object_free_caches(struct Object *object);
+void BKE_object_preview_geometry_set(struct Object *ob, struct GeometrySet *geometry_set);
+
void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *hmd);
void BKE_object_modifier_gpencil_hook_reset(struct Object *ob,
struct HookGpencilModifierData *hmd);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 1413fddd18c..c58183f79ec 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1810,6 +1810,18 @@ void BKE_object_free_caches(Object *object)
}
}
+/* Can be called from multiple threads. */
+void BKE_object_preview_geometry_set(Object *ob, struct GeometrySet *geometry_set)
+{
+ static ThreadMutex mutex = BLI_MUTEX_INITIALIZER;
+ BLI_mutex_lock(&mutex);
+ if (ob->runtime.geometry_set_preview != NULL) {
+ BKE_geometry_set_free(ob->runtime.geometry_set_preview);
+ }
+ ob->runtime.geometry_set_preview = geometry_set;
+ BLI_mutex_unlock(&mutex);
+}
+
/**
* Actual check for internal data, not context or flags.
*/
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 7815234b037..ee0d70e70ec 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -51,6 +51,7 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_node_ui_storage.hh"
+#include "BKE_object.h"
#include "BKE_pointcloud.h"
#include "BKE_screen.h"
#include "BKE_simulation.h"
@@ -406,11 +407,8 @@ class GeometryNodesEvaluator {
if (output_socket->is_available() && output_socket->bsocket()->type == SOCK_GEOMETRY) {
GeometrySet value = node_outputs_map.lookup<GeometrySet>(output_socket->identifier());
value.ensure_own_non_instances();
- static std::mutex mutex;
- std::lock_guard lock{mutex};
- delete self_object_->runtime.geometry_set_preview;
- const_cast<Object *>(self_object_)->runtime.geometry_set_preview = new GeometrySet(
- std::move(value));
+ BKE_object_preview_geometry_set(const_cast<Object *>(self_object_),
+ new GeometrySet(std::move(value)));
}
}
}
More information about the Bf-blender-cvs
mailing list