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
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2020-05-07 17:54:32 +0300
committerBastien Montagne <bastien@blender.org>2020-05-07 17:54:32 +0300
commitb09189500dd6c7c7769c38ac55f264dc663b643a (patch)
treee216ad748fb0591c5abf78d2c2f786a750693912 /source/blender/blenkernel
parent95f8f321b6f5225febbfdd8846f37e2049e55fa2 (diff)
Refactor: libquery: Add NodeTree foreach_id support.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/lib_query.c61
-rw-r--r--source/blender/blenkernel/intern/node.c63
2 files changed, 64 insertions, 60 deletions
diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index 27667b1e110..46e18bba05d 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -214,41 +214,6 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void
BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, IDWALK_CB_USER);
}
-static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
-{
- IDP_foreach_property(
- sock->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
-
- switch ((eNodeSocketDatatype)sock->type) {
- case SOCK_OBJECT: {
- bNodeSocketValueObject *default_value = sock->default_value;
- FOREACH_CALLBACK_INVOKE_ID_PP(data, (ID **)&default_value->value, IDWALK_CB_USER);
- break;
- }
- case SOCK_IMAGE: {
- bNodeSocketValueImage *default_value = sock->default_value;
- FOREACH_CALLBACK_INVOKE_ID_PP(data, (ID **)&default_value->value, IDWALK_CB_USER);
- break;
- }
- case SOCK_FLOAT:
- case SOCK_VECTOR:
- case SOCK_RGBA:
- case SOCK_BOOLEAN:
- case SOCK_INT:
- case SOCK_STRING:
- case __SOCK_MESH:
- case SOCK_CUSTOM:
- case SOCK_SHADER:
- case SOCK_EMITTERS:
- case SOCK_EVENTS:
- case SOCK_FORCES:
- case SOCK_CONTROL_FLOW:
- break;
- }
-
- FOREACH_FINALIZE_VOID;
-}
-
static void library_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSED(rbw),
ID **id_pointer,
void *user_data,
@@ -1055,31 +1020,7 @@ static void library_foreach_ID_link(Main *bmain,
}
case ID_NT: {
- bNodeTree *ntree = (bNodeTree *)id;
-
- CALLBACK_INVOKE(ntree->gpd, IDWALK_CB_USER);
-
- LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
- CALLBACK_INVOKE_ID(node->id, IDWALK_CB_USER);
-
- IDP_foreach_property(node->prop,
- IDP_TYPE_FILTER_ID,
- BKE_lib_query_idpropertiesForeachIDLink_callback,
- &data);
- LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
- library_foreach_node_socket(&data, sock);
- }
- LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
- library_foreach_node_socket(&data, sock);
- }
- }
-
- LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs) {
- library_foreach_node_socket(&data, sock);
- }
- LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs) {
- library_foreach_node_socket(&data, sock);
- }
+ BLI_assert(0);
break;
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index e6547012b88..2b4ec740c96 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -32,6 +32,7 @@
#include "DNA_action_types.h"
#include "DNA_anim_types.h"
+#include "DNA_gpencil_types.h"
#include "DNA_light_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_material_types.h"
@@ -57,6 +58,7 @@
#include "BKE_idprop.h"
#include "BKE_idtype.h"
#include "BKE_lib_id.h"
+#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -253,6 +255,66 @@ static void ntree_free_data(ID *id)
}
}
+static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
+{
+ IDP_foreach_property(
+ sock->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
+
+ switch ((eNodeSocketDatatype)sock->type) {
+ case SOCK_OBJECT: {
+ bNodeSocketValueObject *default_value = sock->default_value;
+ BKE_LIB_FOREACHID_PROCESS(data, default_value->value, IDWALK_CB_USER);
+ break;
+ }
+ case SOCK_IMAGE: {
+ bNodeSocketValueImage *default_value = sock->default_value;
+ BKE_LIB_FOREACHID_PROCESS(data, default_value->value, IDWALK_CB_USER);
+ break;
+ }
+ case SOCK_FLOAT:
+ case SOCK_VECTOR:
+ case SOCK_RGBA:
+ case SOCK_BOOLEAN:
+ case SOCK_INT:
+ case SOCK_STRING:
+ case __SOCK_MESH:
+ case SOCK_CUSTOM:
+ case SOCK_SHADER:
+ case SOCK_EMITTERS:
+ case SOCK_EVENTS:
+ case SOCK_FORCES:
+ case SOCK_CONTROL_FLOW:
+ break;
+ }
+}
+
+static void node_foreach_id(ID *id, LibraryForeachIDData *data)
+{
+ bNodeTree *ntree = (bNodeTree *)id;
+
+ BKE_LIB_FOREACHID_PROCESS(data, ntree->gpd, IDWALK_CB_USER);
+
+ LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+ BKE_LIB_FOREACHID_PROCESS_ID(data, node->id, IDWALK_CB_USER);
+
+ IDP_foreach_property(
+ node->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
+ LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
+ library_foreach_node_socket(data, sock);
+ }
+ LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
+ library_foreach_node_socket(data, sock);
+ }
+ }
+
+ LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs) {
+ library_foreach_node_socket(data, sock);
+ }
+ LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs) {
+ library_foreach_node_socket(data, sock);
+ }
+}
+
IDTypeInfo IDType_ID_NT = {
.id_code = ID_NT,
.id_filter = FILTER_ID_NT,
@@ -267,6 +329,7 @@ IDTypeInfo IDType_ID_NT = {
.copy_data = ntree_copy_data,
.free_data = ntree_free_data,
.make_local = NULL,
+ .foreach_id = node_foreach_id,
};
static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType *ntype)