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); }