Fix #32067: since BMesh, files < 2.59.3 no longer have their texface converted

Issue was caused by performing conversion from FTFaces to materials from
the end of lib_link_mesh, where tesselated faces were cleared already.

This conversion can't be switched to BMesh structures because in future
MTexPolys could be changed in a way, that versioning stuff wouldn't work
any more. Another issue is that making such a conversion per-mesh would
lead to quite a code spagetti, which is difficult to follow.

Solved by splitting per-mesh cycle in lib_link_mesh, so now it consists
of three steps:

- Do linking stuff such as custom data layers, materials. Perform a
  Conversion stuff like tessface -> polys.

- Convert all MTFaces to materials. This conversion handles all meshes
  and creates needed materials.

- Free tessfaces, mark mesh as linked.

Such a separation shouldn't noticeably affect on speed of linking.
This commit is contained in:
Sergey Sharybin
2012-07-12 15:36:22 +00:00
parent 18d7a23166
commit ba44250a23

View File

@@ -3688,7 +3688,14 @@ static void lib_link_mesh(FileData *fd, Main *main)
G.main = gmain;
}
}
}
/* convert texface options to material */
convert_tface_mt(fd, main);
for (me = main->mesh.first; me; me = me->id.next) {
if (me->id.flag & LIB_NEEDLINK) {
/*
* Re-tessellate, even if the polys were just created from tessfaces, this
* is important because it:
@@ -3704,13 +3711,10 @@ static void lib_link_mesh(FileData *fd, Main *main)
#else
BKE_mesh_tessface_clear(me);
#endif
me->id.flag -= LIB_NEEDLINK;
}
}
/* convert texface options to material */
convert_tface_mt(fd, main);
}
static void direct_link_dverts(FileData *fd, int count, MDeformVert *mdverts)