예제 #1
0
        public static void ToSKPaint(this SP.Paint paint, SkiaCodeGenObjectCounter counter, StringBuilder sb, string indent)
        {
            var counterPaint = counter.Paint;

            sb.AppendLine($"{indent}var {counter.PaintVarName}{counterPaint} = new SKPaint();");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.Style = {paint.Style.ToSKPaintStyle()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.IsAntialias = {paint.IsAntialias.ToString(_ci).ToLower()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.StrokeWidth = {paint.StrokeWidth.ToString(_ci)}f;");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.StrokeCap = {paint.StrokeCap.ToSKStrokeCap()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.StrokeJoin = {paint.StrokeJoin.ToSKStrokeJoin()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.StrokeMiter = {paint.StrokeMiter.ToString(_ci)}f;");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.TextSize = {paint.TextSize.ToString(_ci)}f;");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.TextAlign = {paint.TextAlign.ToSKTextAlign()};");

            if (paint.Typeface != null)
            {
                // TODO: Typeface = paint.Typeface?.ToSKTypeface();
                sb.AppendLine($"{indent} // TODO: {counter.PaintVarName}{counterPaint}.Typeface");
            }

            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.LcdRenderText = {paint.LcdRenderText.ToString(_ci).ToLower()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.SubpixelText = {paint.SubpixelText.ToString(_ci).ToLower()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.TextEncoding = {paint.TextEncoding.ToSKTextEncoding()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.Color = {(paint.Color == null ? "SKColor.Empty" : ToSKColor(paint.Color.Value))};");

            if (paint.Shader != null)
            {
                var counterShader = ++counter.Shader;
                paint.Shader.ToSKShader(counter, sb, indent);
                sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.Shader = {counter.ShaderVarName}{counterShader};");
            }

            if (paint.ColorFilter != null)
            {
                // TODO: ColorFilter = paint.ColorFilter?.ToSKColorFilter();
                sb.AppendLine($"{indent} // TODO: {counter.PaintVarName}{counterPaint}.ColorFilter");
            }

            if (paint.ImageFilter != null)
            {
                // TODO: ImageFilter = paint.ImageFilter?.ToSKImageFilter();
                sb.AppendLine($"{indent} // TODO: {counter.PaintVarName}{counterPaint}.ImageFilter");
            }

            if (paint.PathEffect != null)
            {
                // TODO: PathEffect = paint.PathEffect?.ToSKPathEffect();
                sb.AppendLine($"{indent} // TODO: {counter.PaintVarName}{counterPaint}.PathEffect");
            }

            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.BlendMode = {paint.BlendMode.ToSKBlendMode()};");
            sb.AppendLine($"{indent}{counter.PaintVarName}{counterPaint}.FilterQuality = {paint.FilterQuality.ToSKFilterQuality()};");
        }
예제 #2
0
        public static string Generate(SP.Picture picture, string namespaceName, string className)
        {
            var counter = new SkiaCodeGenObjectCounter();

            var sb = new StringBuilder();

            sb.AppendLine($"using SkiaSharp;");
            sb.AppendLine($"");
            sb.AppendLine($"namespace {namespaceName}");
            sb.AppendLine($"{{");
            sb.AppendLine($"    public class {className}");
            sb.AppendLine($"    {{");
            sb.AppendLine($"        public static SKPicture Picture {{ get; }}");
            sb.AppendLine($"");
            sb.AppendLine($"        static {className}()");
            sb.AppendLine($"        {{");
            sb.AppendLine($"            Picture = Record();");
            sb.AppendLine($"        }}");
            sb.AppendLine($"");
            sb.AppendLine($"        private static SKPicture Record()");
            sb.AppendLine($"        {{");

            var indent         = "            ";
            var counterPicture = ++counter.Picture;

            picture.ToSKPicture(counter, sb, indent);
            sb.AppendLine($"{indent}return {counter.PictureVarName}{counterPicture};");

            sb.AppendLine($"        }}");
            sb.AppendLine($"");
            sb.AppendLine($"        public static void Draw(SKCanvas {counter.CanvasVarName})");
            sb.AppendLine($"        {{");
            sb.AppendLine($"            {counter.CanvasVarName}.DrawPicture(Picture);");
            sb.AppendLine($"        }}");
            sb.AppendLine($"    }}");
            sb.AppendLine($"}}");

            var code = sb.ToString();

            return(code);
        }
예제 #3
0
        public static void ToSKPicture(this SP.Picture?picture, SkiaCodeGenObjectCounter counter, StringBuilder sb, string indent)
        {
            var counterPicture = counter.Picture;

            if (picture == null)
            {
                sb.AppendLine($"{indent}var {counter.PictureVarName}{counterPicture} = default(SKPicture);");
                return;
            }

            var counterPictureRecorder = ++counter.PictureRecorder;
            var counterCanvas          = ++counter.Canvas;

            sb.AppendLine($"{indent}using var {counter.PictureRecorderVarName}{counterPictureRecorder} = new SKPictureRecorder();");
            sb.AppendLine($"{indent}using var {counter.CanvasVarName}{counterCanvas} = {counter.PictureRecorderVarName}{counterPictureRecorder}.BeginRecording({picture.CullRect.ToSKRect()});");

            if (picture.Commands == null)
            {
                sb.AppendLine($"{indent}var {counter.PictureVarName}{counterPicture} = {counter.PictureRecorderVarName}{counterPictureRecorder}.EndRecording();");
                return;
            }

            foreach (var canvasCommand in picture.Commands)
            {
                switch (canvasCommand)
                {
                case SP.ClipPathCanvasCommand clipPathCanvasCommand:
                {
                    // TODO:
                    sb.AppendLine($"{indent}// TODO: ClipPath");
                    //var path = clipPathCanvasCommand.ClipPath.ToSKPath();
                    //var operation = clipPathCanvasCommand.Operation.ToSKClipOperation();
                    //var antialias = clipPathCanvasCommand.Antialias;
                    //skCanvas.ClipPath(path, operation, antialias);
                }
                break;

                case SP.ClipRectCanvasCommand clipRectCanvasCommand:
                {
                    var rect      = clipRectCanvasCommand.Rect.ToSKRect();
                    var operation = clipRectCanvasCommand.Operation.ToSKClipOperation();
                    var antialias = clipRectCanvasCommand.Antialias.ToString(_ci).ToLower();
                    sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.ClipRect({rect}, {operation}, {antialias});");
                }
                break;

                case SP.SaveCanvasCommand _:
                {
                    sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.Save();");
                }
                break;

                case SP.RestoreCanvasCommand _:
                {
                    sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.Restore();");
                }
                break;

                case SP.SetMatrixCanvasCommand setMatrixCanvasCommand:
                {
                    sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.SetMatrix({setMatrixCanvasCommand.Matrix.ToSKMatrix()});");
                }
                break;

                case SP.SaveLayerCanvasCommand saveLayerCanvasCommand:
                {
                    if (saveLayerCanvasCommand.Paint != null)
                    {
                        var counterPaint = ++counter.Paint;
                        saveLayerCanvasCommand.Paint.ToSKPaint(counter, sb, indent);
                        sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.SaveLayer({counter.PaintVarName}{counterPaint});");
                    }
                    else
                    {
                        sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.SaveLayer();");
                    }
                }
                break;

                case SP.DrawImageCanvasCommand drawImageCanvasCommand:
                {
                    if (drawImageCanvasCommand.Image != null)
                    {
                        // TODO:
                        sb.AppendLine($"{indent}// TODO: DrawImage");
                        //var image = drawImageCanvasCommand.Image.ToSKImage();
                        //var source = drawImageCanvasCommand.Source.ToSKRect();
                        //var dest = drawImageCanvasCommand.Dest.ToSKRect();
                        //var paint = drawImageCanvasCommand.Paint?.ToSKPaint();
                        //skCanvas.DrawImage(image, source, dest, paint);
                    }
                }
                break;

                case SP.DrawPathCanvasCommand drawPathCanvasCommand:
                {
                    if (drawPathCanvasCommand.Path != null && drawPathCanvasCommand.Paint != null)
                    {
                        var counterPath = ++counter.Path;
                        drawPathCanvasCommand.Path.ToSKPath(counter, sb, indent);
                        var counterPaint = ++counter.Paint;
                        drawPathCanvasCommand.Paint.ToSKPaint(counter, sb, indent);
                        sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.DrawPath({counter.PathVarName}{counterPath}, {counter.PaintVarName}{counterPaint});");
                    }
                }
                break;

                case SP.DrawTextBlobCanvasCommand drawPositionedTextCanvasCommand:
                {
                    if (drawPositionedTextCanvasCommand.TextBlob != null && drawPositionedTextCanvasCommand.TextBlob.Points != null && drawPositionedTextCanvasCommand.Paint != null)
                    {
                        // TODO:
                        sb.AppendLine($"{indent}// TODO: DrawTextBlob");
                        //var text = drawPositionedTextCanvasCommand.TextBlob.Text;
                        //var points = drawPositionedTextCanvasCommand.TextBlob.Points.ToSKPoints();
                        //var paint = drawPositionedTextCanvasCommand.Paint.ToSKPaint();
                        //var font = paint.ToFont();
                        //var textBlob = SKTextBlob.CreatePositioned(text, font, points);
                        //skCanvas.DrawText(textBlob, 0, 0, paint);
                    }
                }
                break;

                case SP.DrawTextCanvasCommand drawTextCanvasCommand:
                {
                    if (drawTextCanvasCommand.Paint != null)
                    {
                        var text         = drawTextCanvasCommand.Text;
                        var x            = drawTextCanvasCommand.X;
                        var y            = drawTextCanvasCommand.Y;
                        var counterPaint = ++counter.Paint;
                        drawTextCanvasCommand.Paint.ToSKPaint(counter, sb, indent);
                        sb.AppendLine($"{indent}{counter.CanvasVarName}{counterCanvas}.DrawText(\"{text}\", {x.ToString(_ci)}, {y.ToString(_ci)}, {counter.PaintVarName}{counterPaint});");
                    }
                }
                break;

                case SP.DrawTextOnPathCanvasCommand drawTextOnPathCanvasCommand:
                {
                    if (drawTextOnPathCanvasCommand.Path != null && drawTextOnPathCanvasCommand.Paint != null)
                    {
                        // TODO:
                        sb.AppendLine($"{indent}// TODO: DrawTextOnPath");
                        //var text = drawTextOnPathCanvasCommand.Text;
                        //var path = drawTextOnPathCanvasCommand.Path.ToSKPath();
                        //var hOffset = drawTextOnPathCanvasCommand.HOffset;
                        //var vOffset = drawTextOnPathCanvasCommand.VOffset;
                        //var paint = drawTextOnPathCanvasCommand.Paint.ToSKPaint();
                        //skCanvas.DrawTextOnPath(text, path, hOffset, vOffset, paint);
                    }
                }
                break;

                default:
                    break;
                }
            }

            sb.AppendLine($"{indent}var {counter.PictureVarName}{counterPicture} = {counter.PictureRecorderVarName}{counterPictureRecorder}.EndRecording();");
        }
예제 #4
0
        public static void ToSKPath(this SP.Path path, SkiaCodeGenObjectCounter counter, StringBuilder sb, string indent)
        {
            sb.AppendLine($"{indent}var {counter.PathVarName}{counter.Path} = new SKPath() {{ FillType = {path.FillType.ToSKPathFillType()} }};");

            if (path.Commands == null)
            {
                return;
            }

            foreach (var pathCommand in path.Commands)
            {
                switch (pathCommand)
                {
                case SP.MoveToPathCommand moveToPathCommand:
                {
                    var x = moveToPathCommand.X;
                    var y = moveToPathCommand.Y;
                    sb.AppendLine($"{indent}skPath{counter.Path}.MoveTo({x.ToString(_ci)}f, {y.ToString(_ci)}f);");
                }
                break;

                case SP.LineToPathCommand lineToPathCommand:
                {
                    var x = lineToPathCommand.X;
                    var y = lineToPathCommand.Y;
                    sb.AppendLine($"{indent}skPath{counter.Path}.LineTo({x.ToString(_ci)}f, {y.ToString(_ci)}f);");
                }
                break;

                case SP.ArcToPathCommand arcToPathCommand:
                {
                    var rx          = arcToPathCommand.Rx;
                    var ry          = arcToPathCommand.Ry;
                    var xAxisRotate = arcToPathCommand.XAxisRotate;
                    var largeArc    = arcToPathCommand.LargeArc.ToSKPathArcSize();
                    var sweep       = arcToPathCommand.Sweep.ToSKPathDirection();
                    var x           = arcToPathCommand.X;
                    var y           = arcToPathCommand.Y;
                    sb.AppendLine($"{indent}skPath{counter.Path}.ArcTo({rx.ToString(_ci)}f, {ry.ToString(_ci)}f, {xAxisRotate.ToString(_ci)}f, {largeArc}, {sweep}, {x.ToString(_ci)}f, {y.ToString(_ci)}f);");
                }
                break;

                case SP.QuadToPathCommand quadToPathCommand:
                {
                    var x0 = quadToPathCommand.X0;
                    var y0 = quadToPathCommand.Y0;
                    var x1 = quadToPathCommand.X1;
                    var y1 = quadToPathCommand.Y1;
                    sb.AppendLine($"{indent}skPath{counter.Path}.QuadTo({x0.ToString(_ci)}f, {y0.ToString(_ci)}f, {x1.ToString(_ci)}f, {y1.ToString(_ci)}f);");
                }
                break;

                case SP.CubicToPathCommand cubicToPathCommand:
                {
                    var x0 = cubicToPathCommand.X0;
                    var y0 = cubicToPathCommand.Y0;
                    var x1 = cubicToPathCommand.X1;
                    var y1 = cubicToPathCommand.Y1;
                    var x2 = cubicToPathCommand.X2;
                    var y2 = cubicToPathCommand.Y2;
                    sb.AppendLine($"{indent}skPath{counter.Path}.CubicTo({x0.ToString(_ci)}f, {y0.ToString(_ci)}f, {x1.ToString(_ci)}f, {y1.ToString(_ci)}f, {x2.ToString(_ci)}f, {y2.ToString(_ci)}f);");
                }
                break;

                case SP.ClosePathCommand _:
                {
                    sb.AppendLine($"{indent}skPath{counter.Path}.Close();");
                }
                break;

                case SP.AddRectPathCommand addRectPathCommand:
                {
                    var rect = addRectPathCommand.Rect.ToSKRect();
                    sb.AppendLine($"{indent}skPath{counter.Path}.AddRect({rect});");
                }
                break;

                case SP.AddRoundRectPathCommand addRoundRectPathCommand:
                {
                    var rect = addRoundRectPathCommand.Rect.ToSKRect();
                    var rx   = addRoundRectPathCommand.Rx;
                    var ry   = addRoundRectPathCommand.Ry;
                    sb.AppendLine($"{indent}skPath{counter.Path}.AddRoundRect({rect}, {rx.ToString(_ci)}f, {ry.ToString(_ci)}f);");
                }
                break;

                case SP.AddOvalPathCommand addOvalPathCommand:
                {
                    var rect = addOvalPathCommand.Rect.ToSKRect();
                    sb.AppendLine($"{indent}skPath{counter.Path}.AddOval({rect});");
                }
                break;

                case SP.AddCirclePathCommand addCirclePathCommand:
                {
                    var x      = addCirclePathCommand.X;
                    var y      = addCirclePathCommand.Y;
                    var radius = addCirclePathCommand.Radius;
                    sb.AppendLine($"{indent}skPath{counter.Path}.AddCircle({x.ToString(_ci)}f, {y.ToString(_ci)}f, {radius.ToString(_ci)}f);");
                }
                break;

                case SP.AddPolyPathCommand addPolyPathCommand:
                {
                    if (addPolyPathCommand.Points != null)
                    {
                        var points = addPolyPathCommand.Points.ToSKPoints();
                        var close  = addPolyPathCommand.Close.ToString(_ci).ToLower();
                        sb.AppendLine($"{indent}skPath{counter.Path}.AddPoly(points, {close});");
                    }
                }
                break;

                default:
                    break;
                }
            }
        }
예제 #5
0
        public static void ToSKShader(this SP.Shader?shader, SkiaCodeGenObjectCounter counter, StringBuilder sb, string indent)
        {
            var counterShader = counter.Shader;

            switch (shader)
            {
            case SP.ColorShader colorShader:
            {
                sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                sb.AppendLine($"SKShader.CreateColor(");
                sb.AppendLine($"{indent}    {colorShader.Color.ToSKColor()});");
                return;
            }

            case SP.LinearGradientShader linearGradientShader:
            {
                if (linearGradientShader.Colors == null || linearGradientShader.ColorPos == null)
                {
                    sb.AppendLine($"{indent}var {counter.ShaderVarName}{counterShader} = default(SKShader);");
                    return;
                }

                if (linearGradientShader.LocalMatrix != null)
                {
                    sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                    sb.AppendLine($"SKShader.CreateLinearGradient(");
                    sb.AppendLine($"{indent}    {linearGradientShader.Start.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.End.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.Colors.ToSKColors()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.ColorPos.ToSKColorPos()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.Mode.ToSKShaderTileMode()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.LocalMatrix.Value.ToSKMatrix()});");
                    return;
                }
                else
                {
                    sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                    sb.AppendLine($"SKShader.CreateLinearGradient(");
                    sb.AppendLine($"{indent}    {linearGradientShader.Start.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.End.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.Colors.ToSKColors()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.ColorPos.ToSKColorPos()},");
                    sb.AppendLine($"{indent}    {linearGradientShader.Mode.ToSKShaderTileMode()});");
                    return;
                }
            }

            case SP.TwoPointConicalGradientShader twoPointConicalGradientShader:
            {
                if (twoPointConicalGradientShader.Colors == null || twoPointConicalGradientShader.ColorPos == null)
                {
                    sb.AppendLine($"{indent}var {counter.ShaderVarName}{counterShader} = default(SKShader);");
                    return;
                }

                if (twoPointConicalGradientShader.LocalMatrix != null)
                {
                    sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                    sb.AppendLine($"SKShader.CreateTwoPointConicalGradient(");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Start.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.StartRadius.ToString(_ci)}f,");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.End.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.EndRadius.ToString(_ci)}f,");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Colors.ToSKColors()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.ColorPos.ToSKColorPos()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Mode.ToSKShaderTileMode()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.LocalMatrix.Value.ToSKMatrix()});");
                    return;
                }
                else
                {
                    sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                    sb.AppendLine($"SKShader.CreateTwoPointConicalGradient(");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Start.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.StartRadius.ToString(_ci)}f,");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.End.ToSKPoint()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.EndRadius.ToString(_ci)}f,");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Colors.ToSKColors()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.ColorPos.ToSKColorPos()},");
                    sb.AppendLine($"{indent}    {twoPointConicalGradientShader.Mode.ToSKShaderTileMode()});");
                    return;
                }
            }

            case SP.PictureShader pictureShader:
            {
                if (pictureShader.Src == null)
                {
                    sb.AppendLine($"{indent}var {counter.ShaderVarName}{counterShader} = default(SKShader);");
                    return;
                }

                var counterPicture = ++counter.Picture;
                pictureShader.Src?.ToSKPicture(counter, sb, indent);

                sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                sb.AppendLine($"SKShader.CreatePicture(");
                sb.AppendLine($"{indent}    {counter.PictureVarName}{counterPicture},");
                sb.AppendLine($"{indent}    SKShaderTileMode.Repeat,");
                sb.AppendLine($"{indent}    SKShaderTileMode.Repeat,");
                sb.AppendLine($"{indent}    {pictureShader.LocalMatrix.ToSKMatrix()},");
                sb.AppendLine($"{indent}    {pictureShader.Tile.ToSKRect()});");
                return;
            }

            case SP.PerlinNoiseFractalNoiseShader perlinNoiseFractalNoiseShader:
            {
                sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                sb.AppendLine($"SKShader.CreatePerlinNoiseFractalNoise(");
                sb.AppendLine($"{indent}    {perlinNoiseFractalNoiseShader.BaseFrequencyX.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseFractalNoiseShader.BaseFrequencyY.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseFractalNoiseShader.NumOctaves.ToString(_ci)},");
                sb.AppendLine($"{indent}    {perlinNoiseFractalNoiseShader.Seed.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseFractalNoiseShader.TileSize.ToSKPointI()});");
                return;
            }

            case SP.PerlinNoiseTurbulenceShader perlinNoiseTurbulenceShader:
            {
                sb.Append($"{indent}var {counter.ShaderVarName}{counterShader} = ");
                sb.AppendLine($"SKShader.CreatePerlinNoiseTurbulence(");
                sb.AppendLine($"{indent}    {perlinNoiseTurbulenceShader.BaseFrequencyX.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseTurbulenceShader.BaseFrequencyY.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseTurbulenceShader.NumOctaves.ToString(_ci)},");
                sb.AppendLine($"{indent}    {perlinNoiseTurbulenceShader.Seed.ToString(_ci)}f,");
                sb.AppendLine($"{indent}    {perlinNoiseTurbulenceShader.TileSize.ToSKPointI()});");
                return;
            }

            default:
            {
                sb.AppendLine($"{indent}var {counter.ShaderVarName}{counterShader} = default(SKShader);");
                return;
            }
            }
        }