Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }