Skip to content
This repository was archived by the owner on Feb 1, 2026. It is now read-only.

Commit cc00a91

Browse files
committed
feat: update renderer access in components to use instance reference
- Updated various components to access the renderer through `renderer.instance.value` instead of `renderer.value`, ensuring compatibility with the latest core changes. - Adjusted related watch and invalidate calls to check for `renderer.canBeInvalidated.value` before invoking invalidate, improving performance and stability. - Refactored multiple files including shapes, controls, and materials to reflect these changes, enhancing overall code consistency and maintainability.
1 parent c61a6de commit cc00a91

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+335
-169
lines changed

playground/vue/src/pages/shapes/ScreenQuadDemo.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ const mat = new RawShaderMaterial({
4040
4141
let r: WebGLRenderer
4242
function onReady({ renderer }) {
43-
r = renderer.value
44-
renderer.value.getDrawingBufferSize(resolution)
43+
r = renderer.instance.value
44+
renderer.instance.value.getDrawingBufferSize(resolution)
4545
target.setSize(resolution.x, resolution.y)
4646
mat.uniforms.uResolution.value = resolution
4747
}

src/core/abstractions/AnimatedSprite/component.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,12 @@ const emit = defineEmits<{
7676
(e: 'loop', frameName: string): void
7777
}>()
7878
79-
const { invalidate } = useTresContext()
79+
const { renderer } = useTresContext()
8080
8181
watch(props, () => {
82-
invalidate()
82+
if (renderer.canBeInvalidated.value) {
83+
renderer.invalidate()
84+
}
8385
})
8486
8587
const positionX = ref(0)

src/core/abstractions/CubeCamera/useCubeCamera.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export interface CubeCameraOptions {
2424

2525
export function useCubeCamera(props: CubeCameraOptions) {
2626
let { resolution, renderer, scene, envMap, fog, near, far } = props
27-
renderer = renderer ?? useTres().renderer
27+
renderer = renderer ?? useTres().renderer.instance
2828
scene = scene ?? useTres().scene
2929

3030
const updateProps = () => {

src/core/abstractions/GlobalAudio.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export const GlobalAudio = defineComponent<AudioProps>({
9191
}, { immediate: true })
9292

9393
const selector = document.getElementById(props.playTrigger ?? '')
94-
const btnPlay = selector || renderer.value.domElement
94+
const btnPlay = selector || renderer.instance.value.domElement
9595
useEventListener(btnPlay, 'click', () => {
9696
if (sound.isPlaying) {
9797
sound.pause()

src/core/abstractions/Levioso.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defineExpose({
3333
const { onBeforeRender } = useLoop()
3434
let elapsed = START_OFFSET
3535
36-
onBeforeRender(({ delta, invalidate }) => {
36+
onBeforeRender(({ delta /* invalidate */ }) => {
3737
if (!groupRef.value) { return }
3838
3939
elapsed += delta * props.speed
@@ -45,7 +45,8 @@ defineExpose({
4545
group.rotation.z = Math.sin(theta) * AMPLITUDE_ROTATION_Z * props.rotationFactor
4646
group.position.y = MathUtils.mapLinear(Math.sin(theta), -1, 1, props.range[0], props.range[1]) * props.floatFactor
4747
48-
invalidate()
48+
// TODO: comment this until invalidate is back in the loop callback on v5
49+
// invalidate()
4950
})
5051
}
5152
</script>

src/core/abstractions/MouseParallax.vue

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ const { disabled, factor, ease, local } = toRefs(props)
5454
const mouseOptions: UseMouseOptions = {}
5555
5656
if (local.value) {
57-
mouseOptions.target = renderer.value.domElement
57+
mouseOptions.target = renderer.instance.value.domElement
5858
mouseOptions.type = 'client'
5959
}
6060
6161
const { x, y } = useMouse(mouseOptions)
6262
const { width, height } = local.value
63-
? useElementSize(renderer.value.domElement)
63+
? useElementSize(renderer.instance.value.domElement)
6464
: useWindowSize()
6565
6666
const cameraGroupRef = shallowRef<Group>()
@@ -81,7 +81,7 @@ const cursorY = computed(() => -(y.value / height.value - 0.5) * _factor.value[1
8181
8282
const { onBeforeRender } = useLoop()
8383
84-
onBeforeRender(({ delta, invalidate }) => {
84+
onBeforeRender(({ delta /* invalidate */ }) => {
8585
if (
8686
disabled.value
8787
|| !cameraGroupRef.value
@@ -95,7 +95,8 @@ onBeforeRender(({ delta, invalidate }) => {
9595
cameraGroupRef.value.position.y
9696
+= (cursorY.value - cameraGroupRef.value.position.y) * _ease.value[1] * delta
9797
98-
invalidate()
98+
// TODO: comment this until invalidate is back in the loop callback on v5
99+
// invalidate()
99100
})
100101
101102
watch(

src/core/abstractions/Reflector.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ const props = withDefaults(defineProps<ReflectorProps>(), {
7272
shader: Reflector.ReflectorShader,
7373
})
7474
75-
const { extend, invalidate } = useTresContext()
75+
const { extend, renderer } = useTresContext()
7676
7777
const reflectorRef = shallowRef<Reflector>()
7878
@@ -81,7 +81,11 @@ extend({ Reflector })
8181
const { color, textureWidth, textureHeight, clipBias, multisample, shader }
8282
= toRefs(props)
8383
84-
watch(props, () => invalidate())
84+
watch(props, () => {
85+
if (renderer.canBeInvalidated.value) {
86+
renderer.invalidate()
87+
}
88+
})
8589
8690
defineExpose({
8791
instance: reflectorRef,

src/core/abstractions/Text3D.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,13 @@ const {
151151
bevelSegments,
152152
} = toRefs(props)
153153
154-
const { extend, invalidate } = useTresContext()
154+
const { extend, renderer } = useTresContext()
155155
156-
watch(props, () => invalidate())
156+
watch(props, () => {
157+
if (renderer.canBeInvalidated.value) {
158+
renderer.invalidate()
159+
}
160+
})
157161
158162
extend({ TextGeometry })
159163

src/core/abstractions/useFBO/index.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export function useFBO(options: FboOptions) {
5656
const { height, width, settings, depth, autoRender = ref(true) } = isReactive(options) ? toRefs(options) : toRefs(reactive(options))
5757

5858
const { onBeforeRender } = useLoop()
59-
const { camera, renderer, scene, sizes, invalidate } = useTresContext()
59+
const { camera, renderer, scene, sizes } = useTresContext()
6060

6161
watch(() => [width?.value, sizes.width.value, height?.value, sizes.height.value], () => {
6262
target.value?.dispose()
@@ -76,16 +76,18 @@ export function useFBO(options: FboOptions) {
7676
)
7777
}
7878

79-
invalidate()
79+
if (renderer.canBeInvalidated.value) {
80+
renderer.invalidate()
81+
}
8082
}, { immediate: true })
8183

8284
onBeforeRender(() => {
8385
if (autoRender.value) {
84-
renderer.value.setRenderTarget(target.value)
85-
renderer.value.clear()
86-
renderer.value.render(scene.value, camera.value as Camera)
86+
renderer.instance.value.setRenderTarget(target.value)
87+
renderer.instance.value.clear()
88+
renderer.instance.value.render(scene.value, camera.value as Camera)
8789

88-
renderer.value.setRenderTarget(null)
90+
renderer.instance.value.setRenderTarget(null)
8991
}
9092
}, Number.POSITIVE_INFINITY)
9193

src/core/abstractions/useSurfaceSampler/component.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ const samplerRef = ref()
1111
const instancedRef = ref()
1212
const meshToSampleRef = ref()
1313
14-
const { invalidate } = useTresContext()
14+
const { renderer } = useTresContext()
1515
16-
watch(props, () => invalidate())
16+
watch(props, () => {
17+
if (renderer.canBeInvalidated.value) {
18+
renderer.invalidate()
19+
}
20+
})
1721
1822
// TODO: refactor to use watch instead.
1923
watchEffect(() => {

0 commit comments

Comments
 (0)