protected override PixelShaderInput InterpolatePoint(PixelShaderInput va, PixelShaderInput vb, PixelShaderInput vc, Vector2 p, out bool outOfRange)
        {
            var v = new PixelShaderInput();

            var vatp = va.TransformedPosition;
            var vbtp = vb.TransformedPosition;
            var vctp = vc.TransformedPosition;

            var wp = Triangular.GetInterpolatedW(p, vatp, vbtp, vctp, out var successful);

            outOfRange = !successful;

            v.TransformedPosition = Triangular.InterpolateTransformedPosition(p, wp, vatp, vbtp, vctp, out successful);

            if (!outOfRange)
            {
                outOfRange = !successful;
            }

            v.TexCoords = Triangular.Interpolate(va.TexCoords, vb.TexCoords, vc.TexCoords, p, wp, vatp, vbtp, vctp, out successful);

            if (!outOfRange)
            {
                outOfRange = !successful;
            }

            return(v);
        }