@pacem/pacem-3d 1.0.0-dirac → 1.0.0-euler
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/pacem-3d.js +13 -5
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +2 -2
- package/dist/bundle/pacem-3d.min.mjs +2 -2
- package/dist/bundle/pacem-3d.mjs +12 -4
- package/dist/bundle/pacem-3d.mjs.map +2 -2
- package/dist/esm/constants.js +1 -1
- package/dist/esm/converters.js +1 -1
- package/dist/esm/decorators.js +1 -1
- package/dist/esm/detector.js +1 -1
- package/dist/esm/geometry.js +1 -1
- package/dist/esm/index-components-drawing3d.js +1 -1
- package/dist/esm/index-components.js +1 -1
- package/dist/esm/index-drawing3d.js +1 -1
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index-root.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/stage.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-3d v1.0.0-
|
|
2
|
+
* @pacem/pacem-3d v1.0.0-euler (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -347,4 +347,4 @@ fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
|
|
|
347
347
|
intensity: f32
|
|
348
348
|
}`,`fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {
|
|
349
349
|
return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);
|
|
350
|
-
}`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${r});`]}}import{Utils as $}from"@pacem/pacem-core";import{Colors as xi}from"@pacem/pacem-foundation";import{Geometry as Rn}from"@pacem/pacem-numerical";import{Geometry as En}from"@pacem/pacem-numerical";var Te=En.LinearAlgebra.Vector3D,yi=En.LinearAlgebra.Matrix3D,wn={width:1,height:1},Eo=class{static create(e){if(zr(e))return new vi(e);if(Ur(e))return new _i(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}};function Cn(n,e,t){let o=Te.subtract(e,n),r=Te.cross(t,o),i=Te.cross(o,r);Te.normalize(r),Te.normalize(o),Te.normalize(i);let s=-Te.dot(r,n),a=-Te.dot(i,n),c=-Te.dot(o,n);return yi.from(r.x,i.x,o.x,0,r.y,i.y,o.y,0,r.z,i.z,o.z,0,s,a,c,1)}function Nn(n,e){if(n<=0)throw new RangeError("Near plane distance must be positive.");if(e<=n)throw new RangeError("Far plane distance must be greater than near plane distance.")}function fa(n=120,e=1,t=.1,o=1e3){Nn(t,o);let r=Math.tan(.5*Math.PI*(1-n/180)),i=r/e,s=Number.isFinite(o),a=s?o/(t-o):-1,c=s?o*t/(t-o):-t;return yi.from(i,0,0,0,0,r,0,0,0,0,a,-1,0,0,c,0)}function ha(n,e,t,o,r=.1,i=1e3){return Nn(r,i),yi.from(2/(e-n),0,0,0,0,2/(t-o),0,0,0,0,1/(r-i),0,(n+e)/(n-e),(t+o)/(o-t),r/(r-i),1)}var _i=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=e.position,r=e.lookAt,i=Te.subtract(r,o);Te.normalize(i);let s=Te.dot(i,o),{height:a,width:c}=t,l=c/a,u=.5*s,p=u*l,f=u,h=e.top*f,b=e.bottom*f,C=e.right*p,x=e.left*p;return ha(x,C,h,b,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}},vi=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=t.width/t.height/e.aspectRatio;return fa(e.fov,o,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}};var bi=Rn.LinearAlgebra.Vector3D,we=Rn.LinearAlgebra.Matrix3D;function ir(n,e){throw typeof e=="function"&&(e=e.name),new RangeError(`Buffer '${n}' not available for ${e}.`)}function Tn(n,e,...t){if(n.stage??=e?.item.stage,vt(n))return n.key??="group_"+$.uniqueCode(),new Ei(n,e,...t);if(Ee(n))return n.key??="mesh_"+$.uniqueCode(),new Ni(n,e,...t);if(pe(n))return n.key??="camera_"+$.uniqueCode(),new wi(n);if(Se(n))return n.key??="light_"+n.type+"_"+$.uniqueCode(),new Ri(n);throw new Error("Renderable is not supported.")}var wo=class{constructor(e){this._set=e}get items(){return this._set}loop(e){let{meshes:t,cameras:o,groups:r,lights:i}=this._set,s=o[0],a=!1,c=!1;for(let l of t)l.disposed||!e(l,s,i)||(q.clearFlags(l),a||(q.clearFlags(s),a=!0),c||(i.forEach(p=>q.clearFlags(p)),c=!0));for(let l of r)q.clearFlags(l)}},tr=class{static create(e){if(cr(e))return e.key??="geometry_"+$.uniqueCode(),new Ar(e);if(Ne(e))return new Pr(e);if(kr(e))return new Ci(e);throw new Error("Object is not supported.")}},q=class n{static create(e,...t){return Tn(e,null,...t)}static clearFlags(e,t=!1){if(e.item.flags.splice(0),t){let o=e;$.isNull(o.parent)||n.clearFlags(o.parent,!0)}}static allFlags(e){let t=e,o=t.parent,r=$.isNull(o)?[]:n.allFlags(o);return t.item.flags.union(r)}},rr=class{#e;constructor(e){this.#e=e}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let e=this.#r;for(;e.length>0;){let t=e.shift();this._destroyUnsafe(t)}}#r=[];_destroyUnsafe(e){"texture"in e?e.texture.destroy():"buffer"in e&&e.buffer.destroy()}destroySafely(...e){for(let t of Array.from(e).concat(...this.#r.splice(0)))t&&(this.#t?this.#r.push(t):this._destroyUnsafe(t))}#o=!1;destroy(){this.dispose(),this.#o=!0}get disposed(){return this.#o}},or=class extends rr{constructor(e,t){super(e),this.#t=t,this.#e=$.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=we.identity(),t=this;for(;!$.isNull(t.parent);){let o=t.parent.item,r=we.translate(o.transformMatrix??we.identity(),o.position??bi.zero());e=we.multiply(e,r),t=t.parent}return e}buildWorldTransform(){let e=we.translate(this.item.transformMatrix??we.identity(),this.item.position??bi.zero()),t=this.buildParentWorldTransform();return we.multiply(e,t)}#o=new Map;version(e){return this.#o.get(e)??0}buffer(e,t){if(t==="u32id"){let r=this.#r,{pipeline:i,device:s}=e;if(r.has(i))return $.extend({fresh:!1},r.get(i));let a=new Uint32Array([this.id]),c=ne.createUniform(s,a,j+"u32id-buffer"),l=$.extend({buffer:c,value:a,version:performance.now()},{fresh:!0});return this.#r.set(i,l),l}let o=this.specificBuffer(e,t);return this.#o.set(t,o.version),o}},ma={shader:U.Basic,color:"#c0c0c0",flags:[]},Ei=class extends or{#e;constructor(e,t,...o){super(e,t),this.#e=e.childRenderables.map(r=>Tn(r,this,...o))}get children(){return this.#e}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(e=>e.destroy())}},wi=class n extends or{#e=new Map;#t;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=!1;(this.allFlags().length>0||$.isNull(this.#t))&&(o=!0,this.#e.clear(),this._rebuildMatrices(e));let{pipeline:r}=e;if(this.#e.has(r)||(o=!0,this.#e.set(r,this.#t)),q.clearFlags(this),t==="cameraViewTransform")return $.extend(this.#t,{fresh:o});ir(t,n)}_rebuildMatrices({device:e,canvas:t}){let o=this.item,r=Eo.create(o),{x:i,y:s,z:a}=o.position,c=r.view(),l=r.projection(t),u=we.multiply(c,l),p=new Float32Array(36);if(p.set(we.toArray(c),0),p.set(we.toArray(u),16),p.set([i,s,a],32),$.isNull(this.#t)){let f=ne.createUniform(e,p,j+"view-buffer");this.#t={buffer:f,value:p,version:performance.now().roundoff()}}else this.#t.value=p,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let e=this.#t;this.#t=null,this.destroySafely(e)}dispose(){this._destroyView()}},Ar=class n extends rr{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(e){super(e),e.flags??=[]}buffer(e,t){let o=this.item.flags??[];($.isNull(this.#r)||o.includes(I.Geometry))&&(o.splice(0),this.#e={},this._rebuildGeometryBuffers(e));let r=this.#t,i=this.#r,{pipeline:s}=e,a=this.#e[t]??=new Map,c=!a.has(s),l=u=>(c&&a.set(s,u),u);switch(t){case"geometryPositions":let{positions:u}=i,p=r.positions;return r.positions=!1,$.extend(l(u),{fresh:p||c});case"geometryNormals":let{normals:f}=i,h=r.normals;return r.normals=!1,$.extend(l(f),{fresh:h||c});case"geometryTexCoords":let{uv:b}=i,C=r.uv;return r.uv=!1,$.extend({fresh:C||c},l(b));case"geometry":let{packed:x}=i,d=r.packed;return r.packed=!1,$.extend(l(x),{fresh:d||c});default:ir(t,n)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();let t=performance.now(),o=this.item,r=o.key;if(kt(o)){let i=o,a=!$.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=a.length*2,l=c+a.length,u=new Float32Array(l),p=new Float32Array(l),f=new Float32Array(c),h=new Float32Array(2*l+c);for(let _=0;_<a.length;_++){let T=2*_,N=3*_,{x:E,y:v,z:A}=a[_],{x:L,y:P,z:G}=i.normals[_],{x:R,y:m}=i.textureCoordinates[_];u.set([E,v,A],N),p.set([L,P,G],N),f.set([R,m],T),h.set([E,v,A,L,P,G,R,m],N*2+T)}let b=ne.create(e,u,j+"meshgeometry-"+r+"-positions-buffer"),C=ne.create(e,p,j+"meshgeometry-"+r+"-normals-buffer"),x=ne.create(e,f,j+"meshgeometry-"+r+"-uvmap-buffer"),d=ne.create(e,h,j+"meshgeometry-"+r+"-buffer");this.#r={packed:{buffer:d,value:h,version:t},positions:{buffer:b,value:u,version:t},normals:{buffer:C,value:p,version:t},uv:{buffer:x,value:f,version:t}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(We.flattenVectorArray(o.positions)),s=ne.createStorage(e,i,j+"nodegeometry-"+r+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:t},packed:{buffer:s,value:i,version:t}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let e=this.#r;$.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}},Pr=class n extends rr{#e={};#t={};#r;#o=new Map;#i=new Map;constructor(e){super(e),e.flags??=[],e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material)}buffer(e,t){let o=this.item.flags??[],r=$.isNull(this.#r);o.includes(I.Material)&&(this.#e={},o.splice(0),r=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=e,s=this.#e[t]??=new Map;switch(t){case"material":case"line":let a=this._ensureMaterialBuffer(e,t);return a?(s.has(i)||(r=!0,s.set(i,a)),$.extend(a,{fresh:r})):null;default:ir(t,n)}}_ensureMaterialBuffer(e,t="material"){let o=this.#o,r=o.get(t);return r||(o.has(t)?null:(r=this.#r?.buffer(e,t),r&&o.set(t,r),r))}_resetMaterialBuffers(){this.#r=fo.create(this.item),this._destroyBuffers()}texture(e,t="texture"){let o=this.#i,r=o.get(t),i=!1;if(!r){if(r=this.#r?.texture(e,t),!r)return null;o.set(t,r),i=!0,this.#t={}}let{pipeline:s}=e,a=this.#t[t]??=new Map;return a.has(s)||(i=!0,a.set(s,r)),$.extend(r,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let e=this.#o.values();this.#o.clear(),this.destroySafely(...e);let t=this.#i.values();this.#i.clear(),t.forEach(o=>o.texture.destroy())}},Ci=class n extends rr{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(e){super(e),$.extend(this.#e,e)}buffer(e,t){if(t==="interaction")return this._ensureInteractionBuffer(e);ir(t,n)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,t="interaction"){let o=this.#e,r=this.item,i=!this.#t||r.time!==o.time||r.resolution?.width!==o.resolution.width||r.resolution?.height!==o.resolution.height;if(!i&&!$.isNull(r.cursor)&&(i=r.cursor.x!==o.cursor.x||r.cursor.y!==o.cursor.y),i){let c=new Float32Array([r.cursor?.x??0,r.cursor?.y??0,r.resolution.width,r.resolution.height,r.time,0]),l=ne.createUniform(e.device,c,j+"interaction-buffer");this.#t={buffer:l,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=e,a=this.#r;return a.has(s)||(i=!0,a.set(s,this.#t)),$.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let e=this.#t;$.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}},Ni=class n extends or{#e;#t;#r;#o;#i;#s={geometry:!0,material:!0,transform:!0};#n=new Map;constructor(e,t,o,r){super(e,t),e.flags??=[],e.flags.indexOf(I.Geometry)===-1&&e.flags.push(I.Geometry),e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material),e.flags.indexOf(I.Position)===-1&&e.flags.indexOf(I.Transform)===-1&&e.flags.push(I.Transform),this.#e=o,this.#r=r}texture(e,t){return this.#o?.texture(e,t)}specificBuffer(e,t){let o=this.#s,r=this.allFlags();($.isNull(this.#i)||r.includes(I.Position)||r.includes(I.Transform))&&(this.#n.clear(),o.transform=!0,this._rebuildWorldMatrices(e)),($.isNull(this.#t)||r.includes(I.Geometry))&&(o.geometry=!0,this._ensureGeometryBuffer()),($.isNull(this.#o)||r.includes(I.Material))&&(o.material=!0,this._ensureMaterialBuffer()),q.clearFlags(this);let i=this.#t,s=this.#o;switch(t){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(e,t);case"material":case"line":return s.buffer(e,t);case"objectWorldTransform":let a=this.#i,c=o.transform;o.transform=!1;let l=this.#n,{pipeline:u}=e,p=!l.has(u);return p&&l.set(u,a),$.extend(a,{fresh:c||p});default:ir(t,n)}}_ensureGeometryBuffer(){let e=this.#t,t=this.#e,r=this.item.geometry;if($.isNull(t))e?.destroy(),this.#t=new Ar(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Ar(r),t.set(r,i)),this.#t=i}}_ensureMaterialBuffer(){let e=this.#o,t=this.#r,r=this.item.material??ma;if($.isNull(t))e?.destroy(),this.#o=new Pr(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Pr(r),t.set(r,i)),this.#o=i}}_rebuildWorldMatrices({device:e}){let t=this.item,o=this.buildWorldTransform(),r=we.transpose(we.invert(o)),i=new Float32Array(28);if(i.set(we.toArray(o),0),i.set([r.m11,r.m12,r.m13,0,r.m21,r.m22,r.m23,0,r.m31,r.m32,r.m33,0],16),$.isNull(this.#i)){let s=ne.createUniform(e,i,j+"mesh-"+t.key+"-worldmatrix-buffer");this.#i={buffer:s,value:i,version:performance.now().roundoff()}}else this.#i.value=i,this.#i.version=performance.now().roundoff()}dispose(){this.#n.clear();let e=this.#i;this.#i=null,this.destroySafely(e);let t=this.#o;this.#o=null,t?.destroy();let o=this.#t;this.#t=null,o?.destroy()}},Ri=class n extends or{#e;#t=new Map;constructor(e){super(e),e.flags.push(I.Light)}_rebuildAmbientLightBuffer({device:e}){let t=this.item,o=4,r=1,i=0,s=4,a=24,c=new Float32Array(a),{r:l,g:u,b:p,a:f}=xi.parse(t.color??"#fff");c.set([l,u,p,f],i),c.set([t.intensity],s),this.#e={value:c,buffer:ne.createUniform(e,c,j+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c);let C=bi.subtract(t.position,t.target);u.set([C.x,C.y,C.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c),u.set([t.position.x,t.position.y,t.position.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#e);let t=this.item;switch(t.type){case"direction":this._rebuildDirectionalLightBuffer(e);break;case"omni":this._rebuildOmniLightBuffer(e);break;case"ambient":this._rebuildAmbientLightBuffer(e);break;default:throw new Error(`Light '${t.type}' is not supported.`)}}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=this.#t,r=$.isNull(this.#e)||this.allFlags().length>0;r&&(o.clear(),this._rebuildLight(e)),q.clearFlags(this);let{pipeline:i}=e;if(o.has(i)||(r=!0,o.set(i,this.#e)),t==="light")return $.extend(this.#e,{fresh:r});ir(t,n)}dispose(){this.#t.clear();let e=this.#e;this.#e=null,this.destroySafely(e)}};var F=j,In={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},fe=n=>{},It=class n{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer,o=t.get(e);z.isNull(o)||(o.clear(),t.delete(e))}static createColorPicking(e,t){let o=n.create(e,t);return o instanceof No||o instanceof Ro?{frame:o.raycast}:null}static create(e,[t,o,...r],i){let s=n._memoizer,a=s.get(e);if(z.isNull(a)&&s.set(e,a=new Map),z.isNull(t))throw new Error("Pipeline not implemented, given the provided arguments.");if(Ee(t.item)){let c=kt(t.item.geometry),l=!c&&Ke(t.item.material);if(!c&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");let u=c?new Ti(t,o,...r):new Mi(t,o),p=u.key+(i?.modifiers?.version??""),f=a.get(p);if(f)return f;let h=c?new No(e,u):new Ro(e,u);h.build(i);let b=h;return z.extend(b,{id:p+"-"+e.canvas.width+"x"+e.canvas.height+"-"+z.Dates.now().toISOString()}),a.set(p,b),b}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Co=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:e},t,o,r,i,s,a=()=>{}){let c=this.#e,l=typeof t=="string"?t:t.key,u=c.get(l);if(z.isNull(u)&&c.set(l,u=new Map),r||!u.has(s)){let p=o.map((b,C)=>({binding:C,resource:{buffer:b}})),f={label:s,layout:i,entries:p};a(f);let h=e.createBindGroup(f);return u.set(s,h),h}else return u.get(s)}},Ti=class n{#e=[];#t;#r;#o=new Map;#i={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#e.splice(0),this.#t=null,this.#o.clear(),this.#i={shader:"basic",lights:""}}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#t)){this.#t=t;let o=t.item.material??{shader:U.Basic};this.#i.shader=o.shader+"-"+(o.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Se(t.item))this.#e.push(t),this.#i.lights+="-"+t.item.type;else if(pe(t.item))this.#r??=t;else throw new Error("Unknown object type.")}build(e){let t=this._computeBasicData(),o=this.key,r=this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),i=this.fragment(t,{modifier:e?.fragment}),s=(...c)=>n.prototype.bindgroup.apply(this,c),a={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:r,fragment:i,key:o,bindings:s,metadata:a}}get key(){let{shader:e,lights:t}=this.#i;return"mesh-"+e+t}bindgroup(e,t,o){let i=this.#o.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e){return fn(e)}_computeBasicData(){let e=this.#t.item,t=this.#e,o=e.material,r=!z.isNull(o?.texture),i=!z.isNullOrEmpty(t),s=z.isNull(e)?U.Basic:e.material?.shader??U.Basic;return{hasTexture:r,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let{hasTexture:t,materialBindGroupIndex:o,lightingBindGroupIndex:r}=e,i=this.#o,s=this.#e,a={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:o,binding:0,type:"buffer"};t?i.set(ve.Mesh,[a,c,{key:"texture",group:o,type:"texture"}]):i.set(ve.Mesh,[a,c]),i.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let l=s.map((u,p)=>({key:"light",group:r,binding:p,type:"buffer"}));l.push(...l),i.set(ve.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),t){this._computeBindGroupsAndReferences(e);let o={definitions:[],bindings:[],modifiers:[]},r=i=>{for(let s of i.definitions??[])o.definitions.indexOf(s)===-1&&o.definitions.push(s);z.isNullOrEmpty(i.bindings)||o.bindings.push(...i.bindings),z.isNullOrEmpty(i.modifiers)||o.modifiers.push(...i.modifiers)};switch(e.shader){case U.Basic:if(e.hasTexture){let a=e.materialBindGroupIndex,c=vn({inputColor:Tt,outputColors:[Tt],uv:"uv"},a);r(c)}let i=0,s=this.#e;for(let a of s){switch(a.item.type){case"direction":let l=yn({outputColor:Nr,normal:"normal"},e.lightingBindGroupIndex,i);r(l);break;case"omni":let u=xn({outputColor:Nr,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,i);r(u);break;case"ambient":let p=bn({inputColor:Tt,outputColor:po},e.lightingBindGroupIndex,i);r(p);break}i++}return Tr.fragment(o,t)}}},Me={writeBufferConditionally:(n,e)=>{e.fresh&&n.queue.writeBuffer(e.buffer,0,e.value)}},No=class{constructor(e,t,o=new Co){this._context=e,this._builder=t,this._cache=o,this._ensureU32idBindGroup=(r,i,s)=>this._cache.ensureBindGroup(this._context,r,[i],s,this._pickBindGroupLayout,F+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(r,i,s,a,c=2)=>{let l=this._bindGroupLayouts[c],u=F+"material-bind-group";if(l.label!==F+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[i],a,l,u,p=>{let{device:f}=this.context,h=p.entries;s&&h.push({binding:1,resource:f.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:s.createView()})})},this._ensureWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindGroupLayouts[a];if(l.label!==F+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-"+(c?1:0),p=`${F}${c?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,u,[i],s,l,p)},this._ensureCameraProjectionAndInteractionDataBindGroup=(r,i,s,a,c=0,l=!1)=>{let u=this._bindGroupLayouts[c],p=r.key+"-"+(l?1:0),f=`${F}${l?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,p,[i,s],a,u,f)},this._ensureLightingBindGroup=(r,i,s=3)=>{let a=this._bindGroupLayouts[s],c=r.map(u=>u.id).join(":"),l=r.map(u=>u.buffer.buffer);return this._cache.ensureBindGroup(this._context,c,l,i,a,F+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=fe,this._bindPicker=fe,this._bindWorldTransform=fe,this._bindRaycastWorldTransform=fe,this._bindCameraProjectionAndInteractionData=fe,this._bindRaycastCameraProjectionAndInteractionData=fe,this._bindLighting=fe,this._bindMaterial=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a,...c)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,s),this._bindWorldTransform(r,s),this._bindMaterial(r,s),this._bindCameraProjectionAndInteractionData(r,a,i),this._bindLighting(r,...c);let l=s.item,u=l.geometry;r.draw(u.triangleIndices?.length||u.positions.length)}catch(l){console.error("Pacem.Drawing3D.FrameException",l)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,s),this._bindRaycastWorldTransform(r,s),this._bindRaycastCameraProjectionAndInteractionData(r,a,i),this._bindPicker(r,s);let c=s.item,l=c.geometry;r.draw(l.triangleIndices.length)}catch{}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){let t=z.extend({},In,e??{}),o=this._builder,r=o.build(t.modifiers),i=z.extend({pipeline:this},this._context),s=i.device,a={module:s.createShaderModule({code:r.vertex}),buffers:t.packedVertices?[Mt.createVertex(0,3,3,2)]:[Mt.createVertex(0,3),Mt.createVertex(1,3),Mt.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}}],label:F+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"mesh-transforms-bind-group-layout"}),u=[c,l],p={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=u.length,h=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:b}=r.metadata,C=b>0;C&&h.push({visibility:oe.FRAGMENT,binding:1,sampler:{}},...Array(b).keys().map(m=>({visibility:oe.FRAGMENT,binding:2+m,texture:{}})));let x={label:F+"material-bind-group-layout",entries:h},d=s.createBindGroupLayout(x);u.push(d);let _=u.length,{lightCount:T}=r.metadata,N=T>0;if(N){let m=s.createBindGroupLayout({entries:[...Array(T).keys()].map((g,y)=>({visibility:oe.FRAGMENT,binding:y,buffer:{type:"uniform"}})),label:F+"lighting-bind-group-layout"});u.push(m)}let E={label:F+"mesh-render-pipeline",vertex:a,fragment:p,layout:s.createPipelineLayout({label:F+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=u}),primitive:t.primitive};t.multisample&&(E.multisample={count:4},E.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(E);let v=this._pickBindGroupLayout=s.createBindGroupLayout({label:F+"mesh-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),A={label:F+"mesh-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:fi(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,l,v]}),primitive:t.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(A);let L=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometryPositions"),{buffer:M}=y.buffer(i,"geometryNormals"),{buffer:O}=y.buffer(i,"geometryTexCoords");m.setVertexBuffer(0,w),m.setVertexBuffer(1,M),m.setVertexBuffer(2,O)},P=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometry");m.setVertexBuffer(0,w)};this._bindVertex=t.packedVertices?P:L;let G=(m,g,y)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=g.buffer(i,"objectWorldTransform"),M=w.buffer;Me.writeBufferConditionally(s,w);let{group:O}=r.bindings(ve.Mesh,"objectWorldTransform",0),D=this._ensureWorldTransformBindGroup(g.item,M,w.fresh,O,y);m.setBindGroup(O,D)};this._bindWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!1)},this._bindRaycastWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!0)};let R=(m,g,y,w)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let M=g.buffer(i,"cameraViewTransform"),O=M.buffer;if(Me.writeBufferConditionally(s,M),z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing interaction buffers was provided.`);let D=y.buffer(i,"interaction"),X=D.buffer;Me.writeBufferConditionally(s,D);let{group:H}=r.bindings(ve.Camera,"cameraViewTransform",0),{group:K}=r.bindings(ve.Interaction,"interaction",0);if(H!==K)throw new ReferenceError(`Layout bind group mismatch: ${H} vs ${K}.`);let ie=this._ensureCameraProjectionAndInteractionDataBindGroup(g.item,O,X,M.fresh||D.fresh,H,w);m.setBindGroup(H,ie)};this._bindCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!1)},this._bindRaycastCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!0)},this._bindMaterial=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let w=y.buffer(i,"material"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=y.texture(i),D=O?.texture,X=this._ensureMaterialBindGroup(y.item,M,D,w.fresh,f);m.setBindGroup(f,X),C&&s.queue.copyExternalImageToTexture({source:O.source,flipY:!0},{texture:D},{width:D.width,height:D.height})},this._bindLighting=(m,...g)=>{if(N){let w=Array.from(g).map(D=>({buffer:D.buffer(i,"light"),id:D.item.key})),M=w.some(D=>D.buffer.fresh),O=this._ensureLightingBindGroup(w,M,_);for(let D of w)Me.writeBufferConditionally(s,D.buffer);m.setBindGroup(_,O)}},this._bindPicker=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=y.buffer(i,"u32id"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=2,D=w.fresh,X=this._ensureU32idBindGroup(y.item,M,D);m.setBindGroup(O,X)}}},Mi=class n{#e;#t;#r=new Map;constructor(...e){this.add(...e)}reset(){this.#e=null,this.#r.clear()}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#e))this.#e=t;else throw new Error("Line already added.");else if(pe(t.item))this.#t??=t;else if(!Se(t.item))throw new Error("Unknown object type.")}build(){let e=this._computeBasicData(),t=this.key,o=this.vertex(e),r=this.fragment(e);return{vertex:o,fragment:r,key:t,bindings:(...s)=>n.prototype.bindgroup.apply(this,s),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){let e=(this.#e?.item).material?.lineWidth>1;return U.Line+(e?"-fat":"")}bindgroup(e,t,o){let i=this.#r.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e=this._computeBasicData()){return e.thickness>1?gn():mn()}_computeBasicData(){let e=this.#e.item,t=z.isNull(e)?U.Line:e.material?.shader??U.Line,o=e.material,r=o?.lineWidth??1,i=o?.dashArray;return{shader:t,thickness:r,dashPattern:i}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let t=this.#r,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},r={key:"material",group:3,binding:0,type:"buffer"},i={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};t.set(ve.Mesh,[o,r,i,s]),t.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);let t={definitions:[],bindings:[],modifiers:[]};if(e.shader===U.Line)return Mr.fragment(t)}},Ro=class{#e;constructor(e,t,o=new Co){this._lineBuilder=t,this._cache=o,this._ensureLineU32idBindGroup=(r,i,s)=>{let a=this.context;return this._cache.ensureBindGroup(a,r,[i],s,this._pickLineBindGroupLayout,F+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(r,i,s,a=2)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,[i],s,c,F+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(r,i,s,a)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,i,s,c,F+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindLineGroupLayouts[a];if(l.label!==F+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-transforms-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._ensureLineCameraProjectionBindGroup=(r,i,s,a=0,c=!1)=>{let l=this._bindLineGroupLayouts[a],u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-view-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._bindLineGroupLayouts=[],this._bindLinePositions=fe,this._bindLinePicker=fe,this._bindLineWorldTransform=fe,this._bindLineRaycastWorldTransform=fe,this._bindLineCameraProjection=fe,this._bindLineRaycastCameraProjection=fe,this._bindLineMaterial=fe,this._drawLine=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,i),this._bindLineCameraProjection(r,s),this._bindLinePositions(r,i),this._bindLineMaterial(r,i),this._drawLine(r,i)}catch(a){console.error("Pacem.Drawing3D.FrameException",a)}},this.raycast=(r,i,s)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,i),this._bindLineRaycastCameraProjection(r,s),this._bindLinePositions(r,i),this._bindLinePicker(r,i),this._drawLine(r,i)}catch{}},this.#e=e,this._lineKey=t.key}get context(){return this.#e}get key(){return this._lineKey}build(e){let t=z.extend({},In,e??{}),o=this._lineBuilder,r=o.build(),i=z.extend({pipeline:this},this.#e),s=i.device,a=r.metadata.thickness>1,c={module:s.createShaderModule({code:r.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-transforms-bind-group-layout"}),u=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-view-bind-group-layout"}),p=[{binding:0,visibility:oe.VERTEX,buffer:{type:"read-only-storage"}}];a&&p.push({binding:1,visibility:oe.VERTEX,buffer:{type:"uniform"}});let f=s.createBindGroupLayout({entries:p,label:F+"line-positions-bind-group-layout"}),h=[l,u,f],b=h.length,C=h.slice(),x={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},d=C.length,_=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],T={label:F+"line-material-bind-group-layout",entries:_},N=s.createBindGroupLayout(T);C.push(N);let E=a?t.primitive.topology:"line-list",v={label:F+"line-render-pipeline",vertex:c,fragment:x,layout:s.createPipelineLayout({label:F+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=C}),primitive:z.extend({},t.primitive,{topology:E})};t.multisample&&(v.multisample={count:4},v.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(v);let A=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:F+"line-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),L={label:F+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:fi(b)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(A)}),primitive:z.extend({},t.primitive,{topology:E}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(L);let P=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=m.buffer(i,"objectWorldTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Mesh,"objectWorldTransform",0),O=this._ensureLineWorldTransformBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!1)},this._bindLineRaycastWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!0)};let G=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let y=m.buffer(i,"cameraViewTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Camera,"cameraViewTransform",0),O=this._ensureLineCameraProjectionBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!1)},this._bindLineRaycastCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!0)},this._bindLinePositions=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided as index 0.`);let y=g.buffer(i,"geometryPositions"),w=y.buffer,M=y.fresh,O=[w];if(Me.writeBufferConditionally(s,y),a){let H=g.buffer(i,"line"),K=H.buffer;M||=H.fresh,O.push(K),Me.writeBufferConditionally(s,H)}let{group:D}=r.bindings(ve.Mesh,"line",0),X=this._ensureLinePositionsBindGroup(g.item,O,M,D);R.setBindGroup(D,X)},this._bindLineMaterial=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let y=g.buffer(i,"material"),w=y.buffer;Me.writeBufferConditionally(s,y);let M=this._ensureLineMaterialBindGroup(g.item,w,y.fresh,d);R.setBindGroup(d,M)},this._bindLinePicker=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=g.buffer(i,"u32id"),w=y.buffer,M=y.value;Me.writeBufferConditionally(s,y);let O=this._ensureLineU32idBindGroup(g.item,w,!1);R.setBindGroup(b,O)},this._drawLine=(R,...m)=>{let y=m.at(0).item,w=y.geometry;a?R.draw(6,w.positions.length-1,0,0):R.draw(w.positions.length)}}};import{Utils as At}from"@pacem/pacem-core";var Or=class{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer;if(t.has(e)){let o=t.get(e);for(let r of o.values())r.destroy();o.clear(),t.delete(e)}}static createColorPicking(e){let t=this._memoizer;t.has(e)||t.set(e,new Map);let o=t.get(e),r="colorpick";if(o.has(r))return o.get(r);let i=new Ii(e);return o.set(r,i),i}},Lr=1,Ii=class{constructor(e){this._context=e,this._objects=new Map,this.frame=(t,...o)=>{if(At.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let r=Array.from(o);It.createColorPicking(this._context,r)?.frame(this._pass,t,...o);for(let s of r)s.item.inert||this._objects.set(s.id,s)},this.end=t=>{if(!At.isNull(this._handle))return this._handle;let o=this._pass,r=this._encoder,{device:i}=this._context,{render:s}=this._textures,a=s.texture,c=this._ensureBuffer();o.end(),r.copyTextureToBuffer({texture:a,origin:{x:t.x,y:t.y}},{buffer:c,bytesPerRow:(Lr*4+255|0)*256,rowsPerImage:1},{width:Lr}),i.queue.submit([r.finish()]),this._encoder=null;let l=this,u=l._objects,p=()=>{l._handle=null};return this._handle=new Promise((f,h)=>{c.mapAsync(uo.READ,0,4*Lr).then(b=>{let x=new Uint32Array(c.getMappedRange(0,4*Lr))[0];c.unmap(),p();let d=u.get(x);f(d?[d.item]:[])})})}}_createTexture(e){let{device:t,canvas:o}=this._context,r=Math.min(t.limits.maxTextureDimension2D,o.clientWidth),i=Math.min(t.limits.maxTextureDimension2D,o.clientHeight);return t.createTexture({size:[r,i,1],format:e,usage:Re.COPY_SRC|Re.RENDER_ATTACHMENT})}_ensureBuffer(){let e=this._buffer;if(!At.isNull(e))return e;let{device:t}=this._context;return this._buffer=t.createBuffer({label:j+"colorpick-output-buffer",size:Lr*4,usage:ye.MAP_READ|ye.COPY_DST})}_ensureTextures(){let e=this._textures;if(!At.isNull(e))return e;let t=this._createTexture("r32uint"),o=this._createTexture("depth24plus"),r={texture:t,view:t.createView()},i={texture:o,view:o.createView()};return this._textures={render:r,depth:i}}_destroyTexture(e){At.isNull(e)||e.texture?.destroy()}destroy(){let e=this._textures,t=this._buffer;if(!At.isNullOrEmpty(e)){let{render:o,depth:r}=e;this._destroyTexture(o),this._destroyTexture(r),this._textures=null}At.isNull(t)||(t.destroy(),this._buffer=null)}begin(){let{device:e}=this._context;this._encoder=e.createCommandEncoder({label:j+"colorpick-raycaster"});let{render:t,depth:o}=this._ensureTextures(),r={label:j+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(r),this._objects.clear()}};var Ai=xa.LinearAlgebra.Vector3D,nr;(function(n){n[n.NotSupported=0]="NotSupported",n[n.Disabled=1]="Disabled"})(nr||(nr={}));var To=class{static create(e,t){return new Promise((o,r)=>{if(navigator.gpu){let i=new Pi(e);i.init(t).then(s=>o(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:nr.Disabled};r(c)})}else{let s={message:"WebGPU not supported.",cause:nr.NotSupported};r(s)}})}};function ba(n){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Ai.from(0,0,0),up:Ai.j(),position:Ai.from(0,0,1),type:"orthographic",flags:[],stage:n}}function Ea(...n){for(let e of n||[])e?.destroy()}var Pi=class{#e;#t;#r;#o;#i;#s;#n;#l;#a;#p;#f;#h;constructor(e){this.#o=new WeakMap,this.#i=new WeakMap,this.#s=new WeakMap,this.#a={enableValidation:!1},this.#p=!1,this._logError=r=>{let i=this.#e,s=i.logger;if(!te.isNull(s)){let a="error"in r?r.error:r;s.log(va.LogLevel.Error,a.message,"WebGPU")}},this.#c=!0,this.#u=!1;let t=(this.#e=e).stage,o=document.createElement("canvas");o.id=_a+"_3d_stage_"+te.uniqueCode(),t.innerHTML="",t.appendChild(this.#t=o),this.#f=tr.create(this.#h={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:e,format:t}){let{context:o,device:r}=this.#r,i=o.getCurrentTexture(),s=this.#l;if(te.isNull(s)){if(s={},e){let b=r.createTexture({label:j+"render-texture",format:t??i.format,usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.render={texture:b,view:b.createView({label:j+"render-texture-view"})};let C=r.createTexture({label:j+"depth-texture",format:"depth24plus",usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.depth={texture:C,view:C.createView({label:j+"depth-texture-view"})}}this.#l=s}let{transparent:a,background:c}=this.#e,l=a?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?ya.parse(c):c:{r:0,g:0,b:0,a:1},u=We.flattenVectorArray([l]),p=i.createView({label:j+"canvas-texture-view"}),f={view:p,clearValue:u,loadOp:"clear",storeOp:"store"},h={colorAttachments:[f]};if(e){let b=s.render.view,C=s.depth.view;h.depthStencilAttachment={view:C,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},f.view=b,f.resolveTarget=p}return h}_buildContext(e=this.#t,t=this.#e.size){t??=e;let o=t.width,r=t.height,i=1;e.width=o*i,e.height=r*i;let s=e.getContext("webgpu"),a=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:a}}_buildUpContext(e,t,o,r){let{transparent:i}=this.#e;o.configure({alphaMode:i?"premultiplied":"opaque",device:e,format:r}),this.#r={device:e,adapter:t,canvas:this.#t,context:o,format:r},this.#c=!1}async init(e){this.#a=e;let t=await navigator.gpu.requestAdapter();if(te.isNull(t))throw new Error("WebGPU adapter unavalable or disabled.");let o=await t.requestDevice();if(te.isNull(t))throw new Error("WebGPU device unavalable or disabled.");o.addEventListener("uncapturederror",this._logError),this.#u=!te.isNull(e.modifiers?.version)&&!te.isNull(e.modifiers)&&(!te.isNull(e.modifiers.vertexInput)||!te.isNull(e.modifiers.vertexOutput)||!te.isNull(e.modifiers.fragment));let{context:r,textureFormat:i}=this._buildContext();this._buildUpContext(o,t,r,i)}#c;#u;render(e){if(this.#c||te.isNull(this.#n)||!(this.#t.width>0)||!(this.#t.height>0))return;let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1;this.#u&&te.extend(this.#h,e);let a=this._buildPassDescriptor({multisample:!0}),c=o.createCommandEncoder({label:j+"renderer"}),l=c.beginRenderPass(a);r.loop((u,p,f)=>{if(u.item.hide)return!1;i&&o.pushErrorScope("validation");let h=[u,p,...f];return It.create(t,h,{multisample:!0,modifiers:this.#a.modifiers}).frame(l,this.#f,...h),i&&o.popErrorScope().then(C=>{C&&this._logError(C)}),!0}),l.end(),o.queue.submit([c.finish()])}set disabled(e){this.#p=e}get disabled(){return this.#p}raycast(e){if(this.#c||te.isNull(this.#n))return Promise.resolve([]);let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1,s=Or.createColorPicking(t);return s.begin(),r.loop((a,c)=>a.item.hide?!1:(i&&o.pushErrorScope("validation"),s.frame(this.#f,a,c),i&&o.popErrorScope().then(l=>{l&&this._logError(l)}),!0)),s.end(e)}_disposeRenderableJustInCase(e){let t=this.#o;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,t=this.#i,o=this.#s){e.stage??=this.#e;let r=this.#o,i=r.get(e);return te.isNull(i)&&r.set(e,i=q.create(e,t)),i}_createOrYieldGeometry(e){let t=this.#i,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_createOrYieldMaterial(e){let t=this.#s,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let o of e.children)o.item.stage??=this.#e,Ee(o.item)&&t.meshes.push(o),pe(o.item)&&t.cameras.push(o),Se(o.item)&&t.lights.push(o),vt(o.item)&&(t.groups.push(o),this._unwrapBuffers(o,t));return t}_update(e){let t=[],o=[],r=[],i=l=>this._createOrYieldRenderable(l),s;for(let l of e){if(l.hide){this._disposeRenderableJustInCase(l);continue}if(l.stage??=this.#e,vt(l)){let u=l;u.flags.includes(I.Children)&&this.#o.delete(u),t.push(i(u))}Ee(l)&&l.geometry&&(this._createOrYieldGeometry(l.geometry),te.isNull(l.material)||this._createOrYieldMaterial(l.material),o.push(i(l))),Se(l)&&r.push(i(l)),pe(l)&&(s??=l)}s??=ba(this.#e);let a=i(s),c={meshes:o,lights:r,cameras:[a],groups:t};for(let l of t)c=this._unwrapBuffers(l,c);this.#n?.items.meshes.forEach(l=>{o.includes(l)||l.destroy()}),this.#n=new wo(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#n=null,this._disposeContext()){let{device:e}=this.#r;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){let e=this.#r;if(te.isNull(e))return!1;Or.dispose(e),It.dispose(e);let t=this.#l;if(this.#l=null,!te.isNull(t)){let{render:o,depth:r}=t;Ea(o?.texture,r?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#c=!0,this._disposeContext()){let{device:t,adapter:o}=this.#r,{context:r,textureFormat:i}=this._buildContext(this.canvas,e);this._buildUpContext(t,o,r,i),this.#u&&te.extend(this.#h,{resolution:e})}}get canvas(){return this.#t}};var Lt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Pn="WebGPURaycastCallback",Li="WebGPURaycastPixel",Ln=Mo.getAttachedPropertyValue,On=Mo.setAttachedPropertyValue,Ta=Mo.deleteAttachedPropertyValue,sr=class extends Na.PacemItemElement{findContainer(){return Mo.findAncestor(this,e=>e instanceof Pt)}#e="";get version(){return this.#e}#t=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#t.observe(this,{characterData:!0})}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="wgsl"&&this._computeVersion(o)}_computeVersion(e=this.wgsl){Ra.hash(e).then(t=>{if(t!==this.#e){let o=this.#e,r=t;this.#e=r;let i=new Oi({propertyName:"version",oldValue:o,currentValue:r,firstChange:pt.isNullOrEmpty(o)});this.dispatchEvent(i)}})}disconnectedCallback(){this.#t.disconnect(),super.disconnectedCallback()}};Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"type",void 0);Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"wgsl",void 0);sr=Lt([Dn({tagName:Gn+"-3d-wgsl-script"})],sr);var Pt=class extends Je{constructor(){super(...arguments),this.#e=[],this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)},this.#t=new Set,this.#r=new Map,this.#o=!0,this.#i=!0,this.#s=new WeakMap}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}#e;get items(){return this.#e}register(e){let t=this.#e;return e instanceof sr&&!t.includes(e)?(e.addEventListener(An,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=this.#e,o=t.indexOf(e);return o>=0?(e.removeEventListener(An,this._scriptVersionChangeHandler,!1),t.splice(o,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}#t;#r;#o;#i;get supported(){return this.#o}get active(){return this.#i}_webGPUNotSupported(e){this.#o&&e.cause===nr.NotSupported&&(this.#o=!1,this.dispatchEvent(new Oi({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#i&&(this.#i=!1,this.dispatchEvent(new Oi({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=this.#r,o=this.#t;return o.has(e)||o.add(e),To.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(r=>(t.get(e)?.update(),t.set(e,r),this._updatePipeline(e),r.canvas),r=>(this.log(Ca.LogLevel.Error,r.message),this._webGPUNotSupported(r),null))}_parseWgslModifiers(e){let t=this.#e,o=t.find(l=>l.type=="vertex-input"),r=t.find(l=>l.type=="vertex-output"),i=t.find(l=>l.type=="fragment"),s=o?.wgsl,a=r?.wgsl,c=i?.wgsl;this.modifiers={vertexInput:s,vertexOutput:a,fragment:c,version:e}}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=this.#r;for(let[t,o]of e)o?.dispose();e.clear(),this.#t.clear(),super.disconnectedCallback()}dispose(e){let t=this.#r,o=this.#t;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),o.has(e)&&o.delete(e)}_reinitialize(){for(let e of this.#t.values())this.initialize(e)}_ensureRenderer(e){return this.#r.get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}#s;render(e){let t=e.size?.width,o=e.size?.height;if(!(t>0)||!(o>0))return;let r=this._ensureRenderer(e);if(pt.isNull(r))return;this.#s.has(e)&&(this.#s.delete(e),this._itemsChangedExec(e));let i=Ln(e,Li);if(r.render({cursor:i,time:performance.now(),resolution:{width:t,height:o}}),!e.interactive)return;let s=Ln(e,Pn);if(!pt.isNullOrEmpty(s)){if(pt.isNullOrEmpty(i)){s(null);return}r.raycast(i).then(a=>{if(pt.isNullOrEmpty(a))s(null);else{let c={object:a[0],point:null};s(c)}})}}snapshot(e,t,o,r){let i=this.#r;if(!i.has(e))return Promise.resolve(null);let{canvas:s}=i.get(e),a=!pt.isNullOrEmpty(t),c=o??(a?"image/jpeg":null),l=r??(a?.9:null);return new Promise((u,p)=>{this.render(e),pt.snapshotElement(s,t,c,l).then(u)})}raycast(e,t,o,r){On(e,Pn,r),t.x<0||t.y<0||t.x>=o.width||t.y>=o.height?Ta(e,Li):On(e,Li,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#s.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(pt.isNull(t)||t.flags.indexOf(I.Visibility)>=0||t.flags.indexOf(I.Children)>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lt([wa(100)],Pt.prototype,"_parseWgslModifiers",null);Lt([Io({emit:!1})],Pt.prototype,"modifiers",void 0);Lt([Io({emit:!1,converter:Di.Boolean})],Pt.prototype,"enableValidation",void 0);Pt=Lt([Dn({tagName:Gn+"-3d-webgpu-adapter"})],Pt);import{CustomElement as Ma,P as Ia,Watch as ht,PropertyConverters as Dt,Utils as Ot,CustomEventUtils as Gi,avoidHandler as Dr,Behaviors as Aa,PropertyChangeEventName as Bn}from"@pacem/pacem-core";import{Geometry as Lo}from"@pacem/pacem-numerical";var Ye=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},le=Lo.LinearAlgebra.Vector3D,ft=Lo.LinearAlgebra.Matrix3D,Ao=Lo.LinearAlgebra.Quaternion,Kp=Lo.LinearAlgebra.Spherical;function Pa(n){return pe(n)?n.stage:null}var La=1,Oa=1,Da=.05,Gr=.001,Br={maxAzimuth:180,minAzimuth:-180,inertia:!1,maxPolar:1/0,minPolar:-1/0,zoom:{enabled:!0},pan:{enabled:!0,button:2},rotation:{enabled:!0,button:0}},Po=class n{constructor(e,t){this._config=t,this._input={rho:0,theta:0,phi:0,x:0,y:0},this._progress={rho:0,theta:0,phi:0,x:0,y:0},this._startHandler=i=>{let{rotation:s,pan:a}=this._config,c=i.pointerType==="mouse",l=s.enabled&&c&&i.button===s.button&&Gi.matchModifiers(i,s.modifiers),u=a.enabled&&c&&i.button===a.button&&Gi.matchModifiers(i,a.modifiers);!l&&!u||(this.#t=l,(this.#e=u)&&(this._currentState=n._buildState(this._camera),Ot.extend(this._input,le.zero()),this._progress.x=this._progress.y=0),Dr(i),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=i=>Dr(i),this._endHandler=i=>{Dr(i),window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=i=>{let{zoom:s}=this._config;if(!(s.enabled&&Gi.matchModifiers(i,s.modifiers)))return;Dr(i);let c=this._input;c.rho-=Math.sign(i.deltaY)},this._moveHandler=i=>{Dr(i);let{height:s,width:a}=this._scene.size,c=this._input,l=Math.min(s,a);if(this.#t){let u=-La*360/l,{phi:p,theta:f}=c,{maxPolar:h,minPolar:b,maxAzimuth:C,minAzimuth:x}=this._config;c.phi=(p+i.movementX*u).clamp(b,h),c.theta=(f+i.movementY*u).clamp(x,C)}else if(this.#e){let u=this._currentState.radius/l;c.x+=-i.movementX*u,c.y+=i.movementY*u}},this._renderHandler=i=>{this._update()};let o=this._scene=(this._camera=e).stage;this._initialState=this._currentState=n._buildState(e);let r=this._canvas=o.stage;r.addEventListener("pointerdown",this._startHandler,!1),r.addEventListener("wheel",this._zoomHandler,{passive:!1}),o.addEventListener("render",this._renderHandler,!1)}static _buildState(e){let t=le.subtract(e.position,e.lookAt),o=le.mag(t);return{target:e.lookAt,versor:le.unit(t),up:e.up,radius:o,position:e.position}}static tryAttach(e,t){t??=Br;let o=Pa(e)?.stage;if(Ot.isNull(o))return null;{let{position:r,lookAt:i}=e;return Ot.isNull(r)||Ot.isNull(i)||le.areClose(r,i)?null:new n(e,t)}}get configuration(){return this._config}set configuration(e){this._config=e}#e;#t;_getSafeAzimuth({theta:e}){return n._modAngle(e)}_getSafePolar({phi:e}){return n._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){let{versor:t,up:o}=e,r=le.cross(t,o),i=le.cross(r,t);return le.normalize(r),le.normalize(i),{right:r,up:i,versor:t}}#r;_update(){if(this.#r)return;this.#r=!0;let e=this._camera,{radius:t,versor:o,target:r,up:i}=this._initialState,{target:s}=this._currentState,{theta:a,phi:c,rho:l,x:u,y:p}=this._input,f=this._progress,{theta:h,phi:b,rho:C,x,y:d}=f,_=Math.abs(b-c)>Gr||Math.abs(h-a)>Gr,T=Math.abs(C-l)>Gr,N=Math.abs(u-x)>Gr||Math.abs(p-d)>Gr;if(T||_||N){let E=typeof this._config.inertia=="boolean"?this._config.inertia?Da:0:this._config.inertia,v=E>0&&E<1,{right:A,up:L}=n._getViewXYZ(this._initialState),P=r,G=i,R=s,m=C;v?m+=(l-C)*E:m=l,f.rho=m;let g=Math.pow(.95,m*Oa),y=le.scale(o,-g*t);P=le.add(P,y);let w=b,M=h;v?(w+=(c-b)*E,M+=(a-h)*E):(w=c,M=a);let O=this._getSafePolar({phi:f.phi=w}),D=this._getSafeAzimuth({theta:f.theta=M}),X=le.negate(r),H=ft.translate(ft.identity(),X),K=Ao.fromAxisAngle(L,O),ie=Ao.fromAxisAngle(A,D),he=ft.multiply(Ao.toRotationMatrix(ie),Ao.toRotationMatrix(K));H=ft.multiply(H,he),H=ft.translate(H,le.negate(X)),P=ft.transform(P,H),G=ft.transform(G,ft.clone(H,dt=>{dt.offsetX=dt.offsetY=dt.offsetZ=0}));let se=x,ue=d,re=se,Y=ue;v?(re+=(u-se)*E,Y+=(p-ue)*E):(re=u,Y=p),f.x=re,f.y=Y;let{right:de,up:me}=n._getViewXYZ(this._currentState),Le=le.scale(de,re),Oe=le.scale(me,Y),Gt=le.add(Le,Oe);R=le.add(s,Gt),e.lookAt=R,e.position=P,e.up=G,e.flags.push(I.Camera)}this.#r=!1}dispose(){let e=this._canvas,t=this._scene;Ot.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),t.removeEventListener("render",this._renderHandler,!1)}},Pe=class extends Aa.PacemBehavior{constructor(){super(...arguments),this.#e=new Map,this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(Bn,this._readyHandler),this._decorateCore(t)}}}#e;propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let i=this._buildConfig(),s=this.#e;for(let a of s.values())a.configuration=i;break}}disconnectedCallback(){let e=this.#e;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Ot.extend({},Br,{maxAzimuth:this.maxAzimuth??1/0,minAzimuth:this.minAzimuth??-1/0,minPolar:this.minPolar??-1/0,maxPolar:this.maxPolar??1/0,inertia:this.inertia??!1,zoom:this.zoomControl??Br.zoom,pan:this.panControl??Br.pan,rotation:this.rotationControl??Br.rotation})}_decorateCore(e){let t=Po.tryAttach(e,this._buildConfig());Ot.isNull(t)||this.#e.set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(Bn,this._readyHandler,!1)}undecorate(e){let t=this.#e;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"zoomControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"rotationControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"panControl",void 0);Ye([ht({emit:!1,converter:Go})],Pe.prototype,"inertia",void 0);Pe=Ye([Ma({tagName:Ia+"-"+"3d"+"-orbit-camera"})],Pe);var Vn={};Oo(Vn,{BooleanOrNumberConverter:()=>Go,DragEvent:()=>mt,KnownShader:()=>U,LineGeometry:()=>et,MaterialElement:()=>Q,MeshGeometry:()=>W,NodeGeometry:()=>Et,NotifyChange:()=>bt,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Point3DConverter:()=>$e,Point3DOrNumberConverter:()=>Vr,QuaternionConverter:()=>Do,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Transformer as Ba}from"@pacem/pacem-core";import{Point as Sa}from"@pacem/pacem-foundation";var Ga=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Si=class{static parse(e){let t=[],o=/^v((\s+-?[\d\.]+){3})/gm,r=o.exec(e);for(;r&&r.length;)t.push($e.convert(r[1])),r=o.exec(e);let i=[],s=/^vt((\s+-?[\d\.]+){2})/gm;for(r=s.exec(e);r&&r.length;)i.push(Sa.parse(r[1])),r=s.exec(e);let a=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(r=c.exec(e);r&&r.length;)a.push($e.convert(r[1])),r=c.exec(e);let l=[],u=[],p=[],f=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(r=f.exec(e);r&&r.length;){let T=/([\d]+)\/([\d]+)\/([\d]+)/g,N=r[1],E=T.exec(N),v=0;for(var h,b,C,x,d,_;E&&E.length;)v>2&&(p.push(h),u.push(i[b]),l.push(a[C]),p.push(x),u.push(i[d]),l.push(a[_])),x=parseInt(E[1])-1,d=parseInt(E[2])-1,_=parseInt(E[3])-1,p.push(x),u.push(i[d]),l.push(a[_]),v===0&&(h=x,b=d,C=_),v++,E=T.exec(N);r=f.exec(e)}return new W(t,p,u,l)}},Vi=class{static parseGeometry(e,t){if(t.toLowerCase()==="obj")return Si.parse(e);throw new Error(`Type '${t}' is not supported.`)}};Ga([Ba("parse3D")],Vi,"parseGeometry",null);export{Sn as Components,Vn as Drawing3D};
|
|
350
|
+
}`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${r});`]}}import{Utils as $}from"@pacem/pacem-core";import{Colors as xi}from"@pacem/pacem-foundation";import{Geometry as Rn}from"@pacem/pacem-numerical";import{Geometry as En}from"@pacem/pacem-numerical";var Te=En.LinearAlgebra.Vector3D,yi=En.LinearAlgebra.Matrix3D,wn={width:1,height:1},Eo=class{static create(e){if(zr(e))return new vi(e);if(Ur(e))return new _i(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}};function Cn(n,e,t){let o=Te.subtract(e,n),r=Te.cross(t,o),i=Te.cross(o,r);Te.normalize(r),Te.normalize(o),Te.normalize(i);let s=-Te.dot(r,n),a=-Te.dot(i,n),c=-Te.dot(o,n);return yi.from(r.x,i.x,o.x,0,r.y,i.y,o.y,0,r.z,i.z,o.z,0,s,a,c,1)}function Nn(n,e){if(n<=0)throw new RangeError("Near plane distance must be positive.");if(e<=n)throw new RangeError("Far plane distance must be greater than near plane distance.")}function fa(n=120,e=1,t=.1,o=1e3){Nn(t,o);let r=Math.tan(.5*Math.PI*(1-n/180)),i=r/e,s=Number.isFinite(o),a=s?o/(t-o):-1,c=s?o*t/(t-o):-t;return yi.from(i,0,0,0,0,r,0,0,0,0,a,-1,0,0,c,0)}function ha(n,e,t,o,r=.1,i=1e3){return Nn(r,i),yi.from(2/(e-n),0,0,0,0,2/(t-o),0,0,0,0,1/(r-i),0,(n+e)/(n-e),(t+o)/(o-t),r/(r-i),1)}var _i=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=e.position,r=e.lookAt,i=Te.subtract(r,o);Te.normalize(i);let s=Te.dot(i,o),{height:a,width:c}=t,l=c/a,u=.5*s,p=u*l,f=u,h=e.top*f,b=e.bottom*f,C=e.right*p,x=e.left*p;return ha(x,C,h,b,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}},vi=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=t.width/t.height/e.aspectRatio;return fa(e.fov,o,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}};var bi=Rn.LinearAlgebra.Vector3D,we=Rn.LinearAlgebra.Matrix3D;function ir(n,e){throw typeof e=="function"&&(e=e.name),new RangeError(`Buffer '${n}' not available for ${e}.`)}function Tn(n,e,...t){if(n.stage??=e?.item.stage,vt(n))return n.key??="group_"+$.uniqueCode(),new Ei(n,e,...t);if(Ee(n))return n.key??="mesh_"+$.uniqueCode(),new Ni(n,e,...t);if(pe(n))return n.key??="camera_"+$.uniqueCode(),new wi(n);if(Se(n))return n.key??="light_"+n.type+"_"+$.uniqueCode(),new Ri(n);throw new Error("Renderable is not supported.")}var wo=class{constructor(e){this._set=e}get items(){return this._set}loop(e){let{meshes:t,cameras:o,groups:r,lights:i}=this._set,s=o[0],a=!1,c=!1;for(let l of t)l.disposed||!e(l,s,i)||(q.clearFlags(l),a||(q.clearFlags(s),a=!0),c||(i.forEach(p=>q.clearFlags(p)),c=!0));for(let l of r)q.clearFlags(l)}},tr=class{static create(e){if(cr(e))return e.key??="geometry_"+$.uniqueCode(),new Ar(e);if(Ne(e))return new Pr(e);if(kr(e))return new Ci(e);throw new Error("Object is not supported.")}},q=class n{static create(e,...t){return Tn(e,null,...t)}static clearFlags(e,t=!1){if(e.item.flags.splice(0),t){let o=e;$.isNull(o.parent)||n.clearFlags(o.parent,!0)}}static allFlags(e){let t=e,o=t.parent,r=$.isNull(o)?[]:n.allFlags(o);return t.item.flags.union(r)}},rr=class{#e;constructor(e){this.#e=e}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let e=this.#r;for(;e.length>0;){let t=e.shift();this._destroyUnsafe(t)}}#r=[];_destroyUnsafe(e){"texture"in e?e.texture.destroy():"buffer"in e&&e.buffer.destroy()}destroySafely(...e){for(let t of Array.from(e).concat(...this.#r.splice(0)))t&&(this.#t?this.#r.push(t):this._destroyUnsafe(t))}#o=!1;destroy(){this.dispose(),this.#o=!0}get disposed(){return this.#o}},or=class extends rr{constructor(e,t){super(e),this.#t=t,this.#e=$.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=we.identity(),t=this;for(;!$.isNull(t.parent);){let o=t.parent.item,r=we.translate(o.transformMatrix??we.identity(),o.position??bi.zero());e=we.multiply(e,r),t=t.parent}return e}buildWorldTransform(){let e=we.translate(this.item.transformMatrix??we.identity(),this.item.position??bi.zero()),t=this.buildParentWorldTransform();return we.multiply(e,t)}#o=new Map;version(e){return this.#o.get(e)??0}buffer(e,t){if(t==="u32id"){let r=this.#r,{pipeline:i,device:s}=e;if(r.has(i))return $.extend({fresh:!1},r.get(i));let a=new Uint32Array([this.id]),c=ne.createUniform(s,a,j+"u32id-buffer"),l=$.extend({buffer:c,value:a,version:performance.now()},{fresh:!0});return this.#r.set(i,l),l}let o=this.specificBuffer(e,t);return this.#o.set(t,o.version),o}},ma={shader:U.Basic,color:"#c0c0c0",flags:[]},Ei=class extends or{#e;constructor(e,t,...o){super(e,t),this.#e=e.childRenderables.map(r=>Tn(r,this,...o))}get children(){return this.#e}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(e=>e.destroy())}},wi=class n extends or{#e=new Map;#t;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=!1;(this.allFlags().length>0||$.isNull(this.#t))&&(o=!0,this.#e.clear(),this._rebuildMatrices(e));let{pipeline:r}=e;if(this.#e.has(r)||(o=!0,this.#e.set(r,this.#t)),q.clearFlags(this),t==="cameraViewTransform")return $.extend(this.#t,{fresh:o});ir(t,n)}_rebuildMatrices({device:e,canvas:t}){let o=this.item,r=Eo.create(o),{x:i,y:s,z:a}=o.position,c=r.view(),l=r.projection(t),u=we.multiply(c,l),p=new Float32Array(36);if(p.set(we.toArray(c),0),p.set(we.toArray(u),16),p.set([i,s,a],32),$.isNull(this.#t)){let f=ne.createUniform(e,p,j+"view-buffer");this.#t={buffer:f,value:p,version:performance.now().roundoff()}}else this.#t.value=p,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let e=this.#t;this.#t=null,this.destroySafely(e)}dispose(){this._destroyView()}},Ar=class n extends rr{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(e){super(e),e.flags??=[]}buffer(e,t){let o=this.item.flags??[];($.isNull(this.#r)||o.includes(I.Geometry))&&(o.splice(0),this.#e={},this._rebuildGeometryBuffers(e));let r=this.#t,i=this.#r,{pipeline:s}=e,a=this.#e[t]??=new Map,c=!a.has(s),l=u=>(c&&a.set(s,u),u);switch(t){case"geometryPositions":let{positions:u}=i,p=r.positions;return r.positions=!1,$.extend(l(u),{fresh:p||c});case"geometryNormals":let{normals:f}=i,h=r.normals;return r.normals=!1,$.extend(l(f),{fresh:h||c});case"geometryTexCoords":let{uv:b}=i,C=r.uv;return r.uv=!1,$.extend({fresh:C||c},l(b));case"geometry":let{packed:x}=i,d=r.packed;return r.packed=!1,$.extend(l(x),{fresh:d||c});default:ir(t,n)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();let t=performance.now(),o=this.item,r=o.key;if(kt(o)){let i=o,a=!$.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=a.length*2,l=c+a.length,u=new Float32Array(l),p=new Float32Array(l),f=new Float32Array(c),h=new Float32Array(2*l+c);for(let _=0;_<a.length;_++){let T=2*_,N=3*_,{x:E,y:v,z:A}=a[_],{x:L,y:P,z:G}=i.normals[_],{x:R,y:m}=i.textureCoordinates[_];u.set([E,v,A],N),p.set([L,P,G],N),f.set([R,m],T),h.set([E,v,A,L,P,G,R,m],N*2+T)}let b=ne.create(e,u,j+"meshgeometry-"+r+"-positions-buffer"),C=ne.create(e,p,j+"meshgeometry-"+r+"-normals-buffer"),x=ne.create(e,f,j+"meshgeometry-"+r+"-uvmap-buffer"),d=ne.create(e,h,j+"meshgeometry-"+r+"-buffer");this.#r={packed:{buffer:d,value:h,version:t},positions:{buffer:b,value:u,version:t},normals:{buffer:C,value:p,version:t},uv:{buffer:x,value:f,version:t}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(We.flattenVectorArray(o.positions)),s=ne.createStorage(e,i,j+"nodegeometry-"+r+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:t},packed:{buffer:s,value:i,version:t}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let e=this.#r;$.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}},Pr=class n extends rr{#e={};#t={};#r;#o=new Map;#i=new Map;constructor(e){super(e),e.flags??=[],e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material)}buffer(e,t){let o=this.item.flags??[],r=$.isNull(this.#r);o.includes(I.Material)&&(this.#e={},o.splice(0),r=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=e,s=this.#e[t]??=new Map;switch(t){case"material":case"line":let a=this._ensureMaterialBuffer(e,t);return a?(s.has(i)||(r=!0,s.set(i,a)),$.extend(a,{fresh:r})):null;default:ir(t,n)}}_ensureMaterialBuffer(e,t="material"){let o=this.#o,r=o.get(t);return r||(o.has(t)?null:(r=this.#r?.buffer(e,t),r&&o.set(t,r),r))}_resetMaterialBuffers(){this.#r=fo.create(this.item),this._destroyBuffers()}texture(e,t="texture"){let o=this.#i,r=o.get(t),i=!1;if(!r){if(r=this.#r?.texture(e,t),!r)return null;o.set(t,r),i=!0,this.#t={}}let{pipeline:s}=e,a=this.#t[t]??=new Map;return a.has(s)||(i=!0,a.set(s,r)),$.extend(r,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let e=this.#o.values();this.#o.clear(),this.destroySafely(...e);let t=this.#i.values();this.#i.clear(),t.forEach(o=>o.texture.destroy())}},Ci=class n extends rr{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(e){super(e),$.extend(this.#e,e)}buffer(e,t){if(t==="interaction")return this._ensureInteractionBuffer(e);ir(t,n)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,t="interaction"){let o=this.#e,r=this.item,i=!this.#t||r.time!==o.time||r.resolution?.width!==o.resolution.width||r.resolution?.height!==o.resolution.height;if(!i&&!$.isNull(r.cursor)&&(i=r.cursor.x!==o.cursor.x||r.cursor.y!==o.cursor.y),i){let c=new Float32Array([r.cursor?.x??0,r.cursor?.y??0,r.resolution.width,r.resolution.height,r.time,0]),l=ne.createUniform(e.device,c,j+"interaction-buffer");this.#t={buffer:l,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=e,a=this.#r;return a.has(s)||(i=!0,a.set(s,this.#t)),$.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let e=this.#t;$.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}},Ni=class n extends or{#e;#t;#r;#o;#i;#s={geometry:!0,material:!0,transform:!0};#n=new Map;constructor(e,t,o,r){super(e,t),e.flags??=[],e.flags.indexOf(I.Geometry)===-1&&e.flags.push(I.Geometry),e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material),e.flags.indexOf(I.Position)===-1&&e.flags.indexOf(I.Transform)===-1&&e.flags.push(I.Transform),this.#e=o,this.#r=r}texture(e,t){return this.#o?.texture(e,t)}specificBuffer(e,t){let o=this.#s,r=this.allFlags();($.isNull(this.#i)||r.includes(I.Position)||r.includes(I.Transform))&&(this.#n.clear(),o.transform=!0,this._rebuildWorldMatrices(e)),($.isNull(this.#t)||r.includes(I.Geometry))&&(o.geometry=!0,this._ensureGeometryBuffer()),($.isNull(this.#o)||r.includes(I.Material))&&(o.material=!0,this._ensureMaterialBuffer()),q.clearFlags(this);let i=this.#t,s=this.#o;switch(t){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(e,t);case"material":case"line":return s.buffer(e,t);case"objectWorldTransform":let a=this.#i,c=o.transform;o.transform=!1;let l=this.#n,{pipeline:u}=e,p=!l.has(u);return p&&l.set(u,a),$.extend(a,{fresh:c||p});default:ir(t,n)}}_ensureGeometryBuffer(){let e=this.#t,t=this.#e,r=this.item.geometry;if($.isNull(t))e?.destroy(),this.#t=new Ar(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Ar(r),t.set(r,i)),this.#t=i}}_ensureMaterialBuffer(){let e=this.#o,t=this.#r,r=this.item.material??ma;if($.isNull(t))e?.destroy(),this.#o=new Pr(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Pr(r),t.set(r,i)),this.#o=i}}_rebuildWorldMatrices({device:e}){let t=this.item,o=this.buildWorldTransform(),r=we.transpose(we.invert(o)),i=new Float32Array(28);if(i.set(we.toArray(o),0),i.set([r.m11,r.m12,r.m13,0,r.m21,r.m22,r.m23,0,r.m31,r.m32,r.m33,0],16),$.isNull(this.#i)){let s=ne.createUniform(e,i,j+"mesh-"+t.key+"-worldmatrix-buffer");this.#i={buffer:s,value:i,version:performance.now().roundoff()}}else this.#i.value=i,this.#i.version=performance.now().roundoff()}dispose(){this.#n.clear();let e=this.#i;this.#i=null,this.destroySafely(e);let t=this.#o;this.#o=null,t?.destroy();let o=this.#t;this.#t=null,o?.destroy()}},Ri=class n extends or{#e;#t=new Map;constructor(e){super(e),e.flags.push(I.Light)}_rebuildAmbientLightBuffer({device:e}){let t=this.item,o=4,r=1,i=0,s=4,a=24,c=new Float32Array(a),{r:l,g:u,b:p,a:f}=xi.parse(t.color??"#fff");c.set([l,u,p,f],i),c.set([t.intensity],s),this.#e={value:c,buffer:ne.createUniform(e,c,j+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c);let C=bi.subtract(t.position,t.target);u.set([C.x,C.y,C.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c),u.set([t.position.x,t.position.y,t.position.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#e);let t=this.item;switch(t.type){case"direction":this._rebuildDirectionalLightBuffer(e);break;case"omni":this._rebuildOmniLightBuffer(e);break;case"ambient":this._rebuildAmbientLightBuffer(e);break;default:throw new Error(`Light '${t.type}' is not supported.`)}}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=this.#t,r=$.isNull(this.#e)||this.allFlags().length>0;r&&(o.clear(),this._rebuildLight(e)),q.clearFlags(this);let{pipeline:i}=e;if(o.has(i)||(r=!0,o.set(i,this.#e)),t==="light")return $.extend(this.#e,{fresh:r});ir(t,n)}dispose(){this.#t.clear();let e=this.#e;this.#e=null,this.destroySafely(e)}};var F=j,In={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},fe=n=>{},It=class n{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer,o=t.get(e);z.isNull(o)||(o.clear(),t.delete(e))}static createColorPicking(e,t){let o=n.create(e,t);return o instanceof No||o instanceof Ro?{frame:o.raycast}:null}static create(e,[t,o,...r],i){let s=n._memoizer,a=s.get(e);if(z.isNull(a)&&s.set(e,a=new Map),z.isNull(t))throw new Error("Pipeline not implemented, given the provided arguments.");if(Ee(t.item)){let c=kt(t.item.geometry),l=!c&&Ke(t.item.material);if(!c&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");let u=c?new Ti(t,o,...r):new Mi(t,o),p=u.key+(i?.modifiers?.version??""),f=a.get(p);if(f)return f;let h=c?new No(e,u):new Ro(e,u);h.build(i);let b=h;return z.extend(b,{id:p+"-"+e.canvas.width+"x"+e.canvas.height+"-"+z.Dates.now().toISOString()}),a.set(p,b),b}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Co=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:e},t,o,r,i,s,a=()=>{}){let c=this.#e,l=typeof t=="string"?t:t.key,u=c.get(l);if(z.isNull(u)&&c.set(l,u=new Map),r||!u.has(s)){let p=o.map((b,C)=>({binding:C,resource:{buffer:b}})),f={label:s,layout:i,entries:p};a(f);let h=e.createBindGroup(f);return u.set(s,h),h}else return u.get(s)}},Ti=class n{#e=[];#t;#r;#o=new Map;#i={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#e.splice(0),this.#t=null,this.#o.clear(),this.#i={shader:"basic",lights:""}}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#t)){this.#t=t;let o=t.item.material??{shader:U.Basic};this.#i.shader=o.shader+"-"+(o.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Se(t.item))this.#e.push(t),this.#i.lights+="-"+t.item.type;else if(pe(t.item))this.#r??=t;else throw new Error("Unknown object type.")}build(e){let t=this._computeBasicData(),o=this.key,r=this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),i=this.fragment(t,{modifier:e?.fragment}),s=(...c)=>n.prototype.bindgroup.apply(this,c),a={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:r,fragment:i,key:o,bindings:s,metadata:a}}get key(){let{shader:e,lights:t}=this.#i;return"mesh-"+e+t}bindgroup(e,t,o){let i=this.#o.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e){return fn(e)}_computeBasicData(){let e=this.#t.item,t=this.#e,o=e.material,r=!z.isNull(o?.texture),i=!z.isNullOrEmpty(t),s=z.isNull(e)?U.Basic:e.material?.shader??U.Basic;return{hasTexture:r,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let{hasTexture:t,materialBindGroupIndex:o,lightingBindGroupIndex:r}=e,i=this.#o,s=this.#e,a={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:o,binding:0,type:"buffer"};t?i.set(ve.Mesh,[a,c,{key:"texture",group:o,type:"texture"}]):i.set(ve.Mesh,[a,c]),i.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let l=s.map((u,p)=>({key:"light",group:r,binding:p,type:"buffer"}));l.push(...l),i.set(ve.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),t){this._computeBindGroupsAndReferences(e);let o={definitions:[],bindings:[],modifiers:[]},r=i=>{for(let s of i.definitions??[])o.definitions.indexOf(s)===-1&&o.definitions.push(s);z.isNullOrEmpty(i.bindings)||o.bindings.push(...i.bindings),z.isNullOrEmpty(i.modifiers)||o.modifiers.push(...i.modifiers)};switch(e.shader){case U.Basic:if(e.hasTexture){let a=e.materialBindGroupIndex,c=vn({inputColor:Tt,outputColors:[Tt],uv:"uv"},a);r(c)}let i=0,s=this.#e;for(let a of s){switch(a.item.type){case"direction":let l=yn({outputColor:Nr,normal:"normal"},e.lightingBindGroupIndex,i);r(l);break;case"omni":let u=xn({outputColor:Nr,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,i);r(u);break;case"ambient":let p=bn({inputColor:Tt,outputColor:po},e.lightingBindGroupIndex,i);r(p);break}i++}return Tr.fragment(o,t)}}},Me={writeBufferConditionally:(n,e)=>{e.fresh&&n.queue.writeBuffer(e.buffer,0,e.value)}},No=class{constructor(e,t,o=new Co){this._context=e,this._builder=t,this._cache=o,this._ensureU32idBindGroup=(r,i,s)=>this._cache.ensureBindGroup(this._context,r,[i],s,this._pickBindGroupLayout,F+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(r,i,s,a,c=2)=>{let l=this._bindGroupLayouts[c],u=F+"material-bind-group";if(l.label!==F+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[i],a,l,u,p=>{let{device:f}=this.context,h=p.entries;s&&h.push({binding:1,resource:f.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:s.createView()})})},this._ensureWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindGroupLayouts[a];if(l.label!==F+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-"+(c?1:0),p=`${F}${c?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,u,[i],s,l,p)},this._ensureCameraProjectionAndInteractionDataBindGroup=(r,i,s,a,c=0,l=!1)=>{let u=this._bindGroupLayouts[c],p=r.key+"-"+(l?1:0),f=`${F}${l?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,p,[i,s],a,u,f)},this._ensureLightingBindGroup=(r,i,s=3)=>{let a=this._bindGroupLayouts[s],c=r.map(u=>u.id).join(":"),l=r.map(u=>u.buffer.buffer);return this._cache.ensureBindGroup(this._context,c,l,i,a,F+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=fe,this._bindPicker=fe,this._bindWorldTransform=fe,this._bindRaycastWorldTransform=fe,this._bindCameraProjectionAndInteractionData=fe,this._bindRaycastCameraProjectionAndInteractionData=fe,this._bindLighting=fe,this._bindMaterial=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a,...c)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,s),this._bindWorldTransform(r,s),this._bindMaterial(r,s),this._bindCameraProjectionAndInteractionData(r,a,i),this._bindLighting(r,...c);let l=s.item,u=l.geometry;r.draw(u.triangleIndices?.length||u.positions.length)}catch(l){console.error("Pacem.Drawing3D.FrameException",l)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,s),this._bindRaycastWorldTransform(r,s),this._bindRaycastCameraProjectionAndInteractionData(r,a,i),this._bindPicker(r,s);let c=s.item,l=c.geometry;r.draw(l.triangleIndices.length)}catch{}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){let t=z.extend({},In,e??{}),o=this._builder,r=o.build(t.modifiers),i=z.extend({pipeline:this},this._context),s=i.device,a={module:s.createShaderModule({code:r.vertex}),buffers:t.packedVertices?[Mt.createVertex(0,3,3,2)]:[Mt.createVertex(0,3),Mt.createVertex(1,3),Mt.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}}],label:F+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"mesh-transforms-bind-group-layout"}),u=[c,l],p={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=u.length,h=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:b}=r.metadata,C=b>0;C&&h.push({visibility:oe.FRAGMENT,binding:1,sampler:{}},...Array(b).keys().map(m=>({visibility:oe.FRAGMENT,binding:2+m,texture:{}})));let x={label:F+"material-bind-group-layout",entries:h},d=s.createBindGroupLayout(x);u.push(d);let _=u.length,{lightCount:T}=r.metadata,N=T>0;if(N){let m=s.createBindGroupLayout({entries:[...Array(T).keys()].map((g,y)=>({visibility:oe.FRAGMENT,binding:y,buffer:{type:"uniform"}})),label:F+"lighting-bind-group-layout"});u.push(m)}let E={label:F+"mesh-render-pipeline",vertex:a,fragment:p,layout:s.createPipelineLayout({label:F+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=u}),primitive:t.primitive};t.multisample&&(E.multisample={count:4},E.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(E);let v=this._pickBindGroupLayout=s.createBindGroupLayout({label:F+"mesh-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),A={label:F+"mesh-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:fi(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,l,v]}),primitive:t.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(A);let L=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometryPositions"),{buffer:M}=y.buffer(i,"geometryNormals"),{buffer:O}=y.buffer(i,"geometryTexCoords");m.setVertexBuffer(0,w),m.setVertexBuffer(1,M),m.setVertexBuffer(2,O)},P=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometry");m.setVertexBuffer(0,w)};this._bindVertex=t.packedVertices?P:L;let G=(m,g,y)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=g.buffer(i,"objectWorldTransform"),M=w.buffer;Me.writeBufferConditionally(s,w);let{group:O}=r.bindings(ve.Mesh,"objectWorldTransform",0),D=this._ensureWorldTransformBindGroup(g.item,M,w.fresh,O,y);m.setBindGroup(O,D)};this._bindWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!1)},this._bindRaycastWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!0)};let R=(m,g,y,w)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let M=g.buffer(i,"cameraViewTransform"),O=M.buffer;if(Me.writeBufferConditionally(s,M),z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing interaction buffers was provided.`);let D=y.buffer(i,"interaction"),X=D.buffer;Me.writeBufferConditionally(s,D);let{group:H}=r.bindings(ve.Camera,"cameraViewTransform",0),{group:K}=r.bindings(ve.Interaction,"interaction",0);if(H!==K)throw new ReferenceError(`Layout bind group mismatch: ${H} vs ${K}.`);let ie=this._ensureCameraProjectionAndInteractionDataBindGroup(g.item,O,X,M.fresh||D.fresh,H,w);m.setBindGroup(H,ie)};this._bindCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!1)},this._bindRaycastCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!0)},this._bindMaterial=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let w=y.buffer(i,"material"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=y.texture(i),D=O?.texture,X=this._ensureMaterialBindGroup(y.item,M,D,w.fresh,f);m.setBindGroup(f,X),C&&s.queue.copyExternalImageToTexture({source:O.source,flipY:!0},{texture:D},{width:D.width,height:D.height})},this._bindLighting=(m,...g)=>{if(N){let w=Array.from(g).map(D=>({buffer:D.buffer(i,"light"),id:D.item.key})),M=w.some(D=>D.buffer.fresh),O=this._ensureLightingBindGroup(w,M,_);for(let D of w)Me.writeBufferConditionally(s,D.buffer);m.setBindGroup(_,O)}},this._bindPicker=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=y.buffer(i,"u32id"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=2,D=w.fresh,X=this._ensureU32idBindGroup(y.item,M,D);m.setBindGroup(O,X)}}},Mi=class n{#e;#t;#r=new Map;constructor(...e){this.add(...e)}reset(){this.#e=null,this.#r.clear()}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#e))this.#e=t;else throw new Error("Line already added.");else if(pe(t.item))this.#t??=t;else if(!Se(t.item))throw new Error("Unknown object type.")}build(){let e=this._computeBasicData(),t=this.key,o=this.vertex(e),r=this.fragment(e);return{vertex:o,fragment:r,key:t,bindings:(...s)=>n.prototype.bindgroup.apply(this,s),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){let e=(this.#e?.item).material?.lineWidth>1;return U.Line+(e?"-fat":"")}bindgroup(e,t,o){let i=this.#r.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e=this._computeBasicData()){return e.thickness>1?gn():mn()}_computeBasicData(){let e=this.#e.item,t=z.isNull(e)?U.Line:e.material?.shader??U.Line,o=e.material,r=o?.lineWidth??1,i=o?.dashArray;return{shader:t,thickness:r,dashPattern:i}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let t=this.#r,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},r={key:"material",group:3,binding:0,type:"buffer"},i={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};t.set(ve.Mesh,[o,r,i,s]),t.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);let t={definitions:[],bindings:[],modifiers:[]};if(e.shader===U.Line)return Mr.fragment(t)}},Ro=class{#e;constructor(e,t,o=new Co){this._lineBuilder=t,this._cache=o,this._ensureLineU32idBindGroup=(r,i,s)=>{let a=this.context;return this._cache.ensureBindGroup(a,r,[i],s,this._pickLineBindGroupLayout,F+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(r,i,s,a=2)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,[i],s,c,F+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(r,i,s,a)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,i,s,c,F+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindLineGroupLayouts[a];if(l.label!==F+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-transforms-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._ensureLineCameraProjectionBindGroup=(r,i,s,a=0,c=!1)=>{let l=this._bindLineGroupLayouts[a],u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-view-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._bindLineGroupLayouts=[],this._bindLinePositions=fe,this._bindLinePicker=fe,this._bindLineWorldTransform=fe,this._bindLineRaycastWorldTransform=fe,this._bindLineCameraProjection=fe,this._bindLineRaycastCameraProjection=fe,this._bindLineMaterial=fe,this._drawLine=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,s),this._bindLineCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLineMaterial(r,s),this._drawLine(r,s)}catch(c){console.error("Pacem.Drawing3D.FrameException",c)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,s),this._bindLineRaycastCameraProjection(r,a),this._bindLinePositions(r,s),this._bindLinePicker(r,s),this._drawLine(r,s)}catch{}},this.#e=e,this._lineKey=t.key}get context(){return this.#e}get key(){return this._lineKey}build(e){let t=z.extend({},In,e??{}),o=this._lineBuilder,r=o.build(),i=z.extend({pipeline:this},this.#e),s=i.device,a=r.metadata.thickness>1,c={module:s.createShaderModule({code:r.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-transforms-bind-group-layout"}),u=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-view-bind-group-layout"}),p=[{binding:0,visibility:oe.VERTEX,buffer:{type:"read-only-storage"}}];a&&p.push({binding:1,visibility:oe.VERTEX,buffer:{type:"uniform"}});let f=s.createBindGroupLayout({entries:p,label:F+"line-positions-bind-group-layout"}),h=[u,l,f],b=h.length,C=h.slice(),x={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},d=C.length,_=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],T={label:F+"line-material-bind-group-layout",entries:_},N=s.createBindGroupLayout(T);C.push(N);let E=a?t.primitive.topology:"line-list",v={label:F+"line-render-pipeline",vertex:c,fragment:x,layout:s.createPipelineLayout({label:F+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=C}),primitive:z.extend({},t.primitive,{topology:E})};t.multisample&&(v.multisample={count:4},v.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(v);let A=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:F+"line-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),L={label:F+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:fi(b)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(A)}),primitive:z.extend({},t.primitive,{topology:E}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(L);let P=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=m.buffer(i,"objectWorldTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Mesh,"objectWorldTransform",0),O=this._ensureLineWorldTransformBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!1)},this._bindLineRaycastWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!0)};let G=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let y=m.buffer(i,"cameraViewTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Camera,"cameraViewTransform",0),O=this._ensureLineCameraProjectionBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!1)},this._bindLineRaycastCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!0)},this._bindLinePositions=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided as index 0.`);let y=g.buffer(i,"geometryPositions"),w=y.buffer,M=y.fresh,O=[w];if(Me.writeBufferConditionally(s,y),a){let H=g.buffer(i,"line"),K=H.buffer;M||=H.fresh,O.push(K),Me.writeBufferConditionally(s,H)}let{group:D}=r.bindings(ve.Mesh,"line",0),X=this._ensureLinePositionsBindGroup(g.item,O,M,D);R.setBindGroup(D,X)},this._bindLineMaterial=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let y=g.buffer(i,"material"),w=y.buffer;Me.writeBufferConditionally(s,y);let M=this._ensureLineMaterialBindGroup(g.item,w,y.fresh,d);R.setBindGroup(d,M)},this._bindLinePicker=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=g.buffer(i,"u32id"),w=y.buffer,M=y.value;Me.writeBufferConditionally(s,y);let O=this._ensureLineU32idBindGroup(g.item,w,!1);R.setBindGroup(b,O)},this._drawLine=(R,...m)=>{let y=m.at(0).item,w=y.geometry;a?R.draw(6,w.positions.length-1,0,0):R.draw(w.positions.length)}}};import{Utils as At}from"@pacem/pacem-core";var Or=class{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer;if(t.has(e)){let o=t.get(e);for(let r of o.values())r.destroy();o.clear(),t.delete(e)}}static createColorPicking(e){let t=this._memoizer;t.has(e)||t.set(e,new Map);let o=t.get(e),r="colorpick";if(o.has(r))return o.get(r);let i=new Ii(e);return o.set(r,i),i}},Lr=1,Ii=class{constructor(e){this._context=e,this._objects=new Map,this.frame=(t,...o)=>{if(At.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let r=Array.from(o);It.createColorPicking(this._context,r)?.frame(this._pass,t,...o);for(let s of r)s.item.inert||this._objects.set(s.id,s)},this.end=t=>{if(!At.isNull(this._handle))return this._handle;let o=this._pass,r=this._encoder,{device:i}=this._context,{render:s}=this._textures,a=s.texture,c=this._ensureBuffer();o.end(),r.copyTextureToBuffer({texture:a,origin:{x:t.x,y:t.y}},{buffer:c,bytesPerRow:(Lr*4+255|0)*256,rowsPerImage:1},{width:Lr}),i.queue.submit([r.finish()]),this._encoder=null;let l=this,u=l._objects,p=()=>{l._handle=null};return this._handle=new Promise((f,h)=>{c.mapAsync(uo.READ,0,4*Lr).then(b=>{let x=new Uint32Array(c.getMappedRange(0,4*Lr))[0];c.unmap(),p();let d=u.get(x);f(d?[d.item]:[])})})}}_createTexture(e){let{device:t,canvas:o}=this._context,r=Math.min(t.limits.maxTextureDimension2D,o.clientWidth),i=Math.min(t.limits.maxTextureDimension2D,o.clientHeight);return t.createTexture({size:[r,i,1],format:e,usage:Re.COPY_SRC|Re.RENDER_ATTACHMENT})}_ensureBuffer(){let e=this._buffer;if(!At.isNull(e))return e;let{device:t}=this._context;return this._buffer=t.createBuffer({label:j+"colorpick-output-buffer",size:Lr*4,usage:ye.MAP_READ|ye.COPY_DST})}_ensureTextures(){let e=this._textures;if(!At.isNull(e))return e;let t=this._createTexture("r32uint"),o=this._createTexture("depth24plus"),r={texture:t,view:t.createView()},i={texture:o,view:o.createView()};return this._textures={render:r,depth:i}}_destroyTexture(e){At.isNull(e)||e.texture?.destroy()}destroy(){let e=this._textures,t=this._buffer;if(!At.isNullOrEmpty(e)){let{render:o,depth:r}=e;this._destroyTexture(o),this._destroyTexture(r),this._textures=null}At.isNull(t)||(t.destroy(),this._buffer=null)}begin(){let{device:e}=this._context;this._encoder=e.createCommandEncoder({label:j+"colorpick-raycaster"});let{render:t,depth:o}=this._ensureTextures(),r={label:j+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(r),this._objects.clear()}};var Ai=xa.LinearAlgebra.Vector3D,nr;(function(n){n[n.NotSupported=0]="NotSupported",n[n.Disabled=1]="Disabled"})(nr||(nr={}));var To=class{static create(e,t){return new Promise((o,r)=>{if(navigator.gpu){let i=new Pi(e);i.init(t).then(s=>o(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:nr.Disabled};r(c)})}else{let s={message:"WebGPU not supported.",cause:nr.NotSupported};r(s)}})}};function ba(n){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Ai.from(0,0,0),up:Ai.j(),position:Ai.from(0,0,1),type:"orthographic",flags:[],stage:n}}function Ea(...n){for(let e of n||[])e?.destroy()}var Pi=class{#e;#t;#r;#o;#i;#s;#n;#l;#a;#p;#f;#h;constructor(e){this.#o=new WeakMap,this.#i=new WeakMap,this.#s=new WeakMap,this.#a={enableValidation:!1},this.#p=!1,this._logError=r=>{let i=this.#e,s=i.logger;if(!te.isNull(s)){let a="error"in r?r.error:r;s.log(va.LogLevel.Error,a.message,"WebGPU")}},this.#c=!0,this.#u=!1;let t=(this.#e=e).stage,o=document.createElement("canvas");o.id=_a+"_3d_stage_"+te.uniqueCode(),t.innerHTML="",t.appendChild(this.#t=o),this.#f=tr.create(this.#h={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:e,format:t}){let{context:o,device:r}=this.#r,i=o.getCurrentTexture(),s=this.#l;if(te.isNull(s)){if(s={},e){let b=r.createTexture({label:j+"render-texture",format:t??i.format,usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.render={texture:b,view:b.createView({label:j+"render-texture-view"})};let C=r.createTexture({label:j+"depth-texture",format:"depth24plus",usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.depth={texture:C,view:C.createView({label:j+"depth-texture-view"})}}this.#l=s}let{transparent:a,background:c}=this.#e,l=a?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?ya.parse(c):c:{r:0,g:0,b:0,a:1},u=We.flattenVectorArray([l]),p=i.createView({label:j+"canvas-texture-view"}),f={view:p,clearValue:u,loadOp:"clear",storeOp:"store"},h={colorAttachments:[f]};if(e){let b=s.render.view,C=s.depth.view;h.depthStencilAttachment={view:C,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},f.view=b,f.resolveTarget=p}return h}_buildContext(e=this.#t,t=this.#e.size){t??=e;let o=t.width,r=t.height,i=1;e.width=o*i,e.height=r*i;let s=e.getContext("webgpu"),a=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:a}}_buildUpContext(e,t,o,r){let{transparent:i}=this.#e;o.configure({alphaMode:i?"premultiplied":"opaque",device:e,format:r}),this.#r={device:e,adapter:t,canvas:this.#t,context:o,format:r},this.#c=!1}async init(e){this.#a=e;let t=await navigator.gpu.requestAdapter();if(te.isNull(t))throw new Error("WebGPU adapter unavalable or disabled.");let o=await t.requestDevice();if(te.isNull(t))throw new Error("WebGPU device unavalable or disabled.");o.addEventListener("uncapturederror",this._logError),this.#u=!te.isNull(e.modifiers?.version)&&!te.isNull(e.modifiers)&&(!te.isNull(e.modifiers.vertexInput)||!te.isNull(e.modifiers.vertexOutput)||!te.isNull(e.modifiers.fragment));let{context:r,textureFormat:i}=this._buildContext();this._buildUpContext(o,t,r,i)}#c;#u;render(e){if(this.#c||te.isNull(this.#n)||!(this.#t.width>0)||!(this.#t.height>0))return;let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1;this.#u&&te.extend(this.#h,e);let a=this._buildPassDescriptor({multisample:!0}),c=o.createCommandEncoder({label:j+"renderer"}),l=c.beginRenderPass(a);r.loop((u,p,f)=>{if(u.item.hide)return!1;i&&o.pushErrorScope("validation");let h=[u,p,...f];return It.create(t,h,{multisample:!0,modifiers:this.#a.modifiers}).frame(l,this.#f,...h),i&&o.popErrorScope().then(C=>{C&&this._logError(C)}),!0}),l.end(),o.queue.submit([c.finish()])}set disabled(e){this.#p=e}get disabled(){return this.#p}raycast(e){if(this.#c||te.isNull(this.#n))return Promise.resolve([]);let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1,s=Or.createColorPicking(t);return s.begin(),r.loop((a,c)=>a.item.hide?!1:(i&&o.pushErrorScope("validation"),s.frame(this.#f,a,c),i&&o.popErrorScope().then(l=>{l&&this._logError(l)}),!0)),s.end(e)}_disposeRenderableJustInCase(e){let t=this.#o;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,t=this.#i,o=this.#s){e.stage??=this.#e;let r=this.#o,i=r.get(e);return te.isNull(i)&&r.set(e,i=q.create(e,t)),i}_createOrYieldGeometry(e){let t=this.#i,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_createOrYieldMaterial(e){let t=this.#s,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let o of e.children)o.item.stage??=this.#e,Ee(o.item)&&t.meshes.push(o),pe(o.item)&&t.cameras.push(o),Se(o.item)&&t.lights.push(o),vt(o.item)&&(t.groups.push(o),this._unwrapBuffers(o,t));return t}_update(e){let t=[],o=[],r=[],i=l=>this._createOrYieldRenderable(l),s;for(let l of e){if(l.hide){this._disposeRenderableJustInCase(l);continue}if(l.stage??=this.#e,vt(l)){let u=l;u.flags.includes(I.Children)&&this.#o.delete(u),t.push(i(u))}Ee(l)&&l.geometry&&(this._createOrYieldGeometry(l.geometry),te.isNull(l.material)||this._createOrYieldMaterial(l.material),o.push(i(l))),Se(l)&&r.push(i(l)),pe(l)&&(s??=l)}s??=ba(this.#e);let a=i(s),c={meshes:o,lights:r,cameras:[a],groups:t};for(let l of t)c=this._unwrapBuffers(l,c);this.#n?.items.meshes.forEach(l=>{o.includes(l)||l.destroy()}),this.#n=new wo(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#n=null,this._disposeContext()){let{device:e}=this.#r;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){let e=this.#r;if(te.isNull(e))return!1;Or.dispose(e),It.dispose(e);let t=this.#l;if(this.#l=null,!te.isNull(t)){let{render:o,depth:r}=t;Ea(o?.texture,r?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#c=!0,this._disposeContext()){let{device:t,adapter:o}=this.#r,{context:r,textureFormat:i}=this._buildContext(this.canvas,e);this._buildUpContext(t,o,r,i),this.#u&&te.extend(this.#h,{resolution:e})}}get canvas(){return this.#t}};var Lt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Pn="WebGPURaycastCallback",Li="WebGPURaycastPixel",Ln=Mo.getAttachedPropertyValue,On=Mo.setAttachedPropertyValue,Ta=Mo.deleteAttachedPropertyValue,sr=class extends Na.PacemItemElement{findContainer(){return Mo.findAncestor(this,e=>e instanceof Pt)}#e="";get version(){return this.#e}#t=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#t.observe(this,{characterData:!0})}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="wgsl"&&this._computeVersion(o)}_computeVersion(e=this.wgsl){Ra.hash(e).then(t=>{if(t!==this.#e){let o=this.#e,r=t;this.#e=r;let i=new Oi({propertyName:"version",oldValue:o,currentValue:r,firstChange:pt.isNullOrEmpty(o)});this.dispatchEvent(i)}})}disconnectedCallback(){this.#t.disconnect(),super.disconnectedCallback()}};Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"type",void 0);Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"wgsl",void 0);sr=Lt([Dn({tagName:Gn+"-3d-wgsl-script"})],sr);var Pt=class extends Je{constructor(){super(...arguments),this.#e=[],this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)},this.#t=new Set,this.#r=new Map,this.#o=!0,this.#i=!0,this.#s=new WeakMap}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}#e;get items(){return this.#e}register(e){let t=this.#e;return e instanceof sr&&!t.includes(e)?(e.addEventListener(An,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=this.#e,o=t.indexOf(e);return o>=0?(e.removeEventListener(An,this._scriptVersionChangeHandler,!1),t.splice(o,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}#t;#r;#o;#i;get supported(){return this.#o}get active(){return this.#i}_webGPUNotSupported(e){this.#o&&e.cause===nr.NotSupported&&(this.#o=!1,this.dispatchEvent(new Oi({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#i&&(this.#i=!1,this.dispatchEvent(new Oi({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=this.#r,o=this.#t;return o.has(e)||o.add(e),To.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(r=>(t.get(e)?.update(),t.set(e,r),this._updatePipeline(e),r.canvas),r=>(this.log(Ca.LogLevel.Error,r.message),this._webGPUNotSupported(r),null))}_parseWgslModifiers(e){let t=this.#e,o=t.find(l=>l.type=="vertex-input"),r=t.find(l=>l.type=="vertex-output"),i=t.find(l=>l.type=="fragment"),s=o?.wgsl,a=r?.wgsl,c=i?.wgsl;this.modifiers={vertexInput:s,vertexOutput:a,fragment:c,version:e}}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=this.#r;for(let[t,o]of e)o?.dispose();e.clear(),this.#t.clear(),super.disconnectedCallback()}dispose(e){let t=this.#r,o=this.#t;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),o.has(e)&&o.delete(e)}_reinitialize(){for(let e of this.#t.values())this.initialize(e)}_ensureRenderer(e){return this.#r.get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}#s;render(e){let t=e.size?.width,o=e.size?.height;if(!(t>0)||!(o>0))return;let r=this._ensureRenderer(e);if(pt.isNull(r))return;this.#s.has(e)&&(this.#s.delete(e),this._itemsChangedExec(e));let i=Ln(e,Li);if(r.render({cursor:i,time:performance.now(),resolution:{width:t,height:o}}),!e.interactive)return;let s=Ln(e,Pn);if(!pt.isNullOrEmpty(s)){if(pt.isNullOrEmpty(i)){s(null);return}r.raycast(i).then(a=>{if(pt.isNullOrEmpty(a))s(null);else{let c={object:a[0],point:null};s(c)}})}}snapshot(e,t,o,r){let i=this.#r;if(!i.has(e))return Promise.resolve(null);let{canvas:s}=i.get(e),a=!pt.isNullOrEmpty(t),c=o??(a?"image/jpeg":null),l=r??(a?.9:null);return new Promise((u,p)=>{this.render(e),pt.snapshotElement(s,t,c,l).then(u)})}raycast(e,t,o,r){On(e,Pn,r),t.x<0||t.y<0||t.x>=o.width||t.y>=o.height?Ta(e,Li):On(e,Li,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#s.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(pt.isNull(t)||t.flags.indexOf(I.Visibility)>=0||t.flags.indexOf(I.Children)>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lt([wa(100)],Pt.prototype,"_parseWgslModifiers",null);Lt([Io({emit:!1})],Pt.prototype,"modifiers",void 0);Lt([Io({emit:!1,converter:Di.Boolean})],Pt.prototype,"enableValidation",void 0);Pt=Lt([Dn({tagName:Gn+"-3d-webgpu-adapter"})],Pt);import{CustomElement as Ma,P as Ia,Watch as ht,PropertyConverters as Dt,Utils as Ot,CustomEventUtils as Gi,avoidHandler as Dr,Behaviors as Aa,PropertyChangeEventName as Bn}from"@pacem/pacem-core";import{Geometry as Lo}from"@pacem/pacem-numerical";var Ye=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},le=Lo.LinearAlgebra.Vector3D,ft=Lo.LinearAlgebra.Matrix3D,Ao=Lo.LinearAlgebra.Quaternion,Kp=Lo.LinearAlgebra.Spherical;function Pa(n){return pe(n)?n.stage:null}var La=1,Oa=1,Da=.05,Gr=.001,Br={maxAzimuth:180,minAzimuth:-180,inertia:!1,maxPolar:1/0,minPolar:-1/0,zoom:{enabled:!0},pan:{enabled:!0,button:2},rotation:{enabled:!0,button:0}},Po=class n{constructor(e,t){this._config=t,this._input={rho:0,theta:0,phi:0,x:0,y:0},this._progress={rho:0,theta:0,phi:0,x:0,y:0},this._startHandler=i=>{let{rotation:s,pan:a}=this._config,c=i.pointerType==="mouse",l=s.enabled&&c&&i.button===s.button&&Gi.matchModifiers(i,s.modifiers),u=a.enabled&&c&&i.button===a.button&&Gi.matchModifiers(i,a.modifiers);!l&&!u||(this.#t=l,(this.#e=u)&&(this._currentState=n._buildState(this._camera),Ot.extend(this._input,le.zero()),this._progress.x=this._progress.y=0),Dr(i),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=i=>Dr(i),this._endHandler=i=>{Dr(i),window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=i=>{let{zoom:s}=this._config;if(!(s.enabled&&Gi.matchModifiers(i,s.modifiers)))return;Dr(i);let c=this._input;c.rho-=Math.sign(i.deltaY)},this._moveHandler=i=>{Dr(i);let{height:s,width:a}=this._scene.size,c=this._input,l=Math.min(s,a);if(this.#t){let u=-La*360/l,{phi:p,theta:f}=c,{maxPolar:h,minPolar:b,maxAzimuth:C,minAzimuth:x}=this._config;c.phi=(p+i.movementX*u).clamp(b,h),c.theta=(f+i.movementY*u).clamp(x,C)}else if(this.#e){let u=this._currentState.radius/l;c.x+=-i.movementX*u,c.y+=i.movementY*u}},this._renderHandler=i=>{this._update()};let o=this._scene=(this._camera=e).stage;this._initialState=this._currentState=n._buildState(e);let r=this._canvas=o.stage;r.addEventListener("pointerdown",this._startHandler,!1),r.addEventListener("wheel",this._zoomHandler,{passive:!1}),o.addEventListener("render",this._renderHandler,!1)}static _buildState(e){let t=le.subtract(e.position,e.lookAt),o=le.mag(t);return{target:e.lookAt,versor:le.unit(t),up:e.up,radius:o,position:e.position}}static tryAttach(e,t){t??=Br;let o=Pa(e)?.stage;if(Ot.isNull(o))return null;{let{position:r,lookAt:i}=e;return Ot.isNull(r)||Ot.isNull(i)||le.areClose(r,i)?null:new n(e,t)}}get configuration(){return this._config}set configuration(e){this._config=e}#e;#t;_getSafeAzimuth({theta:e}){return n._modAngle(e)}_getSafePolar({phi:e}){return n._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){let{versor:t,up:o}=e,r=le.cross(t,o),i=le.cross(r,t);return le.normalize(r),le.normalize(i),{right:r,up:i,versor:t}}#r;_update(){if(this.#r)return;this.#r=!0;let e=this._camera,{radius:t,versor:o,target:r,up:i}=this._initialState,{target:s}=this._currentState,{theta:a,phi:c,rho:l,x:u,y:p}=this._input,f=this._progress,{theta:h,phi:b,rho:C,x,y:d}=f,_=Math.abs(b-c)>Gr||Math.abs(h-a)>Gr,T=Math.abs(C-l)>Gr,N=Math.abs(u-x)>Gr||Math.abs(p-d)>Gr;if(T||_||N){let E=typeof this._config.inertia=="boolean"?this._config.inertia?Da:0:this._config.inertia,v=E>0&&E<1,{right:A,up:L}=n._getViewXYZ(this._initialState),P=r,G=i,R=s,m=C;v?m+=(l-C)*E:m=l,f.rho=m;let g=Math.pow(.95,m*Oa),y=le.scale(o,-g*t);P=le.add(P,y);let w=b,M=h;v?(w+=(c-b)*E,M+=(a-h)*E):(w=c,M=a);let O=this._getSafePolar({phi:f.phi=w}),D=this._getSafeAzimuth({theta:f.theta=M}),X=le.negate(r),H=ft.translate(ft.identity(),X),K=Ao.fromAxisAngle(L,O),ie=Ao.fromAxisAngle(A,D),he=ft.multiply(Ao.toRotationMatrix(ie),Ao.toRotationMatrix(K));H=ft.multiply(H,he),H=ft.translate(H,le.negate(X)),P=ft.transform(P,H),G=ft.transform(G,ft.clone(H,dt=>{dt.offsetX=dt.offsetY=dt.offsetZ=0}));let se=x,ue=d,re=se,Y=ue;v?(re+=(u-se)*E,Y+=(p-ue)*E):(re=u,Y=p),f.x=re,f.y=Y;let{right:de,up:me}=n._getViewXYZ(this._currentState),Le=le.scale(de,re),Oe=le.scale(me,Y),Gt=le.add(Le,Oe);R=le.add(s,Gt),e.lookAt=R,e.position=P,e.up=G,e.flags.push(I.Camera)}this.#r=!1}dispose(){let e=this._canvas,t=this._scene;Ot.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),t.removeEventListener("render",this._renderHandler,!1)}},Pe=class extends Aa.PacemBehavior{constructor(){super(...arguments),this.#e=new Map,this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(Bn,this._readyHandler),this._decorateCore(t)}}}#e;propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let i=this._buildConfig(),s=this.#e;for(let a of s.values())a.configuration=i;break}}disconnectedCallback(){let e=this.#e;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Ot.extend({},Br,{maxAzimuth:this.maxAzimuth??1/0,minAzimuth:this.minAzimuth??-1/0,minPolar:this.minPolar??-1/0,maxPolar:this.maxPolar??1/0,inertia:this.inertia??!1,zoom:this.zoomControl??Br.zoom,pan:this.panControl??Br.pan,rotation:this.rotationControl??Br.rotation})}_decorateCore(e){let t=Po.tryAttach(e,this._buildConfig());Ot.isNull(t)||this.#e.set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(Bn,this._readyHandler,!1)}undecorate(e){let t=this.#e;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"zoomControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"rotationControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"panControl",void 0);Ye([ht({emit:!1,converter:Go})],Pe.prototype,"inertia",void 0);Pe=Ye([Ma({tagName:Ia+"-"+"3d"+"-orbit-camera"})],Pe);var Vn={};Oo(Vn,{BooleanOrNumberConverter:()=>Go,DragEvent:()=>mt,KnownShader:()=>U,LineGeometry:()=>et,MaterialElement:()=>Q,MeshGeometry:()=>W,NodeGeometry:()=>Et,NotifyChange:()=>bt,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Point3DConverter:()=>$e,Point3DOrNumberConverter:()=>Vr,QuaternionConverter:()=>Do,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Transformer as Ba}from"@pacem/pacem-core";import{Point as Sa}from"@pacem/pacem-foundation";var Ga=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Si=class{static parse(e){let t=[],o=/^v((\s+-?[\d\.]+){3})/gm,r=o.exec(e);for(;r&&r.length;)t.push($e.convert(r[1])),r=o.exec(e);let i=[],s=/^vt((\s+-?[\d\.]+){2})/gm;for(r=s.exec(e);r&&r.length;)i.push(Sa.parse(r[1])),r=s.exec(e);let a=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(r=c.exec(e);r&&r.length;)a.push($e.convert(r[1])),r=c.exec(e);let l=[],u=[],p=[],f=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(r=f.exec(e);r&&r.length;){let T=/([\d]+)\/([\d]+)\/([\d]+)/g,N=r[1],E=T.exec(N),v=0;for(var h,b,C,x,d,_;E&&E.length;)v>2&&(p.push(h),u.push(i[b]),l.push(a[C]),p.push(x),u.push(i[d]),l.push(a[_])),x=parseInt(E[1])-1,d=parseInt(E[2])-1,_=parseInt(E[3])-1,p.push(x),u.push(i[d]),l.push(a[_]),v===0&&(h=x,b=d,C=_),v++,E=T.exec(N);r=f.exec(e)}return new W(t,p,u,l)}},Vi=class{static parseGeometry(e,t){if(t.toLowerCase()==="obj")return Si.parse(e);throw new Error(`Type '${t}' is not supported.`)}};Ga([Ba("parse3D")],Vi,"parseGeometry",null);export{Sn as Components,Vn as Drawing3D};
|
package/dist/bundle/pacem-3d.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-3d v1.0.0-
|
|
2
|
+
* @pacem/pacem-3d v1.0.0-euler (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
@@ -6229,7 +6229,7 @@ var LineRenderPipelineClass = class {
|
|
|
6229
6229
|
this.draw = (pass, ...buffers) => {
|
|
6230
6230
|
throw new Error("Deprecated.");
|
|
6231
6231
|
};
|
|
6232
|
-
this.frame = (pass, meshBuffer, cameraBuffer) => {
|
|
6232
|
+
this.frame = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {
|
|
6233
6233
|
pass.setPipeline(this._linePipeline);
|
|
6234
6234
|
try {
|
|
6235
6235
|
this._bindLineWorldTransform(pass, meshBuffer);
|
|
@@ -6241,7 +6241,7 @@ var LineRenderPipelineClass = class {
|
|
|
6241
6241
|
console.error("Pacem.Drawing3D.FrameException", e);
|
|
6242
6242
|
}
|
|
6243
6243
|
};
|
|
6244
|
-
this.raycast = (pass, meshBuffer, cameraBuffer) => {
|
|
6244
|
+
this.raycast = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {
|
|
6245
6245
|
pass.setPipeline(this._pickLinePipeline);
|
|
6246
6246
|
try {
|
|
6247
6247
|
this._bindLineRaycastWorldTransform(pass, meshBuffer);
|
|
@@ -6294,6 +6294,14 @@ var LineRenderPipelineClass = class {
|
|
|
6294
6294
|
type: "uniform"
|
|
6295
6295
|
}
|
|
6296
6296
|
}
|
|
6297
|
+
// interaction
|
|
6298
|
+
/*{
|
|
6299
|
+
binding: UNIFORM_BINDING_INDEX_INTERACTION,
|
|
6300
|
+
visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
|
|
6301
|
+
buffer: {
|
|
6302
|
+
type: 'uniform'
|
|
6303
|
+
}
|
|
6304
|
+
}*/
|
|
6297
6305
|
],
|
|
6298
6306
|
label: labelPrefix + "line-view-bind-group-layout"
|
|
6299
6307
|
});
|
|
@@ -6323,7 +6331,7 @@ var LineRenderPipelineClass = class {
|
|
|
6323
6331
|
entries: lineEntries,
|
|
6324
6332
|
label: labelPrefix + "line-positions-bind-group-layout"
|
|
6325
6333
|
});
|
|
6326
|
-
const vertexBindGroupLayouts = [
|
|
6334
|
+
const vertexBindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout, lineBindGroupLayout];
|
|
6327
6335
|
const raycastLayoutIndex = vertexBindGroupLayouts.length;
|
|
6328
6336
|
const bindGroupLayouts = vertexBindGroupLayouts.slice();
|
|
6329
6337
|
const fragment = {
|