diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index dfcbfff5485..ae97d3a1235 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4121,6 +4121,11 @@ static void customdata_version_242(Mesh *me) } } + if (me->tface) { + MEM_freeN(me->tface); + me->tface= NULL; + } + mesh_update_customdata_pointers(me); } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 5cc40ae8ac9..56adb3b732d 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1090,6 +1090,37 @@ static void write_customdata(WriteData *wd, int count, CustomData *data) } } +static void write_oldstyle_tface_242(WriteData *wd, Mesh *me) +{ + MTFace *mtf; + MCol *mcol; + TFace *tf; + int a; + + mtf= me->mtface; + mcol= me->mcol; + tf= me->tface; + + for (a=0; a < me->totface; a++, mtf++, tf++) { + if (me->mcol) { + memcpy(tf->col, mcol, sizeof(tf->col)); + mcol+=4; + } + else + memset(tf->col, 255, sizeof(tf->col)); + memcpy(tf->uv, mtf->uv, sizeof(tf->uv)); + + tf->flag= mtf->flag; + tf->unwrap= mtf->unwrap; + tf->mode= mtf->mode; + tf->tile= mtf->tile; + tf->tpage= mtf->tpage; + tf->transp= mtf->transp; + } + + writestruct(wd, DATA, "TFace", me->totface, me->tface); +} + static void write_meshs(WriteData *wd, ListBase *idbase) { Mesh *mesh; @@ -1108,6 +1139,10 @@ static void write_meshs(WriteData *wd, ListBase *idbase) mesh->vnode = NULL; } #endif + /* temporary upward compatibility until 2.43 release */ + if(mesh->mtface) + mesh->tface= MEM_callocN(sizeof(TFace)*mesh->totface, "Oldstyle TFace"); + writestruct(wd, ID_ME, "Mesh", 1, mesh); #ifdef WITH_VERSE if(vnode) mesh->vnode = (void*)vnode; @@ -1122,6 +1157,13 @@ static void write_meshs(WriteData *wd, ListBase *idbase) write_customdata(wd, mesh->totedge, &mesh->edata); write_customdata(wd, mesh->totface, &mesh->fdata); + /* temporary upward compatibility until 2.43 release */ + if(mesh->mtface) { + write_oldstyle_tface_242(wd, mesh); + MEM_freeN(mesh->tface); + mesh->tface = NULL; + } + /* Multires data */ writestruct(wd, DATA, "Multires", 1, mesh->mr); if(mesh->mr) {