internal void CopyToSpriteSkinData(ref SpriteSkinData data, int spriteSkinIndex)
        {
            CacheBoneTransformIds();
            CacheCurrentSprite(m_AutoRebind);

            data.vertices               = m_SpriteVertices;
            data.boneWeights            = m_SpriteBoneWeights;
            data.bindPoses              = m_SpriteBindPoses;
            data.tangents               = m_SpriteTangents;
            data.hasTangents            = m_SpriteHasTangents;
            data.spriteVertexStreamSize = m_SpriteVertexStreamSize;
            data.spriteVertexCount      = m_SpriteVertexCount;
            data.tangentVertexOffset    = m_SpriteTangentVertexOffset;
            data.transformId            = m_TransformId;
            data.boneTransformId        = m_BoneTransformIdNativeSlice;
            m_DataIndex = spriteSkinIndex;
        }
        internal bool GetSpriteSkinBatchData(ref NativeArray <SpriteSkinData> data, ref SpriteSkinBatchProcessData batchProcessData, ref PerSkinJobData perskinJobData, ref int vertexBufferSize, int index, int spriteSkinIndex)
        {
            if (m_CurrentDeformSprite != sprite)
            {
                DeactivateSkinning();
                m_CurrentDeformSprite = sprite;
                UpdateSpriteDeform();
                CacheValidFlag();
            }
            if (m_IsValid)
            {
                Profiler.BeginSample("SpriteSkinData");
                data[index] = new SpriteSkinData()
                {
                    vertices               = m_SpriteVertices,
                    boneWeights            = m_SpriteBoneWeights,
                    bindPoses              = m_SpriteBindPoses,
                    tangents               = m_SpriteTangents,
                    hasTangents            = m_SpriteHasTangents,
                    spriteVertexStreamSize = m_SpriteVertexStreamSize,
                    spriteVertexCount      = m_SpriteVertexCount,
                    tangentVertexOffset    = m_SpriteTangentVertexOffset,
                    spriteSkinIndex        = spriteSkinIndex,
                    deformVerticesStartPos = vertexBufferSize,
                    rootBoneTransformId    = m_RootBoneTransformId,
                    transformId            = m_TransformId,
                    boneTransformId        = m_BoneTransformIdNativeSlice
                };
                Profiler.EndSample();
                Profiler.BeginSample("BatchProcessData");
                batchProcessData.rootBoneTransformId[index] = m_RootBoneTransformId;
                batchProcessData.rootTransformId[index]     = m_TransformId;
                batchProcessData.spriteBound[index]         = bounds;
                Profiler.EndSample();

                Profiler.BeginSample("PerskinJobData");
                perskinJobData.verticesIndex.x = perskinJobData.verticesIndex.y;
                perskinJobData.verticesIndex.y = perskinJobData.verticesIndex.x + m_SpriteVertexCount;
                vertexBufferSize += m_SpriteVertexCount * m_SpriteVertexStreamSize;
                perskinJobData.bindPosesIndex.x = perskinJobData.bindPosesIndex.y;
                perskinJobData.bindPosesIndex.y = perskinJobData.bindPosesIndex.x + m_SpriteBindPoses.Length;
                Profiler.EndSample();
                return(true);
            }
            return(false);
        }
        internal bool GetSpriteSkinBatchData(ref NativeArray <SpriteSkinData> data, ref SpriteSkinBatchProcessData batchProcessData, ref PerSkinJobData perskinJobData, ref int vertexBufferSize, int dataIndex, int spriteSkinIndex)
        {
            CacheBoneTransformIds();
            CacheCurrentSprite();
            if (m_IsValid && (alwaysUpdate || spriteRenderer.isVisible) && spriteRenderer.enabled)
            {
                Profiler.BeginSample("SpriteSkinData");
                m_DataIndex = dataIndex;
                m_CurrentDeformVerticesLength = m_SpriteVertexCount * m_SpriteVertexStreamSize;
                data[dataIndex] = new SpriteSkinData()
                {
                    vertices               = m_SpriteVertices,
                    boneWeights            = m_SpriteBoneWeights,
                    bindPoses              = m_SpriteBindPoses,
                    tangents               = m_SpriteTangents,
                    hasTangents            = m_SpriteHasTangents,
                    spriteVertexStreamSize = m_SpriteVertexStreamSize,
                    spriteVertexCount      = m_SpriteVertexCount,
                    tangentVertexOffset    = m_SpriteTangentVertexOffset,
                    spriteSkinIndex        = spriteSkinIndex,
                    deformVerticesStartPos = vertexBufferSize,
                    rootBoneTransformId    = m_RootBoneTransformId,
                    transformId            = m_TransformId,
                    boneTransformId        = m_BoneTransformIdNativeSlice
                };
                Profiler.EndSample();
                Profiler.BeginSample("BatchProcessData");
                batchProcessData.rootBoneTransformId[dataIndex] = m_RootBoneTransformId;
                batchProcessData.rootTransformId[dataIndex]     = m_TransformId;
                batchProcessData.spriteBound[dataIndex]         = bounds;
                Profiler.EndSample();

                Profiler.BeginSample("PerskinJobData");
                perskinJobData.verticesIndex.x = perskinJobData.verticesIndex.y;
                perskinJobData.verticesIndex.y = perskinJobData.verticesIndex.x + m_SpriteVertexCount;
                vertexBufferSize += m_CurrentDeformVerticesLength;
                perskinJobData.bindPosesIndex.x = perskinJobData.bindPosesIndex.y;
                perskinJobData.bindPosesIndex.y = perskinJobData.bindPosesIndex.x + m_SpriteBindPoses.Length;
                Profiler.EndSample();
                return(true);
            }
            m_DataIndex = -1;
            return(false);
        }