[Bf-blender-cvs] [f315a469820] master: Nodes: add preview image storage to node group

Jacques Lucke noreply at git.blender.org
Sat Nov 6 16:45:47 CET 2021


Commit: f315a4698208c670aab8aec639a4a29244213002
Author: Jacques Lucke
Date:   Sat Nov 6 16:43:26 2021 +0100
Branches: master
https://developer.blender.org/rBf315a4698208c670aab8aec639a4a29244213002

Nodes: add preview image storage to node group

This is part of T92811.

Differential Revision: https://developer.blender.org/D13105

===================================================================

M	source/blender/blenkernel/intern/icons.cc
M	source/blender/blenkernel/intern/node.cc
M	source/blender/blenloader/intern/readblenentry.c
M	source/blender/makesdna/DNA_node_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/icons.cc b/source/blender/blenkernel/intern/icons.cc
index f820b345c59..ffc39028400 100644
--- a/source/blender/blenkernel/intern/icons.cc
+++ b/source/blender/blenkernel/intern/icons.cc
@@ -35,6 +35,7 @@
 #include "DNA_gpencil_types.h"
 #include "DNA_light_types.h"
 #include "DNA_material_types.h"
+#include "DNA_node_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -383,6 +384,7 @@ PreviewImage **BKE_previewimg_id_get_p(const ID *id)
       ID_PRV_CASE(ID_SCE, Scene);
       ID_PRV_CASE(ID_SCR, bScreen);
       ID_PRV_CASE(ID_AC, bAction);
+      ID_PRV_CASE(ID_NT, bNodeTree);
 #undef ID_PRV_CASE
     default:
       break;
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 5ba4bbfc02b..3ec815054e7 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -66,6 +66,7 @@
 #include "BKE_colortools.h"
 #include "BKE_cryptomatte.h"
 #include "BKE_global.h"
+#include "BKE_icons.h"
 #include "BKE_idprop.h"
 #include "BKE_idtype.h"
 #include "BKE_lib_id.h"
@@ -248,6 +249,13 @@ static void ntree_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, c
     ntree_dst->field_inferencing_interface = node_field_inferencing_interface_copy(
         *ntree_src->field_inferencing_interface);
   }
+
+  if (flag & LIB_ID_COPY_NO_PREVIEW) {
+    ntree_dst->preview = NULL;
+  }
+  else {
+    BKE_previewimg_id_copy(&ntree_dst->id, &ntree_src->id);
+  }
 }
 
 static void ntree_free_data(ID *id)
@@ -303,6 +311,8 @@ static void ntree_free_data(ID *id)
   if (ntree->id.tag & LIB_TAG_LOCALIZED) {
     BKE_libblock_free_data(&ntree->id, true);
   }
+
+  BKE_previewimg_free(&ntree->preview);
 }
 
 static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
@@ -639,6 +649,8 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree)
   LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs) {
     write_node_socket_interface(writer, sock);
   }
+
+  BKE_previewimg_blend_write(writer, ntree->preview);
 }
 
 static void ntree_blend_write(BlendWriter *writer, ID *id, const void *id_address)
@@ -832,6 +844,9 @@ void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
     ntree->update |= NTREE_UPDATE_FIELD_INFERENCING;
   }
 
+  BLO_read_data_address(reader, &ntree->preview);
+  BKE_previewimg_blend_read(reader, ntree->preview);
+
   /* type verification is in lib-link */
 }
 
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 3306eb9e454..c0fdfa86907 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -347,6 +347,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *r_
         case ID_GR:  /* fall through */
         case ID_SCE: /* fall through */
         case ID_AC:  /* fall through */
+        case ID_NT:  /* fall through */
           new_prv = MEM_callocN(sizeof(PreviewImage), "newpreview");
           BLI_linklist_prepend(&previews, new_prv);
           tot++;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index d5d2520ddf6..94e4cc1323a 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -46,6 +46,7 @@ struct bNodePreview;
 struct bNodeTreeExec;
 struct bNodeType;
 struct uiBlock;
+struct PreviewImage;
 
 #define NODE_MAXSTR 64
 
@@ -561,6 +562,9 @@ typedef struct bNodeTree {
   int (*test_break)(void *);
   void (*update_draw)(void *);
   void *tbh, *prh, *sdh, *udh;
+
+  /** Image representing what the node group does. */
+  struct PreviewImage *preview;
 } bNodeTree;
 
 /* ntree->type, index */



More information about the Bf-blender-cvs mailing list