From 0f463acc1a56f0ccb905f378f67b9487a4f30441 Mon Sep 17 00:00:00 2001 From: Steve245270533 <245270533@qq.com> Date: Tue, 16 Jan 2024 14:19:28 +0800 Subject: [PATCH 1/2] fix(usetrescontextprovider): fixed rendering issues caused when resize is triggered (#511) --- .../useTresContextProvider/index.ts | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/composables/useTresContextProvider/index.ts b/src/composables/useTresContextProvider/index.ts index 378814eb2..4bed597f2 100644 --- a/src/composables/useTresContextProvider/index.ts +++ b/src/composables/useTresContextProvider/index.ts @@ -1,5 +1,5 @@ -import { toValue, useElementSize, useFps, useMemory, useRafFn, useWindowSize } from '@vueuse/core' -import { inject, provide, readonly, shallowRef, computed, ref, onUnmounted } from 'vue' +import { toValue, useElementSize, useFps, useMemory, useRafFn, useWindowSize, refDebounced } from '@vueuse/core' +import { inject, provide, readonly, shallowRef, computed, ref, onUnmounted, watchEffect } from 'vue' import type { Camera, EventDispatcher, Scene, WebGLRenderer } from 'three' import { Raycaster } from 'three' import type { ComputedRef, DeepReadonly, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue' @@ -55,14 +55,23 @@ export function useTresContextProvider({ : useElementSize(toValue(canvas).parentElement), ) - const width = computed(() => elementSize.value.width.value) - const height = computed(() => elementSize.value.height.value) + const reactiveSize = shallowRef({ + width: 0, + height: 0, + }) + const DebouncedReactiveSize = refDebounced(reactiveSize, 10) + const unWatchSize = watchEffect(() => { + reactiveSize.value = { + width: elementSize.value.width.value, + height: elementSize.value.height.value, + } + }) - const aspectRatio = computed(() => width.value / height.value) + const aspectRatio = computed(() => DebouncedReactiveSize.value.width / DebouncedReactiveSize.value.height) const sizes = { - height, - width, + height: computed(() => DebouncedReactiveSize.value.height), + width: computed(() => DebouncedReactiveSize.value.width), aspectRatio, } const localScene = shallowRef(scene) @@ -113,7 +122,7 @@ export function useTresContextProvider({ // Performance const updateInterval = 100 // Update interval in milliseconds - const fps = useFps({ every: updateInterval }) + const fps = useFps({ every: updateInterval }) const { isSupported, memory } = useMemory({ interval: updateInterval }) const maxFrames = 160 let lastUpdateTime = performance.now() @@ -125,7 +134,7 @@ export function useTresContextProvider({ if (toProvide.scene.value) { toProvide.perf.memory.allocatedMem = calculateMemoryUsage(toProvide.scene.value as unknown as TresObject) } - + // Update memory usage if (timestamp - lastUpdateTime >= updateInterval) { lastUpdateTime = timestamp @@ -147,9 +156,9 @@ export function useTresContextProvider({ toProvide.perf.memory.accumulator.shift() } - toProvide.perf.memory.currentMem + toProvide.perf.memory.currentMem = toProvide.perf.memory.accumulator.reduce((a, b) => a + b, 0) / toProvide.perf.memory.accumulator.length - + } } } @@ -157,25 +166,26 @@ export function useTresContextProvider({ // Devtools let accumulatedTime = 0 const interval = 1 // Interval in milliseconds, e.g., 1000 ms = 1 second - + const { pause, resume } = useRafFn(({ delta }) => { if (!window.__TRES__DEVTOOLS__) return updatePerformanceData({ timestamp: performance.now() }) - + // Accumulate the delta time accumulatedTime += delta - + // Check if the accumulated time is greater than or equal to the interval if (accumulatedTime >= interval) { window.__TRES__DEVTOOLS__.cb(toProvide) - + // Reset the accumulated time accumulatedTime = 0 } - }, { immediate: true }) - + }, { immediate: true }) + onUnmounted(() => { + unWatchSize() pause() }) From bb095348dbe8b17388c36fd393d5a60f0354b568 Mon Sep 17 00:00:00 2001 From: Steve245270533 <46118247+Steve245270533@users.noreply.github.com> Date: Tue, 16 Jan 2024 23:04:07 +0800 Subject: [PATCH 2/2] fix(usetrescontextprovider): Solved Camel Naming --- src/composables/useTresContextProvider/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/composables/useTresContextProvider/index.ts b/src/composables/useTresContextProvider/index.ts index 4bed597f2..678db27ad 100644 --- a/src/composables/useTresContextProvider/index.ts +++ b/src/composables/useTresContextProvider/index.ts @@ -59,7 +59,7 @@ export function useTresContextProvider({ width: 0, height: 0, }) - const DebouncedReactiveSize = refDebounced(reactiveSize, 10) + const debouncedReactiveSize = refDebounced(reactiveSize, 10) const unWatchSize = watchEffect(() => { reactiveSize.value = { width: elementSize.value.width.value, @@ -67,11 +67,11 @@ export function useTresContextProvider({ } }) - const aspectRatio = computed(() => DebouncedReactiveSize.value.width / DebouncedReactiveSize.value.height) + const aspectRatio = computed(() => debouncedReactiveSize.value.width / debouncedReactiveSize.value.height) const sizes = { - height: computed(() => DebouncedReactiveSize.value.height), - width: computed(() => DebouncedReactiveSize.value.width), + height: computed(() => debouncedReactiveSize.value.height), + width: computed(() => debouncedReactiveSize.value.width), aspectRatio, } const localScene = shallowRef(scene)