internal static Texture2D BuildPreviewTexture(UnityEngine.Object obj, int width, int height) { Texture2D previewTex = null; var sprite = SVGImporter.GetImportedSprite(obj); if (sprite != null) { var mat = SVGImporter.CreateSVGSpriteMaterial(sprite); previewTex = VectorUtils.RenderSpriteToTexture2D(sprite, width, height, mat, 4); Material.DestroyImmediate(mat); } #if UNITY_2019_3_OR_NEWER else { Vector2[] vertices = null; UInt16[] indices = null; Vector2[] uvs = null; Color[] colors = null; Vector2[] settings = null; Texture2D atlas = null; Vector2 size = Vector2.zero; if (InternalBridge.GetDataFromVectorImage(obj, ref vertices, ref indices, ref uvs, ref colors, ref settings, ref atlas, ref size)) { var mat = SVGImporter.CreateSVGSpriteMaterial(atlas != null); previewTex = InternalBridge.RenderVectorImageToTexture2D(obj, width, height, mat, 4); Material.DestroyImmediate(mat); } } #endif return(previewTex); }
public override void OnPreviewGUI(Rect r, GUIStyle background) { if (Event.current.type != EventType.Repaint) { return; } background.Draw(r, false, false, false, false); Texture2D previewTex = null; var sourceSize = Vector2.zero; #if UNITY_2019_3_OR_NEWER UnityEngine.Object vectorImage = null; Texture2D vectorImageAtlas = null; #endif var sprite = SVGImporter.GetImportedSprite(assetTarget); if (sprite == null) { if (assetTarget is Texture2D) { EditorGUI.DrawTextureTransparent(r, (Texture2D)assetTarget, ScaleMode.ScaleToFit, 0.0f, 0); return; } #if UNITY_2019_3_OR_NEWER Vector2[] vertices = null; UInt16[] indices = null; Vector2[] uvs = null; Color[] colors = null; Vector2[] settingIndices = null; Texture2D atlas = null; Vector2 size = Vector2.zero; InternalBridge.GradientSettingsBridge[] settings = null; if (InternalBridge.GetDataFromVectorImage(assetTarget, ref vertices, ref indices, ref uvs, ref colors, ref settingIndices, ref settings, ref atlas, ref size)) { vectorImage = assetTarget; vectorImageAtlas = atlas; sourceSize = size; } #endif } else { sourceSize = sprite.rect.size; } float zoomLevel = Mathf.Min(r.width / sourceSize.x, r.height / sourceSize.y); Rect wantedRect = new Rect(r.x, r.y, sourceSize.x * zoomLevel, sourceSize.y * zoomLevel); wantedRect.center = r.center; previewTex = BuildPreviewTexture(assetTarget, (int)wantedRect.width, (int)wantedRect.height); if (previewTex != null) { EditorGUI.DrawTextureTransparent(r, previewTex, ScaleMode.ScaleToFit); Texture2D.DestroyImmediate(previewTex); } }