flutter3d
Showcase Changelog 38 packages API reference

Viewport shading: the source

since 0.7.0 Post-processing

Regions the guide quotes: settings (line 24), ran (line 39).

1/// Viewport shading: normals, clay, outline and curvature, each read out of
2/// the surface buffer instead of the materials.
3///
4/// Quoted by `viewport_shading.md` and shown whole in the Source tab.
5library;
6
7import 'package:flutter3d/flutter3d.dart';
8import 'package:flutter3d_showcase/pages/post/post_stage.dart';
9import 'package:flutter3d_showcase/src/demo/demo.dart';
11final class ViewportShadingDemo extends ShowcaseDemo {
12 int mode = 1;
14 static const List<ViewportShading> _modes = ViewportShading.values;
16 @override
17 void configureView(DemoContext context) => PostStage.frame(context);
19 @override
20 Scene build(DemoContext context) => PostStage.build(context).scene;
22 @override
23 RenderSettings settings(DemoContext context) => RenderSettings(
24 viewportShading: ViewportShadingSettings(mode: _modes[mode]),
25 );
27 @override
28 List<DemoControl> controls(DemoContext context) => <DemoControl>[
29 ChoiceControl(
30 'Mode',
31 options: <String>[for (final ViewportShading m in _modes) m.name],
32 index: () => mode,
33 onChanged: (int i) => mode = i,
34 ),
35 ];
37 @override
38 void verify(Scene scene, FrameResult frame) {
39 final ViewportShading picked = _modes[mode];
40 final bool ran = frame.passes.any(
41 (FramePass p) => p.name == 'viewport shading',
42 );
43 if (picked == ViewportShading.off) {
44 if (ran) throw StateError('off should not run the pass');
45 } else if (!ran) {
46 throw StateError('$picked did not run: ${frame.skipped}');
47 }
48 }