Fix T47754: Meshes glitch on cycling Viewport Shading mode with Linked Groups
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Apr 2016 15:14:13 +0000 (17:14 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Apr 2016 15:16:36 +0000 (17:16 +0200)
This is a regression since 4310128 which is cased by really bad logic:
there might be dependencies between dupli-objects, which means _if_ we
really want to ensure derived mesh on dupli creation we have to do it
before any matrix is overwritten.

I'm not sure if such derived mesh trick is really the only way to go
without major refactor, but seems simple fix for now will do it.

source/blender/blenkernel/intern/object_dupli.c

index 7f742dee73cea41e1401dd795f0928530eb6dfda..63c37fddc6086c7076b50607a1338dc7dba549fc 100644 (file)
@@ -1253,15 +1253,16 @@ DupliApplyData *duplilist_apply(Object *ob, Scene *scene, ListBase *duplilist)
                                                "DupliObject apply extra data");
 
                for (dob = duplilist->first, i = 0; dob; dob = dob->next, ++i) {
-                       /* copy obmat from duplis */
-                       copy_m4_m4(apply_data->extra[i].obmat, dob->ob->obmat);
-
                        /* make sure derivedmesh is calculated once, before drawing */
                        if (scene && !(dob->ob->transflag & OB_DUPLICALCDERIVED) && dob->ob->type == OB_MESH) {
                                mesh_get_derived_final(scene, dob->ob, scene->customdata_mask);
                                dob->ob->transflag |= OB_DUPLICALCDERIVED;
                        }
+               }
 
+               for (dob = duplilist->first, i = 0; dob; dob = dob->next, ++i) {
+                       /* copy obmat from duplis */
+                       copy_m4_m4(apply_data->extra[i].obmat, dob->ob->obmat);
                        copy_m4_m4(dob->ob->obmat, dob->mat);
                        
                        /* copy layers from the main duplicator object */