Commit: 677d699645be41acb96f256a1e2088aa21e5e72b
Author: Bastien Montagne
Date:   Wed Apr 4 11:56:35 2018 +0200
Branches: master
https://developer.blender.org/rB677d699645be41acb96f256a1e2088aa21e5e72b

Tweak ID->tag reset on file load (no visible change expected!).

Issue was, *some* IDs (like infamous nodetrees from materials etc.)
would not go through the 'main' read_libblock() func, so their tags were
never reset.

So now, we ensure direct_link_id() always clear the tags, and move
setting them in read_libblock() after the call to direct_link_id().

Needed for depsgraph, but general healthier fix actually.

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

M       source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index c35e49b801f..2b053b3fb45 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2235,6 +2235,10 @@ static void direct_link_id(FileData *fd, ID *id)
                IDP_DirectLinkGroup_OrFree(&id->properties, (fd->flags & 
FD_FLAGS_SWITCH_ENDIAN), fd);
        }
        id->py_instance = NULL;
+
+       /* That way datablock reading not going through main read_libblock() 
function are still in a clear tag state.
+        * (glowering at certain nodetree fake datablock here...). */
+       id->tag = 0;
 }
 
 /* ************ READ CurveMapping *************** */
@@ -8238,7 +8242,6 @@ static BHead *read_libblock(FileData *fd, Main *main, 
BHead *bhead, const short
        if (!id)
                return blo_nextbhead(fd, bhead);
        
-       id->tag = tag | LIB_TAG_NEED_LINK;
        id->lib = main->curlib;
        id->us = ID_FAKE_USERS(id);
        id->icon_id = 0;
@@ -8247,12 +8250,12 @@ static BHead *read_libblock(FileData *fd, Main *main, 
BHead *bhead, const short
        
        /* this case cannot be direct_linked: it's just the ID part */
        if (bhead->code == ID_ID) {
+               /* That way, we know which datablock needs do_versions 
(required currently for linking). */
+               id->tag = tag | LIB_TAG_NEED_LINK | LIB_TAG_NEW;
+
                return blo_nextbhead(fd, bhead);
        }
 
-       /* That way, we know which datablock needs do_versions (required 
currently for linking). */
-       id->tag |= LIB_TAG_NEW;
-
        /* need a name for the mallocN, just for debugging and sane prints on 
leaks */
        allocname = dataname(GS(id->name));
        
@@ -8261,7 +8264,11 @@ static BHead *read_libblock(FileData *fd, Main *main, 
BHead *bhead, const short
        
        /* init pointers direct data */
        direct_link_id(fd, id);
-       
+
+       /* That way, we know which datablock needs do_versions (required 
currently for linking). */
+       /* Note: doing this after driect_link_id(), which resets that field. */
+       id->tag = tag | LIB_TAG_NEED_LINK | LIB_TAG_NEW;
+
        switch (GS(id->name)) {
                case ID_WM:
                        direct_link_windowmanager(fd, (wmWindowManager *)id);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to