@react-three/fiber 10.0.0-canary.b0fafc8 → 10.0.0-canary.c3fa45d

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/legacy.d.ts CHANGED
@@ -3,7 +3,7 @@ import { WebGLRenderTarget, Color as Color$1, ColorRepresentation, Euler as Eule
3
3
  import * as React$1 from 'react';
4
4
  import { ReactNode, Component, RefObject, JSX } from 'react';
5
5
  import * as three_webgpu from 'three/webgpu';
6
- import { WebGPURenderer as WebGPURenderer$1, CanvasTarget, Node, ShaderNodeObject } from 'three/webgpu';
6
+ import { WebGPURenderer as WebGPURenderer$1, Node, StorageTexture, Data3DTexture, CanvasTarget, ShaderNodeObject } from 'three/webgpu';
7
7
  import { StoreApi } from 'zustand';
8
8
  import { UseBoundStoreWithEqualityFn } from 'zustand/traditional';
9
9
  import { Options } from 'react-use-measure';
@@ -148,6 +148,8 @@ interface IntersectionEvent<TSourceEvent> extends Intersection {
148
148
  unprojectedPoint: THREE$1.Vector3
149
149
  /** Normalized event coordinates */
150
150
  pointer: THREE$1.Vector2
151
+ /** pointerId of the original event for multiple pointer events */
152
+ pointerId: number
151
153
  /** Delta between first click and this event */
152
154
  delta: number
153
155
  /** The ray that pierced it */
@@ -224,6 +226,18 @@ interface EventHandlers {
224
226
  type FilterFunction = (items: THREE$1.Intersection[], state: RootState) => THREE$1.Intersection[]
225
227
  type ComputeFunction = (event: DomEvent, root: RootState, previous?: RootState) => void
226
228
 
229
+ /** Configuration for XR pointer registration (controllers/hands) */
230
+ interface XRPointerConfig {
231
+ /** Ray origin (updated each frame by XR system) */
232
+ ray: THREE$1.Ray
233
+ /** Optional: custom compute function for this pointer */
234
+ compute?: (state: RootState) => void
235
+ /** Pointer type identifier */
236
+ type: 'controller' | 'hand' | 'gaze'
237
+ /** Which hand (for controller/hand types) */
238
+ handedness?: 'left' | 'right'
239
+ }
240
+
227
241
  interface EventManager<TTarget> {
228
242
  /** Determines if the event layer is active */
229
243
  enabled: boolean
@@ -243,8 +257,21 @@ interface EventManager<TTarget> {
243
257
  disconnect?: () => void
244
258
  /** Triggers a onPointerMove with the last known event. This can be useful to enable raycasting without
245
259
  * explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
260
+ * @param pointerId - Optional pointer ID to update specific pointer only
246
261
  */
247
- update?: () => void
262
+ update?: (pointerId?: number) => void
263
+ /** Defer pointer move raycasting to frame start (default: true) */
264
+ frameTimedRaycasts?: boolean
265
+ /** Always fire raycaster immediately on scroll events (default: true) */
266
+ alwaysFireOnScroll?: boolean
267
+ /** Automatically re-raycast every frame to detect hover changes from moving objects/camera (default: false) */
268
+ updateOnFrame?: boolean
269
+ /** Flush deferred pointer raycasts. Called by scheduler at frame start (input phase). */
270
+ flush?: () => void
271
+ /** Register an XR pointer (controller/hand). Returns assigned pointerId */
272
+ registerPointer?: (config: XRPointerConfig) => number
273
+ /** Unregister an XR pointer */
274
+ unregisterPointer?: (pointerId: number) => void
248
275
  }
249
276
 
250
277
  interface PointerCaptureTarget {
@@ -486,6 +513,68 @@ interface SchedulerApi {
486
513
  subscribeJobState(id: string, listener: () => void): () => void
487
514
  }
488
515
 
516
+ //* Buffer Types (useBuffers) ========================================
517
+
518
+ /**
519
+ * Buffer-like types for GPU compute and storage operations.
520
+ * Includes raw CPU arrays, Three.js buffer attributes, and TSL buffer nodes.
521
+ *
522
+ * @example
523
+ * ```tsx
524
+ * const { positions, velocities } = useBuffers(() => ({
525
+ * positions: instancedArray(count, 'vec3'), // StorageBufferNode
526
+ * velocities: new Float32Array(count * 3), // TypedArray
527
+ * }), 'particles')
528
+ * ```
529
+ */
530
+ type BufferLike =
531
+ | Float32Array
532
+ | Uint32Array
533
+ | Int32Array
534
+ | Float64Array
535
+ | Uint8Array
536
+ | Int8Array
537
+ | Uint16Array
538
+ | Int16Array
539
+ | THREE$1.BufferAttribute // Base class for all buffer attributes
540
+ | Node // TSL buffer nodes (instancedArray, storage)
541
+
542
+ /** Flat record of buffer-like values (no nested scopes) */
543
+ type BufferRecord = Record<string, BufferLike>
544
+
545
+ /**
546
+ * Buffer store that can contain both root-level buffers and scoped buffer objects.
547
+ * Structure: { positions: Float32Array, particles: { vel: StorageBufferNode } }
548
+ */
549
+ type BufferStore = Record<string, BufferLike | BufferRecord>
550
+
551
+ //* Storage Types (useGPUStorage) ========================================
552
+
553
+ /**
554
+ * GPU storage types for texture-based storage operations.
555
+ * Includes Three.js storage textures and TSL storage texture nodes.
556
+ *
557
+ * @example
558
+ * ```tsx
559
+ * const { heightMap } = useGPUStorage(() => ({
560
+ * heightMap: new StorageTexture(512, 512),
561
+ * }), 'terrain')
562
+ * ```
563
+ */
564
+ type StorageLike =
565
+ | StorageTexture // GPU storage texture
566
+ | Data3DTexture // 3D texture (can be used as storage)
567
+ | Node // TSL storage texture nodes (storageTexture)
568
+
569
+ /** Flat record of storage-like values (no nested scopes) */
570
+ type StorageRecord = Record<string, StorageLike>
571
+
572
+ /**
573
+ * Storage store that can contain both root-level storage and scoped storage objects.
574
+ * Structure: { heightMap: StorageTexture, terrain: { normal: StorageTextureNode } }
575
+ */
576
+ type StorageStore = Record<string, StorageLike | StorageRecord>
577
+
489
578
  //* Renderer Types ========================================
490
579
 
491
580
  /** Default renderer type - union of WebGL and WebGPU renderers */
@@ -499,6 +588,18 @@ type Subscription = {
499
588
  store: RootStore
500
589
  }
501
590
 
591
+ /** Per-pointer state for multi-touch and XR support */
592
+ type PointerState = {
593
+ /** Objects currently hovered by this pointer */
594
+ hovered: Map<string, ThreeEvent<DomEvent>>
595
+ /** Objects capturing this pointer */
596
+ captured: Map<THREE$1.Object3D, PointerCaptureTarget>
597
+ /** Initial click position [x, y] */
598
+ initialClick: [x: number, y: number]
599
+ /** Objects hit on initial click */
600
+ initialHits: THREE$1.Object3D[]
601
+ }
602
+
502
603
  type Dpr = number | [min: number, max: number]
503
604
 
504
605
  interface Size {
@@ -540,12 +641,21 @@ interface Performance {
540
641
 
541
642
  interface InternalState {
542
643
  interaction: THREE$1.Object3D[]
543
- hovered: Map<string, ThreeEvent<DomEvent>>
544
644
  subscribers: Subscription[]
645
+ /** Per-pointer state (hover, capture, click tracking) - replaces hovered, capturedMap, initialClick, initialHits */
646
+ pointerMap: Map<number, PointerState>
647
+ /** Pointers needing raycast this frame (used with frameTimedRaycasts) */
648
+ pointerDirty: Map<number, DomEvent>
649
+ /** Last event received (for events.update() compatibility) */
650
+ lastEvent: React$1.RefObject<DomEvent | null>
651
+ /** @deprecated Use pointerMap.get(pointerId).hovered instead */
652
+ hovered: Map<string, ThreeEvent<DomEvent>>
653
+ /** @deprecated Use pointerMap.get(pointerId).captured instead */
545
654
  capturedMap: Map<number, Map<THREE$1.Object3D, PointerCaptureTarget>>
655
+ /** @deprecated Use pointerMap.get(pointerId).initialClick instead */
546
656
  initialClick: [x: number, y: number]
657
+ /** @deprecated Use pointerMap.get(pointerId).initialHits instead */
547
658
  initialHits: THREE$1.Object3D[]
548
- lastEvent: React$1.RefObject<DomEvent | null>
549
659
  /** Visibility event registry (onFramed, onOccluded, onVisible) */
550
660
  visibilityRegistry: Map<string, VisibilityEntry>
551
661
  /** Whether occlusion queries are enabled (WebGPU only) */
@@ -686,11 +796,15 @@ interface RootState {
686
796
  uniforms: UniformStore
687
797
  /** Global TSL nodes - root-level nodes + scoped sub-objects. Use useNodes() hook */
688
798
  nodes: Record<string, any>
799
+ /** Global TSL buffer nodes - root-level buffers + scoped sub-objects. Use useBuffers() hook */
800
+ buffers: BufferStore
801
+ /** Global GPU storage (textures, etc.) - root-level storage + scoped sub-objects. Use useGPUStorage() hook */
802
+ gpuStorage: StorageStore
689
803
  /** Global TSL texture nodes - use useTextures() hook for operations */
690
804
  textures: Map<string, any>
691
- /** WebGPU PostProcessing instance - use usePostProcessing() hook */
692
- postProcessing: any | null // THREE.PostProcessing when available
693
- /** Global TSL pass nodes for post-processing - use usePostProcessing() hook */
805
+ /** WebGPU RenderPipeline instance - use useRenderPipeline() hook */
806
+ renderPipeline: any | null // THREE.PostProcessing (will be THREE.RenderPipeline in future Three.js release)
807
+ /** Global TSL pass nodes for render pipeline - use useRenderPipeline() hook */
694
808
  passes: Record<string, any>
695
809
  /** Internal version counter for HMR - incremented by rebuildNodes/rebuildUniforms to bust memoization */
696
810
  _hmrVersion: number
@@ -740,6 +854,20 @@ interface Renderer {
740
854
  render: (scene: THREE$1.Scene, camera: THREE$1.Camera) => any
741
855
  }
742
856
 
857
+ //* Color Management Config ==============================
858
+
859
+ /**
860
+ * Color management configuration shared by both WebGL and WebGPU renderers.
861
+ */
862
+ interface ColorManagementConfig {
863
+ /**
864
+ * Color space assigned to 8-bit input textures (color maps).
865
+ * Defaults to sRGB. Most textures are authored in sRGB.
866
+ * @default THREE.SRGBColorSpace
867
+ */
868
+ textureColorSpace?: THREE$1.ColorSpace
869
+ }
870
+
743
871
  //* WebGL Renderer Props ==============================
744
872
 
745
873
  type DefaultGLProps = Omit<THREE$1.WebGLRendererParameters, 'canvas'> & {
@@ -750,7 +878,7 @@ type GLProps =
750
878
  | Renderer
751
879
  | ((defaultProps: DefaultGLProps) => Renderer)
752
880
  | ((defaultProps: DefaultGLProps) => Promise<Renderer>)
753
- | Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters>
881
+ | (Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters> & ColorManagementConfig)
754
882
 
755
883
  //* WebGPU Renderer Props ==============================
756
884
 
@@ -776,9 +904,9 @@ interface CanvasSchedulerConfig {
776
904
  }
777
905
 
778
906
  /**
779
- * Extended renderer configuration for multi-canvas support.
907
+ * Extended renderer configuration for multi-canvas support and color management.
780
908
  */
781
- interface RendererConfigExtended {
909
+ interface RendererConfigExtended extends ColorManagementConfig {
782
910
  /** Share renderer from another canvas (WebGPU only) */
783
911
  primaryCanvas?: string
784
912
  /** Canvas-level scheduler options */
@@ -843,8 +971,6 @@ interface RenderProps<TCanvas extends HTMLCanvasElement | OffscreenCanvas$1> {
843
971
  * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
844
972
  */
845
973
  shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE$1.WebGLShadowMap>
846
- /** Color space assigned to 8-bit input textures (color maps). Defaults to sRGB. Most textures are authored in sRGB. */
847
- textureColorSpace?: THREE$1.ColorSpace
848
974
  /** Creates an orthographic camera */
849
975
  orthographic?: boolean
850
976
  /**
@@ -1097,7 +1223,7 @@ interface CanvasProps
1097
1223
  */
1098
1224
  resize?: Options
1099
1225
  /** The target where events are being subscribed to, default: the div that wraps canvas */
1100
- eventSource?: HTMLElement | React$1.RefObject<HTMLElement>
1226
+ eventSource?: HTMLElement | React$1.RefObject<HTMLElement | null>
1101
1227
  /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
1102
1228
  eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen'
1103
1229
  /** Enable/disable automatic HMR refresh for TSL nodes and uniforms, default: true in dev */
@@ -1311,6 +1437,7 @@ declare global {
1311
1437
  | three_webgpu.Euler
1312
1438
  | three_webgpu.Quaternion
1313
1439
  | { x: number; y?: number; z?: number; w?: number } // Plain objects converted to vectors
1440
+ | { r: number; g: number; b: number; a?: number } // Plain objects converted to Color
1314
1441
  | Node // TSL nodes like color(), vec3(), float() for type casting
1315
1442
  | UniformNode
1316
1443
 
@@ -1356,34 +1483,34 @@ declare module 'three/tsl' {
1356
1483
  }
1357
1484
 
1358
1485
  /**
1359
- * PostProcessing Types for usePostProcessing hook (WebGPU only)
1486
+ * RenderPipeline Types for useRenderPipeline hook (WebGPU only)
1360
1487
  */
1361
1488
 
1362
1489
 
1363
1490
 
1364
1491
  declare global {
1365
- /** Pass record - stores TSL pass nodes for post-processing */
1492
+ /** Pass record - stores TSL pass nodes for render pipeline */
1366
1493
  type PassRecord = Record<string, any>
1367
1494
 
1368
1495
  /** Setup callback - runs first to configure MRT, create additional passes */
1369
- type PostProcessingSetupCallback = (state: RootState) => PassRecord | void
1496
+ type RenderPipelineSetupCallback = (state: RootState) => PassRecord | void
1370
1497
 
1371
1498
  /** Main callback - runs second to configure outputNode, create effect passes */
1372
- type PostProcessingMainCallback = (state: RootState) => PassRecord | void
1499
+ type RenderPipelineMainCallback = (state: RootState) => PassRecord | void
1373
1500
 
1374
- /** Return type for usePostProcessing hook */
1375
- interface UsePostProcessingReturn {
1501
+ /** Return type for useRenderPipeline hook */
1502
+ interface UseRenderPipelineReturn {
1376
1503
  /** Current passes from state */
1377
1504
  passes: PassRecord
1378
- /** PostProcessing instance (null if not initialized) */
1379
- postProcessing: any | null // THREE.PostProcessing
1505
+ /** RenderPipeline instance (null if not initialized) */
1506
+ renderPipeline: any | null // THREE.PostProcessing (will be THREE.RenderPipeline in future Three.js release)
1380
1507
  /** Clear all passes from state */
1381
1508
  clearPasses: () => void
1382
- /** Reset PostProcessing entirely (clears PP + passes) */
1509
+ /** Reset RenderPipeline entirely (clears PP + passes) */
1383
1510
  reset: () => void
1384
1511
  /** Re-run setup/main callbacks with current closure values */
1385
1512
  rebuild: () => void
1386
- /** True when PostProcessing is configured and ready */
1513
+ /** True when RenderPipeline is configured and ready */
1387
1514
  isReady: boolean
1388
1515
  }
1389
1516
  }
@@ -2003,6 +2130,8 @@ declare function Environment(props: EnvironmentProps): react_jsx_runtime.JSX.Ele
2003
2130
  declare function removeInteractivity(store: RootStore, object: Object3D): void;
2004
2131
  declare function createEvents(store: RootStore): {
2005
2132
  handlePointer: (name: string) => (event: DomEvent) => void;
2133
+ flushDeferredPointers: () => void;
2134
+ processDeferredPointer: (event: DomEvent, pointerId: number) => void;
2006
2135
  };
2007
2136
  /** Default R3F event manager for web */
2008
2137
  declare function createPointerEvents(store: RootStore): EventManager<HTMLElement>;
@@ -2582,9 +2711,9 @@ declare function useTextures(): UseTexturesReturn;
2582
2711
  * const fbo = useRenderTarget(512, 256, { samples: 4 })
2583
2712
  * ```
2584
2713
  */
2585
- declare function useRenderTarget(options?: RenderTargetOptions): RenderTarget | WebGLRenderTarget;
2586
- declare function useRenderTarget(size: number, options?: RenderTargetOptions): RenderTarget | WebGLRenderTarget;
2587
- declare function useRenderTarget(width: number, height: number, options?: RenderTargetOptions): RenderTarget | WebGLRenderTarget;
2714
+ declare function useRenderTarget(options?: RenderTargetOptions): WebGLRenderTarget;
2715
+ declare function useRenderTarget(size: number, options?: RenderTargetOptions): WebGLRenderTarget;
2716
+ declare function useRenderTarget(width: number, height: number, options?: RenderTargetOptions): WebGLRenderTarget;
2588
2717
 
2589
2718
  /**
2590
2719
  * Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).
@@ -4249,4 +4378,4 @@ declare function isOnce(value: unknown): value is {
4249
4378
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
4250
4379
 
4251
4380
  export { Block, Canvas, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, ErrorBoundary, FROM_REF, IsObject, ONCE, Portal, R3F_BUILD_LEGACY, R3F_BUILD_WEBGPU, REACT_INTERNAL_PROPS, RESERVED_PROPS, three_d as ReactThreeFiber, Scheduler, Texture, _roots, act, addAfterEffect, addEffect, addTail, advance, applyProps, attach, buildGraph, calculateDpr, context, createEvents, createPointerEvents, createPortal, createRoot, createStore, detach, diffProps, dispose, createPointerEvents as events, extend, findInitialRoot, flushSync, fromRef, getInstanceProps, getPrimary, getPrimaryIds, getRootState, getScheduler, getUuidPrefix, hasConstructor, hasPrimary, invalidate, invalidateInstance, is, isColorRepresentation, isCopyable, isFromRef, isObject3D, isOnce, isOrthographicCamera, isRef, isRenderer, isTexture, isVectorLike, once, prepare, presetsObj, reconciler, registerPrimary, removeInteractivity, resolve, unmountComponentAtNode, unregisterPrimary, updateCamera, updateFrustum, useBridge, useEnvironment, useFrame, useGraph, useInstanceHandle, useIsomorphicLayoutEffect, useLoader, useMutableCallback, useRenderTarget, useStore, useTexture, useTextures, useThree, waitForPrimary };
4252
- export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager };
4381
+ export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };