Commit: 699a3e2498112375f8ef8d74724c4589fac05765
Author: Sybren A. Stüvel
Date:   Wed Apr 12 16:33:40 2017 +0200
Branches: master
https://developer.blender.org/rB699a3e2498112375f8ef8d74724c4589fac05765

Fix T50227: Alembic uv export/load issue

Previously only a CD_MLOOPUV custom data layer was created. Now we also
create the accompanying CD_MTEXPOLY layer too.

===================================================================

M       source/blender/alembic/intern/abc_mesh.cc

===================================================================

diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index 5a57e43326a..79b891dbcd4 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -897,19 +897,31 @@ static void *add_customdata_cb(void *user_data, const 
char *name, int data_type)
 {
        DerivedMesh *dm = static_cast<DerivedMesh *>(user_data);
        CustomDataType cd_data_type = static_cast<CustomDataType>(data_type);
-       void *cd_ptr = NULL;
-
-       if (ELEM(cd_data_type, CD_MLOOPUV, CD_MLOOPCOL)) {
-               cd_ptr = CustomData_get_layer_named(dm->getLoopDataLayout(dm), 
cd_data_type, name);
-
-               if (cd_ptr == NULL) {
-                       cd_ptr = 
CustomData_add_layer_named(dm->getLoopDataLayout(dm),
-                                                           cd_data_type,
-                                                           CD_DEFAULT,
-                                                           NULL,
-                                                           dm->getNumLoops(dm),
-                                                           name);
-               }
+       void *cd_ptr;
+       CustomData *loopdata;
+       int numloops;
+
+       /* unsupported custom data type -- don't do anything. */
+       if (!ELEM(cd_data_type, CD_MLOOPUV, CD_MLOOPCOL)) {
+               return NULL;
+       }
+
+       loopdata = dm->getLoopDataLayout(dm);
+       cd_ptr = CustomData_get_layer_named(loopdata, cd_data_type, name);
+       if (cd_ptr != NULL) {
+               /* layer already exists, so just return it. */
+               return cd_ptr;
+       }
+
+       /* create a new layer, taking care to construct the 
hopefully-soon-to-be-removed
+        * CD_MTEXPOLY layer too, with the same name. */
+       numloops = dm->getNumLoops(dm);
+       cd_ptr = CustomData_add_layer_named(loopdata, cd_data_type, CD_DEFAULT,
+                                           NULL, numloops, name);
+       if (cd_data_type == CD_MLOOPUV) {
+               CustomData_add_layer_named(dm->getPolyDataLayout(dm),
+                                          CD_MTEXPOLY, CD_DEFAULT,
+                                          NULL, numloops, name);
        }
 
        return cd_ptr;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to