Cleanup: remove legacy mesh save support
This was used for saving files for Blender 2.6x.
This commit is contained in:
@@ -190,12 +190,12 @@ enum {
|
||||
/* On write, make backup `.blend1`, `.blend2` ... files, when the users preference is enabled */
|
||||
#define G_FILE_HISTORY (1 << 25)
|
||||
/* BMesh option to save as older mesh format */
|
||||
#define G_FILE_MESH_COMPAT (1 << 26)
|
||||
// #define G_FILE_MESH_COMPAT (1 << 26)
|
||||
/* On write, restore paths after editing them (G_FILE_RELATIVE_REMAP) */
|
||||
#define G_FILE_SAVE_COPY (1 << 27)
|
||||
#define G_FILE_GLSL_NO_ENV_LIGHTING (1 << 28)
|
||||
|
||||
#define G_FILE_FLAGS_RUNTIME (G_FILE_NO_UI | G_FILE_RELATIVE_REMAP | G_FILE_MESH_COMPAT | G_FILE_SAVE_COPY)
|
||||
#define G_FILE_FLAGS_RUNTIME (G_FILE_NO_UI | G_FILE_RELATIVE_REMAP | G_FILE_SAVE_COPY)
|
||||
|
||||
/* ENDIAN_ORDER: indicates what endianness the platform where the file was
|
||||
* written had. */
|
||||
|
||||
@@ -347,9 +347,6 @@ void BKE_mesh_recalc_looptri(
|
||||
const struct MVert *mvert,
|
||||
int totloop, int totpoly,
|
||||
struct MLoopTri *mlooptri);
|
||||
int BKE_mesh_mpoly_to_mface(
|
||||
struct CustomData *fdata, struct CustomData *ldata,
|
||||
struct CustomData *pdata, int totface, int totloop, int totpoly);
|
||||
void BKE_mesh_convert_mfaces_to_mpolys(struct Mesh *mesh);
|
||||
void BKE_mesh_do_versions_convert_mfaces_to_mpolys(struct Mesh *mesh);
|
||||
void BKE_mesh_convert_mfaces_to_mpolys_ex(
|
||||
|
||||
@@ -3160,130 +3160,9 @@ void BKE_mesh_recalc_looptri(
|
||||
#undef ML_TO_MLT
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifdef USE_BMESH_SAVE_AS_COMPAT
|
||||
|
||||
/**
|
||||
* This function recreates a tessellation.
|
||||
* returns number of tessellation faces.
|
||||
*
|
||||
* for forwards compat only quad->tri polys to mface, skip ngons.
|
||||
*/
|
||||
int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
|
||||
struct CustomData *pdata, int totface, int UNUSED(totloop), int totpoly)
|
||||
{
|
||||
MLoop *mloop;
|
||||
|
||||
unsigned int lindex[4];
|
||||
int i;
|
||||
int k;
|
||||
|
||||
MPoly *mp, *mpoly;
|
||||
MFace *mface, *mf;
|
||||
|
||||
const int numTex = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
|
||||
const int numCol = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
|
||||
const bool hasPCol = CustomData_has_layer(ldata, CD_PREVIEW_MLOOPCOL);
|
||||
const bool hasOrigSpace = CustomData_has_layer(ldata, CD_ORIGSPACE_MLOOP);
|
||||
const bool hasLNor = CustomData_has_layer(ldata, CD_NORMAL);
|
||||
|
||||
/* over-alloc, ngons will be skipped */
|
||||
mface = MEM_malloc_arrayN((size_t)totpoly, sizeof(*mface), __func__);
|
||||
|
||||
mpoly = CustomData_get_layer(pdata, CD_MPOLY);
|
||||
mloop = CustomData_get_layer(ldata, CD_MLOOP);
|
||||
|
||||
mp = mpoly;
|
||||
k = 0;
|
||||
for (i = 0; i < totpoly; i++, mp++) {
|
||||
if (ELEM(mp->totloop, 3, 4)) {
|
||||
const unsigned int mp_loopstart = (unsigned int)mp->loopstart;
|
||||
mf = &mface[k];
|
||||
|
||||
mf->mat_nr = mp->mat_nr;
|
||||
mf->flag = mp->flag;
|
||||
|
||||
mf->v1 = mp_loopstart + 0;
|
||||
mf->v2 = mp_loopstart + 1;
|
||||
mf->v3 = mp_loopstart + 2;
|
||||
mf->v4 = (mp->totloop == 4) ? (mp_loopstart + 3) : 0;
|
||||
|
||||
/* abuse edcode for temp storage and clear next loop */
|
||||
mf->edcode = (char)mp->totloop; /* only ever 3 or 4 */
|
||||
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
CustomData_free(fdata, totface);
|
||||
|
||||
totface = k;
|
||||
|
||||
CustomData_add_layer(fdata, CD_MFACE, CD_ASSIGN, mface, totface);
|
||||
|
||||
CustomData_from_bmeshpoly(fdata, pdata, ldata, totface);
|
||||
|
||||
mp = mpoly;
|
||||
k = 0;
|
||||
for (i = 0; i < totpoly; i++, mp++) {
|
||||
if (ELEM(mp->totloop, 3, 4)) {
|
||||
mf = &mface[k];
|
||||
|
||||
if (mf->edcode == 3) {
|
||||
/* sort loop indices to ensure winding is correct */
|
||||
/* NO SORT - looks like we can skip this */
|
||||
|
||||
lindex[0] = mf->v1;
|
||||
lindex[1] = mf->v2;
|
||||
lindex[2] = mf->v3;
|
||||
lindex[3] = 0; /* unused */
|
||||
|
||||
/* transform loop indices to vert indices */
|
||||
mf->v1 = mloop[mf->v1].v;
|
||||
mf->v2 = mloop[mf->v2].v;
|
||||
mf->v3 = mloop[mf->v3].v;
|
||||
|
||||
BKE_mesh_loops_to_mface_corners(fdata, ldata, pdata,
|
||||
lindex, k, i, 3,
|
||||
numTex, numCol, hasPCol, hasOrigSpace, hasLNor);
|
||||
test_index_face(mf, fdata, k, 3);
|
||||
}
|
||||
else {
|
||||
/* sort loop indices to ensure winding is correct */
|
||||
/* NO SORT - looks like we can skip this */
|
||||
|
||||
lindex[0] = mf->v1;
|
||||
lindex[1] = mf->v2;
|
||||
lindex[2] = mf->v3;
|
||||
lindex[3] = mf->v4;
|
||||
|
||||
/* transform loop indices to vert indices */
|
||||
mf->v1 = mloop[mf->v1].v;
|
||||
mf->v2 = mloop[mf->v2].v;
|
||||
mf->v3 = mloop[mf->v3].v;
|
||||
mf->v4 = mloop[mf->v4].v;
|
||||
|
||||
BKE_mesh_loops_to_mface_corners(fdata, ldata, pdata,
|
||||
lindex, k, i, 4,
|
||||
numTex, numCol, hasPCol, hasOrigSpace, hasLNor);
|
||||
test_index_face(mf, fdata, k, 4);
|
||||
}
|
||||
|
||||
mf->edcode = 0;
|
||||
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
return k;
|
||||
}
|
||||
#endif /* USE_BMESH_SAVE_AS_COMPAT */
|
||||
|
||||
|
||||
static void bm_corners_to_loops_ex(ID *id, CustomData *fdata, CustomData *ldata, CustomData *pdata,
|
||||
MFace *mface, int totloop, int findex, int loopstart, int numTex, int numCol)
|
||||
static void bm_corners_to_loops_ex(
|
||||
ID *id, CustomData *fdata, CustomData *ldata, CustomData *pdata,
|
||||
MFace *mface, int totloop, int findex, int loopstart, int numTex, int numCol)
|
||||
{
|
||||
MTFace *texface;
|
||||
MTexPoly *texpoly;
|
||||
|
||||
Reference in New Issue
Block a user