Spatial upscaling: the source
Open the live demo · Read the guide · View on GitHub
Regions the guide quotes: stage (line 22), settings (line 26), runs (line 60).
1/// Spatial upscaling: a frame drawn below full size brought up to it by an
2/// edge-directed filter instead of a plain stretch.
3///
4/// Quoted by `spatial_upscale.md` and shown whole in the Source tab.
5library;
7import 'package:flutter3d/flutter3d.dart';
8import 'package:flutter3d_showcase/pages/post/post_stage.dart';
9import 'package:flutter3d_showcase/src/demo/demo.dart';
11final class SpatialUpscaleDemo extends ShowcaseDemo {
12 bool upscale = true;
13 double renderScale = 0.5;
14 double sharpen = 0.2;
17 void configureView(DemoContext context) =>
18 PostStage.frame(context, distance: 6.0);
21 Scene build(DemoContext context) {
22 final Scene scene = PostStage.build(context, shadows: true).scene;
23 return scene;
24 }
26 RenderSettings _settings() => RenderSettings(
27 renderScale: renderScale,
28 spatialUpscale: SpatialUpscaleSettings(enabled: upscale, sharpen: sharpen),
29 );
32 RenderSettings settings(DemoContext context) => _settings();
35 List<DemoControl> controls(DemoContext context) => <DemoControl>[
36 ToggleControl(
37 'Upscale',
38 value: () => upscale,
39 onChanged: (bool v) => upscale = v,
40 ),
41 SliderControl(
42 'Render scale',
43 min: 0.25,
44 max: 1,
45 value: () => renderScale,
46 onChanged: (double v) => renderScale = v,
47 format: (double v) => '${(v * 100).round()}%',
48 ),
49 SliderControl(
50 'Sharpen',
51 min: 0,
52 max: 1,
53 value: () => sharpen,
54 onChanged: (double v) => sharpen = v,
55 ),
56 ];
59 void verify(Scene scene, FrameResult frame) {
60 if (SpatialUpscaleSettings.runsFor(_settings())) {
61 expectPassOrDecline(frame, 'spatial upscale');
62 } else if (passRan(frame, 'spatial upscale')) {
63 throw StateError('the upscale ran on a frame that does not need it');
64 }
65 }
66}