Fix [#32013] Crash loading a 2.49b model
authorBastien Montagne <montagne29@wanadoo.fr>
Fri, 13 Jul 2012 20:50:32 +0000 (20:50 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Fri, 13 Jul 2012 20:50:32 +0000 (20:50 +0000)
commitee7ae2cdbb24072707d74534a560133f9780b079
treef0bcc13dd99b88a83eaeab27a82d0b557e00261c
parent807ad1f0e0de49711d58ade2b660e74ec5452b2b
Fix [#32013] Crash loading a 2.49b model

Problems were in the old multires loading system.

Actually, the sigsev itself was the easy part of the job (simply had to convert from tesselated data to polys/loops), but after that I was getting a horrible bunch of wild stray faces...

It finally turned out it was a mismatch in two different subsurf structs used while computing a mdisps layer from the multires DM, leading to getting complete random normals (null ones, NAN ones...), leading to complete dummy tangent space matrix, leading to absurds mdisps values...

Note: I also moved the copy of first layer's vertex and face data from old me->mr to mesh's v/fdata earlier in multire_load_old(), to be able to use general face_to_poly conversion function (later on we would have to do it by hand, the general function would erase our newly computed mdisps layer...).

Took me the whole week (something like 20h) to track this down: multires + subsurf = C nightmare!
source/blender/blenkernel/intern/multires.c