/// <summary>
        /// Tries to get the physical render target size and returns it converted to virtual space.
        /// </summary>
        /// <param name="dc"></param>
        /// <param name="camera"></param>
        /// <returns></returns>
        public static bool TryGetOuterCamera(ICoreCanvas2D dc, out CameraTransform2D camera)
        {
            camera = default;

            if (!TryGetRenderTargetInfo(dc, out var vinfo))
            {
                return(false);
            }

            if (vinfo == null)
            {
                return(false);
            }

            var w = vinfo.PixelsWidth;
            var h = vinfo.PixelsHeight;

            if (w <= 0 || h <= 0)
            {
                return(false);
            }

            // query for any in between transformations
            if (dc is ITransformer2D xform)
            {
                // transform points from physical screen space to virtual space
                Span <Point2> points = stackalloc Point2[3];
                points[0] = (0, 0);
                points[1] = (w, 0);
                points[2] = (0, h);
                xform.TransformInverse(points);

                // create matrix from points
                var dx = Point2.Normalize(points[1] - points[0], out var ww);
                var dy = Point2.Normalize(points[2] - points[0], out var hh);
                var m  = new Matrix3x2(dx.X, dx.Y, dy.X, dy.Y, points[0].X, points[0].Y);

                // create camera
                camera = new CameraTransform2D(m, new Vector2(ww, hh), false);
            }
            else
            {
                camera = Create(Matrix3x2.Identity, new Vector2(w, h));
            }

            return(true);
        }