@react-three/drei 9.121.3 → 10.0.0-rc.0

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.
Files changed (212) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +852 -852
  3. package/core/AccumulativeShadows.d.ts +8 -10
  4. package/core/ArcballControls.d.ts +3 -3
  5. package/core/AsciiRenderer.d.ts +1 -2
  6. package/core/BBAnchor.d.ts +3 -3
  7. package/core/Backdrop.d.ts +2 -1
  8. package/core/Billboard.d.ts +3 -2
  9. package/core/Billboard.js +8 -8
  10. package/core/Bounds.d.ts +2 -1
  11. package/core/Bounds.js +2 -2
  12. package/core/Bvh.d.ts +3 -2
  13. package/core/Bvh.js +2 -2
  14. package/core/CameraControls.d.ts +4 -4
  15. package/core/CatmullRomLine.d.ts +2 -3
  16. package/core/Caustics.d.ts +14 -17
  17. package/core/Center.d.ts +3 -2
  18. package/core/Clone.d.ts +4 -4
  19. package/core/Cloud.cjs.js +1 -1
  20. package/core/Cloud.d.ts +50 -12
  21. package/core/Cloud.js +3 -3
  22. package/core/ComputedAttribute.cjs.js +1 -1
  23. package/core/ComputedAttribute.d.ts +3 -4
  24. package/core/ComputedAttribute.js +5 -5
  25. package/core/ContactShadows.d.ts +3 -2
  26. package/core/CubeCamera.d.ts +3 -3
  27. package/core/CubeTexture.d.ts +5 -6
  28. package/core/CubeTexture.js +2 -7
  29. package/core/CubicBezierLine.d.ts +2 -3
  30. package/core/CurveModifier.d.ts +2 -1
  31. package/core/Decal.d.ts +2 -2
  32. package/core/Detailed.d.ts +3 -3
  33. package/core/DetectGPU.d.ts +1 -2
  34. package/core/DeviceOrientationControls.d.ts +2 -2
  35. package/core/Edges.cjs.js +1 -1
  36. package/core/Edges.d.ts +2 -2
  37. package/core/Edges.js +2 -2
  38. package/core/Effects.cjs.js +1 -1
  39. package/core/Effects.d.ts +9 -13
  40. package/core/Effects.js +3 -3
  41. package/core/Environment.cjs.js +1 -1
  42. package/core/Environment.d.ts +5 -7
  43. package/core/Example.js +2 -2
  44. package/core/Fbo.d.ts +1 -4
  45. package/core/Fbo.js +0 -2
  46. package/core/Fbx.d.ts +1 -1
  47. package/core/FirstPersonControls.d.ts +2 -2
  48. package/core/Fisheye.d.ts +2 -1
  49. package/core/Float.d.ts +2 -1
  50. package/core/FlyControls.d.ts +2 -2
  51. package/core/GizmoHelper.d.ts +2 -1
  52. package/core/GizmoViewport.d.ts +2 -2
  53. package/core/Gltf.d.ts +9 -5
  54. package/core/GradientTexture.d.ts +4 -4
  55. package/core/GradientTexture.js +0 -2
  56. package/core/Grid.d.ts +6 -7
  57. package/core/Helper.cjs.js +1 -1
  58. package/core/Helper.d.ts +1 -1
  59. package/core/Helper.js +1 -1
  60. package/core/Hud.d.ts +1 -2
  61. package/core/Image.d.ts +6 -8
  62. package/core/Instances.cjs.js +1 -1
  63. package/core/Instances.d.ts +27 -35
  64. package/core/Instances.js +38 -33
  65. package/core/Ktx2.d.ts +1 -1
  66. package/core/Lightformer.d.ts +3 -3
  67. package/core/Line.d.ts +4 -4
  68. package/core/MapControls.d.ts +4 -4
  69. package/core/MarchingCubes.d.ts +6 -6
  70. package/core/Mask.d.ts +3 -3
  71. package/core/MeshDiscardMaterial.d.ts +6 -7
  72. package/core/MeshDistortMaterial.d.ts +15 -17
  73. package/core/MeshPortalMaterial.cjs.js +1 -1
  74. package/core/MeshPortalMaterial.d.ts +14 -17
  75. package/core/MeshPortalMaterial.js +2 -2
  76. package/core/MeshReflectorMaterial.cjs.js +1 -1
  77. package/core/MeshReflectorMaterial.d.ts +9 -22
  78. package/core/MeshReflectorMaterial.js +2 -4
  79. package/core/MeshRefractionMaterial.cjs.js +1 -1
  80. package/core/MeshRefractionMaterial.d.ts +5 -8
  81. package/core/MeshRefractionMaterial.js +2 -2
  82. package/core/MeshTransmissionMaterial.cjs.js +1 -1
  83. package/core/MeshTransmissionMaterial.d.ts +7 -8
  84. package/core/MeshTransmissionMaterial.js +2 -1
  85. package/core/MeshWobbleMaterial.d.ts +15 -17
  86. package/core/MotionPathControls.cjs.js +1 -1
  87. package/core/MotionPathControls.d.ts +18 -6
  88. package/core/MotionPathControls.js +2 -3
  89. package/core/MultiMaterial.cjs.js +1 -1
  90. package/core/MultiMaterial.d.ts +3 -1
  91. package/core/MultiMaterial.js +2 -3
  92. package/core/OrbitControls.d.ts +4 -4
  93. package/core/OrthographicCamera.d.ts +3 -3
  94. package/core/Outlines.cjs.js +1 -1
  95. package/core/Outlines.d.ts +2 -3
  96. package/core/Outlines.js +2 -2
  97. package/core/PerformanceMonitor.d.ts +2 -2
  98. package/core/PerspectiveCamera.d.ts +3 -3
  99. package/core/PointMaterial.d.ts +3 -11
  100. package/core/PointerLockControls.d.ts +2 -2
  101. package/core/Points.cjs.js +1 -1
  102. package/core/Points.d.ts +10 -13
  103. package/core/Points.js +10 -20
  104. package/core/PositionalAudio.d.ts +3 -3
  105. package/core/Preload.d.ts +2 -3
  106. package/core/QuadraticBezierLine.d.ts +5 -7
  107. package/core/RenderCubeTexture.d.ts +2 -2
  108. package/core/RenderTexture.cjs.js +1 -1
  109. package/core/RenderTexture.d.ts +3 -3
  110. package/core/RenderTexture.js +3 -2
  111. package/core/Resize.d.ts +9 -2
  112. package/core/RoundedBox.d.ts +4 -4
  113. package/core/Sampler.d.ts +4 -4
  114. package/core/ScreenQuad.d.ts +3 -3
  115. package/core/ScreenSizer.d.ts +3 -3
  116. package/core/ScreenSizer.js +12 -12
  117. package/core/ScreenSpace.d.ts +3 -2
  118. package/core/Segments.d.ts +6 -8
  119. package/core/Shadow.d.ts +3 -3
  120. package/core/ShadowAlpha.cjs.js +1 -1
  121. package/core/ShadowAlpha.d.ts +1 -2
  122. package/core/ShadowAlpha.js +9 -9
  123. package/core/Sky.d.ts +2 -3
  124. package/core/Sparkles.d.ts +14 -16
  125. package/core/Splat.d.ts +6 -8
  126. package/core/SpotLight.d.ts +2 -1
  127. package/core/SpriteAnimator.cjs.js +1 -1
  128. package/core/SpriteAnimator.d.ts +36 -3
  129. package/core/Stage.cjs.js +1 -1
  130. package/core/Stage.d.ts +3 -2
  131. package/core/Stars.cjs.js +1 -1
  132. package/core/Stars.d.ts +6 -8
  133. package/core/Stars.js +1 -1
  134. package/core/Stats.d.ts +2 -3
  135. package/core/StatsGl.d.ts +2 -2
  136. package/core/Svg.d.ts +6 -6
  137. package/core/Text.d.ts +3 -4
  138. package/core/Text3D.d.ts +7 -10
  139. package/core/Text3D.js +3 -3
  140. package/core/Texture.d.ts +1 -1
  141. package/core/TrackballControls.d.ts +4 -4
  142. package/core/Trail.cjs.js +1 -1
  143. package/core/Trail.d.ts +3 -3
  144. package/core/Trail.js +3 -3
  145. package/core/TrailTexture.d.ts +3 -2
  146. package/core/TransformControls.cjs.js +1 -1
  147. package/core/TransformControls.d.ts +3 -3
  148. package/core/TransformControls.js +4 -5
  149. package/core/VideoTexture.cjs.js +1 -1
  150. package/core/VideoTexture.js +1 -1
  151. package/core/Wireframe.d.ts +5 -7
  152. package/core/index.cjs.js +1 -1
  153. package/core/index.d.ts +0 -1
  154. package/core/index.js +2 -4
  155. package/core/shapes.d.ts +21 -20
  156. package/core/softShadows.d.ts +1 -2
  157. package/core/softShadows.js +13 -13
  158. package/core/useAnimations.cjs.js +1 -1
  159. package/core/useAnimations.d.ts +2 -2
  160. package/core/useAnimations.js +1 -1
  161. package/core/useBoxProjectedEnv.d.ts +1 -1
  162. package/core/useCamera.cjs.js +1 -1
  163. package/core/useCamera.d.ts +1 -1
  164. package/core/useCamera.js +1 -8
  165. package/core/useContextBridge.d.ts +1 -1
  166. package/core/useContextBridge.js +4 -4
  167. package/core/useEnvironment.cjs.js +1 -1
  168. package/core/useEnvironment.d.ts +3 -4
  169. package/core/useEnvironment.js +11 -19
  170. package/core/useIntersect.d.ts +1 -1
  171. package/core/useSpriteLoader.d.ts +1 -1
  172. package/helpers/deprecated.cjs.js +1 -1
  173. package/helpers/deprecated.d.ts +1 -4
  174. package/helpers/deprecated.js +4 -16
  175. package/helpers/ts-utils.d.ts +4 -0
  176. package/helpers/useEffectfulState.d.ts +1 -1
  177. package/index.cjs.js +1 -1
  178. package/index.js +0 -1
  179. package/materials/BlurPass.js +0 -1
  180. package/materials/MeshReflectorMaterial.d.ts +0 -16
  181. package/native/index.cjs.js +1 -1
  182. package/native/index.js +0 -2
  183. package/package.json +7 -8
  184. package/web/CycleRaycast.d.ts +1 -1
  185. package/web/FaceControls.js +8 -8
  186. package/web/FaceLandmarker.d.ts +1 -2
  187. package/web/Facemesh.d.ts +3 -2
  188. package/web/Html.cjs.js +1 -1
  189. package/web/Html.d.ts +4 -4
  190. package/web/Html.js +1 -1
  191. package/web/KeyboardControls.d.ts +1 -1
  192. package/web/PresentationControls.cjs.js +1 -1
  193. package/web/PresentationControls.d.ts +3 -4
  194. package/web/PresentationControls.js +20 -28
  195. package/web/ScreenVideoTexture.js +2 -2
  196. package/web/ScrollControls.d.ts +1 -1
  197. package/web/Select.d.ts +3 -3
  198. package/web/Select.js +6 -2
  199. package/web/View.cjs.js +1 -1
  200. package/web/View.d.ts +8 -10
  201. package/web/View.js +4 -34
  202. package/web/WebcamVideoTexture.js +2 -2
  203. package/web/index.cjs.js +1 -1
  204. package/web/index.js +1 -4
  205. package/web/pivotControls/AxisArrow.js +0 -2
  206. package/web/pivotControls/AxisRotator.js +0 -2
  207. package/web/pivotControls/PlaneSlider.js +1 -3
  208. package/web/pivotControls/ScalingSphere.js +0 -1
  209. package/web/pivotControls/index.d.ts +1 -2
  210. package/core/Reflector.cjs.js +0 -1
  211. package/core/Reflector.d.ts +0 -30
  212. package/core/Reflector.js +0 -180
@@ -1,28 +1,26 @@
1
1
  import * as THREE from 'three';
2
2
  import * as React from 'react';
3
- import { ReactThreeFiber } from '@react-three/fiber';
3
+ import { ThreeElement, ThreeElements } from '@react-three/fiber';
4
4
  import { ForwardRefComponent } from '../helpers/ts-utils';
5
- declare global {
6
- namespace JSX {
7
- interface IntrinsicElements {
8
- positionMesh: ReactThreeFiber.Object3DNode<PositionMesh, typeof PositionMesh>;
9
- }
5
+ declare module '@react-three/fiber' {
6
+ interface ThreeElements {
7
+ positionMesh: ThreeElement<typeof PositionMesh>;
10
8
  }
11
9
  }
12
10
  type Api = {
13
- getParent: () => React.MutableRefObject<InstancedMesh>;
14
- subscribe: <T>(ref: React.MutableRefObject<T>) => void;
11
+ getParent: () => React.RefObject<InstancedMesh>;
12
+ subscribe: <T>(ref: React.RefObject<T>) => void;
15
13
  };
16
- export type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
14
+ export type InstancesProps = Omit<ThreeElements['instancedMesh'], 'ref' | 'args'> & {
17
15
  context?: React.Context<Api>;
18
16
  range?: number;
19
17
  limit?: number;
20
18
  frames?: number;
21
19
  };
22
- export type InstanceProps = JSX.IntrinsicElements['positionMesh'] & {
20
+ export type InstanceProps = Omit<ThreeElements['positionMesh'], 'ref'> & {
23
21
  context?: React.Context<Api>;
24
22
  };
25
- export type InstancedAttributeProps = JSX.IntrinsicElements['instancedBufferAttribute'] & {
23
+ export type InstancedAttributeProps = Omit<ThreeElements['instancedBufferAttribute'], 'ref' | 'args'> & {
26
24
  name: string;
27
25
  defaultValue: any;
28
26
  normalized?: boolean;
@@ -34,39 +32,33 @@ type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor
34
32
  };
35
33
  export declare class PositionMesh extends THREE.Group {
36
34
  color: THREE.Color;
37
- instance: React.MutableRefObject<THREE.InstancedMesh | undefined>;
38
- instanceKey: React.MutableRefObject<JSX.IntrinsicElements['positionMesh'] | undefined>;
35
+ instance: React.RefObject<THREE.InstancedMesh | undefined>;
36
+ instanceKey: React.RefObject<PositionMesh | undefined>;
39
37
  constructor();
40
- get geometry(): THREE.BufferGeometry | undefined;
38
+ get geometry(): THREE.BufferGeometry<THREE.NormalBufferAttributes> | undefined;
41
39
  raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
42
40
  }
43
- export declare const Instance: React.ForwardRefExoticComponent<Omit<InstanceProps, "ref"> & React.RefAttributes<unknown>>;
41
+ export declare const Instance: React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<PositionMesh, import("@react-three/fiber").MathProps<PositionMesh> & import("@react-three/fiber").ReactProps<PositionMesh> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<PositionMesh, typeof PositionMesh>, "object">>>, "ref"> & {
42
+ context?: React.Context<Api>;
43
+ } & React.RefAttributes<unknown>>;
44
44
  export declare const Instances: ForwardRefComponent<InstancesProps, THREE.InstancedMesh>;
45
45
  export interface MergedProps extends InstancesProps {
46
46
  meshes: THREE.Mesh[];
47
47
  children: React.ReactNode;
48
48
  }
49
49
  export declare const Merged: ForwardRefComponent<any, THREE.Group>;
50
- export declare function createInstances<T = InstanceProps>(): readonly [React.ForwardRefExoticComponent<Omit<InstancesProps, "ref"> & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>, React.ForwardRefExoticComponent<React.PropsWithoutRef<T & Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
51
- position?: ReactThreeFiber.Vector3;
52
- up?: ReactThreeFiber.Vector3;
53
- scale?: ReactThreeFiber.Vector3;
54
- rotation?: ReactThreeFiber.Euler;
55
- matrix?: ReactThreeFiber.Matrix4;
56
- quaternion?: ReactThreeFiber.Quaternion;
57
- layers?: ReactThreeFiber.Layers;
58
- dispose?: (() => void) | null;
59
- }>> & {
60
- position?: ReactThreeFiber.Vector3;
61
- up?: ReactThreeFiber.Vector3;
62
- scale?: ReactThreeFiber.Vector3;
63
- rotation?: ReactThreeFiber.Euler;
64
- matrix?: ReactThreeFiber.Matrix4;
65
- quaternion?: ReactThreeFiber.Quaternion;
66
- layers?: ReactThreeFiber.Layers;
67
- dispose?: (() => void) | null;
68
- } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
50
+ export declare function createInstances<T = InstanceProps>(): readonly [React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>, import("@react-three/fiber").MathProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>> & import("@react-three/fiber").ReactProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>, typeof THREE.InstancedMesh>, "object">>>, "ref" | "args"> & {
51
+ context?: React.Context<Api>;
52
+ range?: number;
53
+ limit?: number;
54
+ frames?: number;
55
+ } & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>>>, React.ForwardRefExoticComponent<React.PropsWithoutRef<T & Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<PositionMesh, import("@react-three/fiber").MathProps<PositionMesh> & import("@react-three/fiber").ReactProps<PositionMesh> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<PositionMesh, typeof PositionMesh>, "object">>>, "ref"> & {
69
56
  context?: React.Context<Api>;
70
57
  }> & React.RefAttributes<PositionMesh & T>>];
71
- export declare const InstancedAttribute: React.ForwardRefExoticComponent<Omit<InstancedAttributeProps, "ref"> & React.RefAttributes<unknown>>;
58
+ export declare const InstancedAttribute: React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<THREE.InstancedBufferAttribute, import("@react-three/fiber").MathProps<THREE.InstancedBufferAttribute> & import("@react-three/fiber").ReactProps<THREE.InstancedBufferAttribute>>>, Omit<import("@react-three/fiber").InstanceProps<THREE.InstancedBufferAttribute, typeof THREE.InstancedBufferAttribute>, "object">>>, "ref" | "args"> & {
59
+ name: string;
60
+ defaultValue: any;
61
+ normalized?: boolean;
62
+ usage?: number;
63
+ } & React.RefAttributes<unknown>>;
72
64
  export {};
package/core/Instances.js CHANGED
@@ -2,7 +2,6 @@ import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as THREE from 'three';
3
3
  import * as React from 'react';
4
4
  import { extend, useFrame } from '@react-three/fiber';
5
- import Composer from 'react-composer';
6
5
  import { setUpdateRange } from '../helpers/deprecated.js';
7
6
 
8
7
  function isFunctionChild(value) {
@@ -74,7 +73,7 @@ const Instance = /* @__PURE__ */React.forwardRef(({
74
73
  React.useMemo(() => extend({
75
74
  PositionMesh
76
75
  }), []);
77
- const group = React.useRef();
76
+ const group = React.useRef(null);
78
77
  React.useImperativeHandle(ref, () => group.current, []);
79
78
  const {
80
79
  subscribe,
@@ -135,11 +134,11 @@ const Instances = /* @__PURE__ */React.forwardRef(({
135
134
  count = Math.min(limit, range !== undefined ? range : limit, instances.length);
136
135
  parentRef.current.count = count;
137
136
  setUpdateRange(parentRef.current.instanceMatrix, {
138
- offset: 0,
137
+ start: 0,
139
138
  count: count * 16
140
139
  });
141
140
  setUpdateRange(parentRef.current.instanceColor, {
142
- offset: 0,
141
+ start: 0,
143
142
  count: count * 3
144
143
  });
145
144
  for (let i = 0; i < instances.length; i++) {
@@ -175,15 +174,11 @@ const Instances = /* @__PURE__ */React.forwardRef(({
175
174
  raycast: () => null
176
175
  }, props), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
177
176
  attach: "instanceMatrix",
178
- count: matrices.length / 16,
179
- array: matrices,
180
- itemSize: 16,
177
+ args: [matrices, 16],
181
178
  usage: THREE.DynamicDrawUsage
182
179
  }), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
183
180
  attach: "instanceColor",
184
- count: colors.length / 3,
185
- array: colors,
186
- itemSize: 3,
181
+ args: [colors, 3],
187
182
  usage: THREE.DynamicDrawUsage
188
183
  }), isFunctionChild(children) ? /*#__PURE__*/React.createElement(localContext.Provider, {
189
184
  value: api
@@ -193,34 +188,42 @@ const Instances = /* @__PURE__ */React.forwardRef(({
193
188
  value: api
194
189
  }, children));
195
190
  });
196
- const Merged = /* @__PURE__ */React.forwardRef(function Merged({
191
+ const Merged = /*#__PURE__*/React.forwardRef(function Merged({
197
192
  meshes,
198
193
  children,
199
- ...props
194
+ ...rest
200
195
  }, ref) {
201
- const isArray = Array.isArray(meshes);
202
- // Filter out meshes from collections, which may contain non-meshes
203
- if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
196
+ const instances = [];
197
+ if (Array.isArray(meshes)) {
198
+ for (const mesh of meshes) {
199
+ if (mesh != null && mesh.isMesh) {
200
+ instances.push(props => /*#__PURE__*/React.createElement(Instances, _extends({
201
+ key: mesh.geometry.uuid,
202
+ geometry: mesh.geometry,
203
+ material: mesh.material
204
+ }, rest, props)));
205
+ }
206
+ }
207
+ } else if (meshes != null && typeof meshes === 'object') {
208
+ for (const key in meshes) {
209
+ const mesh = meshes[key];
210
+ if (mesh != null && mesh.isMesh) {
211
+ instances.push(props => /*#__PURE__*/React.createElement(Instances, _extends({
212
+ key: mesh.geometry.uuid,
213
+ geometry: mesh.geometry,
214
+ material: mesh.material
215
+ }, rest, props)));
216
+ }
217
+ }
218
+ }
204
219
  return /*#__PURE__*/React.createElement("group", {
205
220
  ref: ref
206
- }, /*#__PURE__*/React.createElement(Composer, {
207
- components: (isArray ? meshes : Object.values(meshes)).map(({
208
- geometry,
209
- material
210
- }) => /*#__PURE__*/React.createElement(Instances, _extends({
211
- key: geometry.uuid,
212
- geometry: geometry,
213
- material: material
214
- }, props)))
215
- }, args => isArray ? children(...args) : children(Object.keys(meshes).filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({
216
- ...acc,
217
- [key]: args[i]
218
- }), {}))));
221
+ }, children(instances));
219
222
  });
220
223
 
221
- /** Idea and implementation for global instances and instanced attributes by
222
- /* Matias Gonzalez Fernandez https://x.com/matiNotFound
223
- /* and Paul Henschel https://x.com/0xca0a
224
+ /** Idea and implementation for global instances and instanced attributes by
225
+ /* Matias Gonzalez Fernandez https://x.com/matiNotFound
226
+ /* and Paul Henschel https://x.com/0xca0a
224
227
  */
225
228
  function createInstances() {
226
229
  const context = /*#__PURE__*/React.createContext(null);
@@ -241,7 +244,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
241
244
  const ref = React.useRef(null);
242
245
  React.useImperativeHandle(fref, () => ref.current, []);
243
246
  React.useLayoutEffect(() => {
244
- const parent = ref.current.__r3f.parent;
247
+ const parent = ref.current.__r3f.parent.object;
245
248
  parent.geometry.attributes[name] = ref.current;
246
249
  const value = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
247
250
  const array = Array.from({
@@ -249,6 +252,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
249
252
  }, () => value).flat();
250
253
  ref.current.array = new Float32Array(array);
251
254
  ref.current.itemSize = value.length;
255
+ // @ts-expect-error
252
256
  ref.current.count = array.length / ref.current.itemSize;
253
257
  return () => {
254
258
  delete parent.geometry.attributes[name];
@@ -256,7 +260,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
256
260
  }, [name]);
257
261
  let iterations = 0;
258
262
  useFrame(() => {
259
- const parent = ref.current.__r3f.parent;
263
+ const parent = ref.current.__r3f.parent.object;
260
264
  if (parent.userData.frames === Infinity || iterations < parent.userData.frames) {
261
265
  for (let i = 0; i < parent.userData.instances.length; i++) {
262
266
  const instance = parent.userData.instances[i].current;
@@ -269,6 +273,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
269
273
  iterations++;
270
274
  }
271
275
  });
276
+ // @ts-expect-error we're abusing three API here by mutating immutable args
272
277
  return /*#__PURE__*/React.createElement("instancedBufferAttribute", {
273
278
  ref: ref,
274
279
  usage: usage,
package/core/Ktx2.d.ts CHANGED
@@ -4,7 +4,7 @@ export declare function useKTX2<Url extends string[] | string | Record<string, s
4
4
  [key in keyof Url]: Texture;
5
5
  } : Texture;
6
6
  export declare namespace useKTX2 {
7
- var preload: (url: string extends any[] ? string[] : string, basisPath?: string) => undefined;
7
+ var preload: (url: string extends any[] ? string[] : string, basisPath?: string) => void;
8
8
  var clear: (input: string | string[]) => void;
9
9
  }
10
10
  export declare const Ktx2: ({ children, input, basisPath, }: {
@@ -1,7 +1,7 @@
1
- import { ReactThreeFiber } from '@react-three/fiber';
1
+ import { ReactThreeFiber, ThreeElements } from '@react-three/fiber';
2
2
  import * as THREE from 'three';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- export type LightProps = JSX.IntrinsicElements['mesh'] & {
4
+ export type LightProps = Omit<ThreeElements['mesh'], 'ref'> & {
5
5
  args?: any[];
6
6
  map?: THREE.Texture;
7
7
  toneMapped?: boolean;
@@ -10,6 +10,6 @@ export type LightProps = JSX.IntrinsicElements['mesh'] & {
10
10
  scale?: number | [number, number, number] | [number, number];
11
11
  intensity?: number;
12
12
  target?: boolean | [number, number, number] | THREE.Vector3;
13
- light?: Partial<JSX.IntrinsicElements['pointLight']>;
13
+ light?: Partial<ThreeElements['pointLight']>;
14
14
  };
15
15
  export declare const Lightformer: ForwardRefComponent<LightProps, THREE.Mesh>;
package/core/Line.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { Color, ColorRepresentation } from 'three';
2
- import { ReactThreeFiber, Vector2 as FiberVector2, Vector3 as FiberVector3 } from '@react-three/fiber';
2
+ import { Vector2 as FiberVector2, Vector3 as FiberVector3, ThreeElement } from '@react-three/fiber';
3
3
  import { LineMaterial, LineMaterialParameters, Line2, LineSegments2 } from 'three-stdlib';
4
4
  import { ForwardRefComponent } from '../helpers/ts-utils';
5
- export type LineProps = {
5
+ export type LineProps = Omit<{
6
6
  points: ReadonlyArray<FiberVector2 | FiberVector3>;
7
7
  vertexColors?: ReadonlyArray<Color | [number, number, number] | [number, number, number, number]>;
8
8
  lineWidth?: number;
9
9
  segments?: boolean;
10
- } & Omit<LineMaterialParameters, 'vertexColors' | 'color'> & Omit<ReactThreeFiber.Object3DNode<Line2, typeof Line2>, 'args'> & Omit<ReactThreeFiber.Object3DNode<LineMaterial, [LineMaterialParameters]>, 'color' | 'vertexColors' | 'args'> & {
10
+ } & Omit<LineMaterialParameters, 'vertexColors' | 'color'> & Omit<ThreeElement<typeof Line2>, 'ref' | 'args'> & Omit<ThreeElement<typeof LineMaterial>, 'ref' | 'color' | 'vertexColors' | 'args'> & {
11
11
  color?: ColorRepresentation;
12
- };
12
+ }, 'ref'>;
13
13
  export declare const Line: ForwardRefComponent<LineProps, Line2 | LineSegments2>;
@@ -1,8 +1,8 @@
1
- import { ReactThreeFiber } from '@react-three/fiber';
1
+ import { ReactThreeFiber, ThreeElement } from '@react-three/fiber';
2
2
  import * as THREE from 'three';
3
3
  import { MapControls as MapControlsImpl } from 'three-stdlib';
4
- import { ForwardRefComponent } from '../helpers/ts-utils';
5
- export type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber.Object3DNode<MapControlsImpl, typeof MapControlsImpl>, {
4
+ import { ForwardRefComponent, Overwrite } from '../helpers/ts-utils';
5
+ export type MapControlsProps = Omit<Overwrite<ThreeElement<typeof MapControlsImpl>, {
6
6
  target?: ReactThreeFiber.Vector3;
7
7
  camera?: THREE.Camera;
8
8
  makeDefault?: boolean;
@@ -10,5 +10,5 @@ export type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber.Object3
10
10
  onStart?: (e?: THREE.Event) => void;
11
11
  onEnd?: (e?: THREE.Event) => void;
12
12
  domElement?: HTMLElement;
13
- }>;
13
+ }>, 'ref' | 'args'>;
14
14
  export declare const MapControls: ForwardRefComponent<MapControlsProps, MapControlsImpl>;
@@ -1,24 +1,24 @@
1
1
  import * as THREE from 'three';
2
2
  import { Color } from 'three';
3
3
  import { MarchingCubes as MarchingCubesImpl } from 'three-stdlib';
4
+ import { ThreeElements } from '@react-three/fiber';
4
5
  import { ForwardRefComponent } from '../helpers/ts-utils';
5
6
  export type MarchingCubesProps = {
6
7
  resolution?: number;
7
8
  maxPolyCount?: number;
8
9
  enableUvs?: boolean;
9
10
  enableColors?: boolean;
10
- } & JSX.IntrinsicElements['group'];
11
+ } & Omit<ThreeElements['group'], 'ref'>;
11
12
  export declare const MarchingCubes: ForwardRefComponent<MarchingCubesProps, MarchingCubesImpl>;
12
- type MarchingCubeProps = {
13
+ export type MarchingCubeProps = {
13
14
  strength?: number;
14
15
  subtract?: number;
15
16
  color?: Color;
16
- } & JSX.IntrinsicElements['group'];
17
+ } & ThreeElements['group'];
17
18
  export declare const MarchingCube: ForwardRefComponent<MarchingCubeProps, THREE.Group>;
18
- type MarchingPlaneProps = {
19
+ export type MarchingPlaneProps = {
19
20
  planeType?: 'x' | 'y' | 'z';
20
21
  strength?: number;
21
22
  subtract?: number;
22
- } & JSX.IntrinsicElements['group'];
23
+ } & ThreeElements['group'];
23
24
  export declare const MarchingPlane: ForwardRefComponent<MarchingPlaneProps, THREE.Group>;
24
- export {};
package/core/Mask.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import * as THREE from 'three';
2
2
  import { ForwardRefComponent } from '../helpers/ts-utils';
3
- type Props = Omit<JSX.IntrinsicElements['mesh'], 'id'> & {
3
+ import { ThreeElements } from '@react-three/fiber';
4
+ export type MaskProps = Omit<ThreeElements['mesh'], 'ref' | 'id'> & {
4
5
  id: number;
5
6
  colorWrite?: boolean;
6
7
  depthWrite?: boolean;
7
8
  };
8
- export declare const Mask: ForwardRefComponent<Props, THREE.Mesh>;
9
+ export declare const Mask: ForwardRefComponent<MaskProps, THREE.Mesh>;
9
10
  export declare function useMask(id: number, inverse?: boolean): {
10
11
  stencilWrite: boolean;
11
12
  stencilRef: number;
@@ -14,4 +15,3 @@ export declare function useMask(id: number, inverse?: boolean): {
14
15
  stencilZFail: 7680;
15
16
  stencilZPass: 7680;
16
17
  };
17
- export {};
@@ -1,11 +1,10 @@
1
1
  import { ShaderMaterial } from 'three';
2
- import { ReactThreeFiber } from '@react-three/fiber';
2
+ import { ThreeElements } from '@react-three/fiber';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- declare global {
5
- namespace JSX {
6
- interface IntrinsicElements {
7
- discardMaterialImpl: ReactThreeFiber.ShaderMaterialProps;
8
- }
4
+ declare module '@react-three/fiber' {
5
+ interface ThreeElements {
6
+ discardMaterialImpl: ThreeElements['shaderMaterial'];
9
7
  }
10
8
  }
11
- export declare const MeshDiscardMaterial: ForwardRefComponent<JSX.IntrinsicElements['shaderMaterial'], ShaderMaterial>;
9
+ export type MeshDiscardMaterialProps = Omit<ThreeElements['shaderMaterial'], 'ref'>;
10
+ export declare const MeshDiscardMaterial: ForwardRefComponent<MeshDiscardMaterialProps, ShaderMaterial>;
@@ -1,21 +1,6 @@
1
1
  import { IUniform, MeshPhysicalMaterial, MeshPhysicalMaterialParameters } from 'three';
2
+ import { ThreeElements } from '@react-three/fiber';
2
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
3
- type DistortMaterialType = JSX.IntrinsicElements['meshPhysicalMaterial'] & {
4
- time?: number;
5
- distort?: number;
6
- radius?: number;
7
- };
8
- type Props = DistortMaterialType & {
9
- speed?: number;
10
- factor?: number;
11
- };
12
- declare global {
13
- namespace JSX {
14
- interface IntrinsicElements {
15
- distortMaterialImpl: DistortMaterialType;
16
- }
17
- }
18
- }
19
4
  interface Uniform<T> {
20
5
  value: T;
21
6
  }
@@ -37,5 +22,18 @@ declare class DistortMaterialImpl extends MeshPhysicalMaterial {
37
22
  get radius(): number;
38
23
  set radius(v: number);
39
24
  }
40
- export declare const MeshDistortMaterial: ForwardRefComponent<Props, DistortMaterialImpl>;
25
+ declare module '@react-three/fiber' {
26
+ interface ThreeElements {
27
+ distortMaterialImpl: ThreeElements['meshPhysicalMaterial'] & {
28
+ time?: number;
29
+ distort?: number;
30
+ radius?: number;
31
+ };
32
+ }
33
+ }
34
+ export type MeshDistortMaterialProps = Omit<ThreeElements['distortMaterialImpl'], 'ref'> & {
35
+ speed?: number;
36
+ factor?: number;
37
+ };
38
+ export declare const MeshDistortMaterial: ForwardRefComponent<MeshDistortMaterialProps, DistortMaterialImpl>;
41
39
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useIntersect.cjs.js"),i=require("./Fbo.cjs.js"),l=require("./RenderTexture.cjs.js"),o=require("./shaderMaterial.cjs.js"),u=require("three-stdlib"),s=require("../helpers/constants.cjs.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var d=v(e),m=c(r),f=c(t);const g=o.shaderMaterial({blur:0,map:null,sdf:null,blend:0,size:0,resolution:new m.Vector2},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }",`uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`),p=f.forwardRef((({children:e,events:r,blur:t=0,eventPriority:o=0,renderPriority:u=0,worldUnits:s=!1,resolution:v=512,...c},p)=>{n.extend({PortalMaterialImpl:g});const h=f.useRef(null),{scene:y,gl:b,size:w,viewport:M,setEvents:U}=n.useThree(),T=i.useFBO(v,v),[R,S]=f.useState(0);n.useFrame((()=>{const e=h.current.blend>0?Math.max(1,u):0;R!==e&&S(e)})),f.useEffect((()=>{void 0!==r&&U({enabled:!r})}),[r]);const[_,D]=f.useState(!0),j=a.useIntersect(D);f.useLayoutEffect((()=>{var e;j.current=null==(e=h.current)?void 0:e.__r3f.parent}),[]),f.useLayoutEffect((()=>{if(j.current&&t&&null===h.current.sdf){const e=new m.Mesh(j.current.geometry,new m.MeshBasicMaterial),r=(new m.Box3).setFromBufferAttribute(e.geometry.attributes.position),t=new m.OrthographicCamera(r.min.x*(1+2/v),r.max.x*(1+2/v),r.max.y*(1+2/v),r.min.y*(1+2/v),.1,1e3);t.position.set(0,0,1),t.lookAt(0,0,0),b.setRenderTarget(T),b.render(e,t);const n=F(v,v,b)(T.texture),a=new Float32Array(v*v);b.readRenderTargetPixels(n,0,0,v,v,a);let i=1/0;for(let e=0;e<a.length;e++)a[e]<i&&(i=a[e]);i=-i,h.current.size=i,h.current.sdf=n.texture,b.setRenderTarget(null)}}),[v,t]),f.useImperativeHandle(p,(()=>h.current));const P=f.useCallback(((e,r,t)=>{var n;if(!j.current)return!1;if(r.pointer.set(e.offsetX/r.size.width*2-1,-e.offsetY/r.size.height*2+1),r.raycaster.setFromCamera(r.pointer,r.camera),0===(null==(n=h.current)?void 0:n.blend)){const[e]=r.raycaster.intersectObject(j.current);if(!e)return r.raycaster.camera=void 0,!1}}),[]);return f.createElement("portalMaterialImpl",d.default({ref:h,blur:t,blend:0,resolution:[w.width*M.dpr,w.height*M.dpr],attach:"material"},c),f.createElement(l.RenderTexture,{attach:"map",frames:_?1/0:0,eventPriority:o,renderPriority:u,compute:P},e,f.createElement(x,{events:r,rootScene:y,priority:R,material:h,worldUnits:s})))}));function x({events:e,rootScene:r,material:t,priority:a,worldUnits:l}){const o=n.useThree((e=>e.scene)),v=n.useThree((e=>e.setEvents)),c=i.useFBO(),d=i.useFBO();f.useLayoutEffect((()=>{o.matrixAutoUpdate=!1}),[]),f.useEffect((()=>{void 0!==e&&v({enabled:e})}),[e]);const[g,p]=f.useMemo((()=>{const e={value:0};return[new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{a:{value:c.texture},b:{value:d.texture},blend:e},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`})),e]}),[]);return n.useFrame((e=>{var n;let i=null==t||null==(n=t.current)?void 0:n.__r3f.parent;if(i){var u,s,v,m;if(l)o.matrixWorld.identity();else a&&1===(null==(u=t.current)?void 0:u.blend)&&i.updateWorldMatrix(!0,!1),o.matrixWorld.copy(i.matrixWorld);if(a)(null==(s=t.current)?void 0:s.blend)>0&&(null==(v=t.current)?void 0:v.blend)<1?(p.value=t.current.blend,e.gl.setRenderTarget(c),e.gl.render(o,e.camera),e.gl.setRenderTarget(d),e.gl.render(r,e.camera),e.gl.setRenderTarget(null),g.render(e.gl)):1===(null==(m=t.current)?void 0:m.blend)&&e.gl.render(o,e.camera)}}),a),f.createElement(f.Fragment,null)}const F=(e,r,t)=>{let n=new m.WebGLRenderTarget(e,r,{minFilter:m.LinearMipmapLinearFilter,magFilter:m.LinearFilter,type:m.FloatType,format:m.RedFormat,generateMipmaps:!0}),a=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),i=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),l=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),o=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),s=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat}),v=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat});const c=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }"})),d=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }"})),f=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},offset:{value:0},level:{value:0},maxSteps:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1/e}, ${1/r}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`})),g=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},size:{value:new m.Vector2(e,r)}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }"})),p=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{inside:{value:v.texture},outside:{value:s.texture},tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }"}));return u=>{let x=n;u.minFilter=m.NearestFilter,u.magFilter=m.NearestFilter,c.material.uniforms.tex.value=u,t.setRenderTarget(a),c.render(t);const F=Math.ceil(Math.log(Math.max(e,r))/Math.log(2));let h=a,y=null;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);y=h===a?l:a,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(y),f.render(t),h=y}t.setRenderTarget(s),g.material.uniforms.tex.value=y.texture,g.render(t),d.material.uniforms.tex.value=u,t.setRenderTarget(i),d.render(t),h=i;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);y=h===i?o:i,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(y),f.render(t),h=y}return t.setRenderTarget(v),g.material.uniforms.tex.value=y.texture,g.render(t),t.setRenderTarget(x),p.material.uniforms.tex.value=u,p.render(t),t.setRenderTarget(null),x}};exports.MeshPortalMaterial=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useIntersect.cjs.js"),i=require("./Fbo.cjs.js"),l=require("./RenderTexture.cjs.js"),o=require("./shaderMaterial.cjs.js"),u=require("three-stdlib"),s=require("../helpers/constants.cjs.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var d=v(e),m=c(r),f=c(t);const g=o.shaderMaterial({blur:0,map:null,sdf:null,blend:0,size:0,resolution:new m.Vector2},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }",`uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`),p=f.forwardRef((({children:e,events:r,blur:t=0,eventPriority:o=0,renderPriority:u=0,worldUnits:s=!1,resolution:v=512,...c},p)=>{n.extend({PortalMaterialImpl:g});const h=f.useRef(null),{scene:b,gl:y,size:w,viewport:M,setEvents:U}=n.useThree(),T=i.useFBO(v,v),[R,S]=f.useState(0);n.useFrame((()=>{const e=h.current.blend>0?Math.max(1,u):0;R!==e&&S(e)})),f.useEffect((()=>{void 0!==r&&U({enabled:!r})}),[r]);const[_,j]=f.useState(!0),D=a.useIntersect(j);f.useLayoutEffect((()=>{var e;D.current=null==(e=h.current)||null==(e=e.__r3f.parent)?void 0:e.object}),[]),f.useLayoutEffect((()=>{if(D.current&&t&&null===h.current.sdf){const e=new m.Mesh(D.current.geometry,new m.MeshBasicMaterial),r=(new m.Box3).setFromBufferAttribute(e.geometry.attributes.position),t=new m.OrthographicCamera(r.min.x*(1+2/v),r.max.x*(1+2/v),r.max.y*(1+2/v),r.min.y*(1+2/v),.1,1e3);t.position.set(0,0,1),t.lookAt(0,0,0),y.setRenderTarget(T),y.render(e,t);const n=F(v,v,y)(T.texture),a=new Float32Array(v*v);y.readRenderTargetPixels(n,0,0,v,v,a);let i=1/0;for(let e=0;e<a.length;e++)a[e]<i&&(i=a[e]);i=-i,h.current.size=i,h.current.sdf=n.texture,y.setRenderTarget(null)}}),[v,t]),f.useImperativeHandle(p,(()=>h.current));const P=f.useCallback(((e,r,t)=>{var n;if(!D.current)return!1;if(r.pointer.set(e.offsetX/r.size.width*2-1,-e.offsetY/r.size.height*2+1),r.raycaster.setFromCamera(r.pointer,r.camera),0===(null==(n=h.current)?void 0:n.blend)){const[e]=r.raycaster.intersectObject(D.current);if(!e)return r.raycaster.camera=void 0,!1}}),[]);return f.createElement("portalMaterialImpl",d.default({ref:h,blur:t,blend:0,resolution:[w.width*M.dpr,w.height*M.dpr],attach:"material"},c),f.createElement(l.RenderTexture,{attach:"map",frames:_?1/0:0,eventPriority:o,renderPriority:u,compute:P},e,f.createElement(x,{events:r,rootScene:b,priority:R,material:h,worldUnits:s})))}));function x({events:e,rootScene:r,material:t,priority:a,worldUnits:l}){const o=n.useThree((e=>e.scene)),v=n.useThree((e=>e.setEvents)),c=i.useFBO(),d=i.useFBO();f.useLayoutEffect((()=>{o.matrixAutoUpdate=!1}),[]),f.useEffect((()=>{void 0!==e&&v({enabled:e})}),[e]);const[g,p]=f.useMemo((()=>{const e={value:0};return[new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{a:{value:c.texture},b:{value:d.texture},blend:e},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`})),e]}),[]);return n.useFrame((e=>{var n;let i=null==t||null==(n=t.current)||null==(n=n.__r3f.parent)?void 0:n.object;if(i){var u,s,v,m;if(l)o.matrixWorld.identity();else a&&1===(null==(u=t.current)?void 0:u.blend)&&i.updateWorldMatrix(!0,!1),o.matrixWorld.copy(i.matrixWorld);if(a)(null==(s=t.current)?void 0:s.blend)>0&&(null==(v=t.current)?void 0:v.blend)<1?(p.value=t.current.blend,e.gl.setRenderTarget(c),e.gl.render(o,e.camera),e.gl.setRenderTarget(d),e.gl.render(r,e.camera),e.gl.setRenderTarget(null),g.render(e.gl)):1===(null==(m=t.current)?void 0:m.blend)&&e.gl.render(o,e.camera)}}),a),f.createElement(f.Fragment,null)}const F=(e,r,t)=>{let n=new m.WebGLRenderTarget(e,r,{minFilter:m.LinearMipmapLinearFilter,magFilter:m.LinearFilter,type:m.FloatType,format:m.RedFormat,generateMipmaps:!0}),a=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),i=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),l=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),o=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),s=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat}),v=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat});const c=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }"})),d=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }"})),f=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},offset:{value:0},level:{value:0},maxSteps:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1/e}, ${1/r}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`})),g=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},size:{value:new m.Vector2(e,r)}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }"})),p=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{inside:{value:v.texture},outside:{value:s.texture},tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }"}));return u=>{let x=n;u.minFilter=m.NearestFilter,u.magFilter=m.NearestFilter,c.material.uniforms.tex.value=u,t.setRenderTarget(a),c.render(t);const F=Math.ceil(Math.log(Math.max(e,r))/Math.log(2));let h=a,b=null;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);b=h===a?l:a,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(b),f.render(t),h=b}t.setRenderTarget(s),g.material.uniforms.tex.value=b.texture,g.render(t),d.material.uniforms.tex.value=u,t.setRenderTarget(i),d.render(t),h=i;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);b=h===i?o:i,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(b),f.render(t),h=b}return t.setRenderTarget(v),g.material.uniforms.tex.value=b.texture,g.render(t),t.setRenderTarget(x),p.material.uniforms.tex.value=u,p.render(t),t.setRenderTarget(null),x}};exports.MeshPortalMaterial=p;
@@ -1,22 +1,19 @@
1
1
  import * as THREE from 'three';
2
- import * as React from 'react';
3
- import { ReactThreeFiber } from '@react-three/fiber';
4
- export type PortalMaterialType = {
5
- resolution: ReactThreeFiber.Vector2;
6
- blur: number;
7
- blend: number;
8
- size?: number;
9
- sdf?: THREE.Texture;
10
- map?: THREE.Texture;
11
- } & JSX.IntrinsicElements['shaderMaterial'];
12
- declare global {
13
- namespace JSX {
14
- interface IntrinsicElements {
15
- portalMaterialImpl: PortalMaterialType;
16
- }
2
+ import { ReactThreeFiber, ThreeElements } from '@react-three/fiber';
3
+ import { ForwardRefComponent } from '../helpers/ts-utils';
4
+ declare module '@react-three/fiber' {
5
+ interface ThreeElements {
6
+ portalMaterialImpl: ThreeElements['shaderMaterial'] & {
7
+ resolution: ReactThreeFiber.Vector2;
8
+ blur: number;
9
+ blend: number;
10
+ size?: number;
11
+ sdf?: THREE.Texture;
12
+ map?: THREE.Texture;
13
+ };
17
14
  }
18
15
  }
19
- export type PortalProps = JSX.IntrinsicElements['shaderMaterial'] & {
16
+ export type PortalProps = Omit<ThreeElements['portalMaterialImpl'], 'ref' | 'blend'> & {
20
17
  blend?: number;
21
18
  blur?: number;
22
19
  resolution?: number;
@@ -25,4 +22,4 @@ export type PortalProps = JSX.IntrinsicElements['shaderMaterial'] & {
25
22
  renderPriority?: number;
26
23
  events?: boolean;
27
24
  };
28
- export declare const MeshPortalMaterial: React.ForwardRefExoticComponent<Omit<PortalProps, "ref"> & React.RefAttributes<PortalMaterialType>>;
25
+ export declare const MeshPortalMaterial: ForwardRefComponent<PortalProps, ThreeElements['portalMaterialImpl']>;
@@ -78,7 +78,7 @@ const MeshPortalMaterial = /* @__PURE__ */React.forwardRef(({
78
78
  var _ref$current;
79
79
  // Since the ref above is not tied to a mesh directly (we're inside a material),
80
80
  // it has to be tied to the parent mesh here
81
- parent.current = (_ref$current = ref.current) == null ? void 0 : _ref$current.__r3f.parent;
81
+ parent.current = (_ref$current = ref.current) == null || (_ref$current = _ref$current.__r3f.parent) == null ? void 0 : _ref$current.object;
82
82
  }, []);
83
83
  React.useLayoutEffect(() => {
84
84
  if (!parent.current) return;
@@ -201,7 +201,7 @@ function ManagePortalScene({
201
201
  }, []);
202
202
  useFrame(state => {
203
203
  var _material$current;
204
- let parent = material == null || (_material$current = material.current) == null ? void 0 : _material$current.__r3f.parent;
204
+ let parent = material == null || (_material$current = material.current) == null || (_material$current = _material$current.__r3f.parent) == null ? void 0 : _material$current.object;
205
205
  if (parent) {
206
206
  // Move portal contents along with the parent if worldUnits is true
207
207
  if (!worldUnits) {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/BlurPass.cjs.js"),s=require("../materials/MeshReflectorMaterial.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js"),require("../helpers/constants.cjs.js");var l=o(e),u=i(t);const d=u.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:o=256,blur:i=[0,0],minDepthThreshold:d=.9,maxDepthThreshold:c=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{a.extend({MeshReflectorMaterialImpl:s.MeshReflectorMaterial});const w=a.useThree((({gl:e})=>e)),b=a.useThree((({camera:e})=>e)),R=a.useThree((({scene:e})=>e)),j=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=u.useRef(null);u.useImperativeHandle(y,(()=>v.current),[]);const[g]=u.useState((()=>new r.Plane)),[D]=u.useState((()=>new r.Vector3)),[B]=u.useState((()=>new r.Vector3)),[_]=u.useState((()=>new r.Vector3)),[O]=u.useState((()=>new r.Matrix4)),[P]=u.useState((()=>new r.Vector3(0,0,-1))),[U]=u.useState((()=>new r.Vector4)),[V]=u.useState((()=>new r.Vector3)),[E]=u.useState((()=>new r.Vector3)),[F]=u.useState((()=>new r.Vector4)),[W]=u.useState((()=>new r.Matrix4)),[I]=u.useState((()=>new r.PerspectiveCamera)),q=u.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(b.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),V.subVectors(B,_),V.dot(D)>0)return;V.reflect(D).negate(),V.add(B),O.extractRotation(b.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),E.subVectors(B,P),E.reflect(D).negate(),E.add(B),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(O),I.up.reflect(D),I.lookAt(E),I.far=b.far,I.updateMatrixWorld(),I.projectionMatrix.copy(b.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(I.projectionMatrix),W.multiply(I.matrixWorldInverse),W.multiply(t.matrixWorld),g.setFromNormalAndCoplanarPoint(D,B),g.applyMatrix4(I.matrixWorldInverse),U.set(g.normal.x,g.normal.y,g.normal.z,g.constant);const r=I.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[b,T]),[C,k,L,z]=u.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,type:r.HalfFloatType},s=new r.WebGLRenderTarget(o,o,a);s.depthBuffer=!0,s.depthTexture=new r.DepthTexture(o,o),s.depthTexture.format=r.DepthFormat,s.depthTexture.type=r.UnsignedShortType;const l=new r.WebGLRenderTarget(o,o,a);return[s,l,new n.BlurPass({gl:w,resolution:o,width:i[0],height:i[1],minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:s.texture,tDepth:s.depthTexture,tDiffuseBlur:l.texture,hasBlur:j,mixStrength:t,minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":j?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[w,i,W,o,h,j,e,t,d,c,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;q(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(C),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(R,I),j&&L.render(w,C,k),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),u.createElement("meshReflectorMaterialImpl",l.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:v},z,S))}));exports.MeshReflectorMaterial=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/BlurPass.cjs.js"),o=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js"),require("../helpers/constants.cjs.js");var l=s(e),u=i(t);const d=u.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:s=256,blur:i=[0,0],minDepthThreshold:d=.9,maxDepthThreshold:c=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{a.extend({MeshReflectorMaterialImpl:o.MeshReflectorMaterial});const b=a.useThree((({gl:e})=>e)),w=a.useThree((({camera:e})=>e)),j=a.useThree((({scene:e})=>e)),R=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=u.useRef(null);u.useImperativeHandle(y,(()=>v.current),[]);const[g]=u.useState((()=>new r.Plane)),[D]=u.useState((()=>new r.Vector3)),[B]=u.useState((()=>new r.Vector3)),[_]=u.useState((()=>new r.Vector3)),[O]=u.useState((()=>new r.Matrix4)),[P]=u.useState((()=>new r.Vector3(0,0,-1))),[U]=u.useState((()=>new r.Vector4)),[V]=u.useState((()=>new r.Vector3)),[E]=u.useState((()=>new r.Vector3)),[F]=u.useState((()=>new r.Vector4)),[W]=u.useState((()=>new r.Matrix4)),[I]=u.useState((()=>new r.PerspectiveCamera)),q=u.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)||null==(e=e.__r3f.parent)?void 0:e.object);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(w.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),V.subVectors(B,_),V.dot(D)>0)return;V.reflect(D).negate(),V.add(B),O.extractRotation(w.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),E.subVectors(B,P),E.reflect(D).negate(),E.add(B),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(O),I.up.reflect(D),I.lookAt(E),I.far=w.far,I.updateMatrixWorld(),I.projectionMatrix.copy(w.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(I.projectionMatrix),W.multiply(I.matrixWorldInverse),W.multiply(t.matrixWorld),g.setFromNormalAndCoplanarPoint(D,B),g.applyMatrix4(I.matrixWorldInverse),U.set(g.normal.x,g.normal.y,g.normal.z,g.constant);const r=I.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[w,T]),[C,k,L,z]=u.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,type:r.HalfFloatType},o=new r.WebGLRenderTarget(s,s,a);o.depthBuffer=!0,o.depthTexture=new r.DepthTexture(s,s),o.depthTexture.format=r.DepthFormat,o.depthTexture.type=r.UnsignedShortType;const l=new r.WebGLRenderTarget(s,s,a);return[o,l,new n.BlurPass({gl:b,resolution:s,width:i[0],height:i[1],minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:o.texture,tDepth:o.depthTexture,tDiffuseBlur:l.texture,hasBlur:R,mixStrength:t,minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":R?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[b,i,W,s,h,R,e,t,d,c,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)||null==(e=e.__r3f.parent)?void 0:e.object);if(!t)return;t.visible=!1;const r=b.xr.enabled,a=b.shadowMap.autoUpdate;q(),b.xr.enabled=!1,b.shadowMap.autoUpdate=!1,b.setRenderTarget(C),b.state.buffers.depth.setMask(!0),b.autoClear||b.clear(),b.render(j,I),R&&L.render(b,C,k),b.xr.enabled=r,b.shadowMap.autoUpdate=a,t.visible=!0,b.setRenderTarget(null)})),u.createElement("meshReflectorMaterialImpl",l.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:v},z,S))}));exports.MeshReflectorMaterial=d;
@@ -1,27 +1,14 @@
1
- import { Texture } from 'three';
2
- import { MeshReflectorMaterialProps, MeshReflectorMaterial as MeshReflectorMaterialImpl } from '../materials/MeshReflectorMaterial';
1
+ import { ThreeElements, ThreeElement } from '@react-three/fiber';
2
+ import { MeshReflectorMaterial as MeshReflectorMaterialImpl } from '../materials/MeshReflectorMaterial';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- type Props = JSX.IntrinsicElements['meshStandardMaterial'] & {
4
+ declare module '@react-three/fiber' {
5
+ interface ThreeElements {
6
+ meshReflectorMaterialImpl: ThreeElement<typeof MeshReflectorMaterialImpl>;
7
+ }
8
+ }
9
+ export type MeshReflectorMaterialProps = ThreeElements['meshReflectorMaterialImpl'] & {
5
10
  resolution?: number;
6
- mixBlur?: number;
7
- mixStrength?: number;
8
11
  blur?: [number, number] | number;
9
- mirror: number;
10
- minDepthThreshold?: number;
11
- maxDepthThreshold?: number;
12
- depthScale?: number;
13
- depthToBlurRatioBias?: number;
14
- distortionMap?: Texture;
15
- distortion?: number;
16
- mixContrast?: number;
17
12
  reflectorOffset?: number;
18
13
  };
19
- declare global {
20
- namespace JSX {
21
- interface IntrinsicElements {
22
- meshReflectorMaterialImpl: MeshReflectorMaterialProps;
23
- }
24
- }
25
- }
26
- export declare const MeshReflectorMaterial: ForwardRefComponent<Props, MeshReflectorMaterialImpl>;
27
- export {};
14
+ export declare const MeshReflectorMaterial: ForwardRefComponent<MeshReflectorMaterialProps, MeshReflectorMaterialImpl>;
@@ -51,8 +51,7 @@ const MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({
51
51
  const [virtualCamera] = React.useState(() => new PerspectiveCamera());
52
52
  const beforeRender = React.useCallback(() => {
53
53
  var _materialRef$current;
54
- // TODO: As of R3f 7-8 this should be __r3f.parent
55
- const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null ? void 0 : _materialRef$current.__r3f.parent);
54
+ const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null || (_materialRef$current = _materialRef$current.__r3f.parent) == null ? void 0 : _materialRef$current.object);
56
55
  if (!parent) return;
57
56
  reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
58
57
  cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
@@ -149,8 +148,7 @@ const MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({
149
148
  }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
150
149
  useFrame(() => {
151
150
  var _materialRef$current2;
152
- // TODO: As of R3f 7-8 this should be __r3f.parent
153
- const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null ? void 0 : _materialRef$current2.__r3f.parent);
151
+ const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null || (_materialRef$current2 = _materialRef$current2.__r3f.parent) == null ? void 0 : _materialRef$current2.object);
154
152
  if (!parent) return;
155
153
  parent.visible = false;
156
154
  const currentXrEnabled = gl.xr.enabled;