sceneview-android
sceneview-android copied to clipboard
Crash occurred when navigation back in Scenview Compose
Hello! There is a crash problem with Decomposition or navigate back. If you modify it like the code below, the problem will be solved, but it seems that the problem is occurring in the part of releasing the resource.
rememberModelLoader() It looks like it needs to be fixed. Is there any big problem like the code below temporarily?
@Composable
internal fun rememberCustomModelLoader(
engine: Engine,
context: Context = LocalContext.current,
creator: () -> ModelLoader = {
SceneView.createModelLoader(engine, context)
}
) = remember(engine, context, creator).also { modelLoader ->
DisposableEffect(modelLoader) {
onDispose {
modelLoader.run {
assetLoader.destroy()
materialProvider.destroyMaterials()
// resourceLoader.asyncCancelLoad()
// resourceLoader.evictResourceData()
materialProvider.destroy()
resourceLoader.destroy()
resourceLoader.evictResourceData()
}
}
}
}
version "androidx.compose:compose-bom:2024.01.00" "io.github.sceneview:sceneview:2.0.3" "androidx.navigation:navigation-compose:$version"
I have the same issue, onBack pressed is always causing the crash. Here is the Log: FATAL EXCEPTION: main Process: technology.cariad.lcc.rpademoapp.debug, PID: 18368 java.lang.IllegalStateException: Calling method on destroyed Scene at com.google.android.filament.Scene.getNativeObject(Scene.java:189) at com.google.android.filament.Scene.removeEntities(Scene.java:146) at io.github.sceneview.SceneView.removeEntities(SceneView.kt:701) at io.github.sceneview.SceneView.removeNode$sceneview_release(SceneView.kt:679) at io.github.sceneview.SceneView$addNode$2.invoke(SceneView.kt:672) at io.github.sceneview.SceneView$addNode$2.invoke(SceneView.kt:672) at io.github.sceneview.node.Node.setChildNodes(Node.kt:351) at io.github.sceneview.node.Node.setParent(Node.kt:335) at io.github.sceneview.node.Node.destroy(Node.kt:1006) at io.github.sceneview.node.CameraNode.destroy(CameraNode.kt:328) at io.github.sceneview.SceneKt$rememberCameraNode$$inlined$rememberNode$1$1.dispose(Effects.kt:497) at androidx.compose.runtime.DisposableEffectImpl.onForgotten(Effects.kt:87) at androidx.compose.runtime.CompositionImpl$RememberEventDispatcher.dispatchRememberObservers(Composition.kt:1271) at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:767) at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.disposeCurrentNodes(SubcomposeLayout.kt:592) at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.onRelease(SubcomposeLayout.kt:406) at androidx.compose.ui.node.LayoutNode.onRelease(LayoutNode.kt:1362) at androidx.compose.runtime.CompositionImpl$RememberEventDispatcher.dispatchRememberObservers(Composition.kt:1296) at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:767) at androidx.compose.ui.platform.WrappedComposition.dispose(Wrapper.android.kt:153) at androidx.compose.ui.platform.AbstractComposeView.disposeComposition(ComposeView.android.kt:266) at androidx.compose.ui.platform.ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1.onViewDetachedFromWindow(ViewCompositionStrategy.android.kt:90) at android.view.View.dispatchDetachedFromWindow(View.java:22067) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5603) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5574) at android.view.ViewGroup.removeView(ViewGroup.java:5505) at androidx.fragment.app.FragmentContainerView.removeView(FragmentContainerView.kt:293) at androidx.fragment.app.SpecialEffectsController$Operation$State.applyState(SpecialEffectsController.kt:398) at androidx.fragment.app.DefaultSpecialEffectsController.applyContainerChanges(DefaultSpecialEffectsController.kt:757) at androidx.fragment.app.DefaultSpecialEffectsController.executeOperations$lambda$2(DefaultSpecialEffectsController.kt:90) at androidx.fragment.app.DefaultSpecialEffectsController.$r8$lambda$Q6FgD4jZH_jdeVxJxVn553yFXpk(Unknown Source:0) at androidx.fragment.app.DefaultSpecialEffectsController$$ExternalSyntheticLambda0.run(Unknown Source:6) at androidx.fragment.app.SpecialEffectsController$Operation.complete(SpecialEffectsController.kt:608) at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperation.complete(SpecialEffectsController.kt:663) at androidx.fragment.app.SpecialEffectsController$Operation.completeSpecialEffect(SpecialEffectsController.kt:587) at androidx.fragment.app.DefaultSpecialEffectsController$SpecialEffectsInfo.completeSpecialEffect(DefaultSpecialEffectsController.kt:774) at androidx.fragment.app.DefaultSpecialEffectsController.startAnimations(DefaultSpecialEffectsController.kt:150) at androidx.fragment.app.DefaultSpecialEffectsController.executeOperations(DefaultSpecialEffectsController.kt:101) at androidx.fragment.app.SpecialEffectsController.executePendingOperations(SpecialEffectsController.kt:234) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1956)
yes i have the same when i try to put Scenview in horizontal or vertical pager
Fatal Exception: java.lang.IllegalStateException
Calling method on destroyed Engine
com.google.android.filament.Engine.getNativeObject (Unknown Source:1142)
com.google.android.filament.Texture$Builder.build (Unknown Source:812)
We also found an error like this. Destroyes that work on Dispose don't seem to be working properly. Has anyone experienced this issue while using Compose Navigation?
yes same here, with compose navigation
on. version 2.1.0 it crashes. with a different error 'null pointer execption '
Reopen if it's still the case in v2.2.0