Skip to content

Commit

Permalink
fix(usetrescontextprovider): fixed rendering issues caused when resiz…
Browse files Browse the repository at this point in the history
…e is triggered (Tresjs#511)
  • Loading branch information
Steve245270533 committed Jan 16, 2024
1 parent a6e1737 commit 0f463ac
Showing 1 changed file with 27 additions and 17 deletions.
44 changes: 27 additions & 17 deletions src/composables/useTresContextProvider/index.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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>(scene)
Expand Down Expand Up @@ -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()
Expand All @@ -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
Expand All @@ -147,35 +156,36 @@ 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

}
}
}

// 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()
})

Expand Down

0 comments on commit 0f463ac

Please sign in to comment.