Pārlūkot izejas kodu

[cpp] More fixes to SkeletonBinary

badlogic 7 gadi atpakaļ
vecāks
revīzija
53fe61db06

+ 1 - 3
spine-cpp/spine-cpp/include/spine/SkeletonBinary.h

@@ -66,8 +66,6 @@ namespace Spine {
         static const int CURVE_LINEAR;
         static const int CURVE_LINEAR;
         static const int CURVE_STEPPED;
         static const int CURVE_STEPPED;
         static const int CURVE_BEZIER;
         static const int CURVE_BEZIER;
-        
-        static const TransformMode TRANSFORM_MODE_VALUES[5];
 
 
         explicit SkeletonBinary(Atlas* atlasArray);
         explicit SkeletonBinary(Atlas* atlasArray);
 
 
@@ -123,7 +121,7 @@ namespace Spine {
         
         
         void readShortArray(DataInput *input, Vector<unsigned short>& array);
         void readShortArray(DataInput *input, Vector<unsigned short>& array);
         
         
-        Animation* readAnimation(const char* name, DataInput* input, SkeletonData *skeletonData);
+        Animation* readAnimation(const String& name, DataInput* input, SkeletonData *skeletonData);
         
         
         void readCurve(DataInput* input, int frameIndex, CurveTimeline* timeline);
         void readCurve(DataInput* input, int frameIndex, CurveTimeline* timeline);
     };
     };

+ 5 - 6
spine-cpp/spine-cpp/include/spine/TransformMode.h

@@ -33,12 +33,11 @@
 
 
 namespace Spine {
 namespace Spine {
     enum TransformMode {
     enum TransformMode {
-        //0000 0 Flip Scale Rotation
-        TransformMode_Normal = 0, // 0000
-        TransformMode_OnlyTranslation = 7, // 0111
-        TransformMode_NoRotationOrReflection = 1, // 0001
-        TransformMode_NoScale = 2, // 0010
-        TransformMode_NoScaleOrReflection = 6 // 0110
+        TransformMode_Normal = 0,
+        TransformMode_OnlyTranslation,
+        TransformMode_NoRotationOrReflection,
+        TransformMode_NoScale,
+        TransformMode_NoScaleOrReflection
     };
     };
 }
 }
 
 

+ 41 - 119
spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp

@@ -98,14 +98,6 @@ namespace Spine {
     const int SkeletonBinary::CURVE_STEPPED = 1;
     const int SkeletonBinary::CURVE_STEPPED = 1;
     const int SkeletonBinary::CURVE_BEZIER = 2;
     const int SkeletonBinary::CURVE_BEZIER = 2;
     
     
-    const TransformMode SkeletonBinary::TRANSFORM_MODE_VALUES[5] = {
-        TransformMode_Normal,
-        TransformMode_OnlyTranslation,
-        TransformMode_NoRotationOrReflection,
-        TransformMode_NoScale,
-        TransformMode_NoScaleOrReflection
-    };
-    
     SkeletonBinary::SkeletonBinary(Atlas* atlasArray) : _attachmentLoader(new (__FILE__, __LINE__) AtlasAttachmentLoader(atlasArray)), _error(), _scale(1), _ownsLoader(true) {
     SkeletonBinary::SkeletonBinary(Atlas* atlasArray) : _attachmentLoader(new (__FILE__, __LINE__) AtlasAttachmentLoader(atlasArray)), _error(), _scale(1), _ownsLoader(true) {
 
 
     }
     }
@@ -124,7 +116,7 @@ namespace Spine {
     }
     }
     
     
     SkeletonData* SkeletonBinary::readSkeletonData(const unsigned char* binary, const int length) {
     SkeletonData* SkeletonBinary::readSkeletonData(const unsigned char* binary, const int length) {
-        int i, ii, nonessential;
+        bool nonessential;
         SkeletonData* skeletonData;
         SkeletonData* skeletonData;
         
         
         DataInput* input = new (__FILE__, __LINE__) DataInput();
         DataInput* input = new (__FILE__, __LINE__) DataInput();
@@ -149,20 +141,17 @@ namespace Spine {
         if (nonessential) {
         if (nonessential) {
             /* Skip images path, audio path & fps */
             /* Skip images path, audio path & fps */
             readFloat(input);
             readFloat(input);
-            SpineExtension::free(readString(input), __FILE__, __LINE__);
-            SpineExtension::free(readString(input), __FILE__, __LINE__);
+            String(readString(input), true);
+            String(readString(input), true);
         }
         }
         
         
         /* Bones. */
         /* Bones. */
         int bonesCount = readVarint(input, true);
         int bonesCount = readVarint(input, true);
         skeletonData->_bones.setSize(bonesCount);
         skeletonData->_bones.setSize(bonesCount);
-        for (i = 0; i < bonesCount; ++i) {
-            BoneData* data;
-            int mode;
+        for (int i = 0; i < bonesCount; ++i) {
             const char* name = readString(input);
             const char* name = readString(input);
             BoneData* parent = i == 0 ? 0 : skeletonData->_bones[readVarint(input, true)];
             BoneData* parent = i == 0 ? 0 : skeletonData->_bones[readVarint(input, true)];
-            
-            data = new (__FILE__, __LINE__) BoneData(i, String(name, true), parent);
+            BoneData* data = new (__FILE__, __LINE__) BoneData(i, String(name, true), parent);
             data->_rotation = readFloat(input);
             data->_rotation = readFloat(input);
             data->_x = readFloat(input) * _scale;
             data->_x = readFloat(input) * _scale;
             data->_y = readFloat(input) * _scale;
             data->_y = readFloat(input) * _scale;
@@ -171,93 +160,64 @@ namespace Spine {
             data->_shearX = readFloat(input);
             data->_shearX = readFloat(input);
             data->_shearY = readFloat(input);
             data->_shearY = readFloat(input);
             data->_length = readFloat(input) * _scale;
             data->_length = readFloat(input) * _scale;
-            
-            mode = readVarint(input, true);
-            switch (mode) {
-                case 0:
-                    data->_transformMode = TransformMode_Normal;
-                    break;
-                case 1:
-                    data->_transformMode = TransformMode_OnlyTranslation;
-                    break;
-                case 2:
-                    data->_transformMode = TransformMode_NoRotationOrReflection;
-                    break;
-                case 3:
-                    data->_transformMode = TransformMode_NoScale;
-                    break;
-                case 4:
-                    data->_transformMode = TransformMode_NoScaleOrReflection;
-                    break;
-            }
-            
+            data->_transformMode = static_cast<TransformMode>(readVarint(input, true));
             if (nonessential) {
             if (nonessential) {
                 /* Skip bone color. */
                 /* Skip bone color. */
                 readInt(input);
                 readInt(input);
             }
             }
-            
             skeletonData->_bones[i] = data;
             skeletonData->_bones[i] = data;
         }
         }
 
 
         /* Slots. */
         /* Slots. */
         int slotsCount = readVarint(input, true);
         int slotsCount = readVarint(input, true);
         skeletonData->_slots.setSize(slotsCount);
         skeletonData->_slots.setSize(slotsCount);
-        for (i = 0; i < slotsCount; ++i) {
-            int r, g, b, a;
+        for (int i = 0; i < slotsCount; ++i) {
             const char* slotName = readString(input);
             const char* slotName = readString(input);
             BoneData* boneData = skeletonData->_bones[readVarint(input, true)];
             BoneData* boneData = skeletonData->_bones[readVarint(input, true)];
-            
             SlotData* slotData = new (__FILE__, __LINE__) SlotData(i, String(slotName, true), *boneData);
             SlotData* slotData = new (__FILE__, __LINE__) SlotData(i, String(slotName, true), *boneData);
 
 
             readColor(input, slotData->getColor());
             readColor(input, slotData->getColor());
-            r = readByte(input);
-            g = readByte(input);
-            b = readByte(input);
-            a = readByte(input);
+            unsigned char r = readByte(input);
+            unsigned char g = readByte(input);
+            unsigned char b = readByte(input);
+            unsigned char a = readByte(input);
             if (!(r == 0xff && g == 0xff && b == 0xff && a == 0xff)) {
             if (!(r == 0xff && g == 0xff && b == 0xff && a == 0xff)) {
                 slotData->getDarkColor().set(r / 255.0f, g  / 255.0f, b / 255.0f, 0);
                 slotData->getDarkColor().set(r / 255.0f, g  / 255.0f, b / 255.0f, 0);
                 slotData->setHasDarkColor(true);
                 slotData->setHasDarkColor(true);
             }
             }
             slotData->_attachmentName.own(readString(input));
             slotData->_attachmentName.own(readString(input));
             slotData->_blendMode = static_cast<BlendMode>(readVarint(input, true));
             slotData->_blendMode = static_cast<BlendMode>(readVarint(input, true));
-            
             skeletonData->_slots[i] = slotData;
             skeletonData->_slots[i] = slotData;
         }
         }
 
 
         /* IK constraints. */
         /* IK constraints. */
         int ikConstraintsCount = readVarint(input, true);
         int ikConstraintsCount = readVarint(input, true);
         skeletonData->_ikConstraints.setSize(ikConstraintsCount);
         skeletonData->_ikConstraints.setSize(ikConstraintsCount);
-        for (i = 0; i < ikConstraintsCount; ++i) {
+        for (int i = 0; i < ikConstraintsCount; ++i) {
             const char* name = readString(input);
             const char* name = readString(input);
-            
             IkConstraintData* data = new (__FILE__, __LINE__) IkConstraintData(String(name, true));
             IkConstraintData* data = new (__FILE__, __LINE__) IkConstraintData(String(name, true));
-            
             data->_order = readVarint(input, true);
             data->_order = readVarint(input, true);
-
             int bonesCount = readVarint(input, true);
             int bonesCount = readVarint(input, true);
             data->_bones.setSize(bonesCount);
             data->_bones.setSize(bonesCount);
-            for (ii = 0; ii < bonesCount; ++ii) {
+            for (int ii = 0; ii < bonesCount; ++ii) {
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
             }
             }
             data->_target = skeletonData->_bones[readVarint(input, true)];
             data->_target = skeletonData->_bones[readVarint(input, true)];
             data->_mix = readFloat(input);
             data->_mix = readFloat(input);
             data->_bendDirection = readSByte(input);
             data->_bendDirection = readSByte(input);
-            
             skeletonData->_ikConstraints[i] = data;
             skeletonData->_ikConstraints[i] = data;
         }
         }
 
 
         /* Transform constraints. */
         /* Transform constraints. */
         int transformConstraintsCount = readVarint(input, true);
         int transformConstraintsCount = readVarint(input, true);
         skeletonData->_transformConstraints.setSize(transformConstraintsCount);
         skeletonData->_transformConstraints.setSize(transformConstraintsCount);
-        for (i = 0; i < transformConstraintsCount; ++i) {
+        for (int i = 0; i < transformConstraintsCount; ++i) {
             const char* name = readString(input);
             const char* name = readString(input);
-            
             TransformConstraintData* data = new (__FILE__, __LINE__) TransformConstraintData(String(name, true));
             TransformConstraintData* data = new (__FILE__, __LINE__) TransformConstraintData(String(name, true));
-            
             data->_order = readVarint(input, true);
             data->_order = readVarint(input, true);
             int bonesCount = readVarint(input, true);
             int bonesCount = readVarint(input, true);
             data->_bones.setSize(bonesCount);
             data->_bones.setSize(bonesCount);
-            for (ii = 0; ii < bonesCount; ++ii) {
+            for (int ii = 0; ii < bonesCount; ++ii) {
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
             }
             }
             data->_target = skeletonData->_bones[readVarint(input, true)];
             data->_target = skeletonData->_bones[readVarint(input, true)];
@@ -273,23 +233,19 @@ namespace Spine {
             data->_translateMix = readFloat(input);
             data->_translateMix = readFloat(input);
             data->_scaleMix = readFloat(input);
             data->_scaleMix = readFloat(input);
             data->_shearMix = readFloat(input);
             data->_shearMix = readFloat(input);
-            
             skeletonData->_transformConstraints[i] = data;
             skeletonData->_transformConstraints[i] = data;
         }
         }
 
 
         /* Path constraints */
         /* Path constraints */
         int pathConstraintsCount = readVarint(input, true);
         int pathConstraintsCount = readVarint(input, true);
         skeletonData->_pathConstraints.setSize(pathConstraintsCount);
         skeletonData->_pathConstraints.setSize(pathConstraintsCount);
-        for (i = 0; i < pathConstraintsCount; ++i) {
+        for (int i = 0; i < pathConstraintsCount; ++i) {
             const char* name = readString(input);
             const char* name = readString(input);
-            
             PathConstraintData* data = new (__FILE__, __LINE__) PathConstraintData(String(name, true));
             PathConstraintData* data = new (__FILE__, __LINE__) PathConstraintData(String(name, true));
-            
             data->_order = readVarint(input, true);
             data->_order = readVarint(input, true);
-            
             int bonesCount = readVarint(input, true);
             int bonesCount = readVarint(input, true);
             data->_bones.setSize(bonesCount);
             data->_bones.setSize(bonesCount);
-            for (ii = 0; ii < bonesCount; ++ii) {
+            for (int ii = 0; ii < bonesCount; ++ii) {
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
                 data->_bones[ii] = skeletonData->_bones[readVarint(input, true)];
             }
             }
             data->_target = skeletonData->_slots[readVarint(input, true)];
             data->_target = skeletonData->_slots[readVarint(input, true)];
@@ -298,43 +254,33 @@ namespace Spine {
             data->_rotateMode = static_cast<RotateMode>(readVarint(input, true));
             data->_rotateMode = static_cast<RotateMode>(readVarint(input, true));
             data->_offsetRotation = readFloat(input);
             data->_offsetRotation = readFloat(input);
             data->_position = readFloat(input);
             data->_position = readFloat(input);
-            if (data->_positionMode == PositionMode_Fixed) {
-                data->_position *= _scale;
-            }
-            
+            if (data->_positionMode == PositionMode_Fixed) data->_position *= _scale;
             data->_spacing = readFloat(input);
             data->_spacing = readFloat(input);
-            if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) {
-                data->_spacing *= _scale;
-            }
+            if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) data->_spacing *= _scale;
             data->_rotateMix = readFloat(input);
             data->_rotateMix = readFloat(input);
             data->_translateMix = readFloat(input);
             data->_translateMix = readFloat(input);
-            
             skeletonData->_pathConstraints[i] = data;
             skeletonData->_pathConstraints[i] = data;
         }
         }
 
 
         /* Default skin. */
         /* Default skin. */
         skeletonData->_defaultSkin = readSkin(input, "default", skeletonData, nonessential);
         skeletonData->_defaultSkin = readSkin(input, "default", skeletonData, nonessential);
         int skinsCount = readVarint(input, true);
         int skinsCount = readVarint(input, true);
-
         if (skeletonData->_defaultSkin) {
         if (skeletonData->_defaultSkin) {
             ++skinsCount;
             ++skinsCount;
         }
         }
-
         skeletonData->_skins.setSize(skinsCount);
         skeletonData->_skins.setSize(skinsCount);
-
         if (skeletonData->_defaultSkin) {
         if (skeletonData->_defaultSkin) {
             skeletonData->_skins[0] = skeletonData->_defaultSkin;
             skeletonData->_skins[0] = skeletonData->_defaultSkin;
         }
         }
 
 
         /* Skins. */
         /* Skins. */
-        for (i = skeletonData->_defaultSkin ? 1 : 0; i < skeletonData->_skins.size(); ++i) {
-            const char* skinName = readString(input);
+        for (int i = skeletonData->_defaultSkin ? 1 : 0; i < skeletonData->_skins.size(); ++i) {
+            String skinName(readString(input), true);
             skeletonData->_skins[i] = readSkin(input, skinName, skeletonData, nonessential);
             skeletonData->_skins[i] = readSkin(input, skinName, skeletonData, nonessential);
-            SpineExtension::free(skinName, __FILE__, __LINE__);
         }
         }
 
 
         /* Linked meshes. */
         /* Linked meshes. */
-        for (int i = 0, n = static_cast<int>(_linkedMeshes.size()); i < n; ++i) {
+        for (int i = 0, n = _linkedMeshes.size(); i < n; ++i) {
             LinkedMesh* linkedMesh = _linkedMeshes[i];
             LinkedMesh* linkedMesh = _linkedMeshes[i];
             Skin* skin = linkedMesh->_skin.length() == 0 ? skeletonData->getDefaultSkin() : skeletonData->findSkin(linkedMesh->_skin);
             Skin* skin = linkedMesh->_skin.length() == 0 ? skeletonData->getDefaultSkin() : skeletonData->findSkin(linkedMesh->_skin);
             if (skin == NULL) {
             if (skin == NULL) {
@@ -350,7 +296,7 @@ namespace Spine {
                 setError("Parent mesh not found: ", linkedMesh->_parent.buffer());
                 setError("Parent mesh not found: ", linkedMesh->_parent.buffer());
                 return NULL;
                 return NULL;
             }
             }
-            linkedMesh->_mesh->_parentMesh = static_cast<MeshAttachment*>(parent);
+            linkedMesh->_mesh->setParentMesh(static_cast<MeshAttachment*>(parent));
             linkedMesh->_mesh->updateUVs();
             linkedMesh->_mesh->updateUVs();
         }
         }
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);
@@ -359,23 +305,22 @@ namespace Spine {
         /* Events. */
         /* Events. */
         int eventsCount = readVarint(input, true);
         int eventsCount = readVarint(input, true);
         skeletonData->_events.setSize(eventsCount);
         skeletonData->_events.setSize(eventsCount);
-        for (i = 0; i < eventsCount; ++i) {
+        for (int i = 0; i < eventsCount; ++i) {
             const char* name = readString(input);
             const char* name = readString(input);
             EventData* eventData = new (__FILE__, __LINE__) EventData(String(name, true));
             EventData* eventData = new (__FILE__, __LINE__) EventData(String(name, true));
             eventData->_intValue = readVarint(input, false);
             eventData->_intValue = readVarint(input, false);
             eventData->_floatValue = readFloat(input);
             eventData->_floatValue = readFloat(input);
             eventData->_stringValue.own(readString(input));
             eventData->_stringValue.own(readString(input));
-            SpineExtension::free(readString(input), __FILE__, __LINE__); // skip audio path
+            String(readString(input), true); // skip audio path
             skeletonData->_events[i] = eventData;
             skeletonData->_events[i] = eventData;
         }
         }
 
 
         /* Animations. */
         /* Animations. */
         int animationsCount = readVarint(input, true);
         int animationsCount = readVarint(input, true);
         skeletonData->_animations.setSize(animationsCount);
         skeletonData->_animations.setSize(animationsCount);
-        for (i = 0; i < animationsCount; ++i) {
-            const char* name = readString(input);
+        for (int i = 0; i < animationsCount; ++i) {
+            String name(readString(input), true);
             Animation* animation = readAnimation(name, input, skeletonData);
             Animation* animation = readAnimation(name, input, skeletonData);
-            SpineExtension::free(name, __FILE__, __LINE__);
             if (!animation) {
             if (!animation) {
                 delete input;
                 delete input;
                 delete skeletonData;
                 delete skeletonData;
@@ -385,7 +330,6 @@ namespace Spine {
         }
         }
 
 
         delete input;
         delete input;
-        
         return skeletonData;
         return skeletonData;
     }
     }
     
     
@@ -493,27 +437,17 @@ namespace Spine {
     }
     }
     
     
     Skin* SkeletonBinary::readSkin(DataInput* input, const String& skinName, SkeletonData* skeletonData, bool nonessential) {
     Skin* SkeletonBinary::readSkin(DataInput* input, const String& skinName, SkeletonData* skeletonData, bool nonessential) {
-        Skin* skin = NULL;
         int slotCount = readVarint(input, true);
         int slotCount = readVarint(input, true);
-        int i, ii, nn;
-        if (slotCount == 0) {
-            return NULL;
-        }
-        
-        skin = new (__FILE__, __LINE__) Skin(skinName);
-        
-        for (i = 0; i < slotCount; ++i) {
+        if (slotCount == 0) return NULL;
+        Skin* skin = new (__FILE__, __LINE__) Skin(skinName);
+        for (int i = 0; i < slotCount; ++i) {
             int slotIndex = readVarint(input, true);
             int slotIndex = readVarint(input, true);
-            for (ii = 0, nn = readVarint(input, true); ii < nn; ++ii) {
-                const char* name = readString(input);
+            for (int ii = 0, nn = readVarint(input, true); ii < nn; ++ii) {
+                String name(readString(input), true);
                 Attachment* attachment = readAttachment(input, skin, slotIndex, name, skeletonData, nonessential);
                 Attachment* attachment = readAttachment(input, skin, slotIndex, name, skeletonData, nonessential);
-                if (attachment) {
-                    skin->addAttachment(slotIndex, String(name), attachment);
-                }
-                SpineExtension::free(name, __FILE__, __LINE__);
+                if (attachment) skin->addAttachment(slotIndex, String(name), attachment);
             }
             }
         }
         }
-        
         return skin;
         return skin;
     }
     }
     
     
@@ -556,7 +490,7 @@ namespace Spine {
                 if (path.isEmpty()) path = name;
                 if (path.isEmpty()) path = name;
 
 
                 mesh = _attachmentLoader->newMeshAttachment(*skin, String(name), String(path));
                 mesh = _attachmentLoader->newMeshAttachment(*skin, String(name), String(path));
-                mesh->_path = String(path);
+                mesh->_path = path;
                 readColor(input, mesh->getColor());
                 readColor(input, mesh->getColor());
                 vertexCount = readVarint(input, true);
                 vertexCount = readVarint(input, true);
                 readFloatArray(input, vertexCount << 1, 1, mesh->getRegionUVs());
                 readFloatArray(input, vertexCount << 1, 1, mesh->getRegionUVs());
@@ -575,45 +509,35 @@ namespace Spine {
                 return mesh;
                 return mesh;
             }
             }
             case AttachmentType_Linkedmesh: {
             case AttachmentType_Linkedmesh: {
-                const char *skinName;
-                const char *parent;
-                MeshAttachment *mesh;
                 String path(readString(input), true);
                 String path(readString(input), true);
                 if (path.isEmpty()) path = name;
                 if (path.isEmpty()) path = name;
 
 
-                mesh = _attachmentLoader->newMeshAttachment(*skin, String(name), String(path));
+                MeshAttachment* mesh = _attachmentLoader->newMeshAttachment(*skin, String(name), String(path));
                 mesh->_path = path;
                 mesh->_path = path;
                 readColor(input, mesh->getColor());
                 readColor(input, mesh->getColor());
-                skinName = readString(input);
-                parent = readString(input);
+                String skinName(readString(input), true);
+                String parent(readString(input), true);
                 mesh->_inheritDeform = readBoolean(input);
                 mesh->_inheritDeform = readBoolean(input);
                 if (nonessential) {
                 if (nonessential) {
                     mesh->_width = readFloat(input) * _scale;
                     mesh->_width = readFloat(input) * _scale;
                     mesh->_height = readFloat(input) * _scale;
                     mesh->_height = readFloat(input) * _scale;
                 }
                 }
 
 
-                LinkedMesh *linkedMesh = new(__FILE__, __LINE__) LinkedMesh(mesh, String(skinName), slotIndex,
-                                                                            String(parent));
+                LinkedMesh *linkedMesh = new(__FILE__, __LINE__) LinkedMesh(mesh, String(skinName), slotIndex, String(parent));
                 _linkedMeshes.add(linkedMesh);
                 _linkedMeshes.add(linkedMesh);
-
-                SpineExtension::free(skinName, __FILE__, __LINE__);
-                SpineExtension::free(parent, __FILE__, __LINE__);
-
                 return mesh;
                 return mesh;
             }
             }
             case AttachmentType_Path: {
             case AttachmentType_Path: {
                 PathAttachment *path = _attachmentLoader->newPathAttachment(*skin, String(name));
                 PathAttachment *path = _attachmentLoader->newPathAttachment(*skin, String(name));
-                int vertexCount = 0;
                 path->_closed = readBoolean(input);
                 path->_closed = readBoolean(input);
                 path->_constantSpeed = readBoolean(input);
                 path->_constantSpeed = readBoolean(input);
-                vertexCount = readVarint(input, true);
+                int vertexCount = readVarint(input, true);
                 readVertices(input, static_cast<VertexAttachment *>(path), vertexCount);
                 readVertices(input, static_cast<VertexAttachment *>(path), vertexCount);
                 int lengthsLength = vertexCount / 3;
                 int lengthsLength = vertexCount / 3;
                 path->_lengths.setSize(lengthsLength);
                 path->_lengths.setSize(lengthsLength);
                 for (int i = 0; i < lengthsLength; ++i) {
                 for (int i = 0; i < lengthsLength; ++i) {
                     path->_lengths[i] = readFloat(input) * _scale;
                     path->_lengths[i] = readFloat(input) * _scale;
                 }
                 }
-
                 if (nonessential) {
                 if (nonessential) {
                     /* Skip color. */
                     /* Skip color. */
                     readInt(input);
                     readInt(input);
@@ -638,13 +562,11 @@ namespace Spine {
                 int vertexCount = readVarint(input, true);
                 int vertexCount = readVarint(input, true);
                 ClippingAttachment *clip = _attachmentLoader->newClippingAttachment(*skin, name);
                 ClippingAttachment *clip = _attachmentLoader->newClippingAttachment(*skin, name);
                 readVertices(input, static_cast<VertexAttachment *>(clip), vertexCount);
                 readVertices(input, static_cast<VertexAttachment *>(clip), vertexCount);
-
+                clip->_endSlot = skeletonData->_slots[endSlotIndex];
                 if (nonessential) {
                 if (nonessential) {
                     /* Skip color. */
                     /* Skip color. */
                     readInt(input);
                     readInt(input);
                 }
                 }
-
-                clip->_endSlot = skeletonData->_slots[endSlotIndex];
                 return clip;
                 return clip;
             }
             }
         }
         }
@@ -705,7 +627,7 @@ namespace Spine {
         }
         }
     }
     }
     
     
-    Animation* SkeletonBinary::readAnimation(const char* name, DataInput* input, SkeletonData *skeletonData) {
+    Animation* SkeletonBinary::readAnimation(const String& name, DataInput* input, SkeletonData *skeletonData) {
         Vector<Timeline*> timelines;
         Vector<Timeline*> timelines;
         float scale = _scale;
         float scale = _scale;
         float duration = 0;
         float duration = 0;

+ 1 - 1
spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp

@@ -651,7 +651,7 @@ namespace Spine {
                 setError(root, "Parent mesh not found: ", linkedMesh->_parent.buffer());
                 setError(root, "Parent mesh not found: ", linkedMesh->_parent.buffer());
                 return NULL;
                 return NULL;
             }
             }
-            linkedMesh->_mesh->_parentMesh = static_cast<MeshAttachment*>(parent);
+            linkedMesh->_mesh->setParentMesh(static_cast<MeshAttachment*>(parent));
             linkedMesh->_mesh->updateUVs();
             linkedMesh->_mesh->updateUVs();
         }
         }
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);