Explorar o código

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 hai 3 meses
pai
achega
339be48b12
Modificáronse 2 ficheiros con 6 adicións e 5 borrados
  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 { disposeObject3D } from '../utils/'
 import { registerTresDevtools } from '../devtools'
 import { registerTresDevtools } from '../devtools'
-import { whenever } from '@vueuse/core'
 import type { TresPointerEventName } from '../utils/pointerEvents'
 import type { TresPointerEventName } from '../utils/pointerEvents'
 
 
 const props = withDefaults(defineProps<TresCanvasProps>(), {
 const props = withDefaults(defineProps<TresCanvasProps>(), {
@@ -132,8 +131,10 @@ const dispose = (context: TresContext, force = false) => {
   disposeObject3D(context.scene.value as unknown as TresObject)
   disposeObject3D(context.scene.value as unknown as TresObject)
   if (force) {
   if (force) {
     context.renderer.instance.value.dispose()
     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 = {
   (scene.value as TresScene).__tres = {
     root: context,
     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 type { TresContext } from '../useTresContextProvider'
 import { useTresContext } from '../useTresContextProvider'
 import { useTresContext } from '../useTresContextProvider'
 import type { Camera } from 'three'
 import type { Camera } from 'three'
@@ -11,7 +11,7 @@ export interface TresPartialContext extends Omit<TresContext, 'renderer' | 'came
    * @type {TresRenderer}
    * @type {TresRenderer}
    * @memberof TresPartialContext
    * @memberof TresPartialContext
    */
    */
-  renderer: TresRenderer
+  renderer: ShallowRef<TresRenderer>
   /**
   /**
    * The current active camera
    * The current active camera
    *
    *