public void Export(TextureFormat texture, Metadata.MetadataWriter metadata, string directory, string basename) { if (texture.GetType() != typeof(T)) { throw new TextureFormatException("Wrong TextureFormat type, expected: " + typeof(T).FullName); } metadata.BeginSection(MetadataID); metadata.PutAttribute("Textures", texture.FramesCount); metadata.PutAttribute("Basename", basename); metadata.BeginSection("GeneralMetadata"); OnExportGeneralTextureMetadata((T)texture, metadata); metadata.EndSection(); int oldSelected = texture.SelectedFrame; for (int frame = 0; frame < texture.FramesCount; frame++) { texture.SelectedFrame = frame; metadata.BeginSection("FrameMetadata"); metadata.PutAttribute("PalettesCount", texture.PalettesCount); metadata.PutAttribute("MipmapsCount", texture.MipmapsCount); OnExportFrameMetadata((T)texture, frame, metadata); metadata.EndSection(); int i = 0; Image referenceImage; ICollection <Image> list = ConstructImages(texture, out referenceImage); foreach (Image img in list) { string fullPath = Path.Combine(directory, basename + "_layer" + frame + "_" + i++ + ".png"); if (img != null) { img.Save(fullPath); } else { File.WriteAllText(fullPath, string.Empty); } } if (referenceImage != null) { referenceImage.Save(Path.Combine(directory, basename + "_layer" + frame + "_reference.png")); } } texture.SelectedFrame = oldSelected; metadata.EndSection(); }
public static TexturePropertyGridObject Create(TextureFormat texture) { if (texture.GetType() == typeof(TIM2Texture)) { return(new TIM2PropertyGridObject((TIM2Texture)texture)); } else if (texture.GetType() == typeof(PE3DATTexture)) { return(new PE3DATPropertyGridObject((PE3DATTexture)texture)); } else if (texture.GetType() == typeof(NamcoTexture)) { return(new NamcoTexturePropertyGridObject((NamcoTexture)texture)); } else if (texture.GetType() == typeof(TPLTexture)) { return(new TPLTexturePropertyGridObject((TPLTexture)texture)); } else { return(new TexturePropertyGridObject(texture)); } }
public static bool ApplyTexture2DArray(Texture2DArrayManager manager) { Texture2D[] tex2DArray = Array.FindAll(manager.textureInputArray, tex => tex != null); if (tex2DArray.Length <= 0) { errorBuilder.Remove(0, errorBuilder.Length); Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.width).Append(',').Append(tex.height).Append('\n')); Debug.LogErrorFormat("Fail to apply.. not exist texture in array."); return(false); } Texture2D firstTex = tex2DArray[0]; int width = firstTex.width, height = firstTex.height; if (!Array.TrueForAll(tex2DArray, (tex) => tex.width == width && tex.height == height)) { errorBuilder.Remove(0, errorBuilder.Length); Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.width).Append(',').Append(tex.height).Append('\n')); Debug.LogErrorFormat("Fail to apply.. all texture size must be same.\n{0}", errorBuilder.ToString()); return(false); } TextureFormat format = firstTex.format; if (!Array.TrueForAll(tex2DArray, (tex) => tex.format == format)) { format = TextureFormat.RGBA32; errorBuilder.Remove(0, errorBuilder.Length); Array.ForEach(tex2DArray, (tex) => errorBuilder.Append(tex.name).Append(" : ").Append(tex.format).Append('\n')); Debug.LogWarningFormat("All texture format is not same. Force {0}.{1} \n{2}", format.GetType().ToString(), format.ToString(), errorBuilder.ToString()); } Texture2DArray realArray = manager.texture2DArray; if (IsDifferent(manager)) { DestroyImmediate(manager.texture2DArray, true); realArray = new Texture2DArray(width, height, tex2DArray.Length, format, false); realArray.name = "Texture2DArray"; AssetDatabase.AddObjectToAsset(realArray, manager); manager.texture2DArray = realArray; Debug.LogWarning("Texture2DArray instance is re-created."); } for (int i = 0; i < tex2DArray.Length; i++) { for (int j = 0; j < tex2DArray[i].mipmapCount; j++) { Graphics.CopyTexture(tex2DArray[i], 0, j, realArray, i, j); } } realArray.Apply(true); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(manager)); AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); return(true); }