@react-three/drei 9.111.0 → 9.111.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.
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.js +4 -1
- package/index.cjs.js +1 -1
- package/package.json +1 -1
package/core/Instances.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-composer"),c=require("../helpers/deprecated.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-composer"),c=require("../helpers/deprecated.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(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)}var i=s(e),o=u(t),l=u(r),f=s(a);const d=new o.Matrix4,m=new o.Matrix4,y=[],p=new o.Mesh;class g extends o.Group{constructor(){super(),this.color=new o.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;p.geometry=r.geometry;const n=r.matrixWorld,a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,d),m.multiplyMatrices(n,d),p.matrixWorld=m,r.material instanceof o.Material?p.material.side=r.material.side:p.material.side=r.material[0].side,p.raycast(e,y);for(let e=0,r=y.length;e<r;e++){const r=y[e];r.instanceId=a,r.object=this,t.push(r)}y.length=0}}}const x=l.createContext(null),h=new o.Matrix4,b=new o.Matrix4,w=new o.Matrix4,M=new o.Vector3,A=new o.Quaternion,v=new o.Vector3,E=l.forwardRef((({context:e,children:t,...r},a)=>{l.useMemo((()=>n.extend({PositionMesh:g})),[]);const c=l.useRef();l.useImperativeHandle(a,(()=>c.current),[]);const{subscribe:s,getParent:u}=l.useContext(e||x);return l.useLayoutEffect((()=>s(c)),[]),l.createElement("positionMesh",i.default({instance:u(),instanceKey:c,ref:c},r),t)})),j=l.forwardRef((({context:e,children:t,range:r,limit:a=1e3,frames:s=1/0,...u},f)=>{const[{localContext:d,instance:m}]=l.useState((()=>{const e=l.createContext(null);return{localContext:e,instance:l.forwardRef(((t,r)=>l.createElement(E,i.default({context:e},t,{ref:r}))))}})),y=l.useRef(null);l.useImperativeHandle(f,(()=>y.current),[]);const[p,g]=l.useState([]),[[j,D]]=l.useState((()=>{const e=new Float32Array(16*a);for(let t=0;t<a;t++)w.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*a)].map((()=>1)))]}));l.useEffect((()=>{y.current.instanceMatrix.needsUpdate=!0}));let R=0,O=0;const C=l.useRef([]);l.useLayoutEffect((()=>{C.current=Object.entries(y.current.geometry.attributes).filter((([e,t])=>t.isInstancedBufferAttribute))})),n.useFrame((()=>{if(s===1/0||R<s){y.current.updateMatrix(),y.current.updateMatrixWorld(),h.copy(y.current.matrixWorld).invert(),O=Math.min(a,void 0!==r?r:a,p.length),y.current.count=O,c.setUpdateRange(y.current.instanceMatrix,{offset:0,count:16*O}),c.setUpdateRange(y.current.instanceColor,{offset:0,count:3*O});for(let e=0;e<p.length;e++){const t=p[e].current;t.matrixWorld.decompose(M,A,v),b.compose(M,A,v).premultiply(h),b.toArray(j,16*e),y.current.instanceMatrix.needsUpdate=!0,t.color.toArray(D,3*e),y.current.instanceColor.needsUpdate=!0}R++}}));const U=l.useMemo((()=>({getParent:()=>y,subscribe:e=>(g((t=>[...t,e])),()=>g((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("instancedMesh",i.default({userData:{instances:p,limit:a,frames:s},matrixAutoUpdate:!1,ref:y,args:[null,null,0],raycast:()=>null},u),l.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:j.length/16,array:j,itemSize:16,usage:o.DynamicDrawUsage}),l.createElement("instancedBufferAttribute",{attach:"instanceColor",count:D.length/3,array:D,itemSize:3,usage:o.DynamicDrawUsage}),"function"==typeof t?l.createElement(d.Provider,{value:U},t(m)):e?l.createElement(e.Provider,{value:U},t):l.createElement(x.Provider,{value:U},t))})),D=l.forwardRef((function({meshes:e,children:t,...r},n){const a=Array.isArray(e);if(!a)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return l.createElement("group",{ref:n},l.createElement(f.default,{components:(a?e:Object.values(e)).map((({geometry:e,material:t})=>l.createElement(j,i.default({key:e.uuid,geometry:e,material:t},r))))},(r=>a?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))}));const R=l.forwardRef((({name:e,defaultValue:t},r)=>{const a=l.useRef(null);l.useImperativeHandle(r,(()=>a.current),[]),l.useLayoutEffect((()=>{const r=a.current.__r3f.parent;r.geometry.attributes[e]=a.current;const n=Array.isArray(t)?t:[t],c=Array.from({length:r.userData.limit},(()=>n)).flat();return a.current.array=new Float32Array(c),a.current.itemSize=n.length,a.current.count=c.length/a.current.itemSize,()=>{delete r.geometry.attributes[e]}}),[e]);let c=0;return n.useFrame((()=>{const t=a.current.__r3f.parent;if(t.userData.frames===1/0||c<t.userData.frames){for(let r=0;r<t.userData.instances.length;r++){const n=t.userData.instances[r].current[e];void 0!==n&&(a.current.set(Array.isArray(n)?n:"function"==typeof n.toArray?n.toArray():[n],r*a.current.itemSize),a.current.needsUpdate=!0)}c++}})),l.createElement("instancedBufferAttribute",{ref:a,usage:o.DynamicDrawUsage})}));exports.Instance=E,exports.InstancedAttribute=R,exports.Instances=j,exports.Merged=D,exports.createInstances=function(){const e=l.createContext(null);return[l.forwardRef(((t,r)=>l.createElement(j,i.default({ref:r,context:e},t)))),l.forwardRef(((t,r)=>l.createElement(E,i.default({ref:r,context:e},t))))]};
|
package/core/Instances.js
CHANGED
|
@@ -235,6 +235,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
|
|
|
235
235
|
React.useImperativeHandle(fref, () => ref.current, []);
|
|
236
236
|
React.useLayoutEffect(() => {
|
|
237
237
|
const parent = ref.current.__r3f.parent;
|
|
238
|
+
parent.geometry.attributes[name] = ref.current;
|
|
238
239
|
const value = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
239
240
|
const array = Array.from({
|
|
240
241
|
length: parent.userData.limit
|
|
@@ -242,6 +243,9 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
|
|
|
242
243
|
ref.current.array = new Float32Array(array);
|
|
243
244
|
ref.current.itemSize = value.length;
|
|
244
245
|
ref.current.count = array.length / ref.current.itemSize;
|
|
246
|
+
return () => {
|
|
247
|
+
delete parent.geometry.attributes[name];
|
|
248
|
+
};
|
|
245
249
|
}, [name]);
|
|
246
250
|
let iterations = 0;
|
|
247
251
|
useFrame(() => {
|
|
@@ -260,7 +264,6 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
|
|
|
260
264
|
});
|
|
261
265
|
return /*#__PURE__*/React.createElement("instancedBufferAttribute", {
|
|
262
266
|
ref: ref,
|
|
263
|
-
attach: `geometry-attributes-${name}`,
|
|
264
267
|
usage: THREE.DynamicDrawUsage
|
|
265
268
|
});
|
|
266
269
|
});
|