renderShader static method

Image renderShader({
  1. required FragmentShader? shader,
  2. required Canvas canvas,
  3. required dynamic record(
    1. Canvas canvas
    ),
  4. required Vector2 size,
  5. required Paint paint,
  6. double shaderCanvasScale = 1.0,
  7. bool shaderComponentStatic = false,
  8. Image? snapshot,
})

Implementation

static ui.Image renderShader({
  required ui.FragmentShader? shader,
  required ui.Canvas canvas,
  required Function(ui.Canvas canvas) record,
  required Vector2 size,
  required ui.Paint paint,
  double shaderCanvasScale = 1.0,
  bool shaderComponentStatic = false,
  ui.Image? snapshot,
}) {
  {
    var innerSnapshot = snapshot;
    final recorder = ui.PictureRecorder();
    final canvasRecorder = ui.Canvas(recorder);
    canvasRecorder.scale(shaderCanvasScale);
    record(canvasRecorder);

    if (shaderComponentStatic) {
      if (innerSnapshot == null) {
        innerSnapshot = recorder.endRecording().toImageSync(
              (size.x * shaderCanvasScale).floor(),
              (size.y * shaderCanvasScale).floor(),
            );
        shader!.setImageSampler(0, innerSnapshot);
      }
    } else {
      innerSnapshot = recorder.endRecording().toImageSync(
            (size.x * shaderCanvasScale).floor(),
            (size.y * shaderCanvasScale).floor(),
          );
      shader!.setImageSampler(0, innerSnapshot);
    }

    paint.shader = shader;

    canvas.drawRect(
      ui.Rect.fromLTWH(0, 0, size.x, size.y),
      paint,
    );
    return innerSnapshot;
  }
}