Selaa lähdekoodia

fix(TresCanvas): add WebGLRenderer check before disposing resources

- Updated the dispose function to include a type check for WebGLRenderer before calling dispose methods on the renderer instance, preventing potential runtime errors.
- Modified the TresPartialContext interface to use ShallowRef for the renderer property, enhancing type safety and consistency in the context structure.
alvarosabu 3 kuukautta sitten
vanhempi
commit
339be48b12
2 muutettua tiedostoa jossa 6 lisäystä ja 5 poistoa
  1. 4 3
      src/components/TresCanvas.vue
  2. 2 2
      src/composables/useTres/index.ts

+ 4 - 3
src/components/TresCanvas.vue

@@ -34,7 +34,6 @@ import { nodeOps } from '../core/nodeOps'
 
 import { disposeObject3D } from '../utils/'
 import { registerTresDevtools } from '../devtools'
-import { whenever } from '@vueuse/core'
 import type { TresPointerEventName } from '../utils/pointerEvents'
 
 const props = withDefaults(defineProps<TresCanvasProps>(), {
@@ -132,8 +131,10 @@ const dispose = (context: TresContext, force = false) => {
   disposeObject3D(context.scene.value as unknown as TresObject)
   if (force) {
     context.renderer.instance.value.dispose()
-    context.renderer.instance.value.renderLists.dispose()
-    context.renderer.instance.value.forceContextLoss()
+    if (context.renderer.instance.value instanceof WebGLRenderer) {
+      context.renderer.instance.value.renderLists.dispose()
+      context.renderer.instance.value.forceContextLoss()
+    }
   }
   (scene.value as TresScene).__tres = {
     root: context,

+ 2 - 2
src/composables/useTres/index.ts

@@ -1,4 +1,4 @@
-import type { ComputedRef } from 'vue'
+import type { ComputedRef, ShallowRef } from 'vue'
 import type { TresContext } from '../useTresContextProvider'
 import { useTresContext } from '../useTresContextProvider'
 import type { Camera } from 'three'
@@ -11,7 +11,7 @@ export interface TresPartialContext extends Omit<TresContext, 'renderer' | 'came
    * @type {TresRenderer}
    * @memberof TresPartialContext
    */
-  renderer: TresRenderer
+  renderer: ShallowRef<TresRenderer>
   /**
    * The current active camera
    *