update example project
This commit is contained in:
@@ -31,10 +31,7 @@ class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
// showPerformanceOverlay: true,
|
// showPerformanceOverlay: true,
|
||||||
home: Scaffold(
|
home: Scaffold(body: ExampleWidget()));
|
||||||
body:
|
|
||||||
ExampleWidget()
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +57,7 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
bool _loop = false;
|
bool _loop = false;
|
||||||
EdgeInsets _viewportMargin = EdgeInsets.zero;
|
EdgeInsets _viewportMargin = EdgeInsets.zero;
|
||||||
|
|
||||||
bool _readyForScene = false;
|
bool _hasViewer = false;
|
||||||
|
|
||||||
bool _rendering = false;
|
bool _rendering = false;
|
||||||
int _framerate = 60;
|
int _framerate = 60;
|
||||||
@@ -69,13 +66,10 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
bool _coneHidden = false;
|
bool _coneHidden = false;
|
||||||
bool _frustumCulling = true;
|
bool _frustumCulling = true;
|
||||||
|
|
||||||
StreamSubscription? _hasViewerListener;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
_pickResultListener?.cancel();
|
_pickResultListener?.cancel();
|
||||||
_hasViewerListener?.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _item(void Function() onTap, String text) {
|
Widget _item(void Function() onTap, String text) {
|
||||||
@@ -99,12 +93,6 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
picked = _filamentController!.getNameForEntity(entityId!);
|
picked = _filamentController!.getNameForEntity(entityId!);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
_hasViewerListener =
|
|
||||||
_filamentController!.hasViewer.listen((bool hasViewer) {
|
|
||||||
setState(() {
|
|
||||||
_readyForScene = hasViewer;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -115,7 +103,7 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
children.addAll([
|
children.addAll([
|
||||||
_item(() {
|
_item(() {
|
||||||
_createController();
|
_createController();
|
||||||
}, "create viewer (default ubershader)"),
|
}, "create FilamentController (default ubershader)"),
|
||||||
_item(() {
|
_item(() {
|
||||||
_createController(
|
_createController(
|
||||||
uberArchivePath: Platform.isWindows
|
uberArchivePath: Platform.isWindows
|
||||||
@@ -125,15 +113,26 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
: Platform.isIOS
|
: Platform.isIOS
|
||||||
? "assets/lit_opaque_43.uberz"
|
? "assets/lit_opaque_43.uberz"
|
||||||
: "assets/lit_opaque_43_gles.uberz");
|
: "assets/lit_opaque_43_gles.uberz");
|
||||||
}, "create viewer (custom ubershader - lit opaque only)"),
|
}, "create FilamentController (custom ubershader - lit opaque only)"),
|
||||||
]);
|
]);
|
||||||
}
|
} else {
|
||||||
|
if (!_hasViewer) {
|
||||||
if (_readyForScene) {
|
children.addAll([
|
||||||
|
_item(() {
|
||||||
|
_filamentController!.createViewer();
|
||||||
|
setState(() {
|
||||||
|
_hasViewer = true;
|
||||||
|
});
|
||||||
|
}, "create FilamentViewer")
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
children.addAll([
|
children.addAll([
|
||||||
_item(() {
|
_item(() {
|
||||||
_filamentController!.destroy();
|
_filamentController!.destroy();
|
||||||
_filamentController = null;
|
_filamentController = null;
|
||||||
|
setState(() {
|
||||||
|
_hasViewer = true;
|
||||||
|
});
|
||||||
}, "destroy viewer/texture"),
|
}, "destroy viewer/texture"),
|
||||||
_item(() {
|
_item(() {
|
||||||
_filamentController!.render();
|
_filamentController!.render();
|
||||||
@@ -190,7 +189,8 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
_item(() async {
|
_item(() async {
|
||||||
_shapes =
|
_shapes =
|
||||||
await _filamentController!.loadGlb('assets/shapes/shapes.glb');
|
await _filamentController!.loadGlb('assets/shapes/shapes.glb');
|
||||||
_animations = await _filamentController!.getAnimationNames(_shapes!);
|
_animations =
|
||||||
|
await _filamentController!.getAnimationNames(_shapes!);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}, 'load shapes GLB'),
|
}, 'load shapes GLB'),
|
||||||
_item(() async {
|
_item(() async {
|
||||||
@@ -266,18 +266,20 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
});
|
});
|
||||||
}, "show morph target names for Cylinder"),
|
}, "show morph target names for Cylinder"),
|
||||||
_item(() {
|
_item(() {
|
||||||
_filamentController!
|
_filamentController!.setMorphTargetWeights(
|
||||||
.setMorphTargetWeights(_shapes!, "Cylinder", List.filled(4, 1.0));
|
_shapes!, "Cylinder", List.filled(4, 1.0));
|
||||||
}, "set Cylinder morph weights to 1"),
|
}, "set Cylinder morph weights to 1"),
|
||||||
_item(() {
|
_item(() {
|
||||||
_filamentController!
|
_filamentController!.setMorphTargetWeights(
|
||||||
.setMorphTargetWeights(_shapes!, "Cylinder", List.filled(4, 0.0));
|
_shapes!, "Cylinder", List.filled(4, 0.0));
|
||||||
}, "set Cylinder morph weights to 0.0"),
|
}, "set Cylinder morph weights to 0.0"),
|
||||||
_item(() async {
|
_item(() async {
|
||||||
var morphs = await _filamentController!
|
var morphs = await _filamentController!
|
||||||
.getMorphTargetNames(_shapes!, "Cylinder");
|
.getMorphTargetNames(_shapes!, "Cylinder");
|
||||||
final animation = AnimationBuilder(
|
final animation = AnimationBuilder(
|
||||||
availableMorphs: morphs, framerate: 30, meshName: "Cylinder")
|
availableMorphs: morphs,
|
||||||
|
framerate: 30,
|
||||||
|
meshName: "Cylinder")
|
||||||
.setDuration(4)
|
.setDuration(4)
|
||||||
.setMorphTargets(["Key 1", "Key 2"])
|
.setMorphTargets(["Key 1", "Key 2"])
|
||||||
.interpolateMorphWeights(0, 4, 0, 1)
|
.interpolateMorphWeights(0, 4, 0, 1)
|
||||||
@@ -288,7 +290,9 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
var morphs = await _filamentController!
|
var morphs = await _filamentController!
|
||||||
.getMorphTargetNames(_shapes!, "Cylinder");
|
.getMorphTargetNames(_shapes!, "Cylinder");
|
||||||
final animation = AnimationBuilder(
|
final animation = AnimationBuilder(
|
||||||
availableMorphs: morphs, framerate: 30, meshName: "Cylinder")
|
availableMorphs: morphs,
|
||||||
|
framerate: 30,
|
||||||
|
meshName: "Cylinder")
|
||||||
.setDuration(4)
|
.setDuration(4)
|
||||||
.setMorphTargets(["Key 3", "Key 4"])
|
.setMorphTargets(["Key 3", "Key 4"])
|
||||||
.interpolateMorphWeights(0, 4, 0, 1)
|
.interpolateMorphWeights(0, 4, 0, 1)
|
||||||
@@ -296,8 +300,8 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
_filamentController!.setMorphAnimationData(_shapes!, animation);
|
_filamentController!.setMorphAnimationData(_shapes!, animation);
|
||||||
}, "animate cylinder morph weights #3 and #4"),
|
}, "animate cylinder morph weights #3 and #4"),
|
||||||
_item(() async {
|
_item(() async {
|
||||||
var morphs =
|
var morphs = await _filamentController!
|
||||||
await _filamentController!.getMorphTargetNames(_shapes!, "Cube");
|
.getMorphTargetNames(_shapes!, "Cube");
|
||||||
final animation = AnimationBuilder(
|
final animation = AnimationBuilder(
|
||||||
availableMorphs: morphs, framerate: 30, meshName: "Cube")
|
availableMorphs: morphs, framerate: 30, meshName: "Cube")
|
||||||
.setDuration(4)
|
.setDuration(4)
|
||||||
@@ -353,6 +357,7 @@ class _ExampleWidgetState extends State<ExampleWidget> {
|
|||||||
_filamentController!.setViewFrustumCulling(_frustumCulling);
|
_filamentController!.setViewFrustumCulling(_frustumCulling);
|
||||||
}, "${_frustumCulling ? "Disable" : "Enable"} frustum culling"));
|
}, "${_frustumCulling ? "Disable" : "Enable"} frustum culling"));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return Stack(children: [
|
return Stack(children: [
|
||||||
_filamentController != null
|
_filamentController != null
|
||||||
? Positioned.fill(
|
? Positioned.fill(
|
||||||
|
|||||||
Reference in New Issue
Block a user