public void OnPostRender()
    {
        var   tex          = textureCamera.targetTexture;
        var   drawableSize = new Vector2(tex.width, tex.height);
        float time         = Time.frameCount;
        var   sinTime      = Mathf.Sin(time * VELOCITY);
        var   cosTime      = Mathf.Cos(time * VELOCITY);
        var   colorTime    = time * COLOR_CYCLE_SPEED;
        var   bgColor      = colors.Sample(colorTime);
        var   fgColor      = colors.Sample(colorTime + 0.5f);

        fgColor.a = 0.75f;

        var windowCenter = drawableSize * 0.5f;
        var outerCenter  = windowCenter + OUTER_RADIUS * new Vector2(sinTime, cosTime);
        var innerCenter  = windowCenter + cosTime * INNER_RADIUS * new Vector2(1.0f, sinTime);

        textureCamera.backgroundColor = bgColor;

        if (gState.IsPathfinderEnabled())
        {
            var canvas = new PFCanvas(gState.GetFontContext(), drawableSize);
            canvas.SetLineWidth(CIRCLE_THICKNESS * SCALE);
            canvas.SetStrokeStyle(fgColor);

            drawCircles(canvas, outerCenter);
            drawCircles(canvas, innerCenter);

            canvas.QueueForRendering();
        }
    }
    private void DrawHouse(PFCanvas canvas)
    {
        var scale = 0.5f;

        canvas.Save();

        canvas.SetCurrentTransform(
            Matrix4x4.Translate(new Vector2(0, Screen.height - 160)) *
            Matrix4x4.Scale(new Vector2(scale, scale))
            );
        canvas.SetLineWidth(10.0f * scale);
        canvas.SetStrokeStyle(Color.black);
        canvas.SetFillStyle(Color.black);
        canvas.SetLineJoin(PFLineJoin.Round);

        // Draw walls.
        canvas.StrokeRect(new Rect(75.0f, 140.0f, 150.0f, 110.0f));

        // Draw door.
        canvas.FillRect(new Rect(130.0f, 190.0f, 40.0f, 60.0f));

        // Draw roof.
        var path = new PFPath();

        path.MoveTo(new Vector2(50.0f, 140.0f));
        path.LineTo(new Vector2(150.0f, 60.0f));
        path.LineTo(new Vector2(250.0f, 140.0f));
        path.ClosePath();
        canvas.StrokePath(path);

        canvas.Restore();
    }