public void MoveRenderTexture(UMAData umaData, RenderTextureSource rts)
    {
        // Thread p = new Thread(new ParameterizedThreadStart(CopyRenderTexture(rts))

        int arrayLen = 0;

        int width  = rts.renderTexture.width;
        int height = rts.renderTexture.height;

        /*
         * for (int i=0; i< rts.renderTexture.mipmapCount; i++)
         * {
         *  arrayLen += width * height * 4;
         *  width >>= 1;
         *  height >>= 1;
         * }*/

        DestinationTextureHolder dtex = new DestinationTextureHolder();

        dtex.CompleteArray = new NativeArray <uint>(arrayLen, Allocator.Persistent);
/*        dtex.mipCount = rts.renderTexture.mipmapCount; */
        dtex.MipConverted = new bool[dtex.mipCount + 1];
        dtex.isDisposed   = false;

        for (int i = 0; i < rts.renderTexture.mipmapCount; i++)
        {
            AsyncGPUReadbackRequest agr = AsyncGPUReadback.Request(rts.renderTexture, i, TextureFormat.ARGB32, OnCompleteReadback);
            ReadBackTracker         rbt = new ReadBackTracker();
            rbt.request        = agr;
            rbt.texSource      = rts;
            rbt.umaData        = umaData;
            rbt.texAccumulator = dtex;
            trackedItems.Add(agr, rbt);
        }
    }
    public List <RenderTextureSource> GetRenderTextures(UMAData uMAData)
    {
        SkinnedMeshRenderer[] renderers = uMAData.GetRenderers();

        List <RenderTextureSource> textureList = new List <RenderTextureSource>();

        for (int atlasIndex = 0; atlasIndex < uMAData.generatedMaterials.materials.Count; atlasIndex++)
        {
            var atlas = uMAData.generatedMaterials.materials[atlasIndex];

            if (uMAData.generatedMaterials.materials[atlasIndex] != null && uMAData.generatedMaterials.materials[atlasIndex].resultingAtlasList != null)
            {
                SkinnedMeshRenderer smr = uMAData.generatedMaterials.materials[atlasIndex].skinnedMeshRenderer;

                for (int textureIndex = 0; textureIndex < uMAData.generatedMaterials.materials[atlasIndex].resultingAtlasList.Length; textureIndex++)
                {
                    if (uMAData.generatedMaterials.materials[atlasIndex].resultingAtlasList[textureIndex] != null)
                    {
                        Texture tempTexture = uMAData.generatedMaterials.materials[atlasIndex].resultingAtlasList[textureIndex];


                        if (tempTexture is RenderTexture)
                        {
                            // var atlas = umaData.generatedMaterials.materials[atlasIndex];

                            RenderTextureSource rts = new RenderTextureSource();
                            rts.atlasIndex          = atlasIndex;
                            rts.textureIndex        = textureIndex;
                            rts.renderTexture       = tempTexture as RenderTexture;
                            rts.skinnedMeshRenderer = smr;
                            rts.materialIndex       = uMAData.generatedMaterials.materials[atlasIndex].materialIndex;

                            textureList.Add(rts);
                        }
                    }
                }
            }
        }
        return(textureList);
    }