@react-three/fiber 10.0.0-canary.de17310 → 10.0.0-canary.e53bd54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/webgl.cjs +27 -0
- package/dist/chunks/webgl.mjs +11 -0
- package/dist/chunks/webgpu.cjs +37 -0
- package/dist/chunks/webgpu.mjs +21 -0
- package/dist/extension.cjs +7 -273
- package/dist/extension.d.cts +10 -583
- package/dist/extension.d.mts +10 -583
- package/dist/extension.d.ts +10 -583
- package/dist/extension.mjs +1 -258
- package/dist/index.cjs +97 -15406
- package/dist/index.d.cts +121 -3574
- package/dist/index.d.mts +121 -3574
- package/dist/index.d.ts +121 -3546
- package/dist/index.mjs +10 -15305
- package/dist/legacy.cjs +97 -15364
- package/dist/legacy.d.cts +110 -3545
- package/dist/legacy.d.mts +110 -3545
- package/dist/legacy.d.ts +110 -3519
- package/dist/legacy.mjs +12 -15264
- package/dist/shared/fiber.B6zNSmwj.cjs +359 -0
- package/dist/shared/fiber.BGL2rpse.cjs +15129 -0
- package/dist/shared/fiber.Bw8YnGg5.d.cts +701 -0
- package/dist/shared/fiber.Bw8YnGg5.d.mts +701 -0
- package/dist/shared/fiber.Bw8YnGg5.d.ts +701 -0
- package/dist/shared/fiber.C_v1rkNg.mjs +329 -0
- package/dist/shared/fiber.Ch4JrXS2.mjs +15031 -0
- package/dist/shared/fiber.DAg-9ieU.d.ts +2852 -0
- package/dist/shared/fiber.Ddgoyqql.d.mts +2852 -0
- package/dist/shared/fiber.DiPB625B.d.cts +2852 -0
- package/dist/webgpu/index.cjs +101 -15399
- package/dist/webgpu/index.d.cts +113 -3555
- package/dist/webgpu/index.d.mts +113 -3555
- package/dist/webgpu/index.d.ts +113 -3527
- package/dist/webgpu/index.mjs +17 -15300
- package/package.json +1 -3
package/dist/extension.d.ts
CHANGED
|
@@ -1,555 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { StoreApi } from 'zustand';
|
|
5
|
-
import { UseBoundStoreWithEqualityFn } from 'zustand/traditional';
|
|
6
|
-
import { FrameCallback as FrameCallback$1, FrameTimingState, SchedulerApi, UseFrameNextOptions, FrameNextControls } from '@pmndrs/scheduler';
|
|
1
|
+
import { z as FrameNextCallback } from './shared/fiber.Bw8YnGg5.js';
|
|
2
|
+
export { A as Act, B as Bridge, C as Camera, i as ComputeFunction, w as Disposable, f as DomEvent, D as Dpr, v as EquConfig, g as EventHandlers, k as EventManager, E as Events, h as FilterFunction, G as FrameCallback, x as FrameNextState, y as FrameState, F as Frameloop, a5 as InternalState, I as Intersection, e as IntersectionEvent, p as IsAllOptional, o as IsOptional, M as Mutable, N as NonFunctionKeys, u as ObjectMap, O as Overwrite, c as Performance, l as PointerCaptureTarget, P as PointerState, n as Properties, a4 as R3FRenderer, b as RenderCallback, R as RootExtension, a6 as RootState, d as RootStore, t as SetBlock, a as Size, S as Subscription, q as ThreeCamera, T as ThreeEvent, U as UnblockProps, V as Viewport, m as VisibilityEntry, X as XRManager, j as XRPointerConfig, a3 as context, r as registerRootExtension, s as setRenderOverride, a2 as useStore, a7 as useThree } from './shared/fiber.Bw8YnGg5.js';
|
|
3
|
+
import { UseFrameNextOptions, FrameNextControls } from '@pmndrs/scheduler';
|
|
7
4
|
export { AddPhaseOptions, FrameControls, FrameNextControls, FrameTimingState, RootOptions, SchedulerApi, UseFrameNextOptions, UseFrameOptions } from '@pmndrs/scheduler';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
type Mutable<P> = { -readonly [K in keyof P]: P[K] }
|
|
15
|
-
type IsOptional<T> = undefined extends T ? true : false
|
|
16
|
-
type IsAllOptional<T extends any[]> = T extends [infer First, ...infer Rest]
|
|
17
|
-
? IsOptional<First> extends true
|
|
18
|
-
? IsAllOptional<Rest>
|
|
19
|
-
: false
|
|
20
|
-
: true
|
|
21
|
-
|
|
22
|
-
//* Camera Types ==============================
|
|
23
|
-
|
|
24
|
-
type ThreeCamera = (THREE.OrthographicCamera | THREE.PerspectiveCamera) & { manual?: boolean }
|
|
25
|
-
|
|
26
|
-
//* Act Type ==============================
|
|
27
|
-
|
|
28
|
-
type Act = <T = any>(cb: () => Promise<T>) => Promise<T>
|
|
29
|
-
|
|
30
|
-
//* Bridge & Block Types ==============================
|
|
31
|
-
|
|
32
|
-
type Bridge = React.FC<{ children?: React.ReactNode }>
|
|
33
|
-
|
|
34
|
-
type SetBlock = false | Promise<null> | null
|
|
35
|
-
type UnblockProps = { set: React.Dispatch<React.SetStateAction<SetBlock>>; children: React.ReactNode }
|
|
36
|
-
|
|
37
|
-
//* Object Map Type ==============================
|
|
38
|
-
|
|
39
|
-
/* Original version
|
|
40
|
-
export interface ObjectMap {
|
|
41
|
-
nodes: { [name: string]: THREE.Object3D }
|
|
42
|
-
materials: { [name: string]: THREE.Material }
|
|
43
|
-
meshes: { [name: string]: THREE.Mesh }
|
|
44
|
-
}
|
|
45
|
-
*/
|
|
46
|
-
/* This version is an expansion found in a PR by itsdouges that seems abandoned but looks useful.
|
|
47
|
-
It allows expansion but falls back to the original shape. (deleted due to stale, but If it doesnt conflict
|
|
48
|
-
I will keep the use here)
|
|
49
|
-
https://github.com/pmndrs/react-three-fiber/commits/generic-object-map/
|
|
50
|
-
His description is:
|
|
51
|
-
The object map type is now generic and can optionally declare the available properties for nodes, materials, and meshes.
|
|
52
|
-
*/
|
|
53
|
-
interface ObjectMap<
|
|
54
|
-
T extends { nodes?: string; materials?: string; meshes?: string } = {
|
|
55
|
-
nodes: string
|
|
56
|
-
materials: string
|
|
57
|
-
meshes: string
|
|
58
|
-
},
|
|
59
|
-
> {
|
|
60
|
-
nodes: Record<T['nodes'] extends string ? T['nodes'] : string, THREE.Object3D>
|
|
61
|
-
materials: Record<T['materials'] extends string ? T['materials'] : string, THREE.Material>
|
|
62
|
-
meshes: Record<T['meshes'] extends string ? T['meshes'] : string, THREE.Mesh>
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
//* Equality Config ==============================
|
|
66
|
-
|
|
67
|
-
interface EquConfig {
|
|
68
|
-
/** Compare arrays by reference equality a === b (default), or by shallow equality */
|
|
69
|
-
arrays?: 'reference' | 'shallow'
|
|
70
|
-
/** Compare objects by reference equality a === b (default), or by shallow equality */
|
|
71
|
-
objects?: 'reference' | 'shallow'
|
|
72
|
-
/** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */
|
|
73
|
-
strict?: boolean
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
//* Disposable Type ==============================
|
|
77
|
-
|
|
78
|
-
interface Disposable {
|
|
79
|
-
type?: string
|
|
80
|
-
dispose?: () => void
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
//* Event-related Types =====================================
|
|
84
|
-
|
|
85
|
-
interface Intersection extends THREE.Intersection {
|
|
86
|
-
/** The event source (the object which registered the handler) */
|
|
87
|
-
eventObject: THREE.Object3D
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera
|
|
91
|
-
|
|
92
|
-
interface IntersectionEvent<TSourceEvent> extends Intersection {
|
|
93
|
-
/** The event source (the object which registered the handler) */
|
|
94
|
-
eventObject: THREE.Object3D
|
|
95
|
-
/** An array of intersections */
|
|
96
|
-
intersections: Intersection[]
|
|
97
|
-
/** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
|
|
98
|
-
unprojectedPoint: THREE.Vector3
|
|
99
|
-
/** Normalized event coordinates */
|
|
100
|
-
pointer: THREE.Vector2
|
|
101
|
-
/** pointerId of the original event for multiple pointer events */
|
|
102
|
-
pointerId: number
|
|
103
|
-
/** Delta between first click and this event */
|
|
104
|
-
delta: number
|
|
105
|
-
/** The ray that pierced it */
|
|
106
|
-
ray: THREE.Ray
|
|
107
|
-
/** The camera that was used by the raycaster */
|
|
108
|
-
camera: Camera
|
|
109
|
-
/** stopPropagation will stop underlying handlers from firing */
|
|
110
|
-
stopPropagation: () => void
|
|
111
|
-
/** The original host event */
|
|
112
|
-
nativeEvent: TSourceEvent
|
|
113
|
-
/** If the event was stopped by calling stopPropagation */
|
|
114
|
-
stopped: boolean
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
type ThreeEvent<TEvent> = IntersectionEvent<TEvent> & Properties<TEvent>
|
|
118
|
-
type DomEvent = PointerEvent | MouseEvent | WheelEvent
|
|
119
|
-
|
|
120
|
-
/** DOM event handlers registered on the canvas element */
|
|
121
|
-
interface Events {
|
|
122
|
-
onClick: EventListener
|
|
123
|
-
onContextMenu: EventListener
|
|
124
|
-
onDoubleClick: EventListener
|
|
125
|
-
onWheel: EventListener
|
|
126
|
-
onPointerDown: EventListener
|
|
127
|
-
onPointerUp: EventListener
|
|
128
|
-
onPointerLeave: EventListener
|
|
129
|
-
onPointerMove: EventListener
|
|
130
|
-
onPointerCancel: EventListener
|
|
131
|
-
onLostPointerCapture: EventListener
|
|
132
|
-
onDragEnter: EventListener
|
|
133
|
-
onDragLeave: EventListener
|
|
134
|
-
onDragOver: EventListener
|
|
135
|
-
onDrop: EventListener
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Event handlers that can be attached to R3F objects (meshes, groups, etc.) */
|
|
139
|
-
interface EventHandlers {
|
|
140
|
-
onClick?: (event: ThreeEvent<MouseEvent>) => void
|
|
141
|
-
onContextMenu?: (event: ThreeEvent<MouseEvent>) => void
|
|
142
|
-
onDoubleClick?: (event: ThreeEvent<MouseEvent>) => void
|
|
143
|
-
/** Fires continuously while dragging over the object */
|
|
144
|
-
onDragOver?: (event: ThreeEvent<DragEvent>) => void
|
|
145
|
-
/** Fires once when drag enters the object */
|
|
146
|
-
onDragOverEnter?: (event: ThreeEvent<DragEvent>) => void
|
|
147
|
-
/** Fires once when drag leaves the object */
|
|
148
|
-
onDragOverLeave?: (event: ThreeEvent<DragEvent>) => void
|
|
149
|
-
/** Fires when drag misses this object (for objects that have drag handlers) */
|
|
150
|
-
onDragOverMissed?: (event: DragEvent) => void
|
|
151
|
-
/** Fires when a drop occurs on this object */
|
|
152
|
-
onDrop?: (event: ThreeEvent<DragEvent>) => void
|
|
153
|
-
/** Fires when a drop misses this object (for objects that have drop handlers) */
|
|
154
|
-
onDropMissed?: (event: DragEvent) => void
|
|
155
|
-
onPointerUp?: (event: ThreeEvent<PointerEvent>) => void
|
|
156
|
-
onPointerDown?: (event: ThreeEvent<PointerEvent>) => void
|
|
157
|
-
onPointerOver?: (event: ThreeEvent<PointerEvent>) => void
|
|
158
|
-
onPointerOut?: (event: ThreeEvent<PointerEvent>) => void
|
|
159
|
-
onPointerEnter?: (event: ThreeEvent<PointerEvent>) => void
|
|
160
|
-
onPointerLeave?: (event: ThreeEvent<PointerEvent>) => void
|
|
161
|
-
onPointerMove?: (event: ThreeEvent<PointerEvent>) => void
|
|
162
|
-
onPointerMissed?: (event: MouseEvent) => void
|
|
163
|
-
onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void
|
|
164
|
-
onWheel?: (event: ThreeEvent<WheelEvent>) => void
|
|
165
|
-
onLostPointerCapture?: (event: ThreeEvent<PointerEvent>) => void
|
|
166
|
-
|
|
167
|
-
//* Visibility Events --------------------------------
|
|
168
|
-
/** Fires when object enters/exits camera frustum. Receives true when in view, false when out. */
|
|
169
|
-
onFramed?: (inView: boolean) => void
|
|
170
|
-
/** Fires when object occlusion state changes (WebGPU only, requires occlusionTest=true on object) */
|
|
171
|
-
onOccluded?: (occluded: boolean) => void
|
|
172
|
-
/** Fires when combined visibility changes (frustum + occlusion + visible prop) */
|
|
173
|
-
onVisible?: (visible: boolean) => void
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
type FilterFunction = (items: THREE.Intersection[], state: RootState) => THREE.Intersection[]
|
|
177
|
-
type ComputeFunction = (event: DomEvent, root: RootState, previous?: RootState) => void
|
|
178
|
-
|
|
179
|
-
/** Configuration for XR pointer registration (controllers/hands) */
|
|
180
|
-
interface XRPointerConfig {
|
|
181
|
-
/** Ray origin (updated each frame by XR system) */
|
|
182
|
-
ray: THREE.Ray
|
|
183
|
-
/** Optional: custom compute function for this pointer */
|
|
184
|
-
compute?: (state: RootState) => void
|
|
185
|
-
/** Pointer type identifier */
|
|
186
|
-
type: 'controller' | 'hand' | 'gaze'
|
|
187
|
-
/** Which hand (for controller/hand types) */
|
|
188
|
-
handedness?: 'left' | 'right'
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
interface EventManager<TTarget> {
|
|
192
|
-
/** Determines if the event layer is active */
|
|
193
|
-
enabled: boolean
|
|
194
|
-
/** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
|
|
195
|
-
priority: number
|
|
196
|
-
/** The compute function needs to set up the raycaster and an xy- pointer */
|
|
197
|
-
compute?: ComputeFunction
|
|
198
|
-
/** The filter can re-order or re-structure the intersections */
|
|
199
|
-
filter?: FilterFunction
|
|
200
|
-
/** The target node the event layer is tied to */
|
|
201
|
-
connected?: TTarget
|
|
202
|
-
/** All the pointer event handlers through which the host forwards native events */
|
|
203
|
-
handlers?: Events
|
|
204
|
-
/** Allows re-connecting to another target */
|
|
205
|
-
connect?: (target: TTarget) => void
|
|
206
|
-
/** Removes all existing events handlers from the target */
|
|
207
|
-
disconnect?: () => void
|
|
208
|
-
/** Triggers a onPointerMove with the last known event. This can be useful to enable raycasting without
|
|
209
|
-
* explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
|
|
210
|
-
* @param pointerId - Optional pointer ID to update specific pointer only
|
|
211
|
-
*/
|
|
212
|
-
update?: (pointerId?: number) => void
|
|
213
|
-
/** Defer pointer move raycasting to frame start (default: true) */
|
|
214
|
-
frameTimedRaycasts?: boolean
|
|
215
|
-
/** Always fire raycaster immediately on scroll events (default: true) */
|
|
216
|
-
alwaysFireOnScroll?: boolean
|
|
217
|
-
/** Automatically re-raycast every frame to detect hover changes from moving objects/camera (default: false) */
|
|
218
|
-
updateOnFrame?: boolean
|
|
219
|
-
/** Flush deferred pointer raycasts. Called by scheduler at frame start (input phase). */
|
|
220
|
-
flush?: () => void
|
|
221
|
-
/** Register an XR pointer (controller/hand). Returns assigned pointerId */
|
|
222
|
-
registerPointer?: (config: XRPointerConfig) => number
|
|
223
|
-
/** Unregister an XR pointer */
|
|
224
|
-
unregisterPointer?: (pointerId: number) => void
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
interface PointerCaptureTarget {
|
|
228
|
-
intersection: Intersection
|
|
229
|
-
target: Element
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
//* Visibility System Types =====================================
|
|
233
|
-
|
|
234
|
-
/** Entry in the visibility registry for tracking object visibility state */
|
|
235
|
-
interface VisibilityEntry {
|
|
236
|
-
object: THREE.Object3D
|
|
237
|
-
handlers: Pick<EventHandlers, 'onFramed' | 'onOccluded' | 'onVisible'>
|
|
238
|
-
lastFramedState: boolean | null
|
|
239
|
-
lastOccludedState: boolean | null
|
|
240
|
-
lastVisibleState: boolean | null
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
//* Scheduler Types (useFrame) ==============================
|
|
244
|
-
//
|
|
245
|
-
// The generic, framework-agnostic scheduler types now live in @pmndrs/scheduler.
|
|
246
|
-
// This file re-exports them and layers r3f's RootState-aware frame state on top,
|
|
247
|
-
// so existing `#types` imports across the codebase keep resolving unchanged.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
// Frame State (r3f-specific) --------------------------------
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* State passed to useFrame callbacks (extends RootState with timing).
|
|
255
|
-
*/
|
|
256
|
-
interface FrameNextState extends RootState, FrameTimingState {}
|
|
257
|
-
|
|
258
|
-
/** Alias for FrameNextState */
|
|
259
|
-
type FrameState = FrameNextState
|
|
260
|
-
|
|
261
|
-
// Callback Types (r3f-specific) --------------------------------
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Callback function for useFrame. Receives the full r3f RootState plus timing.
|
|
265
|
-
*/
|
|
266
|
-
type FrameNextCallback = FrameCallback$1<RootState>
|
|
267
|
-
|
|
268
|
-
/** Alias for FrameNextCallback */
|
|
269
|
-
type FrameCallback = FrameNextCallback
|
|
270
|
-
|
|
271
|
-
//* Renderer Types ========================================
|
|
272
|
-
|
|
273
|
-
/** Default renderer type - union of WebGL and WebGPU renderers */
|
|
274
|
-
type R3FRenderer = THREE.WebGLRenderer | WebGPURenderer
|
|
275
|
-
|
|
276
|
-
//* Core Store Types ========================================
|
|
277
|
-
|
|
278
|
-
type Subscription = {
|
|
279
|
-
ref: React.RefObject<RenderCallback>
|
|
280
|
-
priority: number
|
|
281
|
-
store: RootStore
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/** Per-pointer state for multi-touch and XR support */
|
|
285
|
-
type PointerState = {
|
|
286
|
-
/** Objects currently hovered by this pointer */
|
|
287
|
-
hovered: Map<string, ThreeEvent<DomEvent>>
|
|
288
|
-
/** Objects capturing this pointer */
|
|
289
|
-
captured: Map<THREE.Object3D, PointerCaptureTarget>
|
|
290
|
-
/** Initial click position [x, y] */
|
|
291
|
-
initialClick: [x: number, y: number]
|
|
292
|
-
/** Objects hit on initial click */
|
|
293
|
-
initialHits: THREE.Object3D[]
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
type Dpr = number | [min: number, max: number]
|
|
297
|
-
|
|
298
|
-
interface Size {
|
|
299
|
-
width: number
|
|
300
|
-
height: number
|
|
301
|
-
top: number
|
|
302
|
-
left: number
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
type Frameloop = 'always' | 'demand' | 'never'
|
|
306
|
-
|
|
307
|
-
interface Viewport extends Size {
|
|
308
|
-
/** The initial pixel ratio */
|
|
309
|
-
initialDpr: number
|
|
310
|
-
/** Current pixel ratio */
|
|
311
|
-
dpr: number
|
|
312
|
-
/** size.width / viewport.width */
|
|
313
|
-
factor: number
|
|
314
|
-
/** Camera distance */
|
|
315
|
-
distance: number
|
|
316
|
-
/** Camera aspect ratio: width / height */
|
|
317
|
-
aspect: number
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
type RenderCallback = (state: RootState, delta: number, frame?: XRFrame) => void
|
|
321
|
-
|
|
322
|
-
interface Performance {
|
|
323
|
-
/** Current performance normal, between min and max */
|
|
324
|
-
current: number
|
|
325
|
-
/** How low the performance can go, between 0 and max */
|
|
326
|
-
min: number
|
|
327
|
-
/** How high the performance can go, between min and max */
|
|
328
|
-
max: number
|
|
329
|
-
/** Time until current returns to max in ms */
|
|
330
|
-
debounce: number
|
|
331
|
-
/** Sets current to min, puts the system in regression */
|
|
332
|
-
regress: () => void
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
interface InternalState {
|
|
336
|
-
interaction: THREE.Object3D[]
|
|
337
|
-
subscribers: Subscription[]
|
|
338
|
-
/** Per-pointer state (hover, capture, click tracking) - replaces hovered, capturedMap, initialClick, initialHits */
|
|
339
|
-
pointerMap: Map<number, PointerState>
|
|
340
|
-
/** Pointers needing raycast this frame (used with frameTimedRaycasts) */
|
|
341
|
-
pointerDirty: Map<number, DomEvent>
|
|
342
|
-
/** Last event received (for events.update() compatibility) */
|
|
343
|
-
lastEvent: React.RefObject<DomEvent | null>
|
|
344
|
-
/** @deprecated Use pointerMap.get(pointerId).hovered instead */
|
|
345
|
-
hovered: Map<string, ThreeEvent<DomEvent>>
|
|
346
|
-
/** @deprecated Use pointerMap.get(pointerId).captured instead */
|
|
347
|
-
capturedMap: Map<number, Map<THREE.Object3D, PointerCaptureTarget>>
|
|
348
|
-
/** @deprecated Use pointerMap.get(pointerId).initialClick instead */
|
|
349
|
-
initialClick: [x: number, y: number]
|
|
350
|
-
/** @deprecated Use pointerMap.get(pointerId).initialHits instead */
|
|
351
|
-
initialHits: THREE.Object3D[]
|
|
352
|
-
/** Visibility event registry (onFramed, onOccluded, onVisible) */
|
|
353
|
-
visibilityRegistry: Map<string, VisibilityEntry>
|
|
354
|
-
/** Whether occlusion queries are enabled (WebGPU only) */
|
|
355
|
-
occlusionEnabled: boolean
|
|
356
|
-
/** Reference to the invisible occlusion observer mesh */
|
|
357
|
-
occlusionObserver: THREE.Mesh | null
|
|
358
|
-
/** Cached occlusion results from render pass - keyed by Object3D */
|
|
359
|
-
occlusionCache: Map<THREE.Object3D, boolean | null>
|
|
360
|
-
/** Internal helper group for R3F system objects (occlusion observer, etc.) */
|
|
361
|
-
helperGroup: THREE.Group | null
|
|
362
|
-
active: boolean
|
|
363
|
-
priority: number
|
|
364
|
-
frames: number
|
|
365
|
-
subscribe: (callback: React.RefObject<RenderCallback>, priority: number, store: RootStore) => () => void
|
|
366
|
-
/** Internal renderer storage - use state.renderer or state.gl to access */
|
|
367
|
-
actualRenderer: R3FRenderer
|
|
368
|
-
/** Global scheduler reference (for useFrame hook) */
|
|
369
|
-
scheduler: SchedulerApi | null
|
|
370
|
-
/**
|
|
371
|
-
* Replaces `renderer.render(scene, camera)` in the default render job when set. Set it with
|
|
372
|
-
* `setRenderOverride(store, fn)`; the job keeps its fps throttle, error handling and user
|
|
373
|
-
* render-phase takeover. Used by `useRenderPipeline`.
|
|
374
|
-
*/
|
|
375
|
-
renderOverride?: (() => void) | null
|
|
376
|
-
/** This root's unique ID in the global scheduler */
|
|
377
|
-
rootId?: string
|
|
378
|
-
/** Function to unregister this root from the global scheduler */
|
|
379
|
-
unregisterRoot?: () => void
|
|
380
|
-
/** Container for child attachment (scene for root, original container for portals) */
|
|
381
|
-
container?: THREE.Object3D
|
|
382
|
-
/**
|
|
383
|
-
* The CanvasTarget this root sizes and renders through.
|
|
384
|
-
*
|
|
385
|
-
* A primary (`<Canvas id>`) owns the renderer's default target -- the one three itself built
|
|
386
|
-
* around the canvas element -- so sizing it is sizing the renderer. A secondary owns a target
|
|
387
|
-
* R3F created for its own element. Either way there is exactly one target per canvas element,
|
|
388
|
-
* and the canvas-target job makes it the renderer's active one before this root renders.
|
|
389
|
-
* Absent on WebGL and on an id-less WebGPU canvas, where the renderer is sized directly.
|
|
390
|
-
* @see https://threejs.org/docs/#api/en/renderers/common/CanvasTarget
|
|
391
|
-
*/
|
|
392
|
-
canvasTarget?: CanvasTarget
|
|
393
|
-
/**
|
|
394
|
-
* Set when this root's canvas target has been resized and the backend's cached render pass
|
|
395
|
-
* descriptor (which holds a depth-stencil view built once per canvas) is therefore stale.
|
|
396
|
-
*
|
|
397
|
-
* Flushed by the canvas-target job in the `start` phase, which is the only place this root's
|
|
398
|
-
* target is guaranteed to be the renderer's active one — `backend.updateSize()` operates on
|
|
399
|
-
* whatever `getCanvasTarget()` returns, so calling it from the resize subscription would
|
|
400
|
-
* invalidate some other canvas's descriptor instead.
|
|
401
|
-
*
|
|
402
|
-
* @see https://github.com/pmndrs/react-three-fiber/issues/3847
|
|
403
|
-
*/
|
|
404
|
-
canvasTargetSizeDirty?: boolean
|
|
405
|
-
/**
|
|
406
|
-
* Whether multi-canvas rendering is active.
|
|
407
|
-
* True when any canvas uses `renderer={{ primaryCanvas: 'id' }}` to share a renderer.
|
|
408
|
-
* When true, setCanvasTarget is called before each render.
|
|
409
|
-
*/
|
|
410
|
-
isMultiCanvas?: boolean
|
|
411
|
-
/**
|
|
412
|
-
* Whether this canvas is a secondary canvas sharing another's renderer.
|
|
413
|
-
* True when `target` prop is used.
|
|
414
|
-
*/
|
|
415
|
-
isSecondary?: boolean
|
|
416
|
-
/**
|
|
417
|
-
* The id of the primary canvas this secondary canvas targets.
|
|
418
|
-
* Only set when isSecondary is true.
|
|
419
|
-
*/
|
|
420
|
-
targetId?: string
|
|
421
|
-
/**
|
|
422
|
-
* Function to unregister this primary canvas from the registry.
|
|
423
|
-
* Only set when this canvas has an `id` prop.
|
|
424
|
-
*/
|
|
425
|
-
unregisterPrimary?: () => void
|
|
426
|
-
/** Whether canvas dimensions are forced to even numbers */
|
|
427
|
-
forceEven?: boolean
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
interface XRManager {
|
|
431
|
-
connect: () => void
|
|
432
|
-
disconnect: () => void
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
//* Root State Interface ====================================
|
|
436
|
-
|
|
437
|
-
interface RootState {
|
|
438
|
-
/** Set current state */
|
|
439
|
-
set: StoreApi<RootState>['setState']
|
|
440
|
-
/** Get current state */
|
|
441
|
-
get: StoreApi<RootState>['getState']
|
|
442
|
-
/**
|
|
443
|
-
* The store of the canvas that owns this root's renderer.
|
|
444
|
-
* - For primary/independent canvases: points to its own store (self-reference)
|
|
445
|
-
* - For secondary canvases: points to the primary canvas's store
|
|
446
|
-
* - Portals copy it from their parent
|
|
447
|
-
*
|
|
448
|
-
* Anything shared per renderer rather than per canvas (e.g. @react-three/tsl's resources)
|
|
449
|
-
* resolves through it.
|
|
450
|
-
*/
|
|
451
|
-
primaryStore: RootStore
|
|
452
|
-
/** @deprecated Use `renderer` instead. The instance of the renderer (typed as WebGLRenderer for backwards compat) */
|
|
453
|
-
gl: THREE.WebGLRenderer
|
|
454
|
-
/** The renderer instance - type depends on entry point (WebGPU, Legacy, or union for default) */
|
|
455
|
-
renderer: R3FRenderer
|
|
456
|
-
/** Inspector of the webGPU Renderer. Init in the canvas */
|
|
457
|
-
inspector: any // Inspector type from three/webgpu
|
|
458
|
-
|
|
459
|
-
/** Default camera */
|
|
460
|
-
camera: ThreeCamera
|
|
461
|
-
/** Camera frustum for visibility checks - auto-updated each frame when autoUpdateFrustum is true */
|
|
462
|
-
frustum: THREE.Frustum
|
|
463
|
-
/** Whether to automatically update the frustum each frame (default: true) */
|
|
464
|
-
autoUpdateFrustum: boolean
|
|
465
|
-
/** Default scene (may be overridden in portals to point to the portal container) */
|
|
466
|
-
scene: THREE.Scene
|
|
467
|
-
/** The actual root THREE.Scene - always points to the true scene, even inside portals */
|
|
468
|
-
rootScene: THREE.Scene
|
|
469
|
-
/** Default raycaster */
|
|
470
|
-
raycaster: THREE.Raycaster
|
|
471
|
-
/** Event layer interface, contains the event handler and the node they're connected to */
|
|
472
|
-
events: EventManager<any>
|
|
473
|
-
/** XR interface */
|
|
474
|
-
xr: XRManager
|
|
475
|
-
/** Currently used controls */
|
|
476
|
-
controls: THREE.EventDispatcher | null
|
|
477
|
-
/** Normalized event coordinates */
|
|
478
|
-
pointer: THREE.Vector2
|
|
479
|
-
/** @deprecated Normalized event coordinates, use "pointer" instead! */
|
|
480
|
-
mouse: THREE.Vector2
|
|
481
|
-
/** Color space assigned to 8-bit input textures (color maps). Most textures are authored in sRGB. */
|
|
482
|
-
textureColorSpace: THREE.ColorSpace
|
|
483
|
-
/** Render loop flags */
|
|
484
|
-
frameloop: Frameloop
|
|
485
|
-
performance: Performance
|
|
486
|
-
/** Reactive pixel-size of the canvas */
|
|
487
|
-
size: Size
|
|
488
|
-
/** Reactive size of the viewport in threejs units */
|
|
489
|
-
viewport: Viewport & {
|
|
490
|
-
getCurrentViewport: (
|
|
491
|
-
camera?: ThreeCamera,
|
|
492
|
-
target?: THREE.Vector3 | Parameters<THREE.Vector3['set']>,
|
|
493
|
-
size?: Size,
|
|
494
|
-
) => Omit<Viewport, 'dpr' | 'initialDpr'>
|
|
495
|
-
}
|
|
496
|
-
/** Flags the canvas for render, but doesn't render in itself */
|
|
497
|
-
invalidate: (frames?: number, stackFrames?: boolean) => void
|
|
498
|
-
/** Advance (render) one step */
|
|
499
|
-
advance: (timestamp: number, runGlobalEffects?: boolean) => void
|
|
500
|
-
/** Shortcut to setting the event layer */
|
|
501
|
-
setEvents: (events: Partial<EventManager<any>>) => void
|
|
502
|
-
/** Shortcut to manual sizing. No args resets to props/container. Single arg creates square. */
|
|
503
|
-
setSize: (width?: number, height?: number, top?: number, left?: number) => void
|
|
504
|
-
/** Shortcut to manual setting the pixel ratio */
|
|
505
|
-
setDpr: (dpr: Dpr) => void
|
|
506
|
-
/** Shortcut to setting frameloop flags. No args resets to 'always'. */
|
|
507
|
-
setFrameloop: (frameloop?: Frameloop) => void
|
|
508
|
-
/** Set error state to propagate to error boundary */
|
|
509
|
-
setError: (error: Error | null) => void
|
|
510
|
-
/** Current error state (null when no error) */
|
|
511
|
-
error: Error | null
|
|
512
|
-
/** Global Texture registry (key → Texture, usually keyed by URL) - use useTextures() hook for access + lifecycle */
|
|
513
|
-
textures: Map<string, THREE.Texture>
|
|
514
|
-
/** Internal: refcount per texture key, driven by mounted useTexture consumers (registry enrollment is on by default) */
|
|
515
|
-
_textureRefs: Map<string, number>
|
|
516
|
-
/** Internal: whether setSize() has taken ownership of canvas dimensions */
|
|
517
|
-
_sizeImperative: boolean
|
|
518
|
-
/** Internal: stored size props from Canvas for reset functionality */
|
|
519
|
-
_sizeProps: { width?: number; height?: number } | null
|
|
520
|
-
/** When the canvas was clicked but nothing was hit */
|
|
521
|
-
onPointerMissed?: (event: MouseEvent) => void
|
|
522
|
-
/** When a dragover event has missed any target */
|
|
523
|
-
onDragOverMissed?: (event: DragEvent) => void
|
|
524
|
-
/** When a drop event has missed any target */
|
|
525
|
-
onDropMissed?: (event: DragEvent) => void
|
|
526
|
-
/** If this state model is layered (via createPortal) then this contains the previous layer */
|
|
527
|
-
previousRoot?: RootStore
|
|
528
|
-
/** Internals */
|
|
529
|
-
internal: InternalState
|
|
530
|
-
// flags for triggers
|
|
531
|
-
// if we are using the webGl renderer, this will be true
|
|
532
|
-
isLegacy: boolean
|
|
533
|
-
// regardless of renderer, if the system supports webGpu, this will be true
|
|
534
|
-
webGPUSupported: boolean
|
|
535
|
-
//if we are on native
|
|
536
|
-
isNative: boolean
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
type RootStore = UseBoundStoreWithEqualityFn<StoreApi<RootState>>
|
|
540
|
-
|
|
541
|
-
declare const context: React.Context<RootStore>;
|
|
542
|
-
|
|
543
|
-
/**
|
|
544
|
-
* Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).
|
|
545
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore
|
|
546
|
-
*/
|
|
547
|
-
declare function useStore(): RootStore;
|
|
548
|
-
/**
|
|
549
|
-
* Accesses R3F's internal state, containing renderer, canvas, scene, etc.
|
|
550
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree
|
|
551
|
-
*/
|
|
552
|
-
declare function useThree<T = RootState>(selector?: (state: RootState) => T, equalityFn?: <T>(state: T, newState: T) => boolean): T;
|
|
5
|
+
import 'react';
|
|
6
|
+
import 'three';
|
|
7
|
+
import 'three/webgpu';
|
|
8
|
+
import 'zustand';
|
|
9
|
+
import 'zustand/traditional';
|
|
10
|
+
import 'three/tsl';
|
|
553
11
|
|
|
554
12
|
/**
|
|
555
13
|
* Frame hook with phase-based ordering, priority, and FPS throttling.
|
|
@@ -595,35 +53,4 @@ declare function useThree<T = RootState>(selector?: (state: RootState) => T, equ
|
|
|
595
53
|
*/
|
|
596
54
|
declare function useFrame(callback?: FrameNextCallback, priorityOrOptions?: number | UseFrameNextOptions): FrameNextControls;
|
|
597
55
|
|
|
598
|
-
|
|
599
|
-
/** Unique name. Registering the same name again replaces the entry (HMR-safe); roots it already
|
|
600
|
-
* set up are not set up a second time, but get the new entry's dispose and hmr. */
|
|
601
|
-
name: string;
|
|
602
|
-
/**
|
|
603
|
-
* Called once per root, after its renderer exists and before `onCreated` and the first frame.
|
|
604
|
-
* `isLegacy` and `primaryStore` are known by then, so an extension can skip WebGL roots or defer
|
|
605
|
-
* to the primary canvas. Return fields to merge into the root's state, or nothing.
|
|
606
|
-
*/
|
|
607
|
-
setup?(store: RootStore): Partial<RootState> | void;
|
|
608
|
-
/** Called when a root this extension set up unmounts. */
|
|
609
|
-
dispose?(store: RootStore): void;
|
|
610
|
-
/** Called when `<Canvas>` detects hot module replacement (skipped with `hmr={false}`). */
|
|
611
|
-
hmr?(store: RootStore): void;
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* Register an extension. It is set up on every live root immediately, and on every root created
|
|
615
|
-
* afterwards. Returns a function that unregisters it: new roots are no longer set up, while roots
|
|
616
|
-
* it already set up keep its state and still get its dispose when they unmount.
|
|
617
|
-
*/
|
|
618
|
-
declare function registerRootExtension(extension: RootExtension): () => void;
|
|
619
|
-
/**
|
|
620
|
-
* Point a root's default render job at a different render function, or back at
|
|
621
|
-
* `renderer.render(scene, camera)` with `null`.
|
|
622
|
-
*
|
|
623
|
-
* The default job keeps everything else: the Canvas `fps` throttle, error propagation to the error
|
|
624
|
-
* boundary, and backing off when a user `useFrame(..., { phase: 'render' })` job takes over.
|
|
625
|
-
*/
|
|
626
|
-
declare function setRenderOverride(store: RootStore, render: (() => void) | null): void;
|
|
627
|
-
|
|
628
|
-
export { context, registerRootExtension, setRenderOverride, useFrame, useStore, useThree };
|
|
629
|
-
export type { Act, Bridge, Camera, ComputeFunction, Disposable, DomEvent, Dpr, EquConfig, EventHandlers, EventManager, Events, FilterFunction, FrameCallback, FrameNextCallback, FrameNextState, FrameState, Frameloop, InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Mutable, NonFunctionKeys, ObjectMap, Overwrite, Performance, PointerCaptureTarget, PointerState, Properties, R3FRenderer, RenderCallback, RootExtension, RootState, RootStore, SetBlock, Size, Subscription, ThreeCamera, ThreeEvent, UnblockProps, Viewport, VisibilityEntry, XRManager, XRPointerConfig };
|
|
56
|
+
export { FrameNextCallback, useFrame };
|