@react-three/drei 7.8.5 → 7.10.1

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.
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber");function r(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)}var a=r(e);exports.BakeShadows=function(){var e=t.useThree((function(e){return e.gl}));return a.useEffect((function(){return e.shadowMap.autoUpdate=!1,e.shadowMap.needsUpdate=!0,function(){e.shadowMap.autoUpdate=e.shadowMap.needsUpdate=!0}}),[]),null};
@@ -0,0 +1 @@
1
+ export declare function BakeShadows(): null;
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import { useThree } from '@react-three/fiber';
3
+
4
+ function BakeShadows() {
5
+ const gl = useThree(state => state.gl);
6
+ React.useEffect(() => {
7
+ gl.shadowMap.autoUpdate = false;
8
+ gl.shadowMap.needsUpdate = true;
9
+ return () => {
10
+ gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;
11
+ };
12
+ }, []);
13
+ return null;
14
+ }
15
+
16
+ export { BakeShadows };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),t=require("react"),a=require("three"),n=require("@react-three/fiber"),u=require("three-stdlib");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var l=i(e),d=i(r),f=o(t),c=o(a),s=f.forwardRef((function(e,r){var t=e.opacity,a=void 0===t?1:t,i=e.width,o=void 0===i?1:i,s=e.height,h=void 0===s?1:s,p=e.blur,m=void 0===p?1:p,g=e.far,v=void 0===g?10:g,b=e.resolution,M=void 0===b?256:b,w=d.default(e,["opacity","width","height","blur","far","resolution"]),y=n.useThree((function(e){return e.scene})),T=n.useThree((function(e){return e.gl})),j=f.useRef(),x=f.useMemo((function(){var e=new c.WebGLRenderTarget(M,M),r=new c.WebGLRenderTarget(M,M);r.texture.generateMipmaps=e.texture.generateMipmaps=!1;var t=new c.PlaneBufferGeometry(o,h).rotateX(Math.PI/2),a=new c.Mesh(t),n=new c.MeshDepthMaterial;n.depthTest=n.depthWrite=!1,n.onBeforeCompile=function(e){return e.fragmentShader=e.fragmentShader.replace("1.0 - fragCoordZ ), opacity );","0.0 ), ( 1.0 - fragCoordZ ) * 1.0 );")};var i=new c.ShaderMaterial(u.HorizontalBlurShader),l=new c.ShaderMaterial(u.VerticalBlurShader);return l.depthTest=i.depthTest=!1,[e,t,n,a,i,l,r]}),[M,o,h]),R=x[0],O=x[1],P=x[2],S=x[3],q=x[4],B=x[5],C=x[6];return n.useFrame((function(){if(j.current){var e=y.background;y.background=null,y.overrideMaterial=P,T.setRenderTarget(R),T.render(y,j.current),y.overrideMaterial=null,S.material=q,S.material.uniforms.tDiffuse.value=R.texture,q.uniforms.h.value=m/256,T.setRenderTarget(C),T.render(S,j.current),S.material=B,S.material.uniforms.tDiffuse.value=C.texture,B.uniforms.v.value=m/256,T.setRenderTarget(R),T.render(S,j.current),T.setRenderTarget(null),y.background=e}})),f.createElement("group",l.default({},w,{ref:r}),f.createElement("mesh",{geometry:O,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},f.createElement("meshBasicMaterial",{map:R.texture,transparent:!0,opacity:a})),f.createElement("orthographicCamera",{ref:j,args:[-o/2,o/2,h/2,-h/2,0,v]}))}));exports.ContactShadows=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),t=require("react"),a=require("three"),n=require("@react-three/fiber"),u=require("three-stdlib");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var l=i(e),d=i(r),f=o(t),s=o(a),c=f.forwardRef((function(e,r){var t=e.frames,a=void 0===t?1/0:t,i=e.opacity,o=void 0===i?1:i,c=e.width,h=void 0===c?1:c,m=e.height,p=void 0===m?1:m,g=e.blur,v=void 0===g?1:g,b=e.far,M=void 0===b?10:b,w=e.resolution,y=void 0===w?256:w,T=d.default(e,["frames","opacity","width","height","blur","far","resolution"]),j=n.useThree((function(e){return e.scene})),x=n.useThree((function(e){return e.gl})),R=f.useRef(),O=f.useMemo((function(){var e=new s.WebGLRenderTarget(y,y),r=new s.WebGLRenderTarget(y,y);r.texture.generateMipmaps=e.texture.generateMipmaps=!1;var t=new s.PlaneBufferGeometry(h,p).rotateX(Math.PI/2),a=new s.Mesh(t),n=new s.MeshDepthMaterial;n.depthTest=n.depthWrite=!1,n.onBeforeCompile=function(e){return e.fragmentShader=e.fragmentShader.replace("1.0 - fragCoordZ ), opacity );","0.0 ), ( 1.0 - fragCoordZ ) * 1.0 );")};var i=new s.ShaderMaterial(u.HorizontalBlurShader),o=new s.ShaderMaterial(u.VerticalBlurShader);return o.depthTest=i.depthTest=!1,[e,t,n,a,i,o,r]}),[y,h,p]),P=O[0],S=O[1],q=O[2],B=O[3],C=O[4],E=O[5],k=O[6],D=0;return n.useFrame((function(){if(R.current&&(a===1/0||D<a)){var e=j.background;j.background=null,j.overrideMaterial=q,x.setRenderTarget(P),x.render(j,R.current),j.overrideMaterial=null,B.material=C,B.material.uniforms.tDiffuse.value=P.texture,C.uniforms.h.value=v/256,x.setRenderTarget(k),x.render(B,R.current),B.material=E,B.material.uniforms.tDiffuse.value=k.texture,E.uniforms.v.value=v/256,x.setRenderTarget(P),x.render(B,R.current),x.setRenderTarget(null),j.background=e,D++}})),f.createElement("group",l.default({},T,{ref:r}),f.createElement("mesh",{geometry:S,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},f.createElement("meshBasicMaterial",{map:P.texture,transparent:!0,opacity:o})),f.createElement("orthographicCamera",{ref:R,args:[-h/2,h/2,p/2,-p/2,0,M]}))}));exports.ContactShadows=c;
@@ -25,4 +25,5 @@ export declare const ContactShadows: React.ForwardRefExoticComponent<Pick<Omit<i
25
25
  blur?: number | undefined;
26
26
  far?: number | undefined;
27
27
  resolution?: number | undefined;
28
- }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "opacity" | "width" | "resolution" | "far" | "height" | "blur"> & React.RefAttributes<unknown>>;
28
+ frames?: number | undefined;
29
+ }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "opacity" | "width" | "resolution" | "far" | "frames" | "height" | "blur"> & React.RefAttributes<unknown>>;
@@ -5,6 +5,7 @@ import { useThree, useFrame } from '@react-three/fiber';
5
5
  import { HorizontalBlurShader, VerticalBlurShader } from 'three-stdlib';
6
6
 
7
7
  const ContactShadows = /*#__PURE__*/React.forwardRef(({
8
+ frames = Infinity,
8
9
  opacity = 1,
9
10
  width = 1,
10
11
  height = 1,
@@ -36,8 +37,9 @@ const ContactShadows = /*#__PURE__*/React.forwardRef(({
36
37
  verticalBlurMaterial.depthTest = horizontalBlurMaterial.depthTest = false;
37
38
  return [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur];
38
39
  }, [resolution, width, height]);
40
+ let count = 0;
39
41
  useFrame(() => {
40
- if (shadowCamera.current) {
42
+ if (shadowCamera.current && (frames === Infinity || count < frames)) {
41
43
  const initialBackground = scene.background;
42
44
  scene.background = null;
43
45
  scene.overrideMaterial = depthMaterial;
@@ -56,6 +58,7 @@ const ContactShadows = /*#__PURE__*/React.forwardRef(({
56
58
  gl.render(blurPlane, shadowCamera.current);
57
59
  gl.setRenderTarget(null);
58
60
  scene.background = initialBackground;
61
+ count++;
59
62
  }
60
63
  });
61
64
  return /*#__PURE__*/React.createElement("group", _extends({}, props, {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function o(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)}require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),require("react-merge-refs");var a=o(e),i=a.createContext({}),c=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,f=new t.Quaternion,p=new t.Quaternion,d=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=function(e){var o=e.alignment,m=void 0===o?"bottom-right":o,g=e.margin,b=void 0===g?[80,80]:g,v=e.onUpdate,y=e.onTarget,w=e.children,j=r.useThree((function(e){return e.size})),q=r.useThree((function(e){return e.camera})),x=r.useThree((function(e){return e.controls})),O=r.useThree((function(e){return e.gl})),T=r.useThree((function(e){return e.scene})),C=r.useThree((function(e){return e.invalidate})),k=a.useRef(),P=a.useRef(),R=a.useRef(null),z=a.useState((function(){return new t.Scene}))[0],E=a.useRef(!1),M=a.useRef(0),D=a.useRef(new t.Vector3(0,0,0));a.useEffect((function(){return T.background&&(k.current=T.background,T.background=null,z.background=k.current),function(){k.current&&(T.background=k.current)}}),[]);r.useFrame((function(e,r){var t;R.current&&P.current&&(!function(e){if(E.current)if(f.angleTo(p)<.01)E.current=!1;else{var r=e*c;f.rotateTowards(p,r),q.position.set(0,0,1).applyQuaternion(f).multiplyScalar(M.current).add(D.current),q.up.set(0,1,0).applyQuaternion(f).normalize(),q.quaternion.copy(f),v?v():x&&x.update(),C()}}(r),l.copy(q.matrix).invert(),null==(t=P.current)||t.quaternion.setFromRotationMatrix(l),O.autoClear=!1,O.clearDepth(),O.render(z,R.current))}));var Q={tweenCamera:function(e){E.current=!0,(x||y)&&(D.current=(null==x?void 0:x.target)||(null==y?void 0:y())),M.current=q.position.distanceTo(d),f.copy(q.quaternion),h.copy(e).multiplyScalar(M.current).add(d),s.lookAt(h),p.copy(s.quaternion),C()},raycast:u.useCamera(R)},S=b[0],_=b[1],V=m.endsWith("-left")?-j.width/2+S:j.width/2-S,W=m.startsWith("top-")?j.height/2-_:-j.height/2+_;return r.createPortal(a.createElement(i.Provider,{value:Q},a.createElement(n.OrthographicCamera,{ref:R,makeDefault:!1,position:[0,0,200]}),a.createElement("group",{ref:P,position:[V,W,0]},w)),z)},exports.useGizmoContext=function(){return a.useContext(i)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function o(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)}require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),require("react-merge-refs");var a=o(e),i=a.createContext({}),c=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,f=new t.Quaternion,p=new t.Quaternion,d=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=function(e){var o=e.alignment,m=void 0===o?"bottom-right":o,g=e.margin,b=void 0===g?[80,80]:g,v=e.renderPriority,y=void 0===v?1:v,w=e.onUpdate,j=e.onTarget,q=e.children,x=r.useThree((function(e){return e.size})),O=r.useThree((function(e){return e.camera})),T=r.useThree((function(e){return e.controls})),C=r.useThree((function(e){return e.gl})),k=r.useThree((function(e){return e.scene})),P=r.useThree((function(e){return e.invalidate})),R=a.useRef(),z=a.useRef(),E=a.useRef(null),M=a.useState((function(){return new t.Scene}))[0],D=a.useRef(!1),Q=a.useRef(0),S=a.useRef(new t.Vector3(0,0,0));a.useEffect((function(){return k.background&&(R.current=k.background,k.background=null,M.background=R.current),function(){R.current&&(k.background=R.current)}}),[]);r.useFrame((function(e,r){var t;E.current&&z.current&&(!function(e){if(D.current)if(f.angleTo(p)<.01)D.current=!1;else{var r=e*c;f.rotateTowards(p,r),O.position.set(0,0,1).applyQuaternion(f).multiplyScalar(Q.current).add(S.current),O.up.set(0,1,0).applyQuaternion(f).normalize(),O.quaternion.copy(f),w?w():T&&T.update(),P()}}(r),l.copy(O.matrix).invert(),null==(t=z.current)||t.quaternion.setFromRotationMatrix(l),C.autoClear=!1,C.clearDepth(),C.render(M,E.current))}),y);var _={tweenCamera:function(e){D.current=!0,(T||j)&&(S.current=(null==T?void 0:T.target)||(null==j?void 0:j())),Q.current=O.position.distanceTo(d),f.copy(O.quaternion),h.copy(e).multiplyScalar(Q.current).add(d),s.lookAt(h),p.copy(s.quaternion),P()},raycast:u.useCamera(E)},V=b[0],W=b[1],F=m.endsWith("-left")?-x.width/2+V:x.width/2-V,G=m.startsWith("top-")?x.height/2-W:-x.height/2+W;return r.createPortal(a.createElement(i.Provider,{value:_},a.createElement(n.OrthographicCamera,{ref:E,makeDefault:!1,position:[0,0,200]}),a.createElement("group",{ref:z,position:[F,G,0]},q)),M)},exports.useGizmoContext=function(){return a.useContext(i)};
@@ -7,8 +7,9 @@ export declare const useGizmoContext: () => GizmoHelperContext;
7
7
  export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
8
8
  alignment?: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
9
9
  margin?: [number, number];
10
+ renderPriority?: number;
10
11
  onUpdate?: () => void;
11
12
  onTarget?: () => Vector3;
12
13
  };
13
- export declare const GizmoHelper: ({ alignment, margin, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
14
+ export declare const GizmoHelper: ({ alignment, margin, renderPriority, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
14
15
  export {};
@@ -18,6 +18,7 @@ const targetPosition = new Vector3();
18
18
  const GizmoHelper = ({
19
19
  alignment = 'bottom-right',
20
20
  margin = [80, 80],
21
+ renderPriority = 1,
21
22
  onUpdate,
22
23
  onTarget,
23
24
  children: GizmoHelperComponent
@@ -113,7 +114,7 @@ const GizmoHelper = ({
113
114
  gl.clearDepth();
114
115
  gl.render(virtualScene, virtualCam.current);
115
116
  }
116
- });
117
+ }, renderPriority);
117
118
  const gizmoHelperContext = {
118
119
  tweenCamera,
119
120
  raycast: useCamera(virtualCam)
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),t=require("three"),n=require("react"),u=require("@react-three/fiber"),a=require("react-merge-refs"),i=require("../helpers/Position.cjs.js");function o(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)}require("@babel/runtime/helpers/inheritsLoose");var l,s,f=o(e),d=o(r),m=c(t),p=c(n),b=o(a),h=p.createContext(null),v=new m.Matrix4,y=new m.Matrix4,x=new m.Matrix4,M=new m.Color,g=new m.Vector3,w=new m.Quaternion,j=new m.Vector3,A=p.forwardRef((function(e,r){var t=e.children,n=e.range,a=e.limit,i=void 0===a?1e3:a,o=d.default(e,["children","range","limit"]),c=p.useRef(null),m=p.useState([]),A=m[0],q=m[1],E=p.useState((function(){var e=new Float32Array(16*i);for(l=0;l<i;l++)x.identity().toArray(e,16*l);return[e,new Float32Array([].concat(new Array(3*i)).map((function(){return 1})))]}))[0],O=E[0],P=E[1];p.useLayoutEffect((function(){c.current.count=c.current.instanceMatrix.updateRange.count=c.current.instanceColor.updateRange.count=Math.min(i,void 0!==n?n:i,A.length)}),[A,n]),p.useEffect((function(){c.current.instanceMatrix.needsUpdate=!0})),u.useFrame((function(e){for(c.current.updateMatrix(),c.current.updateMatrixWorld(),v.copy(c.current.matrixWorld).invert(),l=0;l<A.length;l++)(s=A[l].current).matrixWorld.decompose(g,w,j),y.compose(g,w,j).premultiply(v),y.equals(x.fromArray(O,16*l))||(y.toArray(O,16*l),c.current.instanceMatrix.needsUpdate=!0),s.color.equals(M.fromArray(P,3*l))||(s.color.toArray(P,3*l),c.current.instanceColor.needsUpdate=!0)}));var _=p.useMemo((function(){var e={};for(l=0;l<A.length;l++){var r;Object.assign(e,null==(r=A[l].current)?void 0:r.__r3f.handlers)}return Object.keys(e).reduce((function(e,r){var t;return f.default({},e,((t={})[r]=function(e){var t,n,u;return null==(t=A[e.instanceId].current)||null==(n=t.__r3f)||null==(u=n.handlers)?void 0:u[r](e)},t))}),{})}),[A]),C=p.useMemo((function(){return{subscribe:function(e){return q((function(r){return[].concat(r,[e])})),function(){return q((function(r){return r.filter((function(r){return r.current!==e.current}))}))}}}}),[]);return p.createElement("instancedMesh",f.default({matrixAutoUpdate:!1,ref:b.default([r,c]),args:[null,null,0]},_,o),p.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:O.length/16,array:O,itemSize:16}),p.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3}),p.createElement(h.Provider,{value:C},t))})),q=p.forwardRef((function(e,r){var t=e.children,n=d.default(e,["children"]);p.useMemo((function(){return u.extend({Position:i.Position})}),[]);var a=p.useRef(),o=p.useContext(h).subscribe;return p.useLayoutEffect((function(){return o(a)}),[]),p.createElement("position",f.default({ref:b.default([r,a])},n),t)}));exports.Instance=q,exports.Instances=A;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),t=require("three"),n=require("react"),u=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),o=require("../helpers/Position.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(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)}require("@babel/runtime/helpers/inheritsLoose");var s,f,d=i(e),m=i(r),p=l(t),v=l(n),y=i(a),h=i(c),b=v.createContext(null),x=new p.Matrix4,g=new p.Matrix4,M=new p.Matrix4,w=new p.Color,j=new p.Vector3,A=new p.Quaternion,E=new p.Vector3,q=v.forwardRef((function(e,r){var t=e.context,n=e.children,a=m.default(e,["context","children"]);v.useMemo((function(){return u.extend({Position:o.Position})}),[]);var c=v.useRef(),i=v.useContext(t||b).subscribe;return v.useLayoutEffect((function(){return i(c)}),[]),v.createElement("position",d.default({ref:y.default([r,c])},a),n)})),O=v.forwardRef((function(e,r){var t=e.children,n=e.range,a=e.limit,c=void 0===a?1e3:a,o=e.frames,i=void 0===o?1/0:o,l=m.default(e,["children","range","limit","frames"]),h=v.useState((function(){var e=v.createContext(null);return[e,function(r){return v.createElement(q,d.default({context:e},r))}]}))[0],O=h[0],P=h[1],_=v.useRef(null),C=v.useState([]),R=C[0],U=C[1],D=v.useState((function(){var e=new Float32Array(16*c);for(s=0;s<c;s++)M.identity().toArray(e,16*s);return[e,new Float32Array([].concat(new Array(3*c)).map((function(){return 1})))]}))[0],S=D[0],L=D[1];v.useLayoutEffect((function(){_.current.count=_.current.instanceMatrix.updateRange.count=_.current.instanceColor.updateRange.count=Math.min(c,void 0!==n?n:c,R.length)}),[R,n]),v.useEffect((function(){_.current.instanceMatrix.needsUpdate=!0}));var W=0;u.useFrame((function(e){if(i===1/0||W<i){for(_.current.updateMatrix(),_.current.updateMatrixWorld(),x.copy(_.current.matrixWorld).invert(),s=0;s<R.length;s++)(f=R[s].current).matrixWorld.decompose(j,A,E),g.compose(j,A,E).premultiply(x),g.equals(M.fromArray(S,16*s))||(g.toArray(S,16*s),_.current.instanceMatrix.needsUpdate=!0),f.color.equals(w.fromArray(L,3*s))||(f.color.toArray(L,3*s),_.current.instanceColor.needsUpdate=!0);W++}}));var k=v.useMemo((function(){var e={};for(s=0;s<R.length;s++){var r;Object.assign(e,null==(r=R[s].current)?void 0:r.__r3f.handlers)}return Object.keys(e).reduce((function(e,r){var t;return d.default({},e,((t={})[r]=function(e){var t,n,u;return null==(t=R[e.instanceId].current)||null==(n=t.__r3f)||null==(u=n.handlers)?void 0:u[r](e)},t))}),{})}),[R]),z=v.useMemo((function(){return{subscribe:function(e){return U((function(r){return[].concat(r,[e])})),function(){return U((function(r){return r.filter((function(r){return r.current!==e.current}))}))}}}}),[]);return v.createElement("instancedMesh",d.default({matrixAutoUpdate:!1,ref:y.default([r,_]),args:[null,null,0]},k,l),v.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:S.length/16,array:S,itemSize:16,usage:p.DynamicDrawUsage}),v.createElement("instancedBufferAttribute",{attach:"instanceColor",count:L.length/3,array:L,itemSize:3,usage:p.DynamicDrawUsage}),"function"==typeof t?v.createElement(O.Provider,{value:z},t(P)):v.createElement(b.Provider,{value:z},t))}));exports.Instance=q,exports.Instances=O,exports.Merged=function(e){var r=e.meshes,t=e.children,n=m.default(e,["meshes","children"]),u=Array.isArray(r);return v.createElement(h.default,{components:(u?r:Object.values(r)).map((function(e){var r=e.geometry,t=e.material;return v.createElement(O,d.default({geometry:r,material:t},n))}))},(function(e){return u?t.apply(void 0,e):t(Object.keys(r).reduce((function(r,t,n){var u;return d.default({},r,((u={})[t]=e[n],u))}),{}))}))};
@@ -1,5 +1,30 @@
1
1
  import * as THREE from 'three';
2
2
  import * as React from 'react';
3
+ import { Position } from '../helpers/Position';
4
+ declare type Api = {
5
+ subscribe: (ref: any) => void;
6
+ };
7
+ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").Node<Position, typeof Position>, import("@react-three/fiber").NonFunctionKeys<{
8
+ position?: import("@react-three/fiber").Vector3 | undefined;
9
+ up?: import("@react-three/fiber").Vector3 | undefined;
10
+ scale?: import("@react-three/fiber").Vector3 | undefined;
11
+ rotation?: import("@react-three/fiber").Euler | undefined;
12
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
13
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
14
+ layers?: import("@react-three/fiber").Layers | undefined;
15
+ dispose?: (() => void) | null | undefined;
16
+ }>> & {
17
+ position?: import("@react-three/fiber").Vector3 | undefined;
18
+ up?: import("@react-three/fiber").Vector3 | undefined;
19
+ scale?: import("@react-three/fiber").Vector3 | undefined;
20
+ rotation?: import("@react-three/fiber").Euler | undefined;
21
+ matrix?: import("@react-three/fiber").Matrix4 | undefined;
22
+ quaternion?: import("@react-three/fiber").Quaternion | undefined;
23
+ layers?: import("@react-three/fiber").Layers | undefined;
24
+ dispose?: (() => void) | null | undefined;
25
+ } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
26
+ context?: React.Context<Api> | undefined;
27
+ }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "context"> & React.RefAttributes<unknown>>;
3
28
  declare const Instances: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").Node<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.InstancedMesh>, import("@react-three/fiber").NonFunctionKeys<{
4
29
  position?: import("@react-three/fiber").Vector3 | undefined;
5
30
  up?: import("@react-three/fiber").Vector3 | undefined;
@@ -21,6 +46,11 @@ declare const Instances: React.ForwardRefExoticComponent<Pick<Omit<import("@reac
21
46
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
22
47
  range?: number | undefined;
23
48
  limit?: number | undefined;
24
- }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
25
- declare const Instance: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;
26
- export { Instances, Instance };
49
+ frames?: number | undefined;
50
+ }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "frames" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
51
+ declare function Merged({ meshes, children, ...props }: {
52
+ [x: string]: any;
53
+ meshes: any;
54
+ children: any;
55
+ }): JSX.Element;
56
+ export { Instances, Instance, Merged };
package/core/Instances.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as THREE from 'three';
3
3
  import * as React from 'react';
4
- import { useFrame, extend } from '@react-three/fiber';
4
+ import { extend, useFrame } from '@react-three/fiber';
5
5
  import mergeRefs from 'react-merge-refs';
6
+ import Composer from 'react-composer';
6
7
  import { Position } from '../helpers/Position.js';
7
8
 
8
9
  let i, instanceRef;
9
- const context = /*#__PURE__*/React.createContext(null);
10
+ const globalContext = /*#__PURE__*/React.createContext(null);
10
11
  const parentMatrix = new THREE.Matrix4();
11
12
  const instanceMatrix = new THREE.Matrix4();
12
13
  const tempMatrix = new THREE.Matrix4();
@@ -14,12 +15,39 @@ const color = new THREE.Color();
14
15
  const translation = new THREE.Vector3();
15
16
  const rotation = new THREE.Quaternion();
16
17
  const scale = new THREE.Vector3();
18
+ const Instance = /*#__PURE__*/React.forwardRef(({
19
+ context,
20
+ children,
21
+ ...props
22
+ }, ref) => {
23
+ React.useMemo(() => extend({
24
+ Position
25
+ }), []);
26
+ const group = React.useRef();
27
+ const {
28
+ subscribe
29
+ } = React.useContext(context || globalContext);
30
+ React.useLayoutEffect(() => subscribe(group), []);
31
+ return /*#__PURE__*/React.createElement("position", _extends({
32
+ ref: mergeRefs([ref, group])
33
+ }, props), children);
34
+ });
17
35
  const Instances = /*#__PURE__*/React.forwardRef(({
18
36
  children,
19
37
  range,
20
38
  limit = 1000,
39
+ frames = Infinity,
21
40
  ...props
22
41
  }, ref) => {
42
+ const [[context, instance]] = React.useState(() => {
43
+ const c = /*#__PURE__*/React.createContext(null);
44
+
45
+ const i = props => /*#__PURE__*/React.createElement(Instance, _extends({
46
+ context: c
47
+ }, props));
48
+
49
+ return [c, i];
50
+ });
23
51
  const parentRef = React.useRef(null);
24
52
  const [instances, setInstances] = React.useState([]);
25
53
  const [[matrices, colors]] = React.useState(() => {
@@ -36,27 +64,32 @@ const Instances = /*#__PURE__*/React.forwardRef(({
36
64
  // We might be a frame too late? 🤷‍♂️
37
65
  parentRef.current.instanceMatrix.needsUpdate = true;
38
66
  });
67
+ let count = 0;
39
68
  useFrame(state => {
40
- parentRef.current.updateMatrix();
41
- parentRef.current.updateMatrixWorld();
42
- parentMatrix.copy(parentRef.current.matrixWorld).invert();
69
+ if (frames === Infinity || count < frames) {
70
+ parentRef.current.updateMatrix();
71
+ parentRef.current.updateMatrixWorld();
72
+ parentMatrix.copy(parentRef.current.matrixWorld).invert();
43
73
 
44
- for (i = 0; i < instances.length; i++) {
45
- instanceRef = instances[i].current; // Multiply the inverse of the InstancedMesh world matrix or else
46
- // Instances will be double-transformed if <Instances> isn't at identity
74
+ for (i = 0; i < instances.length; i++) {
75
+ instanceRef = instances[i].current; // Multiply the inverse of the InstancedMesh world matrix or else
76
+ // Instances will be double-transformed if <Instances> isn't at identity
47
77
 
48
- instanceRef.matrixWorld.decompose(translation, rotation, scale);
49
- instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
78
+ instanceRef.matrixWorld.decompose(translation, rotation, scale);
79
+ instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
50
80
 
51
- if (!instanceMatrix.equals(tempMatrix.fromArray(matrices, i * 16))) {
52
- instanceMatrix.toArray(matrices, i * 16);
53
- parentRef.current.instanceMatrix.needsUpdate = true;
54
- }
81
+ if (!instanceMatrix.equals(tempMatrix.fromArray(matrices, i * 16))) {
82
+ instanceMatrix.toArray(matrices, i * 16);
83
+ parentRef.current.instanceMatrix.needsUpdate = true;
84
+ }
55
85
 
56
- if (!instanceRef.color.equals(color.fromArray(colors, i * 3))) {
57
- instanceRef.color.toArray(colors, i * 3);
58
- parentRef.current.instanceColor.needsUpdate = true;
86
+ if (!instanceRef.color.equals(color.fromArray(colors, i * 3))) {
87
+ instanceRef.color.toArray(colors, i * 3);
88
+ parentRef.current.instanceColor.needsUpdate = true;
89
+ }
59
90
  }
91
+
92
+ count++;
60
93
  }
61
94
  });
62
95
  const events = React.useMemo(() => {
@@ -90,31 +123,38 @@ const Instances = /*#__PURE__*/React.forwardRef(({
90
123
  attach: "instanceMatrix",
91
124
  count: matrices.length / 16,
92
125
  array: matrices,
93
- itemSize: 16
126
+ itemSize: 16,
127
+ usage: THREE.DynamicDrawUsage
94
128
  }), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
95
129
  attach: "instanceColor",
96
130
  count: colors.length / 3,
97
131
  array: colors,
98
- itemSize: 3
99
- }), /*#__PURE__*/React.createElement(context.Provider, {
132
+ itemSize: 3,
133
+ usage: THREE.DynamicDrawUsage
134
+ }), typeof children === 'function' ? /*#__PURE__*/React.createElement(context.Provider, {
135
+ value: api
136
+ }, children(instance)) : /*#__PURE__*/React.createElement(globalContext.Provider, {
100
137
  value: api
101
138
  }, children));
102
139
  });
103
- const Instance = /*#__PURE__*/React.forwardRef(({
140
+
141
+ function Merged({
142
+ meshes,
104
143
  children,
105
144
  ...props
106
- }, ref) => {
107
- React.useMemo(() => extend({
108
- Position
109
- }), []);
110
- const group = React.useRef();
111
- const {
112
- subscribe
113
- } = React.useContext(context);
114
- React.useLayoutEffect(() => subscribe(group), []);
115
- return /*#__PURE__*/React.createElement("position", _extends({
116
- ref: mergeRefs([ref, group])
117
- }, props), children);
118
- });
145
+ }) {
146
+ const isArray = Array.isArray(meshes);
147
+ return /*#__PURE__*/React.createElement(Composer, {
148
+ components: (isArray ? meshes : Object.values(meshes)).map(({
149
+ geometry,
150
+ material
151
+ }) => /*#__PURE__*/React.createElement(Instances, _extends({
152
+ geometry: geometry,
153
+ material: material
154
+ }, props)))
155
+ }, args => isArray ? children(...args) : children(Object.keys(meshes).reduce((acc, key, i) => ({ ...acc,
156
+ [key]: args[i]
157
+ }), {})));
158
+ }
119
159
 
120
- export { Instance, Instances };
160
+ export { Instance, Instances, Merged };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),r=require("three"),n=require("react"),u=require("@react-three/fiber"),o=require("react-merge-refs"),i=require("../helpers/Position.cjs.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("@babel/runtime/helpers/inheritsLoose");var l,f,s=a(e),d=a(t),b=c(r),m=c(n),p=a(o),y=m.createContext(null),h=new b.Matrix4,v=new b.Vector3,g=new b.Color,x=m.forwardRef((function(e,t){var r=e.children,n=e.range,o=e.limit,i=void 0===o?1e3:o,a=d.default(e,["children","range","limit"]),c=m.useRef(null),b=m.useState([]),x=b[0],j=b[1],O=m.useState((function(){return[new Float32Array(3*i),new Float32Array([].concat(new Array(3*i)).map((function(){return 1})))]}))[0],P=O[0],w=O[1];m.useLayoutEffect((function(){c.current.geometry.drawRange.count=Math.min(i,void 0!==n?n:i,x.length)}),[x,n]),m.useEffect((function(){c.current.geometry.attributes.position.needsUpdate=!0})),u.useFrame((function(){for(c.current.updateMatrix(),c.current.updateMatrixWorld(),h.copy(c.current.matrixWorld).invert(),l=0;l<x.length;l++)(f=x[l].current).getWorldPosition(v).applyMatrix4(h),v.x===P[3*l]&&v.y===P[3*l+1]&&v.z===P[3*l+2]||(v.toArray(P,3*l),c.current.geometry.attributes.position.needsUpdate=!0,f.matrixWorldNeedsUpdate=!0),f.color.equals(g.fromArray(w,3*l))||(f.color.toArray(w,3*l),c.current.geometry.attributes.color.needsUpdate=!0)}));var E=m.useMemo((function(){var e={};for(l=0;l<x.length;l++){var t;Object.assign(e,null==(t=x[l].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce((function(e,t){var r;return s.default({},e,((r={})[t]=function(e){var r,n,u;return null==(r=x[e.index].current)||null==(n=r.__r3f)||null==(u=n.handlers)?void 0:u[t](e)},r))}),{})}),[x]),M=m.useMemo((function(){return{subscribe:function(e){return j((function(t){return[].concat(t,[e])})),function(){return j((function(t){return t.filter((function(t){return t.current!==e.current}))}))}}}}),[]);return m.createElement("points",s.default({matrixAutoUpdate:!1,ref:p.default([t,c])},E,a),m.createElement("bufferGeometry",null,m.createElement("bufferAttribute",{attachObject:["attributes","position"],count:P.length/3,array:P,itemSize:3}),m.createElement("bufferAttribute",{attachObject:["attributes","color"],count:w.length/3,array:w,itemSize:3})),m.createElement(y.Provider,{value:M},r))})),j=m.forwardRef((function(e,t){var r=e.children,n=d.default(e,["children"]);m.useMemo((function(){return u.extend({Position:i.Position})}),[]);var o=m.useRef(),a=m.useContext(y).subscribe;return m.useLayoutEffect((function(){return a(o)}),[]),m.createElement("position",s.default({ref:p.default([t,o])},n),r)}));exports.Point=j,exports.Points=x;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),t=require("three"),n=require("react"),u=require("@react-three/fiber"),o=require("react-merge-refs"),a=require("../helpers/Position.cjs.js");function i(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)}require("@babel/runtime/helpers/inheritsLoose");var l,f,s=i(e),d=i(r),b=c(t),m=c(n),p=i(o),y=m.createContext(null),h=new b.Matrix4,g=new b.Vector3,v=new b.Color,x=m.forwardRef((function(e,r){var t=e.children,n=e.range,o=e.limit,a=void 0===o?1e3:o,i=d.default(e,["children","range","limit"]),c=m.useRef(null),x=m.useState([]),j=x[0],w=x[1],O=m.useState((function(){return[new Float32Array(3*a),new Float32Array([].concat(new Array(3*a)).map((function(){return 1})))]}))[0],P=O[0],E=O[1];m.useLayoutEffect((function(){c.current.geometry.drawRange.count=Math.min(a,void 0!==n?n:a,j.length)}),[j,n]),m.useEffect((function(){c.current.geometry.attributes.position.needsUpdate=!0})),u.useFrame((function(){for(c.current.updateMatrix(),c.current.updateMatrixWorld(),h.copy(c.current.matrixWorld).invert(),l=0;l<j.length;l++)(f=j[l].current).getWorldPosition(g).applyMatrix4(h),g.x===P[3*l]&&g.y===P[3*l+1]&&g.z===P[3*l+2]||(g.toArray(P,3*l),c.current.geometry.attributes.position.needsUpdate=!0,f.matrixWorldNeedsUpdate=!0),f.color.equals(v.fromArray(E,3*l))||(f.color.toArray(E,3*l),c.current.geometry.attributes.color.needsUpdate=!0)}));var M=m.useMemo((function(){var e={};for(l=0;l<j.length;l++){var r;Object.assign(e,null==(r=j[l].current)?void 0:r.__r3f.handlers)}return Object.keys(e).reduce((function(e,r){var t;return s.default({},e,((t={})[r]=function(e){var t,n,u;return null==(t=j[e.index].current)||null==(n=t.__r3f)||null==(u=n.handlers)?void 0:u[r](e)},t))}),{})}),[j]),q=m.useMemo((function(){return{subscribe:function(e){return w((function(r){return[].concat(r,[e])})),function(){return w((function(r){return r.filter((function(r){return r.current!==e.current}))}))}}}}),[]);return m.createElement("points",s.default({matrixAutoUpdate:!1,ref:p.default([r,c])},M,i),m.createElement("bufferGeometry",null,m.createElement("bufferAttribute",{attachObject:["attributes","position"],count:P.length/3,array:P,itemSize:3,usage:b.DynamicDrawUsage}),m.createElement("bufferAttribute",{attachObject:["attributes","color"],count:E.length/3,array:E,itemSize:3,usage:b.DynamicDrawUsage})),m.createElement(y.Provider,{value:q},t))})),j=m.forwardRef((function(e,r){var t=e.children,n=d.default(e,["children"]);m.useMemo((function(){return u.extend({Position:a.Position})}),[]);var o=m.useRef(),i=m.useContext(y).subscribe;return m.useLayoutEffect((function(){return i(o)}),[]),m.createElement("position",s.default({ref:p.default([r,o])},n),t)}));exports.Point=j,exports.Points=x;
package/core/Points.js CHANGED
@@ -77,12 +77,14 @@ const Points = /*#__PURE__*/React.forwardRef(({
77
77
  attachObject: ['attributes', 'position'],
78
78
  count: positions.length / 3,
79
79
  array: positions,
80
- itemSize: 3
80
+ itemSize: 3,
81
+ usage: THREE.DynamicDrawUsage
81
82
  }), /*#__PURE__*/React.createElement("bufferAttribute", {
82
83
  attachObject: ['attributes', 'color'],
83
84
  count: colors.length / 3,
84
85
  array: colors,
85
- itemSize: 3
86
+ itemSize: 3,
87
+ usage: THREE.DynamicDrawUsage
86
88
  })), /*#__PURE__*/React.createElement(context.Provider, {
87
89
  value: api
88
90
  }, children));
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./Cloud.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Environment.cjs.js"),p=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./OrthographicCamera.cjs.js"),n=require("./PerspectiveCamera.cjs.js"),l=require("./CameraShake.cjs.js"),x=require("./CubeCamera.cjs.js"),q=require("./DeviceOrientationControls.cjs.js"),d=require("./FlyControls.cjs.js"),h=require("./MapControls.cjs.js"),C=require("./OrbitControls.cjs.js"),m=require("./TrackballControls.cjs.js"),b=require("./TransformControls.cjs.js"),P=require("./PointerLockControls.cjs.js"),S=require("./FirstPersonControls.cjs.js"),T=require("./GizmoHelper.cjs.js"),f=require("./GizmoViewcube.cjs.js"),M=require("./GizmoViewport.cjs.js"),B=require("./useCubeTexture.cjs.js"),v=require("./useFBX.cjs.js"),g=require("./useGLTF.cjs.js"),L=require("./useProgress.cjs.js"),G=require("./useTexture.cjs.js"),D=require("./Reflector.cjs.js"),z=require("./Shadow.cjs.js"),A=require("./Stats.cjs.js"),F=require("./Center.cjs.js"),O=require("./DepthBuffer.cjs.js"),w=require("./useAspect.cjs.js"),E=require("./useCamera.cjs.js"),k=require("./useDetectGPU.cjs.js"),y=require("./useHelper.cjs.js"),I=require("./useBVH.cjs.js"),H=require("./useContextBridge.cjs.js"),R=require("./useAnimations.cjs.js"),V=require("./useFBO.cjs.js"),Q=require("./useSimplification.cjs.js"),W=require("./useTessellation.cjs.js"),N=require("./useEdgeSplit.cjs.js"),U=require("./CurveModifier.cjs.js"),X=require("./MeshDistortMaterial.cjs.js"),K=require("./MeshWobbleMaterial.cjs.js"),_=require("./PointMaterial.cjs.js"),J=require("./shaderMaterial.cjs.js"),Y=require("./Sky.cjs.js"),Z=require("./softShadows.cjs.js"),$=require("./Stars.cjs.js"),ee=require("./ContactShadows.cjs.js"),re=require("./SpotLight.cjs.js"),se=require("./shapes.cjs.js"),te=require("./RoundedBox.cjs.js"),oe=require("./ScreenQuad.cjs.js"),ie=require("./useMatcapTexture.cjs.js"),ue=require("./useNormalTexture.cjs.js"),ae=require("./Stage.cjs.js"),pe=require("./Points.cjs.js"),ce=require("./Instances.cjs.js"),je=require("./Detailed.cjs.js"),ne=require("./Preload.cjs.js"),le=require("./meshBounds.cjs.js"),xe=require("./AdaptiveDpr.cjs.js"),qe=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("../assets/cloud.base64.cjs.js"),require("../helpers/base64.cjs.js"),require("blob-polyfill"),require("three"),require("@babel/runtime/helpers/construct"),require("three-stdlib"),require("troika-three-text"),require("use-asset"),require("../helpers/environment-assets.cjs.js"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("../materials/MeshReflectorMaterial.cjs.js"),require("@babel/runtime/helpers/createClass"),require("@babel/runtime/helpers/inheritsLoose"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("@babel/runtime/helpers/assertThisInitialized"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/matcap-assets.cjs.js"),require("../helpers/normal-assets.cjs.js"),require("../helpers/Position.cjs.js"),exports.Billboard=e.Billboard,exports.Cloud=r.Cloud,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Environment=a.Environment,exports.Effects=p.Effects,exports.isWebGL2Available=p.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.OrthographicCamera=j.OrthographicCamera,exports.PerspectiveCamera=n.PerspectiveCamera,exports.CameraShake=l.CameraShake,exports.CubeCamera=x.CubeCamera,exports.DeviceOrientationControls=q.DeviceOrientationControls,exports.FlyControls=d.FlyControls,exports.MapControls=h.MapControls,exports.OrbitControls=C.OrbitControls,exports.TrackballControls=m.TrackballControls,exports.TransformControls=b.TransformControls,exports.PointerLockControls=P.PointerLockControls,exports.FirstPersonControls=S.FirstPersonControls,exports.GizmoHelper=T.GizmoHelper,exports.useGizmoContext=T.useGizmoContext,exports.GizmoViewcube=f.GizmoViewcube,exports.GizmoViewport=M.GizmoViewport,exports.useCubeTexture=B.useCubeTexture,exports.useFBX=v.useFBX,exports.useGLTF=g.useGLTF,exports.useProgress=L.useProgress,exports.IsObject=G.IsObject,exports.useTexture=G.useTexture,exports.Reflector=D.Reflector,exports.Shadow=z.Shadow,exports.Stats=A.Stats,exports.Center=F.Center,exports.DepthBuffer=O.DepthBuffer,exports.useAspect=w.useAspect,exports.useCamera=E.useCamera,exports.useDetectGPU=k.useDetectGPU,exports.useHelper=y.useHelper,exports.useBVH=I.useBVH,exports.useContextBridge=H.useContextBridge,exports.useAnimations=R.useAnimations,exports.useFBO=V.useFBO,exports.useSimplification=Q.useSimplification,exports.useTessellation=W.useTessellation,exports.useEdgeSplit=N.useEdgeSplit,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=X.MeshDistortMaterial,exports.MeshWobbleMaterial=K.MeshWobbleMaterial,exports.PointMaterial=_.PointMaterial,exports.PointMaterialImpl=_.PointMaterialImpl,exports.shaderMaterial=J.shaderMaterial,exports.Sky=Y.Sky,exports.calcPosFromAngles=Y.calcPosFromAngles,exports.softShadows=Z.softShadows,exports.Stars=$.Stars,exports.ContactShadows=ee.ContactShadows,exports.SpotLight=re.SpotLight,exports.Box=se.Box,exports.Circle=se.Circle,exports.Cone=se.Cone,exports.Cylinder=se.Cylinder,exports.Dodecahedron=se.Dodecahedron,exports.Extrude=se.Extrude,exports.Icosahedron=se.Icosahedron,exports.Lathe=se.Lathe,exports.Octahedron=se.Octahedron,exports.Parametric=se.Parametric,exports.Plane=se.Plane,exports.Polyhedron=se.Polyhedron,exports.Ring=se.Ring,exports.Sphere=se.Sphere,exports.Tetrahedron=se.Tetrahedron,exports.Torus=se.Torus,exports.TorusKnot=se.TorusKnot,exports.Tube=se.Tube,exports.RoundedBox=te.RoundedBox,exports.ScreenQuad=oe.ScreenQuad,exports.useMatcapTexture=ie.useMatcapTexture,exports.useNormalTexture=ue.useNormalTexture,exports.Stage=ae.Stage,exports.Point=pe.Point,exports.Points=pe.Points,exports.Instance=ce.Instance,exports.Instances=ce.Instances,exports.Detailed=je.Detailed,exports.Preload=ne.Preload,exports.meshBounds=le.meshBounds,exports.AdaptiveDpr=xe.AdaptiveDpr,exports.AdaptiveEvents=qe.AdaptiveEvents;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./Cloud.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Environment.cjs.js"),p=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./OrthographicCamera.cjs.js"),n=require("./PerspectiveCamera.cjs.js"),l=require("./CameraShake.cjs.js"),x=require("./CubeCamera.cjs.js"),q=require("./DeviceOrientationControls.cjs.js"),d=require("./FlyControls.cjs.js"),h=require("./MapControls.cjs.js"),C=require("./OrbitControls.cjs.js"),m=require("./TrackballControls.cjs.js"),b=require("./TransformControls.cjs.js"),S=require("./PointerLockControls.cjs.js"),P=require("./FirstPersonControls.cjs.js"),T=require("./GizmoHelper.cjs.js"),f=require("./GizmoViewcube.cjs.js"),B=require("./GizmoViewport.cjs.js"),M=require("./useCubeTexture.cjs.js"),g=require("./useFBX.cjs.js"),v=require("./useGLTF.cjs.js"),L=require("./useProgress.cjs.js"),G=require("./useTexture.cjs.js"),D=require("./Reflector.cjs.js"),z=require("./Shadow.cjs.js"),A=require("./Stats.cjs.js"),w=require("./Center.cjs.js"),k=require("./DepthBuffer.cjs.js"),F=require("./useAspect.cjs.js"),O=require("./useCamera.cjs.js"),E=require("./useDetectGPU.cjs.js"),y=require("./useHelper.cjs.js"),I=require("./useBVH.cjs.js"),H=require("./useContextBridge.cjs.js"),R=require("./useAnimations.cjs.js"),V=require("./useFBO.cjs.js"),Q=require("./useSimplification.cjs.js"),W=require("./useTessellation.cjs.js"),N=require("./useEdgeSplit.cjs.js"),U=require("./CurveModifier.cjs.js"),X=require("./MeshDistortMaterial.cjs.js"),K=require("./MeshWobbleMaterial.cjs.js"),_=require("./PointMaterial.cjs.js"),J=require("./shaderMaterial.cjs.js"),Y=require("./Sky.cjs.js"),Z=require("./softShadows.cjs.js"),$=require("./Stars.cjs.js"),ee=require("./ContactShadows.cjs.js"),re=require("./SpotLight.cjs.js"),se=require("./shapes.cjs.js"),te=require("./RoundedBox.cjs.js"),oe=require("./ScreenQuad.cjs.js"),ie=require("./useMatcapTexture.cjs.js"),ue=require("./useNormalTexture.cjs.js"),ae=require("./Stage.cjs.js"),pe=require("./Points.cjs.js"),ce=require("./Instances.cjs.js"),je=require("./Detailed.cjs.js"),ne=require("./Preload.cjs.js"),le=require("./BakeShadows.cjs.js"),xe=require("./meshBounds.cjs.js"),qe=require("./AdaptiveDpr.cjs.js"),de=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("../assets/cloud.base64.cjs.js"),require("../helpers/base64.cjs.js"),require("blob-polyfill"),require("three"),require("@babel/runtime/helpers/construct"),require("three-stdlib"),require("troika-three-text"),require("use-asset"),require("../helpers/environment-assets.cjs.js"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("../materials/MeshReflectorMaterial.cjs.js"),require("@babel/runtime/helpers/createClass"),require("@babel/runtime/helpers/inheritsLoose"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("@babel/runtime/helpers/assertThisInitialized"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/matcap-assets.cjs.js"),require("../helpers/normal-assets.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.Cloud=r.Cloud,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Environment=a.Environment,exports.Effects=p.Effects,exports.isWebGL2Available=p.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.OrthographicCamera=j.OrthographicCamera,exports.PerspectiveCamera=n.PerspectiveCamera,exports.CameraShake=l.CameraShake,exports.CubeCamera=x.CubeCamera,exports.DeviceOrientationControls=q.DeviceOrientationControls,exports.FlyControls=d.FlyControls,exports.MapControls=h.MapControls,exports.OrbitControls=C.OrbitControls,exports.TrackballControls=m.TrackballControls,exports.TransformControls=b.TransformControls,exports.PointerLockControls=S.PointerLockControls,exports.FirstPersonControls=P.FirstPersonControls,exports.GizmoHelper=T.GizmoHelper,exports.useGizmoContext=T.useGizmoContext,exports.GizmoViewcube=f.GizmoViewcube,exports.GizmoViewport=B.GizmoViewport,exports.useCubeTexture=M.useCubeTexture,exports.useFBX=g.useFBX,exports.useGLTF=v.useGLTF,exports.useProgress=L.useProgress,exports.IsObject=G.IsObject,exports.useTexture=G.useTexture,exports.Reflector=D.Reflector,exports.Shadow=z.Shadow,exports.Stats=A.Stats,exports.Center=w.Center,exports.DepthBuffer=k.DepthBuffer,exports.useAspect=F.useAspect,exports.useCamera=O.useCamera,exports.useDetectGPU=E.useDetectGPU,exports.useHelper=y.useHelper,exports.useBVH=I.useBVH,exports.useContextBridge=H.useContextBridge,exports.useAnimations=R.useAnimations,exports.useFBO=V.useFBO,exports.useSimplification=Q.useSimplification,exports.useTessellation=W.useTessellation,exports.useEdgeSplit=N.useEdgeSplit,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=X.MeshDistortMaterial,exports.MeshWobbleMaterial=K.MeshWobbleMaterial,exports.PointMaterial=_.PointMaterial,exports.PointMaterialImpl=_.PointMaterialImpl,exports.shaderMaterial=J.shaderMaterial,exports.Sky=Y.Sky,exports.calcPosFromAngles=Y.calcPosFromAngles,exports.softShadows=Z.softShadows,exports.Stars=$.Stars,exports.ContactShadows=ee.ContactShadows,exports.SpotLight=re.SpotLight,exports.Box=se.Box,exports.Circle=se.Circle,exports.Cone=se.Cone,exports.Cylinder=se.Cylinder,exports.Dodecahedron=se.Dodecahedron,exports.Extrude=se.Extrude,exports.Icosahedron=se.Icosahedron,exports.Lathe=se.Lathe,exports.Octahedron=se.Octahedron,exports.Parametric=se.Parametric,exports.Plane=se.Plane,exports.Polyhedron=se.Polyhedron,exports.Ring=se.Ring,exports.Sphere=se.Sphere,exports.Tetrahedron=se.Tetrahedron,exports.Torus=se.Torus,exports.TorusKnot=se.TorusKnot,exports.Tube=se.Tube,exports.RoundedBox=te.RoundedBox,exports.ScreenQuad=oe.ScreenQuad,exports.useMatcapTexture=ie.useMatcapTexture,exports.useNormalTexture=ue.useNormalTexture,exports.Stage=ae.Stage,exports.Point=pe.Point,exports.Points=pe.Points,exports.Instance=ce.Instance,exports.Instances=ce.Instances,exports.Merged=ce.Merged,exports.Detailed=je.Detailed,exports.Preload=ne.Preload,exports.BakeShadows=le.BakeShadows,exports.meshBounds=xe.meshBounds,exports.AdaptiveDpr=qe.AdaptiveDpr,exports.AdaptiveEvents=de.AdaptiveEvents;
package/core/index.d.ts CHANGED
@@ -64,6 +64,7 @@ export * from './Points';
64
64
  export * from './Instances';
65
65
  export * from './Detailed';
66
66
  export * from './Preload';
67
+ export * from './BakeShadows';
67
68
  export * from './meshBounds';
68
69
  export * from './AdaptiveDpr';
69
70
  export * from './AdaptiveEvents';
package/core/index.js CHANGED
@@ -61,9 +61,10 @@ export { useMatcapTexture } from './useMatcapTexture.js';
61
61
  export { useNormalTexture } from './useNormalTexture.js';
62
62
  export { Stage } from './Stage.js';
63
63
  export { Point, Points } from './Points.js';
64
- export { Instance, Instances } from './Instances.js';
64
+ export { Instance, Instances, Merged } from './Instances.js';
65
65
  export { Detailed } from './Detailed.js';
66
66
  export { Preload } from './Preload.js';
67
+ export { BakeShadows } from './BakeShadows.js';
67
68
  export { meshBounds } from './meshBounds.js';
68
69
  export { AdaptiveDpr } from './AdaptiveDpr.js';
69
70
  export { AdaptiveEvents } from './AdaptiveEvents.js';
@@ -91,3 +92,4 @@ import '../materials/SpotLightMaterial.js';
91
92
  import '../helpers/matcap-assets.js';
92
93
  import '../helpers/normal-assets.js';
93
94
  import '../helpers/Position.js';
95
+ import 'react-composer';