diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-07-12 19:36:22 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-07-12 19:36:22 +0400 |
commit | ba44250a23b817b69bc59f61eefc0ea890dfe84d (patch) | |
tree | 1e0d148740b901abcfd7ccec9cee56576554d029 | |
parent | 18d7a2316678ae7074a7f50c48453933ca7a5fb4 (diff) |
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.
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 4a5eabc7615..bfa73c5f7dd 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -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) |