Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / customdata.c
index 68acb60f21a65385cabd4a8f91799529cb31c7f5..eb35f3daad0654f9db1faf7fb7cb3fb6fbc6d184 100644 (file)
@@ -390,37 +390,19 @@ static void layerSwap_tface(void *data, const int *corner_indices)
 {
        MTFace *tf = data;
        float uv[4][2];
-       static const short pin_flags[4] = { TF_PIN1, TF_PIN2, TF_PIN3, TF_PIN4 };
-       static const char sel_flags[4] = { TF_SEL1, TF_SEL2, TF_SEL3, TF_SEL4 };
-       short unwrap = tf->unwrap & ~(TF_PIN1 | TF_PIN2 | TF_PIN3 | TF_PIN4);
-       char flag = tf->flag & ~(TF_SEL1 | TF_SEL2 | TF_SEL3 | TF_SEL4);
        int j;
 
        for (j = 0; j < 4; ++j) {
                const int source_index = corner_indices[j];
-
                copy_v2_v2(uv[j], tf->uv[source_index]);
-
-               /* swap pinning flags around */
-               if (tf->unwrap & pin_flags[source_index]) {
-                       unwrap |= pin_flags[j];
-               }
-
-               /* swap selection flags around */
-               if (tf->flag & sel_flags[source_index]) {
-                       flag |= sel_flags[j];
-               }
        }
 
        memcpy(tf->uv, uv, sizeof(tf->uv));
-       tf->unwrap = unwrap;
-       tf->flag = flag;
 }
 
 static void layerDefault_tface(void *data, int count)
 {
-       static MTFace default_tf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}, NULL,
-                                       0, 0, TF_DYNAMIC | TF_CONVERTED, 0, 0};
+       static MTFace default_tf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}};
        MTFace *tf = (MTFace *)data;
        int i;
 
@@ -1190,6 +1172,15 @@ static void layerSwap_flnor(void *data, const int *corner_indices)
        memcpy(flnors, nors, sizeof(nors));
 }
 
+static void layerDefault_fmap(void *data, int count)
+{
+       int *fmap_num = (int *)data;
+       int i;
+       for (i = 0; i < count; i++) {
+               *fmap_num = -1;
+       }
+}
+
 static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
        /* 0: CD_MVERT */
        {sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -1215,8 +1206,8 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
        /* 3 floats per normal vector */
        {sizeof(float) * 3, "vec3f", 1, NULL, NULL, NULL, layerInterp_normal, NULL, NULL,
         NULL, NULL, NULL, NULL, NULL, layerCopyValue_normal},
-       /* 9: CD_POLYINDEX */  /* DEPRECATED */
-       {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+       /* 9: CD_FACEMAP */
+       {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, layerDefault_fmap, NULL},
        /* 10: CD_PROP_FLT */
        {sizeof(MFloatProperty), "MFloatProperty", 1, N_("Float"), layerCopy_propFloat, NULL, NULL, NULL},
        /* 11: CD_PROP_INT */
@@ -1228,10 +1219,9 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
         layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
        /* 14: CD_ORCO */
        {sizeof(float) * 3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
-       /* 15: CD_MTEXPOLY */
+       /* 15: CD_MTEXPOLY */  /* DEPRECATED */
        /* note, when we expose the UV Map / TexFace split to the user, change this back to face Texture */
-       {sizeof(MTexPoly), "MTexPoly", 1, N_("UVMap") /* "Face Texture" */, NULL, NULL, NULL, NULL, NULL,
-        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, layerMaxNum_tface},
+       {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
        /* 16: CD_MLOOPUV */
        {sizeof(MLoopUV), "MLoopUV", 1, N_("UVMap"), NULL, NULL, layerInterp_mloopuv, NULL, NULL,
         layerEqual_mloopuv, layerMultiply_mloopuv, layerInitMinMax_mloopuv, 
@@ -1310,7 +1300,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
 
 static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
        /*   0-4 */ "CDMVert", "CDMSticky", "CDMDeformVert", "CDMEdge", "CDMFace",
-       /*   5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFlags",
+       /*   5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFaceMap",
        /* 10-14 */ "CDMFloatProperty", "CDMIntProperty", "CDMStringProperty", "CDOrigSpace", "CDOrco",
        /* 15-19 */ "CDMTexPoly", "CDMLoopUV", "CDMloopCol", "CDTangent", "CDMDisps",
        /* 20-24 */ "CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast",
@@ -1325,41 +1315,41 @@ static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
 
 
 const CustomDataMask CD_MASK_BAREMESH =
-    CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT;
+    CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT | CD_MASK_FACEMAP;
 const CustomDataMask CD_MASK_MESH =
     CD_MASK_MVERT | CD_MASK_MEDGE |
     CD_MASK_MDEFORMVERT |
     CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
-    CD_MASK_MTEXPOLY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
+    CD_MASK_RECAST | CD_MASK_PAINT_MASK |
     CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
-    CD_MASK_CUSTOMLOOPNORMAL;
+    CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
 const CustomDataMask CD_MASK_EDITMESH =
     CD_MASK_MDEFORMVERT | CD_MASK_MLOOPUV |
-    CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
+    CD_MASK_MLOOPCOL | CD_MASK_SHAPE_KEYINDEX |
     CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR |
     CD_MASK_MDISPS | CD_MASK_SHAPEKEY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
-    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_CUSTOMLOOPNORMAL;
+    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
 const CustomDataMask CD_MASK_DERIVEDMESH =
     CD_MASK_MDEFORMVERT |
     CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
-    CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_PREVIEW_MLOOPCOL |
+    CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_PREVIEW_MLOOPCOL |
     CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORCO | CD_MASK_TANGENT |
     CD_MASK_PREVIEW_MCOL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
     CD_MASK_ORIGINDEX | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
-    CD_MASK_CUSTOMLOOPNORMAL;
+    CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
 const CustomDataMask CD_MASK_BMESH =
-    CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
+    CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL |
     CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
     CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS |
     CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
     CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
-    CD_MASK_CUSTOMLOOPNORMAL;
+       CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
 /**
  * cover values copied by #BKE_mesh_loops_to_tessdata
  */
 const CustomDataMask CD_MASK_FACECORNERS =
-    CD_MASK_MTFACE | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
+    CD_MASK_MTFACE | CD_MASK_MLOOPUV |
     CD_MASK_MCOL | CD_MASK_MLOOPCOL |
     CD_MASK_PREVIEW_MCOL | CD_MASK_PREVIEW_MLOOPCOL |
     CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP |
@@ -1368,7 +1358,7 @@ const CustomDataMask CD_MASK_FACECORNERS =
 const CustomDataMask CD_MASK_EVERYTHING =
     CD_MASK_MVERT | CD_MASK_MDEFORMVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
     CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_NORMAL /* | CD_MASK_POLYINDEX */ | CD_MASK_PROP_FLT |
-    CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
+    CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_MLOOPUV |
     CD_MASK_MLOOPCOL | CD_MASK_TANGENT | CD_MASK_MDISPS | CD_MASK_PREVIEW_MCOL | CD_MASK_CLOTH_ORCO | CD_MASK_RECAST |
     /* BMESH ONLY START */
     CD_MASK_MPOLY | CD_MASK_MLOOP | CD_MASK_SHAPE_KEYINDEX | CD_MASK_SHAPEKEY | CD_MASK_BWEIGHT | CD_MASK_CREASE |
@@ -1376,7 +1366,7 @@ const CustomDataMask CD_MASK_EVERYTHING =
     /* BMESH ONLY END */
     CD_MASK_PAINT_MASK | CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN |
     CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
-    CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL | CD_MASK_CUSTOMLOOPNORMAL;
+    CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL | CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
 
 static const LayerTypeInfo *layerType_getInfo(int type)
 {
@@ -2502,13 +2492,10 @@ void CustomData_set(const CustomData *data, int index, int type, const void *sou
 
 /* BMesh functions */
 /* needed to convert to/from different face reps */
-void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata,
-                             int totloop, int totpoly)
+void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *ldata, int totloop)
 {
-       int i;
-       for (i = 0; i < fdata->totlayer; i++) {
+       for (int i = 0; i < fdata->totlayer; i++) {
                if (fdata->layers[i].type == CD_MTFACE) {
-                       CustomData_add_layer_named(pdata, CD_MTEXPOLY, CD_CALLOC, NULL, totpoly, fdata->layers[i].name);
                        CustomData_add_layer_named(ldata, CD_MLOOPUV, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
                }
                else if (fdata->layers[i].type == CD_MCOL) {
@@ -2523,19 +2510,18 @@ void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *l
        }
 }
 
-void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata, int total)
+void CustomData_from_bmeshpoly(
+        CustomData *fdata, CustomData *ldata, int total)
 {
        int i;
 
        /* avoid accumulating extra layers */
-       BLI_assert(!CustomData_from_bmeshpoly_test(fdata, pdata, ldata, false));
+       BLI_assert(!CustomData_from_bmeshpoly_test(fdata, ldata, false));
 
-       for (i = 0; i < pdata->totlayer; i++) {
-               if (pdata->layers[i].type == CD_MTEXPOLY) {
-                       CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, pdata->layers[i].name);
-               }
-       }
        for (i = 0; i < ldata->totlayer; i++) {
+               if (ldata->layers[i].type == CD_MLOOPUV) {
+                       CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, ldata->layers[i].name);
+               }
                if (ldata->layers[i].type == CD_MLOOPCOL) {
                        CustomData_add_layer_named(fdata, CD_MCOL, CD_CALLOC, NULL, total, ldata->layers[i].name);
                }
@@ -2553,7 +2539,7 @@ void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData
                }
        }
 
-       CustomData_bmesh_update_active_layers(fdata, pdata, ldata);
+       CustomData_bmesh_update_active_layers(fdata, ldata);
 }
 
 #ifndef NDEBUG
@@ -2563,13 +2549,13 @@ void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData
  * \param fallback: Use when there are no layers to handle,
  * since callers may expect success or failure.
  */
-bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *pdata, CustomData *ldata, bool fallback)
+bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *ldata, bool fallback)
 {
        int a_num = 0, b_num = 0;
 #define LAYER_CMP(l_a, t_a, l_b, t_b) \
        ((a_num += CustomData_number_of_layers(l_a, t_a)) == (b_num += CustomData_number_of_layers(l_b, t_b)))
 
-       if (!LAYER_CMP(pdata, CD_MTEXPOLY, fdata, CD_MTFACE))
+       if (!LAYER_CMP(ldata, CD_MLOOPUV, fdata, CD_MTFACE))
                return false;
        if (!LAYER_CMP(ldata, CD_MLOOPCOL, fdata, CD_MCOL))
                return false;
@@ -2591,25 +2577,21 @@ bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *pdata, Custom
 #endif
 
 
-void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *pdata, CustomData *ldata)
+void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *ldata)
 {
        int act;
 
-       if (CustomData_has_layer(pdata, CD_MTEXPOLY)) {
-               act = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
-               CustomData_set_layer_active(ldata, CD_MLOOPUV, act);
+       if (CustomData_has_layer(ldata, CD_MLOOPUV)) {
+               act = CustomData_get_active_layer(ldata, CD_MLOOPUV);
                CustomData_set_layer_active(fdata, CD_MTFACE, act);
 
-               act = CustomData_get_render_layer(pdata, CD_MTEXPOLY);
-               CustomData_set_layer_render(ldata, CD_MLOOPUV, act);
+               act = CustomData_get_render_layer(ldata, CD_MLOOPUV);
                CustomData_set_layer_render(fdata, CD_MTFACE, act);
 
-               act = CustomData_get_clone_layer(pdata, CD_MTEXPOLY);
-               CustomData_set_layer_clone(ldata, CD_MLOOPUV, act);
+               act = CustomData_get_clone_layer(ldata, CD_MLOOPUV);
                CustomData_set_layer_clone(fdata, CD_MTFACE, act);
 
-               act = CustomData_get_stencil_layer(pdata, CD_MTEXPOLY);
-               CustomData_set_layer_stencil(ldata, CD_MLOOPUV, act);
+               act = CustomData_get_stencil_layer(ldata, CD_MLOOPUV);
                CustomData_set_layer_stencil(fdata, CD_MTFACE, act);
        }
 
@@ -2633,25 +2615,21 @@ void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *pdata,
  * used by do_versions in readfile.c when creating pdata and ldata for pre-bmesh
  * meshes and needed to preserve active/render/clone/stencil flags set in pre-bmesh files
  */
-void CustomData_bmesh_do_versions_update_active_layers(CustomData *fdata, CustomData *pdata, CustomData *ldata)
+void CustomData_bmesh_do_versions_update_active_layers(CustomData *fdata, CustomData *ldata)
 {
        int act;
 
        if (CustomData_has_layer(fdata, CD_MTFACE)) {
                act = CustomData_get_active_layer(fdata, CD_MTFACE);
-               CustomData_set_layer_active(pdata, CD_MTEXPOLY, act);
                CustomData_set_layer_active(ldata, CD_MLOOPUV, act);
 
                act = CustomData_get_render_layer(fdata, CD_MTFACE);
-               CustomData_set_layer_render(pdata, CD_MTEXPOLY, act);
                CustomData_set_layer_render(ldata, CD_MLOOPUV, act);
 
                act = CustomData_get_clone_layer(fdata, CD_MTFACE);
-               CustomData_set_layer_clone(pdata, CD_MTEXPOLY, act);
                CustomData_set_layer_clone(ldata, CD_MLOOPUV, act);
 
                act = CustomData_get_stencil_layer(fdata, CD_MTFACE);
-               CustomData_set_layer_stencil(pdata, CD_MTEXPOLY, act);
                CustomData_set_layer_stencil(ldata, CD_MLOOPUV, act);
        }