render method

  1. @override
void render(
  1. Canvas canvas,
  2. FrameView view
)
override

Draw into canvas, whose coordinates are viewport pixels, what view sees.

Implementation

@override
void render(Canvas canvas, FrameView view) {
  final size = view.viewportSize;
  if (size.isEmpty) return;
  if (aids?.skippedViews.contains(view) ?? false) return;
  update(view);
  if (!_gpu && !renderWithoutGpu) {
    _drawNote(canvas, size, _failure?.toString() ?? unsupportedReason!);
    return;
  }
  final surface = _surfaceFor(view);
  try {
    final done = renderer.render(scene, _view, surface);
    lastFrame = done;
    unawaited(done.then((_) {}, onError: _fail));
  } on Object catch (error) {
    _fail(error);
    return;
  } finally {
    // The renderer is shared (a model's thumbnail, say): an editor's view
    // settings stay with its views.
    renderer
      ..viewMode = RenderViewMode.lit
      ..clipPlane = null;
  }
  final image = surface.image;
  if (image == null) return;
  canvas.drawImageRect(
    image,
    Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble()),
    Offset.zero & size,
    Paint()..filterQuality = FilterQuality.low,
  );
  image.dispose();
}