@footgun/cobalt 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bundle.js CHANGED
@@ -1,4 +1,4 @@
1
- var zn=Object.defineProperty;var Ie=(s,r)=>{for(var m in r)zn(s,m,{get:r[m],enumerable:!0})};function Rt(s,r,m,v,P,T,B){let G=s.createTexture({label:r,size:{width:m,height:v},format:T,usage:B,mipLevelCount:P,sampleCount:1,dimension:"2d"}),_=G.createView(),U=[];for(let R=0;R<P;R++)U.push(G.createView({label:r,format:T,dimension:"2d",aspect:"all",baseMipLevel:R,mipLevelCount:1,baseArrayLayer:0,arrayLayerCount:1}));let z=s.createSampler({label:`${r} sampler`,addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"});return{size:{width:m,height:v},texture:G,view:_,mip_view:U,sampler:z}}async function qt(s,r,m,v="rgba8unorm"){let T=await(await fetch(m)).blob(),B=await createImageBitmap(T),G=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,U=Rt(s.device,r,B.width,B.height,1,v,G);s.device.queue.copyExternalImageToTexture({source:B},{texture:U.texture},{width:B.width,height:B.height});let z={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return U.sampler=s.device.createSampler(z),U}function oe(s,r,m,v="rgba8unorm"){let P=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,B=Rt(s.device,r,m.width,m.height,1,v,P);s.device.queue.writeTexture({texture:B.texture},m.data,{bytesPerRow:4*m.width},{width:m.width,height:m.height});let G={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return B.sampler=s.device.createSampler(G),B}var Le="const BLOOM_MIP_COUNT:i32=7;const MODE_PREFILTER:u32=0u;const MODE_DOWNSAMPLE:u32=1u;const MODE_UPSAMPLE_FIRST:u32=2u;const MODE_UPSAMPLE:u32=3u;const EPSILON:f32=1.0e-4;struct bloom_param{parameters:vec4<f32>,combine_constant:f32,doop:u32,ferp:u32,}struct mode_lod_param{mode_lod:u32,}@group(0)@binding(0)var output_texture:texture_storage_2d<rgba16float,write>;@group(0)@binding(1)var input_texture:texture_2d<f32>;@group(0)@binding(2)var bloom_texture:texture_2d<f32>;@group(0)@binding(3)var samp:sampler;@group(0)@binding(4)var<uniform> param:bloom_param;@group(0)@binding(5)var<uniform> pc:mode_lod_param;fn QuadraticThreshold(color:vec4<f32>,threshold:f32,curve:vec3<f32>)->vec4<f32>{let brightness=max(max(color.r,color.g),color.b);var rq:f32=clamp(brightness-curve.x,0.0,curve.y);rq=curve.z*(rq*rq);let ret_color=color*max(rq,brightness-threshold)/max(brightness,EPSILON);return ret_color;}fn Prefilter(color:vec4<f32>,uv:vec2<f32>)->vec4<f32>{let clamp_value=20.0;var c=min(vec4<f32>(clamp_value),color);c=QuadraticThreshold(color,param.parameters.x,param.parameters.yzw);return c;}fn DownsampleBox13(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,tex_size:vec2<f32>)->vec3<f32>{let A=textureSampleLevel(tex,samp,uv,lod).rgb;let texel_size=tex_size*0.5;let B=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,-1.0),lod).rgb;let C=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,1.0),lod).rgb;let D=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,1.0),lod).rgb;let E=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,-1.0),lod).rgb;let F=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let G=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,0.0),lod).rgb;let H=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,2.0),lod).rgb;let I=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let J=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let K=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,0.0),lod).rgb;let L=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let M=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,-2.0),lod).rgb;var result:vec3<f32>=vec3<f32>(0.0);result=result+(B+C+D+E)*0.5;result=result+(F+G+A+M)*0.125;result=result+(G+H+I+A)*0.125;result=result+(A+I+J+K)*0.125;result=result+(M+A+K+L)*0.125;result=result*0.25;return result;}fn UpsampleTent9(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,texel_size:vec2<f32>,radius:f32)->vec3<f32>{let offset=texel_size.xyxy*vec4<f32>(1.0,1.0,-1.0,0.0)*radius;var result:vec3<f32>=textureSampleLevel(tex,samp,uv,lod).rgb*4.0;result=result+textureSampleLevel(tex,samp,uv-offset.xy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv-offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv-offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.zw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xy,lod).rgb;return result*(1.0/16.0);}fn combine(ex_color:vec3<f32>,color_to_add:vec3<f32>,combine_constant:f32)->vec3<f32>{let existing_color=ex_color+(-color_to_add);let blended_color=(combine_constant*existing_color)+color_to_add;return blended_color;}@compute @workgroup_size(8,4,1)fn cs_main(@builtin(global_invocation_id)global_invocation_id:vec3<u32>){let mode=pc.mode_lod>>16u;let lod=pc.mode_lod&65535u;let imgSize=textureDimensions(output_texture);if(global_invocation_id.x<u32(imgSize.x)&&global_invocation_id.y<u32(imgSize.y)){var texCoords:vec2<f32>=vec2<f32>(f32(global_invocation_id.x)/f32(imgSize.x),f32(global_invocation_id.y)/f32(imgSize.y));texCoords=texCoords+(1.0/vec2<f32>(imgSize))*0.5;let texSize=vec2<f32>(textureDimensions(input_texture,i32(lod)));var color:vec4<f32>=vec4<f32>(1.0);if(mode==MODE_PREFILTER){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);color=Prefilter(color,texCoords);}else if(mode==MODE_DOWNSAMPLE){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);}else if(mode==MODE_UPSAMPLE_FIRST){let bloomTexSize=textureDimensions(input_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(input_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}else if(mode==MODE_UPSAMPLE){let bloomTexSize=textureDimensions(bloom_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(bloom_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}textureStore(output_texture,vec2<i32>(global_invocation_id.xy),color);}}";var Ot=7,Un=0,Ae=1,En=2,Fe=3,Re={type:"cobalt:bloom",refs:[{name:"emissive",type:"textureView",format:"rgba16",access:"read"},{name:"hdr",type:"textureView",format:"rgba16",access:"read"},{name:"bloom",type:"textureView",format:"rgba16",access:"readwrite"}],onInit:async function(s,r={}){return In(s,r)},onRun:function(s,r,m){Ln(s,r.data,m)},onDestroy:function(s,r){Oe(r)},onResize:function(s,r){An(s,r)},onViewportPosition:function(s,r){}};function In(s,r){let{device:m}=s,v=s.viewport.width,P=s.viewport.height,T={compute_pipeline:null,bind_group:[],bind_group_layout:[],bind_groups_textures:[]},B=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba16float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:2,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:3,visibility:GPUShaderStage.COMPUTE,sampler:{}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});T.bind_group_layout.push(B),T.bind_groups_textures.push(Rt(m,"bloom downsampler image 0",v/2,P/2,Ot,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),T.bind_groups_textures.push(Rt(m,"bloom downsampler image 1",v/2,P/2,Ot,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),T.bind_groups_textures.push(r.refs.bloom.data);let G=m.createPipelineLayout({bindGroupLayouts:T.bind_group_layout}),_=m.createComputePipeline({layout:G,compute:{module:m.createShaderModule({code:Le}),entryPoint:"cs_main"}});return Ve(s,T,r),T.compute_pipeline=_,T}function Ve(s,r,m){let{refs:v}=m,{device:P}=s,T=m.options.bloom_threshold??.1,B=m.options.bloom_knee??.2,G=m.options.bloom_combine_constant??.68,_=new Float32Array([T,T-B,B*2,.25/B,G,0,0,0]),U=P.createBuffer({label:"bloom static parameters buffer",size:_.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(U.getMappedRange()).set(_),U.unmap(),r.bind_group.length=0,r.params_buf=U,r.bind_group.push(Jt(P,r,r.bind_groups_textures[0].mip_view[0],v.emissive.data.view,v.hdr.data.view,v.hdr.data.sampler,U,Un<<16|0));for(let R=1;R<Ot;R++)r.bind_group.push(Jt(P,r,r.bind_groups_textures[1].mip_view[R],r.bind_groups_textures[0].view,v.hdr.data.view,v.hdr.data.sampler,U,Ae<<16|R-1)),r.bind_group.push(Jt(P,r,r.bind_groups_textures[0].mip_view[R],r.bind_groups_textures[1].view,v.hdr.data.view,v.hdr.data.sampler,U,Ae<<16|R));r.bind_group.push(Jt(P,r,r.bind_groups_textures[2].mip_view[Ot-1],r.bind_groups_textures[0].view,v.hdr.data.view,v.hdr.data.sampler,U,En<<16|Ot-2));let z=!0;for(let R=Ot-2;R>=0;R--)z?(r.bind_group.push(Jt(P,r,r.bind_groups_textures[1].mip_view[R],r.bind_groups_textures[0].view,r.bind_groups_textures[2].view,v.hdr.data.sampler,U,Fe<<16|R)),z=!1):(r.bind_group.push(Jt(P,r,r.bind_groups_textures[2].mip_view[R],r.bind_groups_textures[0].view,r.bind_groups_textures[1].view,v.hdr.data.sampler,U,Fe<<16|R)),z=!0)}function Jt(s,r,m,v,P,T,B,G){let _=new Uint32Array([G]),U=s.createBuffer({label:"bloom static mode_lod buffer",size:_.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return new Uint32Array(U.getMappedRange()).set(_),U.unmap(),s.createBindGroup({label:"bloom bind group layout",layout:r.bind_group_layout[0],entries:[{binding:0,resource:m},{binding:1,resource:v},{binding:2,resource:P},{binding:3,resource:T},{binding:4,resource:{buffer:B}},{binding:5,resource:{buffer:U}}]})}function Ln(s,r,m){let G=0,_=m.beginComputePass({label:"bloom Compute Pass"});_.setPipeline(r.compute_pipeline),_.setBindGroup(0,r.bind_group[G]),G+=1;let U=ce(0,r.bind_groups_textures[0]);_.dispatchWorkgroups(U.width/8+1,U.height/4+1,1);for(let z=1;z<Ot;z++)U=ce(z,r.bind_groups_textures[0]),_.setBindGroup(0,r.bind_group[G]),G+=1,_.dispatchWorkgroups(U.width/8+1,U.height/4+1,1),_.setBindGroup(0,r.bind_group[G]),G+=1,_.dispatchWorkgroups(U.width/8+1,U.height/4+1,1);_.setBindGroup(0,r.bind_group[G]),G+=1,U=ce(Ot-1,r.bind_groups_textures[2]),_.dispatchWorkgroups(U.width/8+1,U.height/4+1,1);for(let z=Ot-2;z>=0;z--)U=ce(z,r.bind_groups_textures[2]),_.setBindGroup(0,r.bind_group[G]),G+=1,_.dispatchWorkgroups(U.width/8+1,U.height/4+1,1);_.end()}function ce(s,r){let m=r.size.width,v=r.size.height;for(let P=0;P<s;P++)m/=2,v/=2;return{width:m,height:v,depthOrArrayLayers:1}}function An(s,r){let{device:m}=s,v=r.data;Oe(v),v.bind_groups_textures.push(Rt(m,"bloom downsampler image 0",s.viewport.width/2,s.viewport.height/2,Ot,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),v.bind_groups_textures.push(Rt(m,"bloom downsampler image 1",s.viewport.width/2,s.viewport.height/2,Ot,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),v.bind_groups_textures.push(r.refs.bloom.data),Ve(s,v,r)}function Oe(s){for(let r of s.bind_groups_textures)r.texture.destroy();s.bind_groups_textures.length=0}var Me="struct BloomComposite{bloom_intensity:f32,bloom_combine_constant:f32,}@group(0)@binding(0)var mySampler:sampler;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var emissiveTexture:texture_2d<f32>;@group(0)@binding(3)var<uniform> composite_parameter:BloomComposite;struct VertexOutput{@builtin(position)Position:vec4<f32>,@location(0)fragUV:vec2<f32>,}const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vert_main(@builtin(vertex_index)VertexIndex:u32)->VertexOutput{var output:VertexOutput;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.fragUV=vec2<f32>(uvs[VertexIndex]);return output;}fn GTTonemap_point(x:f32)->f32{let m:f32=0.22;let a:f32=1.0;let c:f32=1.33;let P:f32=1.0;let l:f32=0.4;let l0:f32=((P-m)*l)/a;let S0:f32=m+l0;let S1:f32=m+a*l0;let C2:f32=(a*P)/(P-S1);let L:f32=m+a*(x-m);let T:f32=m*pow(x/m,c);let S:f32=P-(P-S1)*exp(-C2*(x-S0)/P);let w0:f32=1.0-smoothstep(0.0,m,x);var w2:f32=1.0;if(x<m+l){w2=0.0;}let w1:f32=1.0-w0-w2;return f32(T*w0+L*w1+S*w2);}fn GTTonemap(x:vec3<f32>)->vec3<f32>{return vec3<f32>(GTTonemap_point(x.r),GTTonemap_point(x.g),GTTonemap_point(x.b));}fn aces(x:vec3<f32>)->vec3<f32>{let a:f32=2.51;let b:f32=0.03;let c:f32=2.43;let d:f32=0.59;let e:f32=0.14;return clamp((x*(a*x+b))/(x*(c*x+d)+e),vec3<f32>(0.0),vec3<f32>(1.0));}@fragment fn frag_main(@location(0)fragUV:vec2<f32>)->@location(0)vec4<f32>{let hdr_color=textureSample(colorTexture,mySampler,fragUV);let bloom_color=textureSample(emissiveTexture,mySampler,fragUV);let combined_color=((bloom_color*composite_parameter.bloom_intensity)*composite_parameter.bloom_combine_constant);let mapped_color=GTTonemap(combined_color.rgb);let gamma_corrected_color=pow(mapped_color,vec3<f32>(1.0/2.2));return vec4<f32>(gamma_corrected_color+hdr_color.rgb,1.0);}";var qe={type:"cobalt:bloom",refs:[{name:"hdr",type:"textureView",format:"rgba16",access:"read"},{name:"bloom",type:"textureView",format:"rgba16",access:"read"},{name:"combined",type:"textureView",format:"rgba8unorm",access:"write"}],onInit:async function(s,r={}){return Rn(s,r)},onRun:function(s,r,m){Vn(s,r,m)},onDestroy:function(s,r){},onResize:function(s,r){On(s,r)},onViewportPosition:function(s,r){}};function Rn(s,r){let{options:m,refs:v}=r,{device:P}=s,T=Ne(s),B=m.bloom_intensity??40,G=m.bloom_combine_constant??.68,_=new Float32Array([B,G]),U=P.createBuffer({label:"scene composite params buffer",size:_.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(U.getMappedRange()).set(_),U.unmap();let z=P.createRenderPipeline({layout:"auto",vertex:{module:P.createShaderModule({code:Me}),entryPoint:"vert_main"},fragment:{module:P.createShaderModule({code:Me}),entryPoint:"frag_main",targets:[{format:T}]},primitive:{topology:"triangle-list"}});return{bindGroup:P.createBindGroup({layout:z.getBindGroupLayout(0),entries:[{binding:0,resource:v.hdr.data.sampler},{binding:1,resource:v.hdr.data.view},{binding:2,resource:v.bloom.data.mip_view[0]},{binding:3,resource:{buffer:U}}]}),pipeline:z,params_buf:U}}function Vn(s,r,m){let v=m.beginRenderPass({colorAttachments:[{view:r.refs.combined.data.view,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),{pipeline:P,bindGroup:T}=r.data;v.setPipeline(P),v.setBindGroup(0,T),v.draw(3),v.end()}function On(s,r){let{pipeline:m,params_buf:v}=r.data,{device:P}=s;r.data.bindGroup=P.createBindGroup({layout:m.getBindGroupLayout(0),entries:[{binding:0,resource:r.refs.hdr.data.sampler},{binding:1,resource:r.refs.hdr.data.view},{binding:2,resource:r.refs.bloom.data.mip_view[0]},{binding:3,resource:{buffer:v}}]})}var ie={};Ie(ie,{addSprite:()=>Nn,clear:()=>$n,removeSprite:()=>Yn,setSprite:()=>kn,setSpriteName:()=>Xn,setSpriteOpacity:()=>jn,setSpritePosition:()=>Hn,setSpriteRotation:()=>Zn,setSpriteScale:()=>Qn,setSpriteTint:()=>Wn});function De(s,r,m){if(m.spriteCount===0)return 0;let v=0,P=m.spriteCount-1,T=s<<16&16711680|r&65535;for(;v<=P;){let B=m.spriteData[v*12+11];if(T<=B)return v;let G=m.spriteData[P*12+11];if(T>=G)return P+1;let _=Math.floor((v+P)/2),U=m.spriteData[_*12+11];if(T===U)return _+1;T>U?v=_+1:P=_-1}return v}function se(){return Math.ceil(Math.random()*(Number.MAX_SAFE_INTEGER-10))}function Nn(s,r,m,v,P,T,B,G,_){let U=r.refs.spritesheet.data.spritesheet;r=r.data;let z=U.locations.indexOf(m),R=De(_,z,r),X=(R+1)*12;r.spriteData.set(r.spriteData.subarray(R*12,r.spriteCount*12),X),Ye(r,U,R,m,v,P,T,B,G,_);for(let[H,F]of r.spriteIndices)F>=R&&r.spriteIndices.set(H,F+1);let Y=se();return r.spriteIndices.set(Y,R),r.spriteCount++,r.dirty=!0,Y}function Yn(s,r,m){r=r.data;let v=r.spriteIndices.get(m);for(let[T,B]of r.spriteIndices)B>v&&r.spriteIndices.set(T,B-1);let P=v*12;r.spriteData.set(r.spriteData.subarray((v+1)*12,r.spriteCount*12),P),r.spriteIndices.delete(m),r.spriteCount--,r.dirty=!0}function $n(s,r){r=r.data,r.spriteIndices.clear(),r.spriteCount=0,r.instancedDrawCallCount=0,r.dirty=!0}function Xn(s,r,m,v,P){let T=r.refs.spritesheet.data.spritesheet;r=r.data;let B=T.locations.indexOf(v),G=T.spriteMeta[v].w,_=T.spriteMeta[v].h,z=r.spriteIndices.get(m)*12;r.spriteData[z+2]=G*P[0],r.spriteData[z+3]=_*P[1];let X=(r.spriteData[z+11]>>16&255)<<16&16711680|B&65535;r.spriteData[z+11]=X,r.dirty=!0}function Hn(s,r,m,v){r=r.data;let T=r.spriteIndices.get(m)*12;r.spriteData[T]=v[0],r.spriteData[T+1]=v[1],r.dirty=!0}function Wn(s,r,m,v){r=r.data;let T=r.spriteIndices.get(m)*12;r.spriteData[T+4]=v[0],r.spriteData[T+5]=v[1],r.spriteData[T+6]=v[2],r.spriteData[T+7]=v[3],r.dirty=!0}function jn(s,r,m,v){r=r.data;let T=r.spriteIndices.get(m)*12;r.spriteData[T+8]=v,r.dirty=!0}function Zn(s,r,m,v){r=r.data;let T=r.spriteIndices.get(m)*12;r.spriteData[T+9]=v,r.dirty=!0}function Qn(s,r,m,v,P){let T=r.refs.spritesheet.data.spritesheet;r=r.data;let G=r.spriteIndices.get(m)*12,_=T.spriteMeta[v].w,U=T.spriteMeta[v].h;r.spriteData[G+2]=_*P[0],r.spriteData[G+3]=U*P[1],r.dirty=!0}function kn(s,r,m,v,P,T,B,G,_,U){let z=r.refs.spritesheet.data.spritesheet;r=r.data;let R=r.spriteIndices.get(m);Ye(r,z,R,v,P,T,B,G,_,U),r.dirty=!0}function Ye(s,r,m,v,P,T,B,G,_,U){if(!r.spriteMeta[v])throw new Error(`Sprite name ${v} could not be found in the spritesheet metaData`);let z=m*12,R=r.spriteMeta[v].w,X=r.spriteMeta[v].h,Y=r.locations.indexOf(v),H=U<<16&16711680|Y&65535;s.spriteData[z]=P[0],s.spriteData[z+1]=P[1],s.spriteData[z+2]=R*T[0],s.spriteData[z+3]=X*T[1],s.spriteData[z+4]=B[0],s.spriteData[z+5]=B[1],s.spriteData[z+6]=B[2],s.spriteData[z+7]=B[3],s.spriteData[z+8]=G,s.spriteData[z+9]=_,s.spriteData[z+11]=H}var $e={type:"cobalt:sprite",refs:[{name:"spritesheet",type:"customResource",access:"read"},{name:"hdr",type:"textureView",format:"rgba16float",access:"write"},{name:"emissive",type:"textureView",format:"rgba16float",access:"write"}],onInit:async function(s,r={}){return Kn(s,r)},onRun:function(s,r,m){Jn(s,r,m)},onDestroy:function(s,r){tr(r)},onResize:function(s,r){},onViewportPosition:function(s,r){},customFunctions:{...ie}};async function Kn(s,r){let{device:m}=s,v=16192,P=v,B=Float32Array.BYTES_PER_ELEMENT*2,_=Float32Array.BYTES_PER_ELEMENT*2,z=Float32Array.BYTES_PER_ELEMENT*4,X=Float32Array.BYTES_PER_ELEMENT*4,Y=m.createBuffer({size:(B+_+z+X)*P,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),H=r.refs.spritesheet.data,F=m.createBindGroup({layout:r.refs.spritesheet.data.bindGroupLayout,entries:[{binding:0,resource:{buffer:H.uniformBuffer}},{binding:1,resource:H.colorTexture.view},{binding:2,resource:H.colorTexture.sampler},{binding:3,resource:{buffer:Y}},{binding:4,resource:H.emissiveTexture.view}]});return{instancedDrawCalls:new Uint32Array(v*2),instancedDrawCallCount:0,bindGroup:F,spriteBuffer:Y,spriteData:new Float32Array(v*12),spriteCount:0,spriteIndices:new Map,dirty:!1}}function Jn(s,r,m){let{device:v}=s,P=r.options.loadOp||"load";if(r.data.dirty&&(Cn(r.data),r.data.dirty=!1),r.data.spriteCount>0){let _=r.data.spriteCount*12*Float32Array.BYTES_PER_ELEMENT;v.queue.writeBuffer(r.data.spriteBuffer,0,r.data.spriteData.buffer,0,_)}let T=m.beginRenderPass({colorAttachments:[{view:r.refs.hdr.data.view,clearValue:s.clearValue,loadOp:P,storeOp:"store"},{view:r.refs.emissive.data.view,clearValue:s.clearValue,loadOp:"clear",storeOp:"store"}]});T.setPipeline(r.refs.spritesheet.data.pipeline),T.setBindGroup(0,r.data.bindGroup),T.setVertexBuffer(0,r.refs.spritesheet.data.quads.buffer);let B=6,G=0;for(let _=0;_<r.data.instancedDrawCallCount;_++){let U=r.data.instancedDrawCalls[_*2]*B,z=r.data.instancedDrawCalls[_*2+1];T.draw(B,z,U,G),G+=z}T.end()}function Cn(s){let r=-1,m=0;s.instancedDrawCallCount=0;for(let v=0;v<s.spriteCount;v++){let P=s.spriteData[v*12+11]&65535;P!==r&&(m>0&&(s.instancedDrawCalls[s.instancedDrawCallCount*2]=r,s.instancedDrawCalls[s.instancedDrawCallCount*2+1]=m,s.instancedDrawCallCount++),r=P,m=0),m++}m>0&&(s.instancedDrawCalls[s.instancedDrawCallCount*2]=r,s.instancedDrawCalls[s.instancedDrawCallCount*2+1]=m,s.instancedDrawCallCount++)}function tr(s){s.data.instancedDrawCalls=null,s.data.bindGroup=null,s.data.spriteBuffer.destroy(),s.data.spriteBuffer=null,s.data.spriteData=null,s.data.spriteIndices.clear(),s.data.spriteIndices=null}var He={type:"cobalt:tile",refs:[{name:"tileAtlas",type:"textureView",format:"rgba8unorm",access:"write"}],onInit:async function(s,r={}){return er(s,r)},onRun:function(s,r,m){nr(s,r,m)},onDestroy:function(s,r){Xe(r)},onResize:function(s,r){},onViewportPosition:function(s,r){},customFunctions:{setTexture:async function(s,r,m){let{device:v}=s;Xe(r),r.options.textureUrl=m;let P=await qt(s,"tile map",r.options.textureUrl),T=v.createBindGroup({layout:r.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:r.data.uniformBuffer}},{binding:1,resource:P.view},{binding:2,resource:P.sampler}]});r.data.bindGroup=T,r.data.material=P}}};async function er(s,r){let{device:m}=s,v=await qt(s,"tile map",r.options.textureUrl),P=new Float32Array([r.options.scrollScale,r.options.scrollScale]),T=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,B={size:P.byteLength,usage:T,mappedAtCreation:!0},G=m.createBuffer(B);return new Float32Array(G.getMappedRange()).set(P),G.unmap(),{bindGroup:m.createBindGroup({layout:r.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:G}},{binding:1,resource:v.view},{binding:2,resource:v.sampler}]}),material:v,uniformBuffer:G,scrollScale:r.options.scrollScale}}function nr(s,r,m){let{device:v}=s,P=r.options.loadOp||"load",T=m.beginRenderPass({colorAttachments:[{view:r.refs.hdr.data.view,clearValue:s.clearValue,loadOp:P,storeOp:"store"}]}),B=r.refs.tileAtlas.data;T.setPipeline(B.pipeline),T.setBindGroup(0,r.data.bindGroup),T.setBindGroup(1,B.atlasBindGroup),T.draw(3),T.end()}function Xe(s){s.data.material.texture.destroy(),s.data.material.texture=void 0}var ae=class{device;floatsPerSprite=6;bufferGpu;bufferNeedsUpdate=!1;sprites=new Map;get spriteCount(){return this.sprites.size}constructor(r){this.device=r.device,this.bufferGpu=this.device.createBuffer({size:r.maxSpriteCount*this.floatsPerSprite*Float32Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}destroy(){this.bufferGpu.destroy}update(){if(this.bufferNeedsUpdate){let r=[];for(let v of this.sprites.values())r.push(...v);let m=new Float32Array(r);this.device.queue.writeBuffer(this.bufferGpu,0,m)}}addTriangle(r){let m=se();if(this.sprites.has(m))throw new Error(`Duplicate triangle "${m}".`);let v=this.buildTriangleData(r);return this.sprites.set(m,v),this.bufferNeedsUpdate=!0,m}removeTriangle(r){if(!this.sprites.has(r))throw new Error(`Unknown triangle "${r}".`);this.sprites.delete(r),this.bufferNeedsUpdate=!0}setTriangle(r,m){if(!this.sprites.has(r))throw new Error(`Unknown triangle "${r}".`);let v=this.buildTriangleData(m);this.sprites.set(r,v),this.bufferNeedsUpdate=!0}buildTriangleData(r){return[r[0][0],r[0][1],r[1][0],r[1][1],r[2][0],r[2][1]]}};var ue=class{device;bufferGpu;needsUpdate=!0;constructor(r){this.device=r.device,this.bufferGpu=this.device.createBuffer({label:"DisplacementParametersBuffer buffer",size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.setParameters(r.initialParameters)}setParameters(r){this.device.queue.writeBuffer(this.bufferGpu,0,new Float32Array([r.offsetX,r.offsetY,r.scale]))}destroy(){this.bufferGpu.destroy()}};var We="struct DisplacementParameters{offset:vec2<f32>,scale:f32,};@group(0)@binding(0)var<uniform> uniforms:DisplacementParameters;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var colorSampler:sampler;@group(0)@binding(3)var noiseTexture:texture_2d<f32>;@group(0)@binding(4)var noiseSampler:sampler;@group(0)@binding(5)var displacementTexture:texture_2d<f32>;struct VertexIn{@builtin(vertex_index)vertexIndex:u32,};struct VertexOut{@builtin(position)position:vec4<f32>,@location(0)uv:vec2<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{const corners=array<vec2<f32>,4>(vec2<f32>(-1,-1),vec2<f32>(1,-1),vec2<f32>(-1,1),vec2<f32>(1,1),);let screenPosition=corners[in.vertexIndex];var out:VertexOut;out.position=vec4<f32>(screenPosition,0,1);out.uv=(0.5+0.5*screenPosition*vec2<f32>(1,-1));return out;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment(in:VertexOut)->FragmentOut{let noiseTextureDimensions=vec2<f32>(textureDimensions(noiseTexture,0));let noiseUv=in.uv+uniforms.offset/noiseTextureDimensions;var noise=textureSample(noiseTexture,noiseSampler,noiseUv).rg;noise-=0.5;noise*=uniforms.scale/noiseTextureDimensions;let displacement=textureSample(displacementTexture,colorSampler,in.uv).r;noise*=displacement;let colorUv=in.uv+noise;var out:FragmentOut;out.color=textureSample(colorTexture,colorSampler,colorUv);return out;}";var le=class{device;targetFormat;renderPipeline;colorSampler;noiseSampler;displacementParametersBuffer;renderBundle=null;colorTextureView;noiseMapTextureView;displacementTextureView;constructor(r){this.device=r.device,this.targetFormat=r.targetFormat,this.colorTextureView=r.colorTextureView,this.noiseMapTextureView=r.noiseMapTextureView,this.displacementTextureView=r.displacementTextureView,this.displacementParametersBuffer=r.displacementParametersBuffer;let m=this.device.createShaderModule({label:"DisplacementComposition shader module",code:We});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementComposition renderpipeline",layout:"auto",vertex:{module:m,entryPoint:"main_vertex"},fragment:{module:m,entryPoint:"main_fragment",targets:[{format:r.targetFormat}]},primitive:{cullMode:"none",topology:"triangle-strip"}}),this.noiseSampler=this.device.createSampler({label:"DisplacementComposition noisesampler",addressModeU:"repeat",addressModeV:"repeat",addressModeW:"repeat",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"}),this.colorSampler=this.device.createSampler({label:"DisplacementComposition colorSampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"})}getRenderBundle(){return this.renderBundle||(this.renderBundle=this.buildRenderBundle()),this.renderBundle}destroy(){}setColorTextureView(r){this.colorTextureView=r,this.renderBundle=null}setNoiseMapTextureView(r){this.noiseMapTextureView=r,this.renderBundle=null}setDisplacementTextureView(r){this.displacementTextureView=r,this.renderBundle=null}buildRenderBundle(){let r=this.device.createBindGroup({label:"DisplacementComposition bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.displacementParametersBuffer.bufferGpu}},{binding:1,resource:this.colorTextureView},{binding:2,resource:this.colorSampler},{binding:3,resource:this.noiseMapTextureView},{binding:4,resource:this.noiseSampler},{binding:5,resource:this.displacementTextureView}]}),m=this.device.createRenderBundleEncoder({label:"DisplacementComposition renderbundle encoder",colorFormats:[this.targetFormat]});return m.setPipeline(this.renderPipeline),m.setBindGroup(0,r),m.draw(4),m.finish({label:"DisplacementComposition renderbundle"})}};var je="struct TransformData{mvpMatrix:mat4x4<f32>,};@group(0)@binding(0)var<uniform> transformUBO:TransformData;struct VertexIn{@location(0)position:vec2<f32>,};struct VertexOut{@builtin(position)position:vec4<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{var output:VertexOut;output.position=transformUBO.mvpMatrix*vec4<f32>(in.position,0.0,1.0);return output;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment()->FragmentOut{var out:FragmentOut;out.color=vec4<f32>(1.0,1.0,1.0,1.0);return out;}";function sr(s,r){return class extends s{constructor(...m){super(...m),r(this)}}}var ir=sr(Array,s=>s.fill(0)),Q=1e-6;function cr(s){function r(t=0,a=0){let e=new s(2);return t!==void 0&&(e[0]=t,a!==void 0&&(e[1]=a)),e}let m=r;function v(t,a,e){let o=e??new s(2);return o[0]=t,o[1]=a,o}function P(t,a){let e=a??new s(2);return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e}function T(t,a){let e=a??new s(2);return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e}function B(t,a){let e=a??new s(2);return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e}function G(t,a=0,e=1,o){let l=o??new s(2);return l[0]=Math.min(e,Math.max(a,t[0])),l[1]=Math.min(e,Math.max(a,t[1])),l}function _(t,a,e){let o=e??new s(2);return o[0]=t[0]+a[0],o[1]=t[1]+a[1],o}function U(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+a[0]*e,l[1]=t[1]+a[1]*e,l}function z(t,a){let e=t[0],o=t[1],l=a[0],g=a[1],D=Math.sqrt(e*e+o*o),u=Math.sqrt(l*l+g*g),f=D*u,w=f&&Dt(t,a)/f;return Math.acos(w)}function R(t,a,e){let o=e??new s(2);return o[0]=t[0]-a[0],o[1]=t[1]-a[1],o}let X=R;function Y(t,a){return Math.abs(t[0]-a[0])<Q&&Math.abs(t[1]-a[1])<Q}function H(t,a){return t[0]===a[0]&&t[1]===a[1]}function F(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+e*(a[0]-t[0]),l[1]=t[1]+e*(a[1]-t[1]),l}function nt(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+e[0]*(a[0]-t[0]),l[1]=t[1]+e[1]*(a[1]-t[1]),l}function rt(t,a,e){let o=e??new s(2);return o[0]=Math.max(t[0],a[0]),o[1]=Math.max(t[1],a[1]),o}function W(t,a,e){let o=e??new s(2);return o[0]=Math.min(t[0],a[0]),o[1]=Math.min(t[1],a[1]),o}function et(t,a,e){let o=e??new s(2);return o[0]=t[0]*a,o[1]=t[1]*a,o}let Bt=et;function gt(t,a,e){let o=e??new s(2);return o[0]=t[0]/a,o[1]=t[1]/a,o}function xt(t,a){let e=a??new s(2);return e[0]=1/t[0],e[1]=1/t[1],e}let Mt=xt;function mt(t,a,e){let o=e??new s(3),l=t[0]*a[1]-t[1]*a[0];return o[0]=0,o[1]=0,o[2]=l,o}function Dt(t,a){return t[0]*a[0]+t[1]*a[1]}function C(t){let a=t[0],e=t[1];return Math.sqrt(a*a+e*e)}let _t=C;function q(t){let a=t[0],e=t[1];return a*a+e*e}let $=q;function O(t,a){let e=t[0]-a[0],o=t[1]-a[1];return Math.sqrt(e*e+o*o)}let Ut=O;function lt(t,a){let e=t[0]-a[0],o=t[1]-a[1];return e*e+o*o}let Et=lt;function ft(t,a){let e=a??new s(2),o=t[0],l=t[1],g=Math.sqrt(o*o+l*l);return g>1e-5?(e[0]=o/g,e[1]=l/g):(e[0]=0,e[1]=0),e}function It(t,a){let e=a??new s(2);return e[0]=-t[0],e[1]=-t[1],e}function j(t,a){let e=a??new s(2);return e[0]=t[0],e[1]=t[1],e}let Lt=j;function vt(t,a,e){let o=e??new s(2);return o[0]=t[0]*a[0],o[1]=t[1]*a[1],o}let At=vt;function yt(t,a,e){let o=e??new s(2);return o[0]=t[0]/a[0],o[1]=t[1]/a[1],o}let zt=yt;function bt(t=1,a){let e=a??new s(2),o=Math.random()*2*Math.PI;return e[0]=Math.cos(o)*t,e[1]=Math.sin(o)*t,e}function i(t){let a=t??new s(2);return a[0]=0,a[1]=0,a}function p(t,a,e){let o=e??new s(2),l=t[0],g=t[1];return o[0]=l*a[0]+g*a[4]+a[12],o[1]=l*a[1]+g*a[5]+a[13],o}function n(t,a,e){let o=e??new s(2),l=t[0],g=t[1];return o[0]=a[0]*l+a[4]*g+a[8],o[1]=a[1]*l+a[5]*g+a[9],o}function c(t,a,e,o){let l=o??new s(2),g=t[0]-a[0],D=t[1]-a[1],u=Math.sin(e),f=Math.cos(e);return l[0]=g*f-D*u+a[0],l[1]=g*u+D*f+a[1],l}function d(t,a,e){let o=e??new s(2);return ft(t,o),et(o,a,o)}function h(t,a,e){let o=e??new s(2);return C(t)>a?d(t,a,o):j(t,o)}function M(t,a,e){let o=e??new s(2);return F(t,a,.5,o)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,angle:z,subtract:R,sub:X,equalsApproximately:Y,equals:H,lerp:F,lerpV:nt,max:rt,min:W,mulScalar:et,scale:Bt,divScalar:gt,inverse:xt,invert:Mt,cross:mt,dot:Dt,length:C,len:_t,lengthSq:q,lenSq:$,distance:O,dist:Ut,distanceSq:lt,distSq:Et,normalize:ft,negate:It,copy:j,clone:Lt,multiply:vt,mul:At,divide:yt,div:zt,random:bt,zero:i,transformMat4:p,transformMat3:n,rotate:c,setLength:d,truncate:h,midpoint:M}}var Ze=new Map;function tn(s){let r=Ze.get(s);return r||(r=cr(s),Ze.set(s,r)),r}function ar(s){function r(u,f,w){let x=new s(3);return u!==void 0&&(x[0]=u,f!==void 0&&(x[1]=f,w!==void 0&&(x[2]=w))),x}let m=r;function v(u,f,w,x){let y=x??new s(3);return y[0]=u,y[1]=f,y[2]=w,y}function P(u,f){let w=f??new s(3);return w[0]=Math.ceil(u[0]),w[1]=Math.ceil(u[1]),w[2]=Math.ceil(u[2]),w}function T(u,f){let w=f??new s(3);return w[0]=Math.floor(u[0]),w[1]=Math.floor(u[1]),w[2]=Math.floor(u[2]),w}function B(u,f){let w=f??new s(3);return w[0]=Math.round(u[0]),w[1]=Math.round(u[1]),w[2]=Math.round(u[2]),w}function G(u,f=0,w=1,x){let y=x??new s(3);return y[0]=Math.min(w,Math.max(f,u[0])),y[1]=Math.min(w,Math.max(f,u[1])),y[2]=Math.min(w,Math.max(f,u[2])),y}function _(u,f,w){let x=w??new s(3);return x[0]=u[0]+f[0],x[1]=u[1]+f[1],x[2]=u[2]+f[2],x}function U(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+f[0]*w,y[1]=u[1]+f[1]*w,y[2]=u[2]+f[2]*w,y}function z(u,f){let w=u[0],x=u[1],y=u[2],b=f[0],S=f[1],I=f[2],A=Math.sqrt(w*w+x*x+y*y),E=Math.sqrt(b*b+S*S+I*I),L=A*E,V=L&&Dt(u,f)/L;return Math.acos(V)}function R(u,f,w){let x=w??new s(3);return x[0]=u[0]-f[0],x[1]=u[1]-f[1],x[2]=u[2]-f[2],x}let X=R;function Y(u,f){return Math.abs(u[0]-f[0])<Q&&Math.abs(u[1]-f[1])<Q&&Math.abs(u[2]-f[2])<Q}function H(u,f){return u[0]===f[0]&&u[1]===f[1]&&u[2]===f[2]}function F(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+w*(f[0]-u[0]),y[1]=u[1]+w*(f[1]-u[1]),y[2]=u[2]+w*(f[2]-u[2]),y}function nt(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+w[0]*(f[0]-u[0]),y[1]=u[1]+w[1]*(f[1]-u[1]),y[2]=u[2]+w[2]*(f[2]-u[2]),y}function rt(u,f,w){let x=w??new s(3);return x[0]=Math.max(u[0],f[0]),x[1]=Math.max(u[1],f[1]),x[2]=Math.max(u[2],f[2]),x}function W(u,f,w){let x=w??new s(3);return x[0]=Math.min(u[0],f[0]),x[1]=Math.min(u[1],f[1]),x[2]=Math.min(u[2],f[2]),x}function et(u,f,w){let x=w??new s(3);return x[0]=u[0]*f,x[1]=u[1]*f,x[2]=u[2]*f,x}let Bt=et;function gt(u,f,w){let x=w??new s(3);return x[0]=u[0]/f,x[1]=u[1]/f,x[2]=u[2]/f,x}function xt(u,f){let w=f??new s(3);return w[0]=1/u[0],w[1]=1/u[1],w[2]=1/u[2],w}let Mt=xt;function mt(u,f,w){let x=w??new s(3),y=u[2]*f[0]-u[0]*f[2],b=u[0]*f[1]-u[1]*f[0];return x[0]=u[1]*f[2]-u[2]*f[1],x[1]=y,x[2]=b,x}function Dt(u,f){return u[0]*f[0]+u[1]*f[1]+u[2]*f[2]}function C(u){let f=u[0],w=u[1],x=u[2];return Math.sqrt(f*f+w*w+x*x)}let _t=C;function q(u){let f=u[0],w=u[1],x=u[2];return f*f+w*w+x*x}let $=q;function O(u,f){let w=u[0]-f[0],x=u[1]-f[1],y=u[2]-f[2];return Math.sqrt(w*w+x*x+y*y)}let Ut=O;function lt(u,f){let w=u[0]-f[0],x=u[1]-f[1],y=u[2]-f[2];return w*w+x*x+y*y}let Et=lt;function ft(u,f){let w=f??new s(3),x=u[0],y=u[1],b=u[2],S=Math.sqrt(x*x+y*y+b*b);return S>1e-5?(w[0]=x/S,w[1]=y/S,w[2]=b/S):(w[0]=0,w[1]=0,w[2]=0),w}function It(u,f){let w=f??new s(3);return w[0]=-u[0],w[1]=-u[1],w[2]=-u[2],w}function j(u,f){let w=f??new s(3);return w[0]=u[0],w[1]=u[1],w[2]=u[2],w}let Lt=j;function vt(u,f,w){let x=w??new s(3);return x[0]=u[0]*f[0],x[1]=u[1]*f[1],x[2]=u[2]*f[2],x}let At=vt;function yt(u,f,w){let x=w??new s(3);return x[0]=u[0]/f[0],x[1]=u[1]/f[1],x[2]=u[2]/f[2],x}let zt=yt;function bt(u=1,f){let w=f??new s(3),x=Math.random()*2*Math.PI,y=Math.random()*2-1,b=Math.sqrt(1-y*y)*u;return w[0]=Math.cos(x)*b,w[1]=Math.sin(x)*b,w[2]=y*u,w}function i(u){let f=u??new s(3);return f[0]=0,f[1]=0,f[2]=0,f}function p(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2],I=f[3]*y+f[7]*b+f[11]*S+f[15]||1;return x[0]=(f[0]*y+f[4]*b+f[8]*S+f[12])/I,x[1]=(f[1]*y+f[5]*b+f[9]*S+f[13])/I,x[2]=(f[2]*y+f[6]*b+f[10]*S+f[14])/I,x}function n(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2];return x[0]=y*f[0*4+0]+b*f[1*4+0]+S*f[2*4+0],x[1]=y*f[0*4+1]+b*f[1*4+1]+S*f[2*4+1],x[2]=y*f[0*4+2]+b*f[1*4+2]+S*f[2*4+2],x}function c(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2];return x[0]=y*f[0]+b*f[4]+S*f[8],x[1]=y*f[1]+b*f[5]+S*f[9],x[2]=y*f[2]+b*f[6]+S*f[10],x}function d(u,f,w){let x=w??new s(3),y=f[0],b=f[1],S=f[2],I=f[3]*2,A=u[0],E=u[1],L=u[2],V=b*L-S*E,N=S*A-y*L,Z=y*E-b*A;return x[0]=A+V*I+(b*Z-S*N)*2,x[1]=E+N*I+(S*V-y*Z)*2,x[2]=L+Z*I+(y*N-b*V)*2,x}function h(u,f){let w=f??new s(3);return w[0]=u[12],w[1]=u[13],w[2]=u[14],w}function M(u,f,w){let x=w??new s(3),y=f*4;return x[0]=u[y+0],x[1]=u[y+1],x[2]=u[y+2],x}function t(u,f){let w=f??new s(3),x=u[0],y=u[1],b=u[2],S=u[4],I=u[5],A=u[6],E=u[8],L=u[9],V=u[10];return w[0]=Math.sqrt(x*x+y*y+b*b),w[1]=Math.sqrt(S*S+I*I+A*A),w[2]=Math.sqrt(E*E+L*L+V*V),w}function a(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[0],S[1]=b[1]*Math.cos(w)-b[2]*Math.sin(w),S[2]=b[1]*Math.sin(w)+b[2]*Math.cos(w),y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function e(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[2]*Math.sin(w)+b[0]*Math.cos(w),S[1]=b[1],S[2]=b[2]*Math.cos(w)-b[0]*Math.sin(w),y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function o(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[0]*Math.cos(w)-b[1]*Math.sin(w),S[1]=b[0]*Math.sin(w)+b[1]*Math.cos(w),S[2]=b[2],y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function l(u,f,w){let x=w??new s(3);return ft(u,x),et(x,f,x)}function g(u,f,w){let x=w??new s(3);return C(u)>f?l(u,f,x):j(u,x)}function D(u,f,w){let x=w??new s(3);return F(u,f,.5,x)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,angle:z,subtract:R,sub:X,equalsApproximately:Y,equals:H,lerp:F,lerpV:nt,max:rt,min:W,mulScalar:et,scale:Bt,divScalar:gt,inverse:xt,invert:Mt,cross:mt,dot:Dt,length:C,len:_t,lengthSq:q,lenSq:$,distance:O,dist:Ut,distanceSq:lt,distSq:Et,normalize:ft,negate:It,copy:j,clone:Lt,multiply:vt,mul:At,divide:yt,div:zt,random:bt,zero:i,transformMat4:p,transformMat4Upper3x3:n,transformMat3:c,transformQuat:d,getTranslation:h,getAxis:M,getScaling:t,rotateX:a,rotateY:e,rotateZ:o,setLength:l,truncate:g,midpoint:D}}var Qe=new Map;function fe(s){let r=Qe.get(s);return r||(r=ar(s),Qe.set(s,r)),r}function ur(s){let r=tn(s),m=fe(s);function v(i,p,n,c,d,h,M,t,a){let e=new s(12);return e[3]=0,e[7]=0,e[11]=0,i!==void 0&&(e[0]=i,p!==void 0&&(e[1]=p,n!==void 0&&(e[2]=n,c!==void 0&&(e[4]=c,d!==void 0&&(e[5]=d,h!==void 0&&(e[6]=h,M!==void 0&&(e[8]=M,t!==void 0&&(e[9]=t,a!==void 0&&(e[10]=a))))))))),e}function P(i,p,n,c,d,h,M,t,a,e){let o=e??new s(12);return o[0]=i,o[1]=p,o[2]=n,o[3]=0,o[4]=c,o[5]=d,o[6]=h,o[7]=0,o[8]=M,o[9]=t,o[10]=a,o[11]=0,o}function T(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=0,n[4]=i[4],n[5]=i[5],n[6]=i[6],n[7]=0,n[8]=i[8],n[9]=i[9],n[10]=i[10],n[11]=0,n}function B(i,p){let n=p??new s(12),c=i[0],d=i[1],h=i[2],M=i[3],t=c+c,a=d+d,e=h+h,o=c*t,l=d*t,g=d*a,D=h*t,u=h*a,f=h*e,w=M*t,x=M*a,y=M*e;return n[0]=1-g-f,n[1]=l+y,n[2]=D-x,n[3]=0,n[4]=l-y,n[5]=1-o-f,n[6]=u+w,n[7]=0,n[8]=D+x,n[9]=u-w,n[10]=1-o-g,n[11]=0,n}function G(i,p){let n=p??new s(12);return n[0]=-i[0],n[1]=-i[1],n[2]=-i[2],n[4]=-i[4],n[5]=-i[5],n[6]=-i[6],n[8]=-i[8],n[9]=-i[9],n[10]=-i[10],n}function _(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[4]=i[4],n[5]=i[5],n[6]=i[6],n[8]=i[8],n[9]=i[9],n[10]=i[10],n}let U=_;function z(i,p){return Math.abs(i[0]-p[0])<Q&&Math.abs(i[1]-p[1])<Q&&Math.abs(i[2]-p[2])<Q&&Math.abs(i[4]-p[4])<Q&&Math.abs(i[5]-p[5])<Q&&Math.abs(i[6]-p[6])<Q&&Math.abs(i[8]-p[8])<Q&&Math.abs(i[9]-p[9])<Q&&Math.abs(i[10]-p[10])<Q}function R(i,p){return i[0]===p[0]&&i[1]===p[1]&&i[2]===p[2]&&i[4]===p[4]&&i[5]===p[5]&&i[6]===p[6]&&i[8]===p[8]&&i[9]===p[9]&&i[10]===p[10]}function X(i){let p=i??new s(12);return p[0]=1,p[1]=0,p[2]=0,p[4]=0,p[5]=1,p[6]=0,p[8]=0,p[9]=0,p[10]=1,p}function Y(i,p){let n=p??new s(12);if(n===i){let g;return g=i[1],i[1]=i[4],i[4]=g,g=i[2],i[2]=i[8],i[8]=g,g=i[6],i[6]=i[9],i[9]=g,n}let c=i[0*4+0],d=i[0*4+1],h=i[0*4+2],M=i[1*4+0],t=i[1*4+1],a=i[1*4+2],e=i[2*4+0],o=i[2*4+1],l=i[2*4+2];return n[0]=c,n[1]=M,n[2]=e,n[4]=d,n[5]=t,n[6]=o,n[8]=h,n[9]=a,n[10]=l,n}function H(i,p){let n=p??new s(12),c=i[0*4+0],d=i[0*4+1],h=i[0*4+2],M=i[1*4+0],t=i[1*4+1],a=i[1*4+2],e=i[2*4+0],o=i[2*4+1],l=i[2*4+2],g=l*t-a*o,D=-l*M+a*e,u=o*M-t*e,f=1/(c*g+d*D+h*u);return n[0]=g*f,n[1]=(-l*d+h*o)*f,n[2]=(a*d-h*t)*f,n[4]=D*f,n[5]=(l*c-h*e)*f,n[6]=(-a*c+h*M)*f,n[8]=u*f,n[9]=(-o*c+d*e)*f,n[10]=(t*c-d*M)*f,n}function F(i){let p=i[0],n=i[0*4+1],c=i[0*4+2],d=i[1*4+0],h=i[1*4+1],M=i[1*4+2],t=i[2*4+0],a=i[2*4+1],e=i[2*4+2];return p*(h*e-a*M)-d*(n*e-a*c)+t*(n*M-h*c)}let nt=H;function rt(i,p,n){let c=n??new s(12),d=i[0],h=i[1],M=i[2],t=i[4],a=i[5],e=i[6],o=i[8],l=i[9],g=i[10],D=p[0],u=p[1],f=p[2],w=p[4],x=p[5],y=p[6],b=p[8],S=p[9],I=p[10];return c[0]=d*D+t*u+o*f,c[1]=h*D+a*u+l*f,c[2]=M*D+e*u+g*f,c[4]=d*w+t*x+o*y,c[5]=h*w+a*x+l*y,c[6]=M*w+e*x+g*y,c[8]=d*b+t*S+o*I,c[9]=h*b+a*S+l*I,c[10]=M*b+e*S+g*I,c}let W=rt;function et(i,p,n){let c=n??X();return i!==c&&(c[0]=i[0],c[1]=i[1],c[2]=i[2],c[4]=i[4],c[5]=i[5],c[6]=i[6]),c[8]=p[0],c[9]=p[1],c[10]=1,c}function Bt(i,p){let n=p??r.create();return n[0]=i[8],n[1]=i[9],n}function gt(i,p,n){let c=n??r.create(),d=p*4;return c[0]=i[d+0],c[1]=i[d+1],c}function xt(i,p,n,c){let d=c===i?i:_(i,c),h=n*4;return d[h+0]=p[0],d[h+1]=p[1],d}function Mt(i,p){let n=p??r.create(),c=i[0],d=i[1],h=i[4],M=i[5];return n[0]=Math.sqrt(c*c+d*d),n[1]=Math.sqrt(h*h+M*M),n}function mt(i,p){let n=p??m.create(),c=i[0],d=i[1],h=i[2],M=i[4],t=i[5],a=i[6],e=i[8],o=i[9],l=i[10];return n[0]=Math.sqrt(c*c+d*d+h*h),n[1]=Math.sqrt(M*M+t*t+a*a),n[2]=Math.sqrt(e*e+o*o+l*l),n}function Dt(i,p){let n=p??new s(12);return n[0]=1,n[1]=0,n[2]=0,n[4]=0,n[5]=1,n[6]=0,n[8]=i[0],n[9]=i[1],n[10]=1,n}function C(i,p,n){let c=n??new s(12),d=p[0],h=p[1],M=i[0],t=i[1],a=i[2],e=i[1*4+0],o=i[1*4+1],l=i[1*4+2],g=i[2*4+0],D=i[2*4+1],u=i[2*4+2];return i!==c&&(c[0]=M,c[1]=t,c[2]=a,c[4]=e,c[5]=o,c[6]=l),c[8]=M*d+e*h+g,c[9]=t*d+o*h+D,c[10]=a*d+l*h+u,c}function _t(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=c,n[1]=d,n[2]=0,n[4]=-d,n[5]=c,n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function q(i,p,n){let c=n??new s(12),d=i[0*4+0],h=i[0*4+1],M=i[0*4+2],t=i[1*4+0],a=i[1*4+1],e=i[1*4+2],o=Math.cos(p),l=Math.sin(p);return c[0]=o*d+l*t,c[1]=o*h+l*a,c[2]=o*M+l*e,c[4]=o*t-l*d,c[5]=o*a-l*h,c[6]=o*e-l*M,i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function $(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=1,n[1]=0,n[2]=0,n[4]=0,n[5]=c,n[6]=d,n[8]=0,n[9]=-d,n[10]=c,n}function O(i,p,n){let c=n??new s(12),d=i[4],h=i[5],M=i[6],t=i[8],a=i[9],e=i[10],o=Math.cos(p),l=Math.sin(p);return c[4]=o*d+l*t,c[5]=o*h+l*a,c[6]=o*M+l*e,c[8]=o*t-l*d,c[9]=o*a-l*h,c[10]=o*e-l*M,i!==c&&(c[0]=i[0],c[1]=i[1],c[2]=i[2]),c}function Ut(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=c,n[1]=0,n[2]=-d,n[4]=0,n[5]=1,n[6]=0,n[8]=d,n[9]=0,n[10]=c,n}function lt(i,p,n){let c=n??new s(12),d=i[0*4+0],h=i[0*4+1],M=i[0*4+2],t=i[2*4+0],a=i[2*4+1],e=i[2*4+2],o=Math.cos(p),l=Math.sin(p);return c[0]=o*d-l*t,c[1]=o*h-l*a,c[2]=o*M-l*e,c[8]=o*t+l*d,c[9]=o*a+l*h,c[10]=o*e+l*M,i!==c&&(c[4]=i[4],c[5]=i[5],c[6]=i[6]),c}let Et=_t,ft=q;function It(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=0,n[2]=0,n[4]=0,n[5]=i[1],n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function j(i,p,n){let c=n??new s(12),d=p[0],h=p[1];return c[0]=d*i[0*4+0],c[1]=d*i[0*4+1],c[2]=d*i[0*4+2],c[4]=h*i[1*4+0],c[5]=h*i[1*4+1],c[6]=h*i[1*4+2],i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function Lt(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=0,n[2]=0,n[4]=0,n[5]=i[1],n[6]=0,n[8]=0,n[9]=0,n[10]=i[2],n}function vt(i,p,n){let c=n??new s(12),d=p[0],h=p[1],M=p[2];return c[0]=d*i[0*4+0],c[1]=d*i[0*4+1],c[2]=d*i[0*4+2],c[4]=h*i[1*4+0],c[5]=h*i[1*4+1],c[6]=h*i[1*4+2],c[8]=M*i[2*4+0],c[9]=M*i[2*4+1],c[10]=M*i[2*4+2],c}function At(i,p){let n=p??new s(12);return n[0]=i,n[1]=0,n[2]=0,n[4]=0,n[5]=i,n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function yt(i,p,n){let c=n??new s(12);return c[0]=p*i[0*4+0],c[1]=p*i[0*4+1],c[2]=p*i[0*4+2],c[4]=p*i[1*4+0],c[5]=p*i[1*4+1],c[6]=p*i[1*4+2],i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function zt(i,p){let n=p??new s(12);return n[0]=i,n[1]=0,n[2]=0,n[4]=0,n[5]=i,n[6]=0,n[8]=0,n[9]=0,n[10]=i,n}function bt(i,p,n){let c=n??new s(12);return c[0]=p*i[0*4+0],c[1]=p*i[0*4+1],c[2]=p*i[0*4+2],c[4]=p*i[1*4+0],c[5]=p*i[1*4+1],c[6]=p*i[1*4+2],c[8]=p*i[2*4+0],c[9]=p*i[2*4+1],c[10]=p*i[2*4+2],c}return{clone:U,create:v,set:P,fromMat4:T,fromQuat:B,negate:G,copy:_,equalsApproximately:z,equals:R,identity:X,transpose:Y,inverse:H,invert:nt,determinant:F,mul:W,multiply:rt,setTranslation:et,getTranslation:Bt,getAxis:gt,setAxis:xt,getScaling:Mt,get3DScaling:mt,translation:Dt,translate:C,rotation:_t,rotate:q,rotationX:$,rotateX:O,rotationY:Ut,rotateY:lt,rotationZ:Et,rotateZ:ft,scaling:It,scale:j,uniformScaling:At,uniformScale:yt,scaling3D:Lt,scale3D:vt,uniformScaling3D:zt,uniformScale3D:bt}}var ke=new Map;function lr(s){let r=ke.get(s);return r||(r=ur(s),ke.set(s,r)),r}function fr(s){let r=fe(s);function m(t,a,e,o,l,g,D,u,f,w,x,y,b,S,I,A){let E=new s(16);return t!==void 0&&(E[0]=t,a!==void 0&&(E[1]=a,e!==void 0&&(E[2]=e,o!==void 0&&(E[3]=o,l!==void 0&&(E[4]=l,g!==void 0&&(E[5]=g,D!==void 0&&(E[6]=D,u!==void 0&&(E[7]=u,f!==void 0&&(E[8]=f,w!==void 0&&(E[9]=w,x!==void 0&&(E[10]=x,y!==void 0&&(E[11]=y,b!==void 0&&(E[12]=b,S!==void 0&&(E[13]=S,I!==void 0&&(E[14]=I,A!==void 0&&(E[15]=A)))))))))))))))),E}function v(t,a,e,o,l,g,D,u,f,w,x,y,b,S,I,A,E){let L=E??new s(16);return L[0]=t,L[1]=a,L[2]=e,L[3]=o,L[4]=l,L[5]=g,L[6]=D,L[7]=u,L[8]=f,L[9]=w,L[10]=x,L[11]=y,L[12]=b,L[13]=S,L[14]=I,L[15]=A,L}function P(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=0,e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=0,e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function T(t,a){let e=a??new s(16),o=t[0],l=t[1],g=t[2],D=t[3],u=o+o,f=l+l,w=g+g,x=o*u,y=l*u,b=l*f,S=g*u,I=g*f,A=g*w,E=D*u,L=D*f,V=D*w;return e[0]=1-b-A,e[1]=y+V,e[2]=S-L,e[3]=0,e[4]=y-V,e[5]=1-x-A,e[6]=I+E,e[7]=0,e[8]=S+L,e[9]=I-E,e[10]=1-x-b,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function B(t,a){let e=a??new s(16);return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e[4]=-t[4],e[5]=-t[5],e[6]=-t[6],e[7]=-t[7],e[8]=-t[8],e[9]=-t[9],e[10]=-t[10],e[11]=-t[11],e[12]=-t[12],e[13]=-t[13],e[14]=-t[14],e[15]=-t[15],e}function G(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}let _=G;function U(t,a){return Math.abs(t[0]-a[0])<Q&&Math.abs(t[1]-a[1])<Q&&Math.abs(t[2]-a[2])<Q&&Math.abs(t[3]-a[3])<Q&&Math.abs(t[4]-a[4])<Q&&Math.abs(t[5]-a[5])<Q&&Math.abs(t[6]-a[6])<Q&&Math.abs(t[7]-a[7])<Q&&Math.abs(t[8]-a[8])<Q&&Math.abs(t[9]-a[9])<Q&&Math.abs(t[10]-a[10])<Q&&Math.abs(t[11]-a[11])<Q&&Math.abs(t[12]-a[12])<Q&&Math.abs(t[13]-a[13])<Q&&Math.abs(t[14]-a[14])<Q&&Math.abs(t[15]-a[15])<Q}function z(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]}function R(t){let a=t??new s(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a}function X(t,a){let e=a??new s(16);if(e===t){let N;return N=t[1],t[1]=t[4],t[4]=N,N=t[2],t[2]=t[8],t[8]=N,N=t[3],t[3]=t[12],t[12]=N,N=t[6],t[6]=t[9],t[9]=N,N=t[7],t[7]=t[13],t[13]=N,N=t[11],t[11]=t[14],t[14]=N,e}let o=t[0*4+0],l=t[0*4+1],g=t[0*4+2],D=t[0*4+3],u=t[1*4+0],f=t[1*4+1],w=t[1*4+2],x=t[1*4+3],y=t[2*4+0],b=t[2*4+1],S=t[2*4+2],I=t[2*4+3],A=t[3*4+0],E=t[3*4+1],L=t[3*4+2],V=t[3*4+3];return e[0]=o,e[1]=u,e[2]=y,e[3]=A,e[4]=l,e[5]=f,e[6]=b,e[7]=E,e[8]=g,e[9]=w,e[10]=S,e[11]=L,e[12]=D,e[13]=x,e[14]=I,e[15]=V,e}function Y(t,a){let e=a??new s(16),o=t[0*4+0],l=t[0*4+1],g=t[0*4+2],D=t[0*4+3],u=t[1*4+0],f=t[1*4+1],w=t[1*4+2],x=t[1*4+3],y=t[2*4+0],b=t[2*4+1],S=t[2*4+2],I=t[2*4+3],A=t[3*4+0],E=t[3*4+1],L=t[3*4+2],V=t[3*4+3],N=S*V,Z=L*I,K=w*V,J=L*x,tt=w*I,ot=S*x,st=g*V,it=L*D,ct=g*I,at=S*D,dt=g*x,pt=w*D,ht=y*E,wt=A*b,Tt=u*E,St=A*f,Pt=u*b,$t=y*f,Xt=o*E,Ht=A*l,Wt=o*b,jt=y*l,Zt=o*f,Qt=u*l,te=N*f+J*b+tt*E-(Z*f+K*b+ot*E),ee=Z*l+st*b+at*E-(N*l+it*b+ct*E),ne=K*l+it*f+dt*E-(J*l+st*f+pt*E),re=ot*l+ct*f+pt*b-(tt*l+at*f+dt*b),ut=1/(o*te+u*ee+y*ne+A*re);return e[0]=ut*te,e[1]=ut*ee,e[2]=ut*ne,e[3]=ut*re,e[4]=ut*(Z*u+K*y+ot*A-(N*u+J*y+tt*A)),e[5]=ut*(N*o+it*y+ct*A-(Z*o+st*y+at*A)),e[6]=ut*(J*o+st*u+pt*A-(K*o+it*u+dt*A)),e[7]=ut*(tt*o+at*u+dt*y-(ot*o+ct*u+pt*y)),e[8]=ut*(ht*x+St*I+Pt*V-(wt*x+Tt*I+$t*V)),e[9]=ut*(wt*D+Xt*I+jt*V-(ht*D+Ht*I+Wt*V)),e[10]=ut*(Tt*D+Ht*x+Zt*V-(St*D+Xt*x+Qt*V)),e[11]=ut*($t*D+Wt*x+Qt*I-(Pt*D+jt*x+Zt*I)),e[12]=ut*(Tt*S+$t*L+wt*w-(Pt*L+ht*w+St*S)),e[13]=ut*(Wt*L+ht*g+Ht*S-(Xt*S+jt*L+wt*g)),e[14]=ut*(Xt*w+Qt*L+St*g-(Zt*L+Tt*g+Ht*w)),e[15]=ut*(Zt*S+Pt*g+jt*w-(Wt*w+Qt*S+$t*g)),e}function H(t){let a=t[0],e=t[0*4+1],o=t[0*4+2],l=t[0*4+3],g=t[1*4+0],D=t[1*4+1],u=t[1*4+2],f=t[1*4+3],w=t[2*4+0],x=t[2*4+1],y=t[2*4+2],b=t[2*4+3],S=t[3*4+0],I=t[3*4+1],A=t[3*4+2],E=t[3*4+3],L=y*E,V=A*b,N=u*E,Z=A*f,K=u*b,J=y*f,tt=o*E,ot=A*l,st=o*b,it=y*l,ct=o*f,at=u*l,dt=L*D+Z*x+K*I-(V*D+N*x+J*I),pt=V*e+tt*x+it*I-(L*e+ot*x+st*I),ht=N*e+ot*D+ct*I-(Z*e+tt*D+at*I),wt=J*e+st*D+at*x-(K*e+it*D+ct*x);return a*dt+g*pt+w*ht+S*wt}let F=Y;function nt(t,a,e){let o=e??new s(16),l=t[0],g=t[1],D=t[2],u=t[3],f=t[4],w=t[5],x=t[6],y=t[7],b=t[8],S=t[9],I=t[10],A=t[11],E=t[12],L=t[13],V=t[14],N=t[15],Z=a[0],K=a[1],J=a[2],tt=a[3],ot=a[4],st=a[5],it=a[6],ct=a[7],at=a[8],dt=a[9],pt=a[10],ht=a[11],wt=a[12],Tt=a[13],St=a[14],Pt=a[15];return o[0]=l*Z+f*K+b*J+E*tt,o[1]=g*Z+w*K+S*J+L*tt,o[2]=D*Z+x*K+I*J+V*tt,o[3]=u*Z+y*K+A*J+N*tt,o[4]=l*ot+f*st+b*it+E*ct,o[5]=g*ot+w*st+S*it+L*ct,o[6]=D*ot+x*st+I*it+V*ct,o[7]=u*ot+y*st+A*it+N*ct,o[8]=l*at+f*dt+b*pt+E*ht,o[9]=g*at+w*dt+S*pt+L*ht,o[10]=D*at+x*dt+I*pt+V*ht,o[11]=u*at+y*dt+A*pt+N*ht,o[12]=l*wt+f*Tt+b*St+E*Pt,o[13]=g*wt+w*Tt+S*St+L*Pt,o[14]=D*wt+x*Tt+I*St+V*Pt,o[15]=u*wt+y*Tt+A*St+N*Pt,o}let rt=nt;function W(t,a,e){let o=e??R();return t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11]),o[12]=a[0],o[13]=a[1],o[14]=a[2],o[15]=1,o}function et(t,a){let e=a??r.create();return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Bt(t,a,e){let o=e??r.create(),l=a*4;return o[0]=t[l+0],o[1]=t[l+1],o[2]=t[l+2],o}function gt(t,a,e,o){let l=o===t?o:G(t,o),g=e*4;return l[g+0]=a[0],l[g+1]=a[1],l[g+2]=a[2],l}function xt(t,a){let e=a??r.create(),o=t[0],l=t[1],g=t[2],D=t[4],u=t[5],f=t[6],w=t[8],x=t[9],y=t[10];return e[0]=Math.sqrt(o*o+l*l+g*g),e[1]=Math.sqrt(D*D+u*u+f*f),e[2]=Math.sqrt(w*w+x*x+y*y),e}function Mt(t,a,e,o,l){let g=l??new s(16),D=Math.tan(Math.PI*.5-.5*t);if(g[0]=D/a,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=D,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,Number.isFinite(o)){let u=1/(e-o);g[10]=o*u,g[14]=o*e*u}else g[10]=-1,g[14]=-e;return g}function mt(t,a,e,o=1/0,l){let g=l??new s(16),D=1/Math.tan(t*.5);if(g[0]=D/a,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=D,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,o===1/0)g[10]=0,g[14]=e;else{let u=1/(o-e);g[10]=e*u,g[14]=o*e*u}return g}function Dt(t,a,e,o,l,g,D){let u=D??new s(16);return u[0]=2/(a-t),u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2/(o-e),u[6]=0,u[7]=0,u[8]=0,u[9]=0,u[10]=1/(l-g),u[11]=0,u[12]=(a+t)/(t-a),u[13]=(o+e)/(e-o),u[14]=l/(l-g),u[15]=1,u}function C(t,a,e,o,l,g,D){let u=D??new s(16),f=a-t,w=o-e,x=l-g;return u[0]=2*l/f,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2*l/w,u[6]=0,u[7]=0,u[8]=(t+a)/f,u[9]=(o+e)/w,u[10]=g/x,u[11]=-1,u[12]=0,u[13]=0,u[14]=l*g/x,u[15]=0,u}function _t(t,a,e,o,l,g=1/0,D){let u=D??new s(16),f=a-t,w=o-e;if(u[0]=2*l/f,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2*l/w,u[6]=0,u[7]=0,u[8]=(t+a)/f,u[9]=(o+e)/w,u[11]=-1,u[12]=0,u[13]=0,u[15]=0,g===1/0)u[10]=0,u[14]=l;else{let x=1/(g-l);u[10]=l*x,u[14]=g*l*x}return u}let q=r.create(),$=r.create(),O=r.create();function Ut(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(a,t,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=q[1],l[2]=q[2],l[3]=0,l[4]=$[0],l[5]=$[1],l[6]=$[2],l[7]=0,l[8]=O[0],l[9]=O[1],l[10]=O[2],l[11]=0,l[12]=t[0],l[13]=t[1],l[14]=t[2],l[15]=1,l}function lt(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(t,a,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=q[1],l[2]=q[2],l[3]=0,l[4]=$[0],l[5]=$[1],l[6]=$[2],l[7]=0,l[8]=O[0],l[9]=O[1],l[10]=O[2],l[11]=0,l[12]=t[0],l[13]=t[1],l[14]=t[2],l[15]=1,l}function Et(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(t,a,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=$[0],l[2]=O[0],l[3]=0,l[4]=q[1],l[5]=$[1],l[6]=O[1],l[7]=0,l[8]=q[2],l[9]=$[2],l[10]=O[2],l[11]=0,l[12]=-(q[0]*t[0]+q[1]*t[1]+q[2]*t[2]),l[13]=-($[0]*t[0]+$[1]*t[1]+$[2]*t[2]),l[14]=-(O[0]*t[0]+O[1]*t[1]+O[2]*t[2]),l[15]=1,l}function ft(t,a){let e=a??new s(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function It(t,a,e){let o=e??new s(16),l=a[0],g=a[1],D=a[2],u=t[0],f=t[1],w=t[2],x=t[3],y=t[1*4+0],b=t[1*4+1],S=t[1*4+2],I=t[1*4+3],A=t[2*4+0],E=t[2*4+1],L=t[2*4+2],V=t[2*4+3],N=t[3*4+0],Z=t[3*4+1],K=t[3*4+2],J=t[3*4+3];return t!==o&&(o[0]=u,o[1]=f,o[2]=w,o[3]=x,o[4]=y,o[5]=b,o[6]=S,o[7]=I,o[8]=A,o[9]=E,o[10]=L,o[11]=V),o[12]=u*l+y*g+A*D+N,o[13]=f*l+b*g+E*D+Z,o[14]=w*l+S*g+L*D+K,o[15]=x*l+I*g+V*D+J,o}function j(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=l,e[7]=0,e[8]=0,e[9]=-l,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Lt(t,a,e){let o=e??new s(16),l=t[4],g=t[5],D=t[6],u=t[7],f=t[8],w=t[9],x=t[10],y=t[11],b=Math.cos(a),S=Math.sin(a);return o[4]=b*l+S*f,o[5]=b*g+S*w,o[6]=b*D+S*x,o[7]=b*u+S*y,o[8]=b*f-S*l,o[9]=b*w-S*g,o[10]=b*x-S*D,o[11]=b*y-S*u,t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function vt(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=o,e[1]=0,e[2]=-l,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=l,e[9]=0,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function At(t,a,e){let o=e??new s(16),l=t[0*4+0],g=t[0*4+1],D=t[0*4+2],u=t[0*4+3],f=t[2*4+0],w=t[2*4+1],x=t[2*4+2],y=t[2*4+3],b=Math.cos(a),S=Math.sin(a);return o[0]=b*l-S*f,o[1]=b*g-S*w,o[2]=b*D-S*x,o[3]=b*u-S*y,o[8]=b*f+S*l,o[9]=b*w+S*g,o[10]=b*x+S*D,o[11]=b*y+S*u,t!==o&&(o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function yt(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=o,e[1]=l,e[2]=0,e[3]=0,e[4]=-l,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function zt(t,a,e){let o=e??new s(16),l=t[0*4+0],g=t[0*4+1],D=t[0*4+2],u=t[0*4+3],f=t[1*4+0],w=t[1*4+1],x=t[1*4+2],y=t[1*4+3],b=Math.cos(a),S=Math.sin(a);return o[0]=b*l+S*f,o[1]=b*g+S*w,o[2]=b*D+S*x,o[3]=b*u+S*y,o[4]=b*f-S*l,o[5]=b*w-S*g,o[6]=b*x-S*D,o[7]=b*y-S*u,t!==o&&(o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function bt(t,a,e){let o=e??new s(16),l=t[0],g=t[1],D=t[2],u=Math.sqrt(l*l+g*g+D*D);l/=u,g/=u,D/=u;let f=l*l,w=g*g,x=D*D,y=Math.cos(a),b=Math.sin(a),S=1-y;return o[0]=f+(1-f)*y,o[1]=l*g*S+D*b,o[2]=l*D*S-g*b,o[3]=0,o[4]=l*g*S-D*b,o[5]=w+(1-w)*y,o[6]=g*D*S+l*b,o[7]=0,o[8]=l*D*S+g*b,o[9]=g*D*S-l*b,o[10]=x+(1-x)*y,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o}let i=bt;function p(t,a,e,o){let l=o??new s(16),g=a[0],D=a[1],u=a[2],f=Math.sqrt(g*g+D*D+u*u);g/=f,D/=f,u/=f;let w=g*g,x=D*D,y=u*u,b=Math.cos(e),S=Math.sin(e),I=1-b,A=w+(1-w)*b,E=g*D*I+u*S,L=g*u*I-D*S,V=g*D*I-u*S,N=x+(1-x)*b,Z=D*u*I+g*S,K=g*u*I+D*S,J=D*u*I-g*S,tt=y+(1-y)*b,ot=t[0],st=t[1],it=t[2],ct=t[3],at=t[4],dt=t[5],pt=t[6],ht=t[7],wt=t[8],Tt=t[9],St=t[10],Pt=t[11];return l[0]=A*ot+E*at+L*wt,l[1]=A*st+E*dt+L*Tt,l[2]=A*it+E*pt+L*St,l[3]=A*ct+E*ht+L*Pt,l[4]=V*ot+N*at+Z*wt,l[5]=V*st+N*dt+Z*Tt,l[6]=V*it+N*pt+Z*St,l[7]=V*ct+N*ht+Z*Pt,l[8]=K*ot+J*at+tt*wt,l[9]=K*st+J*dt+tt*Tt,l[10]=K*it+J*pt+tt*St,l[11]=K*ct+J*ht+tt*Pt,t!==l&&(l[12]=t[12],l[13]=t[13],l[14]=t[14],l[15]=t[15]),l}let n=p;function c(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function d(t,a,e){let o=e??new s(16),l=a[0],g=a[1],D=a[2];return o[0]=l*t[0*4+0],o[1]=l*t[0*4+1],o[2]=l*t[0*4+2],o[3]=l*t[0*4+3],o[4]=g*t[1*4+0],o[5]=g*t[1*4+1],o[6]=g*t[1*4+2],o[7]=g*t[1*4+3],o[8]=D*t[2*4+0],o[9]=D*t[2*4+1],o[10]=D*t[2*4+2],o[11]=D*t[2*4+3],t!==o&&(o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function h(t,a){let e=a??new s(16);return e[0]=t,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function M(t,a,e){let o=e??new s(16);return o[0]=a*t[0*4+0],o[1]=a*t[0*4+1],o[2]=a*t[0*4+2],o[3]=a*t[0*4+3],o[4]=a*t[1*4+0],o[5]=a*t[1*4+1],o[6]=a*t[1*4+2],o[7]=a*t[1*4+3],o[8]=a*t[2*4+0],o[9]=a*t[2*4+1],o[10]=a*t[2*4+2],o[11]=a*t[2*4+3],t!==o&&(o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}return{create:m,set:v,fromMat3:P,fromQuat:T,negate:B,copy:G,clone:_,equalsApproximately:U,equals:z,identity:R,transpose:X,inverse:Y,determinant:H,invert:F,multiply:nt,mul:rt,setTranslation:W,getTranslation:et,getAxis:Bt,setAxis:gt,getScaling:xt,perspective:Mt,perspectiveReverseZ:mt,ortho:Dt,frustum:C,frustumReverseZ:_t,aim:Ut,cameraAim:lt,lookAt:Et,translation:ft,translate:It,rotationX:j,rotateX:Lt,rotationY:vt,rotateY:At,rotationZ:yt,rotateZ:zt,axisRotation:bt,rotation:i,axisRotate:p,rotate:n,scaling:c,scale:d,uniformScaling:h,uniformScale:M}}var Ke=new Map;function dr(s){let r=Ke.get(s);return r||(r=fr(s),Ke.set(s,r)),r}function pr(s){let r=fe(s);function m(i,p,n,c){let d=new s(4);return i!==void 0&&(d[0]=i,p!==void 0&&(d[1]=p,n!==void 0&&(d[2]=n,c!==void 0&&(d[3]=c)))),d}let v=m;function P(i,p,n,c,d){let h=d??new s(4);return h[0]=i,h[1]=p,h[2]=n,h[3]=c,h}function T(i,p,n){let c=n??new s(4),d=p*.5,h=Math.sin(d);return c[0]=h*i[0],c[1]=h*i[1],c[2]=h*i[2],c[3]=Math.cos(d),c}function B(i,p){let n=p??r.create(3),c=Math.acos(i[3])*2,d=Math.sin(c*.5);return d>Q?(n[0]=i[0]/d,n[1]=i[1]/d,n[2]=i[2]/d):(n[0]=1,n[1]=0,n[2]=0),{angle:c,axis:n}}function G(i,p){let n=C(i,p);return Math.acos(2*n*n-1)}function _(i,p,n){let c=n??new s(4),d=i[0],h=i[1],M=i[2],t=i[3],a=p[0],e=p[1],o=p[2],l=p[3];return c[0]=d*l+t*a+h*o-M*e,c[1]=h*l+t*e+M*a-d*o,c[2]=M*l+t*o+d*e-h*a,c[3]=t*l-d*a-h*e-M*o,c}let U=_;function z(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o+a*e,c[1]=M*o+t*e,c[2]=t*o-M*e,c[3]=a*o-h*e,c}function R(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o-t*e,c[1]=M*o+a*e,c[2]=t*o+h*e,c[3]=a*o-M*e,c}function X(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o+M*e,c[1]=M*o-h*e,c[2]=t*o+a*e,c[3]=a*o-t*e,c}function Y(i,p,n,c){let d=c??new s(4),h=i[0],M=i[1],t=i[2],a=i[3],e=p[0],o=p[1],l=p[2],g=p[3],D=h*e+M*o+t*l+a*g;D<0&&(D=-D,e=-e,o=-o,l=-l,g=-g);let u,f;if(1-D>Q){let w=Math.acos(D),x=Math.sin(w);u=Math.sin((1-n)*w)/x,f=Math.sin(n*w)/x}else u=1-n,f=n;return d[0]=u*h+f*e,d[1]=u*M+f*o,d[2]=u*t+f*l,d[3]=u*a+f*g,d}function H(i,p){let n=p??new s(4),c=i[0],d=i[1],h=i[2],M=i[3],t=c*c+d*d+h*h+M*M,a=t?1/t:0;return n[0]=-c*a,n[1]=-d*a,n[2]=-h*a,n[3]=M*a,n}function F(i,p){let n=p??new s(4);return n[0]=-i[0],n[1]=-i[1],n[2]=-i[2],n[3]=i[3],n}function nt(i,p){let n=p??new s(4),c=i[0]+i[5]+i[10];if(c>0){let d=Math.sqrt(c+1);n[3]=.5*d;let h=.5/d;n[0]=(i[6]-i[9])*h,n[1]=(i[8]-i[2])*h,n[2]=(i[1]-i[4])*h}else{let d=0;i[5]>i[0]&&(d=1),i[10]>i[d*4+d]&&(d=2);let h=(d+1)%3,M=(d+2)%3,t=Math.sqrt(i[d*4+d]-i[h*4+h]-i[M*4+M]+1);n[d]=.5*t;let a=.5/t;n[3]=(i[h*4+M]-i[M*4+h])*a,n[h]=(i[h*4+d]+i[d*4+h])*a,n[M]=(i[M*4+d]+i[d*4+M])*a}return n}function rt(i,p,n,c,d){let h=d??new s(4),M=i*.5,t=p*.5,a=n*.5,e=Math.sin(M),o=Math.cos(M),l=Math.sin(t),g=Math.cos(t),D=Math.sin(a),u=Math.cos(a);switch(c){case"xyz":h[0]=e*g*u+o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u-e*l*D;break;case"xzy":h[0]=e*g*u-o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u+e*l*D;break;case"yxz":h[0]=e*g*u+o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u+e*l*D;break;case"yzx":h[0]=e*g*u+o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u-e*l*D;break;case"zxy":h[0]=e*g*u-o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u-e*l*D;break;case"zyx":h[0]=e*g*u-o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u+e*l*D;break;default:throw new Error(`Unknown rotation order: ${c}`)}return h}function W(i,p){let n=p??new s(4);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],n}let et=W;function Bt(i,p,n){let c=n??new s(4);return c[0]=i[0]+p[0],c[1]=i[1]+p[1],c[2]=i[2]+p[2],c[3]=i[3]+p[3],c}function gt(i,p,n){let c=n??new s(4);return c[0]=i[0]-p[0],c[1]=i[1]-p[1],c[2]=i[2]-p[2],c[3]=i[3]-p[3],c}let xt=gt;function Mt(i,p,n){let c=n??new s(4);return c[0]=i[0]*p,c[1]=i[1]*p,c[2]=i[2]*p,c[3]=i[3]*p,c}let mt=Mt;function Dt(i,p,n){let c=n??new s(4);return c[0]=i[0]/p,c[1]=i[1]/p,c[2]=i[2]/p,c[3]=i[3]/p,c}function C(i,p){return i[0]*p[0]+i[1]*p[1]+i[2]*p[2]+i[3]*p[3]}function _t(i,p,n,c){let d=c??new s(4);return d[0]=i[0]+n*(p[0]-i[0]),d[1]=i[1]+n*(p[1]-i[1]),d[2]=i[2]+n*(p[2]-i[2]),d[3]=i[3]+n*(p[3]-i[3]),d}function q(i){let p=i[0],n=i[1],c=i[2],d=i[3];return Math.sqrt(p*p+n*n+c*c+d*d)}let $=q;function O(i){let p=i[0],n=i[1],c=i[2],d=i[3];return p*p+n*n+c*c+d*d}let Ut=O;function lt(i,p){let n=p??new s(4),c=i[0],d=i[1],h=i[2],M=i[3],t=Math.sqrt(c*c+d*d+h*h+M*M);return t>1e-5?(n[0]=c/t,n[1]=d/t,n[2]=h/t,n[3]=M/t):(n[0]=0,n[1]=0,n[2]=0,n[3]=1),n}function Et(i,p){return Math.abs(i[0]-p[0])<Q&&Math.abs(i[1]-p[1])<Q&&Math.abs(i[2]-p[2])<Q&&Math.abs(i[3]-p[3])<Q}function ft(i,p){return i[0]===p[0]&&i[1]===p[1]&&i[2]===p[2]&&i[3]===p[3]}function It(i){let p=i??new s(4);return p[0]=0,p[1]=0,p[2]=0,p[3]=1,p}let j=r.create(),Lt=r.create(),vt=r.create();function At(i,p,n){let c=n??new s(4),d=r.dot(i,p);return d<-.999999?(r.cross(Lt,i,j),r.len(j)<1e-6&&r.cross(vt,i,j),r.normalize(j,j),T(j,Math.PI,c),c):d>.999999?(c[0]=0,c[1]=0,c[2]=0,c[3]=1,c):(r.cross(i,p,j),c[0]=j[0],c[1]=j[1],c[2]=j[2],c[3]=1+d,lt(c,c))}let yt=new s(4),zt=new s(4);function bt(i,p,n,c,d,h){let M=h??new s(4);return Y(i,c,d,yt),Y(p,n,d,zt),Y(yt,zt,2*d*(1-d),M),M}return{create:m,fromValues:v,set:P,fromAxisAngle:T,toAxisAngle:B,angle:G,multiply:_,mul:U,rotateX:z,rotateY:R,rotateZ:X,slerp:Y,inverse:H,conjugate:F,fromMat:nt,fromEuler:rt,copy:W,clone:et,add:Bt,subtract:gt,sub:xt,mulScalar:Mt,scale:mt,divScalar:Dt,dot:C,lerp:_t,length:q,len:$,lengthSq:O,lenSq:Ut,normalize:lt,equalsApproximately:Et,equals:ft,identity:It,rotationTo:At,sqlerp:bt}}var Je=new Map;function hr(s){let r=Je.get(s);return r||(r=pr(s),Je.set(s,r)),r}function wr(s){function r(n,c,d,h){let M=new s(4);return n!==void 0&&(M[0]=n,c!==void 0&&(M[1]=c,d!==void 0&&(M[2]=d,h!==void 0&&(M[3]=h)))),M}let m=r;function v(n,c,d,h,M){let t=M??new s(4);return t[0]=n,t[1]=c,t[2]=d,t[3]=h,t}function P(n,c){let d=c??new s(4);return d[0]=Math.ceil(n[0]),d[1]=Math.ceil(n[1]),d[2]=Math.ceil(n[2]),d[3]=Math.ceil(n[3]),d}function T(n,c){let d=c??new s(4);return d[0]=Math.floor(n[0]),d[1]=Math.floor(n[1]),d[2]=Math.floor(n[2]),d[3]=Math.floor(n[3]),d}function B(n,c){let d=c??new s(4);return d[0]=Math.round(n[0]),d[1]=Math.round(n[1]),d[2]=Math.round(n[2]),d[3]=Math.round(n[3]),d}function G(n,c=0,d=1,h){let M=h??new s(4);return M[0]=Math.min(d,Math.max(c,n[0])),M[1]=Math.min(d,Math.max(c,n[1])),M[2]=Math.min(d,Math.max(c,n[2])),M[3]=Math.min(d,Math.max(c,n[3])),M}function _(n,c,d){let h=d??new s(4);return h[0]=n[0]+c[0],h[1]=n[1]+c[1],h[2]=n[2]+c[2],h[3]=n[3]+c[3],h}function U(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+c[0]*d,M[1]=n[1]+c[1]*d,M[2]=n[2]+c[2]*d,M[3]=n[3]+c[3]*d,M}function z(n,c,d){let h=d??new s(4);return h[0]=n[0]-c[0],h[1]=n[1]-c[1],h[2]=n[2]-c[2],h[3]=n[3]-c[3],h}let R=z;function X(n,c){return Math.abs(n[0]-c[0])<Q&&Math.abs(n[1]-c[1])<Q&&Math.abs(n[2]-c[2])<Q&&Math.abs(n[3]-c[3])<Q}function Y(n,c){return n[0]===c[0]&&n[1]===c[1]&&n[2]===c[2]&&n[3]===c[3]}function H(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+d*(c[0]-n[0]),M[1]=n[1]+d*(c[1]-n[1]),M[2]=n[2]+d*(c[2]-n[2]),M[3]=n[3]+d*(c[3]-n[3]),M}function F(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+d[0]*(c[0]-n[0]),M[1]=n[1]+d[1]*(c[1]-n[1]),M[2]=n[2]+d[2]*(c[2]-n[2]),M[3]=n[3]+d[3]*(c[3]-n[3]),M}function nt(n,c,d){let h=d??new s(4);return h[0]=Math.max(n[0],c[0]),h[1]=Math.max(n[1],c[1]),h[2]=Math.max(n[2],c[2]),h[3]=Math.max(n[3],c[3]),h}function rt(n,c,d){let h=d??new s(4);return h[0]=Math.min(n[0],c[0]),h[1]=Math.min(n[1],c[1]),h[2]=Math.min(n[2],c[2]),h[3]=Math.min(n[3],c[3]),h}function W(n,c,d){let h=d??new s(4);return h[0]=n[0]*c,h[1]=n[1]*c,h[2]=n[2]*c,h[3]=n[3]*c,h}let et=W;function Bt(n,c,d){let h=d??new s(4);return h[0]=n[0]/c,h[1]=n[1]/c,h[2]=n[2]/c,h[3]=n[3]/c,h}function gt(n,c){let d=c??new s(4);return d[0]=1/n[0],d[1]=1/n[1],d[2]=1/n[2],d[3]=1/n[3],d}let xt=gt;function Mt(n,c){return n[0]*c[0]+n[1]*c[1]+n[2]*c[2]+n[3]*c[3]}function mt(n){let c=n[0],d=n[1],h=n[2],M=n[3];return Math.sqrt(c*c+d*d+h*h+M*M)}let Dt=mt;function C(n){let c=n[0],d=n[1],h=n[2],M=n[3];return c*c+d*d+h*h+M*M}let _t=C;function q(n,c){let d=n[0]-c[0],h=n[1]-c[1],M=n[2]-c[2],t=n[3]-c[3];return Math.sqrt(d*d+h*h+M*M+t*t)}let $=q;function O(n,c){let d=n[0]-c[0],h=n[1]-c[1],M=n[2]-c[2],t=n[3]-c[3];return d*d+h*h+M*M+t*t}let Ut=O;function lt(n,c){let d=c??new s(4),h=n[0],M=n[1],t=n[2],a=n[3],e=Math.sqrt(h*h+M*M+t*t+a*a);return e>1e-5?(d[0]=h/e,d[1]=M/e,d[2]=t/e,d[3]=a/e):(d[0]=0,d[1]=0,d[2]=0,d[3]=0),d}function Et(n,c){let d=c??new s(4);return d[0]=-n[0],d[1]=-n[1],d[2]=-n[2],d[3]=-n[3],d}function ft(n,c){let d=c??new s(4);return d[0]=n[0],d[1]=n[1],d[2]=n[2],d[3]=n[3],d}let It=ft;function j(n,c,d){let h=d??new s(4);return h[0]=n[0]*c[0],h[1]=n[1]*c[1],h[2]=n[2]*c[2],h[3]=n[3]*c[3],h}let Lt=j;function vt(n,c,d){let h=d??new s(4);return h[0]=n[0]/c[0],h[1]=n[1]/c[1],h[2]=n[2]/c[2],h[3]=n[3]/c[3],h}let At=vt;function yt(n){let c=n??new s(4);return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c}function zt(n,c,d){let h=d??new s(4),M=n[0],t=n[1],a=n[2],e=n[3];return h[0]=c[0]*M+c[4]*t+c[8]*a+c[12]*e,h[1]=c[1]*M+c[5]*t+c[9]*a+c[13]*e,h[2]=c[2]*M+c[6]*t+c[10]*a+c[14]*e,h[3]=c[3]*M+c[7]*t+c[11]*a+c[15]*e,h}function bt(n,c,d){let h=d??new s(4);return lt(n,h),W(h,c,h)}function i(n,c,d){let h=d??new s(4);return mt(n)>c?bt(n,c,h):ft(n,h)}function p(n,c,d){let h=d??new s(4);return H(n,c,.5,h)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,subtract:z,sub:R,equalsApproximately:X,equals:Y,lerp:H,lerpV:F,max:nt,min:rt,mulScalar:W,scale:et,divScalar:Bt,inverse:gt,invert:xt,dot:Mt,length:mt,len:Dt,lengthSq:C,lenSq:_t,distance:q,dist:$,distanceSq:O,distSq:Ut,normalize:lt,negate:Et,copy:ft,clone:It,multiply:j,mul:Lt,divide:vt,div:At,zero:yt,transformMat4:zt,setLength:bt,truncate:i,midpoint:p}}var Ce=new Map;function gr(s){let r=Ce.get(s);return r||(r=wr(s),Ce.set(s,r)),r}function be(s,r,m,v,P,T){return{mat3:lr(s),mat4:dr(r),quat:hr(m),vec2:tn(v),vec3:fe(P),vec4:gr(T)}}var{mat3:No,mat4:Gt,quat:Yo,vec2:$o,vec3:Xo,vec4:Ho}=be(Float32Array,Float32Array,Float32Array,Float32Array,Float32Array,Float32Array),{mat3:Wo,mat4:jo,quat:Zo,vec2:Qo,vec3:ko,vec4:Ko}=be(Float64Array,Float64Array,Float64Array,Float64Array,Float64Array,Float64Array),{mat3:Jo,mat4:Co,quat:ts,vec2:es,vec3:ns,vec4:rs}=be(ir,Array,Array,Array,Array,Array);var de=class{device;format="r8unorm";downsizeFactor;multisample;textureSimple;textureMultisampled=null;renderPipeline;bindgroup;uniformsBuffer;trianglesBuffer;constructor(r){this.device=r.device,this.downsizeFactor=r.blurFactor,this.multisample=this.downsizeFactor>1?4:1,[this.textureSimple,this.textureMultisampled]=this.createTextures(r.width,r.height),this.trianglesBuffer=r.trianglesBuffer;let m=this.device.createShaderModule({label:"DisplacementTexture shader module",code:je});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementTexture renderpipeline",layout:"auto",vertex:{module:m,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x2"}],arrayStride:2*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"}]},fragment:{module:m,entryPoint:"main_fragment",targets:[{format:this.format}]},primitive:{cullMode:"none",topology:"triangle-list"},multisample:{count:this.multisample}}),this.uniformsBuffer=this.device.createBuffer({label:"DisplacementTexture uniforms buffer",size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.bindgroup=this.device.createBindGroup({label:"DisplacementTexture bindgroup",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.uniformsBuffer}}]})}update(r){let m=this.textureMultisampled??this.textureSimple,v={view:m.view,clearValue:[0,0,0,1],loadOp:"clear",storeOp:"store"};this.textureMultisampled&&(v.resolveTarget=this.textureSimple.view);let P=r.beginRenderPass({label:"DisplacementTexture render to texture renderpass",colorAttachments:[v]}),[T,B]=[m.texture.width,m.texture.height];P.setViewport(0,0,T,B,0,1),P.setScissorRect(0,0,T,B),P.setPipeline(this.renderPipeline),P.setBindGroup(0,this.bindgroup),P.setVertexBuffer(0,this.trianglesBuffer.bufferGpu),P.draw(3*this.trianglesBuffer.spriteCount),P.end()}resize(r,m){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),[this.textureSimple,this.textureMultisampled]=this.createTextures(r,m)}setViewport(r){let m=[1,1,1],v=0,P=[1,1,0],T=Gt.identity();Gt.multiply(Gt.scaling(m),T,T),Gt.multiply(Gt.rotationZ(v),T,T),Gt.multiply(Gt.translation(P),T,T);let B=Gt.translation([-r.position[0],-r.position[1],0]),G=r.width/r.zoom,_=r.height/r.zoom,U=Gt.ortho(0,G,_,0,-10,10),z=Gt.identity();Gt.multiply(B,T,z),Gt.multiply(U,z,z),this.device.queue.writeBuffer(this.uniformsBuffer,0,z)}getView(){return this.textureSimple.view}destroy(){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),this.uniformsBuffer.destroy()}createTextures(r,m){let v=this.device.createTexture({label:"DisplacementTexture texture",size:[Math.ceil(r/this.downsizeFactor),Math.ceil(m/this.downsizeFactor)],format:this.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),P={texture:v,view:v.createView({label:"DisplacementTexture texture view"})},T=null;if(this.multisample>1){let B=this.device.createTexture({label:"DisplacementTexture texture multisampled",size:[v.width,v.height],format:v.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:this.multisample});T={texture:B,view:B.createView({label:"DisplacementTexture texture multisampled view"})}}return[P,T]}};var nn={type:"cobalt:displacement",refs:[{name:"color",type:"textureView",format:"bgra8unorm",access:"read"},{name:"map",type:"cobaltTexture",format:"bgra8unorm",access:"read"},{name:"out",type:"textureView",format:"bgra8unorm",access:"write"}],onInit:async function(s,r={}){return xr(s,r)},onRun:function(s,r,m){mr(s,r,m)},onDestroy:function(s,r){vr(r)},onResize:function(s,r){r.data.displacementTexture.resize(s.viewport.width,s.viewport.height),r.data.displacementComposition.setColorTextureView(r.refs.color.data.view),r.data.displacementComposition.setNoiseMapTextureView(r.refs.map.view),r.data.displacementComposition.setDisplacementTextureView(r.data.displacementTexture.getView())},onViewportPosition:function(s,r){r.data.displacementTexture.setViewport(s.viewport)},customFunctions:{addTriangle:function(s,r,m){return r.data.trianglesBuffer.addTriangle(m)},removeTriangle:function(s,r,m){r.data.trianglesBuffer.removeTriangle(m)},setPosition:function(s,r,m,v){r.data.trianglesBuffer.setTriangle(m,v)}}};async function xr(s,r){let{device:m}=s,v=new ue({device:m,initialParameters:{offsetX:r.options.offseyX??0,offsetY:r.options.offseyY??0,scale:r.options.scale??20}}),P=256,T=new ae({device:m,maxSpriteCount:P}),B=new de({device:m,width:s.viewport.width,height:s.viewport.height,blurFactor:8,trianglesBuffer:T}),G=new le({device:m,targetFormat:"bgra8unorm",colorTextureView:r.refs.color.data.view,noiseMapTextureView:r.refs.map.view,displacementTextureView:B.getView(),displacementParametersBuffer:v});return{displacementParameters:v,displacementTexture:B,displacementComposition:G,trianglesBuffer:T}}function mr(s,r,m){if(r.data.trianglesBuffer.spriteCount===0)return;r.data.trianglesBuffer.update(),r.data.displacementTexture.update(m);let P=m.beginRenderPass({colorAttachments:[{view:r.refs.out,clearValue:s.clearValue,loadOp:"load",storeOp:"store"}]});P.executeBundles([r.data.displacementComposition.getRenderBundle()]),P.end()}function vr(s){s.data.trianglesBuffer.destroy(),s.data.trianglesBuffer=null,s.data.displacementParameters.destroy(),s.data.displacementParameters=null,s.data.displacementTexture.destroy(),s.data.displacementTexture=null,s.data.displacementComposition.destroy(),s.data.displacementComposition=null}function Te(s,r){let m=r.vertices,v=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,P={size:m.byteLength,usage:v,mappedAtCreation:!0},T=s.createBuffer(P);return new Float32Array(T.getMappedRange()).set(m),T.unmap(),{buffer:T,bufferLayout:{arrayStride:20,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x3",offset:0},{shaderLocation:1,format:"float32x2",offset:12}]}}}var Se="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};struct Sprite{translate:vec2<f32>,scale:vec2<f32>,tint:vec4<f32>,opacity:f32,rotation:f32,};struct SpritesBuffer{models:array<Sprite>,};@binding(0)@group(0)var<uniform> transformUBO:TransformData;@binding(1)@group(0)var myTexture:texture_2d<f32>;@binding(2)@group(0)var mySampler:sampler;@binding(3)@group(0)var<storage,read>sprites:SpritesBuffer;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32,};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@location(0)vertexPosition:vec3<f32>,@location(1)vertexTexCoord:vec2<f32>)->Fragment{var output:Fragment;var sx:f32=sprites.models[i_id].scale.x;var sy:f32=sprites.models[i_id].scale.y;var sz:f32=1.0;var rot:f32=sprites.models[i_id].rotation;var tx:f32=sprites.models[i_id].translate.x;var ty:f32=sprites.models[i_id].translate.y;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,1.0);output.TexCoord=vertexTexCoord;output.Tint=sprites.models[i_id].tint;output.Opacity=sprites.models[i_id].opacity;return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32)->@location(0)vec4<f32>{var outColor:vec4<f32>=textureSample(myTexture,mySampler,TexCoord);var output=vec4<f32>(outColor.rgb*(1.0-Tint.a)+(Tint.rgb*Tint.a),outColor.a*Opacity);return output;}";function Dr(s,r){return class extends s{constructor(...m){super(...m),r(this)}}}var br=Dr(Array,s=>s.fill(0)),k=1e-6;function Tr(s){function r(t=0,a=0){let e=new s(2);return t!==void 0&&(e[0]=t,a!==void 0&&(e[1]=a)),e}let m=r;function v(t,a,e){let o=e??new s(2);return o[0]=t,o[1]=a,o}function P(t,a){let e=a??new s(2);return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e}function T(t,a){let e=a??new s(2);return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e}function B(t,a){let e=a??new s(2);return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e}function G(t,a=0,e=1,o){let l=o??new s(2);return l[0]=Math.min(e,Math.max(a,t[0])),l[1]=Math.min(e,Math.max(a,t[1])),l}function _(t,a,e){let o=e??new s(2);return o[0]=t[0]+a[0],o[1]=t[1]+a[1],o}function U(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+a[0]*e,l[1]=t[1]+a[1]*e,l}function z(t,a){let e=t[0],o=t[1],l=a[0],g=a[1],D=Math.sqrt(e*e+o*o),u=Math.sqrt(l*l+g*g),f=D*u,w=f&&Dt(t,a)/f;return Math.acos(w)}function R(t,a,e){let o=e??new s(2);return o[0]=t[0]-a[0],o[1]=t[1]-a[1],o}let X=R;function Y(t,a){return Math.abs(t[0]-a[0])<k&&Math.abs(t[1]-a[1])<k}function H(t,a){return t[0]===a[0]&&t[1]===a[1]}function F(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+e*(a[0]-t[0]),l[1]=t[1]+e*(a[1]-t[1]),l}function nt(t,a,e,o){let l=o??new s(2);return l[0]=t[0]+e[0]*(a[0]-t[0]),l[1]=t[1]+e[1]*(a[1]-t[1]),l}function rt(t,a,e){let o=e??new s(2);return o[0]=Math.max(t[0],a[0]),o[1]=Math.max(t[1],a[1]),o}function W(t,a,e){let o=e??new s(2);return o[0]=Math.min(t[0],a[0]),o[1]=Math.min(t[1],a[1]),o}function et(t,a,e){let o=e??new s(2);return o[0]=t[0]*a,o[1]=t[1]*a,o}let Bt=et;function gt(t,a,e){let o=e??new s(2);return o[0]=t[0]/a,o[1]=t[1]/a,o}function xt(t,a){let e=a??new s(2);return e[0]=1/t[0],e[1]=1/t[1],e}let Mt=xt;function mt(t,a,e){let o=e??new s(3),l=t[0]*a[1]-t[1]*a[0];return o[0]=0,o[1]=0,o[2]=l,o}function Dt(t,a){return t[0]*a[0]+t[1]*a[1]}function C(t){let a=t[0],e=t[1];return Math.sqrt(a*a+e*e)}let _t=C;function q(t){let a=t[0],e=t[1];return a*a+e*e}let $=q;function O(t,a){let e=t[0]-a[0],o=t[1]-a[1];return Math.sqrt(e*e+o*o)}let Ut=O;function lt(t,a){let e=t[0]-a[0],o=t[1]-a[1];return e*e+o*o}let Et=lt;function ft(t,a){let e=a??new s(2),o=t[0],l=t[1],g=Math.sqrt(o*o+l*l);return g>1e-5?(e[0]=o/g,e[1]=l/g):(e[0]=0,e[1]=0),e}function It(t,a){let e=a??new s(2);return e[0]=-t[0],e[1]=-t[1],e}function j(t,a){let e=a??new s(2);return e[0]=t[0],e[1]=t[1],e}let Lt=j;function vt(t,a,e){let o=e??new s(2);return o[0]=t[0]*a[0],o[1]=t[1]*a[1],o}let At=vt;function yt(t,a,e){let o=e??new s(2);return o[0]=t[0]/a[0],o[1]=t[1]/a[1],o}let zt=yt;function bt(t=1,a){let e=a??new s(2),o=Math.random()*2*Math.PI;return e[0]=Math.cos(o)*t,e[1]=Math.sin(o)*t,e}function i(t){let a=t??new s(2);return a[0]=0,a[1]=0,a}function p(t,a,e){let o=e??new s(2),l=t[0],g=t[1];return o[0]=l*a[0]+g*a[4]+a[12],o[1]=l*a[1]+g*a[5]+a[13],o}function n(t,a,e){let o=e??new s(2),l=t[0],g=t[1];return o[0]=a[0]*l+a[4]*g+a[8],o[1]=a[1]*l+a[5]*g+a[9],o}function c(t,a,e,o){let l=o??new s(2),g=t[0]-a[0],D=t[1]-a[1],u=Math.sin(e),f=Math.cos(e);return l[0]=g*f-D*u+a[0],l[1]=g*u+D*f+a[1],l}function d(t,a,e){let o=e??new s(2);return ft(t,o),et(o,a,o)}function h(t,a,e){let o=e??new s(2);return C(t)>a?d(t,a,o):j(t,o)}function M(t,a,e){let o=e??new s(2);return F(t,a,.5,o)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,angle:z,subtract:R,sub:X,equalsApproximately:Y,equals:H,lerp:F,lerpV:nt,max:rt,min:W,mulScalar:et,scale:Bt,divScalar:gt,inverse:xt,invert:Mt,cross:mt,dot:Dt,length:C,len:_t,lengthSq:q,lenSq:$,distance:O,dist:Ut,distanceSq:lt,distSq:Et,normalize:ft,negate:It,copy:j,clone:Lt,multiply:vt,mul:At,divide:yt,div:zt,random:bt,zero:i,transformMat4:p,transformMat3:n,rotate:c,setLength:d,truncate:h,midpoint:M}}var rn=new Map;function ln(s){let r=rn.get(s);return r||(r=Tr(s),rn.set(s,r)),r}function Sr(s){function r(u,f,w){let x=new s(3);return u!==void 0&&(x[0]=u,f!==void 0&&(x[1]=f,w!==void 0&&(x[2]=w))),x}let m=r;function v(u,f,w,x){let y=x??new s(3);return y[0]=u,y[1]=f,y[2]=w,y}function P(u,f){let w=f??new s(3);return w[0]=Math.ceil(u[0]),w[1]=Math.ceil(u[1]),w[2]=Math.ceil(u[2]),w}function T(u,f){let w=f??new s(3);return w[0]=Math.floor(u[0]),w[1]=Math.floor(u[1]),w[2]=Math.floor(u[2]),w}function B(u,f){let w=f??new s(3);return w[0]=Math.round(u[0]),w[1]=Math.round(u[1]),w[2]=Math.round(u[2]),w}function G(u,f=0,w=1,x){let y=x??new s(3);return y[0]=Math.min(w,Math.max(f,u[0])),y[1]=Math.min(w,Math.max(f,u[1])),y[2]=Math.min(w,Math.max(f,u[2])),y}function _(u,f,w){let x=w??new s(3);return x[0]=u[0]+f[0],x[1]=u[1]+f[1],x[2]=u[2]+f[2],x}function U(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+f[0]*w,y[1]=u[1]+f[1]*w,y[2]=u[2]+f[2]*w,y}function z(u,f){let w=u[0],x=u[1],y=u[2],b=f[0],S=f[1],I=f[2],A=Math.sqrt(w*w+x*x+y*y),E=Math.sqrt(b*b+S*S+I*I),L=A*E,V=L&&Dt(u,f)/L;return Math.acos(V)}function R(u,f,w){let x=w??new s(3);return x[0]=u[0]-f[0],x[1]=u[1]-f[1],x[2]=u[2]-f[2],x}let X=R;function Y(u,f){return Math.abs(u[0]-f[0])<k&&Math.abs(u[1]-f[1])<k&&Math.abs(u[2]-f[2])<k}function H(u,f){return u[0]===f[0]&&u[1]===f[1]&&u[2]===f[2]}function F(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+w*(f[0]-u[0]),y[1]=u[1]+w*(f[1]-u[1]),y[2]=u[2]+w*(f[2]-u[2]),y}function nt(u,f,w,x){let y=x??new s(3);return y[0]=u[0]+w[0]*(f[0]-u[0]),y[1]=u[1]+w[1]*(f[1]-u[1]),y[2]=u[2]+w[2]*(f[2]-u[2]),y}function rt(u,f,w){let x=w??new s(3);return x[0]=Math.max(u[0],f[0]),x[1]=Math.max(u[1],f[1]),x[2]=Math.max(u[2],f[2]),x}function W(u,f,w){let x=w??new s(3);return x[0]=Math.min(u[0],f[0]),x[1]=Math.min(u[1],f[1]),x[2]=Math.min(u[2],f[2]),x}function et(u,f,w){let x=w??new s(3);return x[0]=u[0]*f,x[1]=u[1]*f,x[2]=u[2]*f,x}let Bt=et;function gt(u,f,w){let x=w??new s(3);return x[0]=u[0]/f,x[1]=u[1]/f,x[2]=u[2]/f,x}function xt(u,f){let w=f??new s(3);return w[0]=1/u[0],w[1]=1/u[1],w[2]=1/u[2],w}let Mt=xt;function mt(u,f,w){let x=w??new s(3),y=u[2]*f[0]-u[0]*f[2],b=u[0]*f[1]-u[1]*f[0];return x[0]=u[1]*f[2]-u[2]*f[1],x[1]=y,x[2]=b,x}function Dt(u,f){return u[0]*f[0]+u[1]*f[1]+u[2]*f[2]}function C(u){let f=u[0],w=u[1],x=u[2];return Math.sqrt(f*f+w*w+x*x)}let _t=C;function q(u){let f=u[0],w=u[1],x=u[2];return f*f+w*w+x*x}let $=q;function O(u,f){let w=u[0]-f[0],x=u[1]-f[1],y=u[2]-f[2];return Math.sqrt(w*w+x*x+y*y)}let Ut=O;function lt(u,f){let w=u[0]-f[0],x=u[1]-f[1],y=u[2]-f[2];return w*w+x*x+y*y}let Et=lt;function ft(u,f){let w=f??new s(3),x=u[0],y=u[1],b=u[2],S=Math.sqrt(x*x+y*y+b*b);return S>1e-5?(w[0]=x/S,w[1]=y/S,w[2]=b/S):(w[0]=0,w[1]=0,w[2]=0),w}function It(u,f){let w=f??new s(3);return w[0]=-u[0],w[1]=-u[1],w[2]=-u[2],w}function j(u,f){let w=f??new s(3);return w[0]=u[0],w[1]=u[1],w[2]=u[2],w}let Lt=j;function vt(u,f,w){let x=w??new s(3);return x[0]=u[0]*f[0],x[1]=u[1]*f[1],x[2]=u[2]*f[2],x}let At=vt;function yt(u,f,w){let x=w??new s(3);return x[0]=u[0]/f[0],x[1]=u[1]/f[1],x[2]=u[2]/f[2],x}let zt=yt;function bt(u=1,f){let w=f??new s(3),x=Math.random()*2*Math.PI,y=Math.random()*2-1,b=Math.sqrt(1-y*y)*u;return w[0]=Math.cos(x)*b,w[1]=Math.sin(x)*b,w[2]=y*u,w}function i(u){let f=u??new s(3);return f[0]=0,f[1]=0,f[2]=0,f}function p(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2],I=f[3]*y+f[7]*b+f[11]*S+f[15]||1;return x[0]=(f[0]*y+f[4]*b+f[8]*S+f[12])/I,x[1]=(f[1]*y+f[5]*b+f[9]*S+f[13])/I,x[2]=(f[2]*y+f[6]*b+f[10]*S+f[14])/I,x}function n(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2];return x[0]=y*f[0*4+0]+b*f[1*4+0]+S*f[2*4+0],x[1]=y*f[0*4+1]+b*f[1*4+1]+S*f[2*4+1],x[2]=y*f[0*4+2]+b*f[1*4+2]+S*f[2*4+2],x}function c(u,f,w){let x=w??new s(3),y=u[0],b=u[1],S=u[2];return x[0]=y*f[0]+b*f[4]+S*f[8],x[1]=y*f[1]+b*f[5]+S*f[9],x[2]=y*f[2]+b*f[6]+S*f[10],x}function d(u,f,w){let x=w??new s(3),y=f[0],b=f[1],S=f[2],I=f[3]*2,A=u[0],E=u[1],L=u[2],V=b*L-S*E,N=S*A-y*L,Z=y*E-b*A;return x[0]=A+V*I+(b*Z-S*N)*2,x[1]=E+N*I+(S*V-y*Z)*2,x[2]=L+Z*I+(y*N-b*V)*2,x}function h(u,f){let w=f??new s(3);return w[0]=u[12],w[1]=u[13],w[2]=u[14],w}function M(u,f,w){let x=w??new s(3),y=f*4;return x[0]=u[y+0],x[1]=u[y+1],x[2]=u[y+2],x}function t(u,f){let w=f??new s(3),x=u[0],y=u[1],b=u[2],S=u[4],I=u[5],A=u[6],E=u[8],L=u[9],V=u[10];return w[0]=Math.sqrt(x*x+y*y+b*b),w[1]=Math.sqrt(S*S+I*I+A*A),w[2]=Math.sqrt(E*E+L*L+V*V),w}function a(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[0],S[1]=b[1]*Math.cos(w)-b[2]*Math.sin(w),S[2]=b[1]*Math.sin(w)+b[2]*Math.cos(w),y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function e(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[2]*Math.sin(w)+b[0]*Math.cos(w),S[1]=b[1],S[2]=b[2]*Math.cos(w)-b[0]*Math.sin(w),y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function o(u,f,w,x){let y=x??new s(3),b=[],S=[];return b[0]=u[0]-f[0],b[1]=u[1]-f[1],b[2]=u[2]-f[2],S[0]=b[0]*Math.cos(w)-b[1]*Math.sin(w),S[1]=b[0]*Math.sin(w)+b[1]*Math.cos(w),S[2]=b[2],y[0]=S[0]+f[0],y[1]=S[1]+f[1],y[2]=S[2]+f[2],y}function l(u,f,w){let x=w??new s(3);return ft(u,x),et(x,f,x)}function g(u,f,w){let x=w??new s(3);return C(u)>f?l(u,f,x):j(u,x)}function D(u,f,w){let x=w??new s(3);return F(u,f,.5,x)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,angle:z,subtract:R,sub:X,equalsApproximately:Y,equals:H,lerp:F,lerpV:nt,max:rt,min:W,mulScalar:et,scale:Bt,divScalar:gt,inverse:xt,invert:Mt,cross:mt,dot:Dt,length:C,len:_t,lengthSq:q,lenSq:$,distance:O,dist:Ut,distanceSq:lt,distSq:Et,normalize:ft,negate:It,copy:j,clone:Lt,multiply:vt,mul:At,divide:yt,div:zt,random:bt,zero:i,transformMat4:p,transformMat4Upper3x3:n,transformMat3:c,transformQuat:d,getTranslation:h,getAxis:M,getScaling:t,rotateX:a,rotateY:e,rotateZ:o,setLength:l,truncate:g,midpoint:D}}var on=new Map;function pe(s){let r=on.get(s);return r||(r=Sr(s),on.set(s,r)),r}function Pr(s){let r=ln(s),m=pe(s);function v(i,p,n,c,d,h,M,t,a){let e=new s(12);return e[3]=0,e[7]=0,e[11]=0,i!==void 0&&(e[0]=i,p!==void 0&&(e[1]=p,n!==void 0&&(e[2]=n,c!==void 0&&(e[4]=c,d!==void 0&&(e[5]=d,h!==void 0&&(e[6]=h,M!==void 0&&(e[8]=M,t!==void 0&&(e[9]=t,a!==void 0&&(e[10]=a))))))))),e}function P(i,p,n,c,d,h,M,t,a,e){let o=e??new s(12);return o[0]=i,o[1]=p,o[2]=n,o[3]=0,o[4]=c,o[5]=d,o[6]=h,o[7]=0,o[8]=M,o[9]=t,o[10]=a,o[11]=0,o}function T(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=0,n[4]=i[4],n[5]=i[5],n[6]=i[6],n[7]=0,n[8]=i[8],n[9]=i[9],n[10]=i[10],n[11]=0,n}function B(i,p){let n=p??new s(12),c=i[0],d=i[1],h=i[2],M=i[3],t=c+c,a=d+d,e=h+h,o=c*t,l=d*t,g=d*a,D=h*t,u=h*a,f=h*e,w=M*t,x=M*a,y=M*e;return n[0]=1-g-f,n[1]=l+y,n[2]=D-x,n[3]=0,n[4]=l-y,n[5]=1-o-f,n[6]=u+w,n[7]=0,n[8]=D+x,n[9]=u-w,n[10]=1-o-g,n[11]=0,n}function G(i,p){let n=p??new s(12);return n[0]=-i[0],n[1]=-i[1],n[2]=-i[2],n[4]=-i[4],n[5]=-i[5],n[6]=-i[6],n[8]=-i[8],n[9]=-i[9],n[10]=-i[10],n}function _(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[4]=i[4],n[5]=i[5],n[6]=i[6],n[8]=i[8],n[9]=i[9],n[10]=i[10],n}let U=_;function z(i,p){return Math.abs(i[0]-p[0])<k&&Math.abs(i[1]-p[1])<k&&Math.abs(i[2]-p[2])<k&&Math.abs(i[4]-p[4])<k&&Math.abs(i[5]-p[5])<k&&Math.abs(i[6]-p[6])<k&&Math.abs(i[8]-p[8])<k&&Math.abs(i[9]-p[9])<k&&Math.abs(i[10]-p[10])<k}function R(i,p){return i[0]===p[0]&&i[1]===p[1]&&i[2]===p[2]&&i[4]===p[4]&&i[5]===p[5]&&i[6]===p[6]&&i[8]===p[8]&&i[9]===p[9]&&i[10]===p[10]}function X(i){let p=i??new s(12);return p[0]=1,p[1]=0,p[2]=0,p[4]=0,p[5]=1,p[6]=0,p[8]=0,p[9]=0,p[10]=1,p}function Y(i,p){let n=p??new s(12);if(n===i){let g;return g=i[1],i[1]=i[4],i[4]=g,g=i[2],i[2]=i[8],i[8]=g,g=i[6],i[6]=i[9],i[9]=g,n}let c=i[0*4+0],d=i[0*4+1],h=i[0*4+2],M=i[1*4+0],t=i[1*4+1],a=i[1*4+2],e=i[2*4+0],o=i[2*4+1],l=i[2*4+2];return n[0]=c,n[1]=M,n[2]=e,n[4]=d,n[5]=t,n[6]=o,n[8]=h,n[9]=a,n[10]=l,n}function H(i,p){let n=p??new s(12),c=i[0*4+0],d=i[0*4+1],h=i[0*4+2],M=i[1*4+0],t=i[1*4+1],a=i[1*4+2],e=i[2*4+0],o=i[2*4+1],l=i[2*4+2],g=l*t-a*o,D=-l*M+a*e,u=o*M-t*e,f=1/(c*g+d*D+h*u);return n[0]=g*f,n[1]=(-l*d+h*o)*f,n[2]=(a*d-h*t)*f,n[4]=D*f,n[5]=(l*c-h*e)*f,n[6]=(-a*c+h*M)*f,n[8]=u*f,n[9]=(-o*c+d*e)*f,n[10]=(t*c-d*M)*f,n}function F(i){let p=i[0],n=i[0*4+1],c=i[0*4+2],d=i[1*4+0],h=i[1*4+1],M=i[1*4+2],t=i[2*4+0],a=i[2*4+1],e=i[2*4+2];return p*(h*e-a*M)-d*(n*e-a*c)+t*(n*M-h*c)}let nt=H;function rt(i,p,n){let c=n??new s(12),d=i[0],h=i[1],M=i[2],t=i[4],a=i[5],e=i[6],o=i[8],l=i[9],g=i[10],D=p[0],u=p[1],f=p[2],w=p[4],x=p[5],y=p[6],b=p[8],S=p[9],I=p[10];return c[0]=d*D+t*u+o*f,c[1]=h*D+a*u+l*f,c[2]=M*D+e*u+g*f,c[4]=d*w+t*x+o*y,c[5]=h*w+a*x+l*y,c[6]=M*w+e*x+g*y,c[8]=d*b+t*S+o*I,c[9]=h*b+a*S+l*I,c[10]=M*b+e*S+g*I,c}let W=rt;function et(i,p,n){let c=n??X();return i!==c&&(c[0]=i[0],c[1]=i[1],c[2]=i[2],c[4]=i[4],c[5]=i[5],c[6]=i[6]),c[8]=p[0],c[9]=p[1],c[10]=1,c}function Bt(i,p){let n=p??r.create();return n[0]=i[8],n[1]=i[9],n}function gt(i,p,n){let c=n??r.create(),d=p*4;return c[0]=i[d+0],c[1]=i[d+1],c}function xt(i,p,n,c){let d=c===i?i:_(i,c),h=n*4;return d[h+0]=p[0],d[h+1]=p[1],d}function Mt(i,p){let n=p??r.create(),c=i[0],d=i[1],h=i[4],M=i[5];return n[0]=Math.sqrt(c*c+d*d),n[1]=Math.sqrt(h*h+M*M),n}function mt(i,p){let n=p??m.create(),c=i[0],d=i[1],h=i[2],M=i[4],t=i[5],a=i[6],e=i[8],o=i[9],l=i[10];return n[0]=Math.sqrt(c*c+d*d+h*h),n[1]=Math.sqrt(M*M+t*t+a*a),n[2]=Math.sqrt(e*e+o*o+l*l),n}function Dt(i,p){let n=p??new s(12);return n[0]=1,n[1]=0,n[2]=0,n[4]=0,n[5]=1,n[6]=0,n[8]=i[0],n[9]=i[1],n[10]=1,n}function C(i,p,n){let c=n??new s(12),d=p[0],h=p[1],M=i[0],t=i[1],a=i[2],e=i[1*4+0],o=i[1*4+1],l=i[1*4+2],g=i[2*4+0],D=i[2*4+1],u=i[2*4+2];return i!==c&&(c[0]=M,c[1]=t,c[2]=a,c[4]=e,c[5]=o,c[6]=l),c[8]=M*d+e*h+g,c[9]=t*d+o*h+D,c[10]=a*d+l*h+u,c}function _t(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=c,n[1]=d,n[2]=0,n[4]=-d,n[5]=c,n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function q(i,p,n){let c=n??new s(12),d=i[0*4+0],h=i[0*4+1],M=i[0*4+2],t=i[1*4+0],a=i[1*4+1],e=i[1*4+2],o=Math.cos(p),l=Math.sin(p);return c[0]=o*d+l*t,c[1]=o*h+l*a,c[2]=o*M+l*e,c[4]=o*t-l*d,c[5]=o*a-l*h,c[6]=o*e-l*M,i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function $(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=1,n[1]=0,n[2]=0,n[4]=0,n[5]=c,n[6]=d,n[8]=0,n[9]=-d,n[10]=c,n}function O(i,p,n){let c=n??new s(12),d=i[4],h=i[5],M=i[6],t=i[8],a=i[9],e=i[10],o=Math.cos(p),l=Math.sin(p);return c[4]=o*d+l*t,c[5]=o*h+l*a,c[6]=o*M+l*e,c[8]=o*t-l*d,c[9]=o*a-l*h,c[10]=o*e-l*M,i!==c&&(c[0]=i[0],c[1]=i[1],c[2]=i[2]),c}function Ut(i,p){let n=p??new s(12),c=Math.cos(i),d=Math.sin(i);return n[0]=c,n[1]=0,n[2]=-d,n[4]=0,n[5]=1,n[6]=0,n[8]=d,n[9]=0,n[10]=c,n}function lt(i,p,n){let c=n??new s(12),d=i[0*4+0],h=i[0*4+1],M=i[0*4+2],t=i[2*4+0],a=i[2*4+1],e=i[2*4+2],o=Math.cos(p),l=Math.sin(p);return c[0]=o*d-l*t,c[1]=o*h-l*a,c[2]=o*M-l*e,c[8]=o*t+l*d,c[9]=o*a+l*h,c[10]=o*e+l*M,i!==c&&(c[4]=i[4],c[5]=i[5],c[6]=i[6]),c}let Et=_t,ft=q;function It(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=0,n[2]=0,n[4]=0,n[5]=i[1],n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function j(i,p,n){let c=n??new s(12),d=p[0],h=p[1];return c[0]=d*i[0*4+0],c[1]=d*i[0*4+1],c[2]=d*i[0*4+2],c[4]=h*i[1*4+0],c[5]=h*i[1*4+1],c[6]=h*i[1*4+2],i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function Lt(i,p){let n=p??new s(12);return n[0]=i[0],n[1]=0,n[2]=0,n[4]=0,n[5]=i[1],n[6]=0,n[8]=0,n[9]=0,n[10]=i[2],n}function vt(i,p,n){let c=n??new s(12),d=p[0],h=p[1],M=p[2];return c[0]=d*i[0*4+0],c[1]=d*i[0*4+1],c[2]=d*i[0*4+2],c[4]=h*i[1*4+0],c[5]=h*i[1*4+1],c[6]=h*i[1*4+2],c[8]=M*i[2*4+0],c[9]=M*i[2*4+1],c[10]=M*i[2*4+2],c}function At(i,p){let n=p??new s(12);return n[0]=i,n[1]=0,n[2]=0,n[4]=0,n[5]=i,n[6]=0,n[8]=0,n[9]=0,n[10]=1,n}function yt(i,p,n){let c=n??new s(12);return c[0]=p*i[0*4+0],c[1]=p*i[0*4+1],c[2]=p*i[0*4+2],c[4]=p*i[1*4+0],c[5]=p*i[1*4+1],c[6]=p*i[1*4+2],i!==c&&(c[8]=i[8],c[9]=i[9],c[10]=i[10]),c}function zt(i,p){let n=p??new s(12);return n[0]=i,n[1]=0,n[2]=0,n[4]=0,n[5]=i,n[6]=0,n[8]=0,n[9]=0,n[10]=i,n}function bt(i,p,n){let c=n??new s(12);return c[0]=p*i[0*4+0],c[1]=p*i[0*4+1],c[2]=p*i[0*4+2],c[4]=p*i[1*4+0],c[5]=p*i[1*4+1],c[6]=p*i[1*4+2],c[8]=p*i[2*4+0],c[9]=p*i[2*4+1],c[10]=p*i[2*4+2],c}return{clone:U,create:v,set:P,fromMat4:T,fromQuat:B,negate:G,copy:_,equalsApproximately:z,equals:R,identity:X,transpose:Y,inverse:H,invert:nt,determinant:F,mul:W,multiply:rt,setTranslation:et,getTranslation:Bt,getAxis:gt,setAxis:xt,getScaling:Mt,get3DScaling:mt,translation:Dt,translate:C,rotation:_t,rotate:q,rotationX:$,rotateX:O,rotationY:Ut,rotateY:lt,rotationZ:Et,rotateZ:ft,scaling:It,scale:j,uniformScaling:At,uniformScale:yt,scaling3D:Lt,scale3D:vt,uniformScaling3D:zt,uniformScale3D:bt}}var sn=new Map;function Br(s){let r=sn.get(s);return r||(r=Pr(s),sn.set(s,r)),r}function _r(s){let r=pe(s);function m(t,a,e,o,l,g,D,u,f,w,x,y,b,S,I,A){let E=new s(16);return t!==void 0&&(E[0]=t,a!==void 0&&(E[1]=a,e!==void 0&&(E[2]=e,o!==void 0&&(E[3]=o,l!==void 0&&(E[4]=l,g!==void 0&&(E[5]=g,D!==void 0&&(E[6]=D,u!==void 0&&(E[7]=u,f!==void 0&&(E[8]=f,w!==void 0&&(E[9]=w,x!==void 0&&(E[10]=x,y!==void 0&&(E[11]=y,b!==void 0&&(E[12]=b,S!==void 0&&(E[13]=S,I!==void 0&&(E[14]=I,A!==void 0&&(E[15]=A)))))))))))))))),E}function v(t,a,e,o,l,g,D,u,f,w,x,y,b,S,I,A,E){let L=E??new s(16);return L[0]=t,L[1]=a,L[2]=e,L[3]=o,L[4]=l,L[5]=g,L[6]=D,L[7]=u,L[8]=f,L[9]=w,L[10]=x,L[11]=y,L[12]=b,L[13]=S,L[14]=I,L[15]=A,L}function P(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=0,e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=0,e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function T(t,a){let e=a??new s(16),o=t[0],l=t[1],g=t[2],D=t[3],u=o+o,f=l+l,w=g+g,x=o*u,y=l*u,b=l*f,S=g*u,I=g*f,A=g*w,E=D*u,L=D*f,V=D*w;return e[0]=1-b-A,e[1]=y+V,e[2]=S-L,e[3]=0,e[4]=y-V,e[5]=1-x-A,e[6]=I+E,e[7]=0,e[8]=S+L,e[9]=I-E,e[10]=1-x-b,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function B(t,a){let e=a??new s(16);return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e[4]=-t[4],e[5]=-t[5],e[6]=-t[6],e[7]=-t[7],e[8]=-t[8],e[9]=-t[9],e[10]=-t[10],e[11]=-t[11],e[12]=-t[12],e[13]=-t[13],e[14]=-t[14],e[15]=-t[15],e}function G(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}let _=G;function U(t,a){return Math.abs(t[0]-a[0])<k&&Math.abs(t[1]-a[1])<k&&Math.abs(t[2]-a[2])<k&&Math.abs(t[3]-a[3])<k&&Math.abs(t[4]-a[4])<k&&Math.abs(t[5]-a[5])<k&&Math.abs(t[6]-a[6])<k&&Math.abs(t[7]-a[7])<k&&Math.abs(t[8]-a[8])<k&&Math.abs(t[9]-a[9])<k&&Math.abs(t[10]-a[10])<k&&Math.abs(t[11]-a[11])<k&&Math.abs(t[12]-a[12])<k&&Math.abs(t[13]-a[13])<k&&Math.abs(t[14]-a[14])<k&&Math.abs(t[15]-a[15])<k}function z(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]}function R(t){let a=t??new s(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a}function X(t,a){let e=a??new s(16);if(e===t){let N;return N=t[1],t[1]=t[4],t[4]=N,N=t[2],t[2]=t[8],t[8]=N,N=t[3],t[3]=t[12],t[12]=N,N=t[6],t[6]=t[9],t[9]=N,N=t[7],t[7]=t[13],t[13]=N,N=t[11],t[11]=t[14],t[14]=N,e}let o=t[0*4+0],l=t[0*4+1],g=t[0*4+2],D=t[0*4+3],u=t[1*4+0],f=t[1*4+1],w=t[1*4+2],x=t[1*4+3],y=t[2*4+0],b=t[2*4+1],S=t[2*4+2],I=t[2*4+3],A=t[3*4+0],E=t[3*4+1],L=t[3*4+2],V=t[3*4+3];return e[0]=o,e[1]=u,e[2]=y,e[3]=A,e[4]=l,e[5]=f,e[6]=b,e[7]=E,e[8]=g,e[9]=w,e[10]=S,e[11]=L,e[12]=D,e[13]=x,e[14]=I,e[15]=V,e}function Y(t,a){let e=a??new s(16),o=t[0*4+0],l=t[0*4+1],g=t[0*4+2],D=t[0*4+3],u=t[1*4+0],f=t[1*4+1],w=t[1*4+2],x=t[1*4+3],y=t[2*4+0],b=t[2*4+1],S=t[2*4+2],I=t[2*4+3],A=t[3*4+0],E=t[3*4+1],L=t[3*4+2],V=t[3*4+3],N=S*V,Z=L*I,K=w*V,J=L*x,tt=w*I,ot=S*x,st=g*V,it=L*D,ct=g*I,at=S*D,dt=g*x,pt=w*D,ht=y*E,wt=A*b,Tt=u*E,St=A*f,Pt=u*b,$t=y*f,Xt=o*E,Ht=A*l,Wt=o*b,jt=y*l,Zt=o*f,Qt=u*l,te=N*f+J*b+tt*E-(Z*f+K*b+ot*E),ee=Z*l+st*b+at*E-(N*l+it*b+ct*E),ne=K*l+it*f+dt*E-(J*l+st*f+pt*E),re=ot*l+ct*f+pt*b-(tt*l+at*f+dt*b),ut=1/(o*te+u*ee+y*ne+A*re);return e[0]=ut*te,e[1]=ut*ee,e[2]=ut*ne,e[3]=ut*re,e[4]=ut*(Z*u+K*y+ot*A-(N*u+J*y+tt*A)),e[5]=ut*(N*o+it*y+ct*A-(Z*o+st*y+at*A)),e[6]=ut*(J*o+st*u+pt*A-(K*o+it*u+dt*A)),e[7]=ut*(tt*o+at*u+dt*y-(ot*o+ct*u+pt*y)),e[8]=ut*(ht*x+St*I+Pt*V-(wt*x+Tt*I+$t*V)),e[9]=ut*(wt*D+Xt*I+jt*V-(ht*D+Ht*I+Wt*V)),e[10]=ut*(Tt*D+Ht*x+Zt*V-(St*D+Xt*x+Qt*V)),e[11]=ut*($t*D+Wt*x+Qt*I-(Pt*D+jt*x+Zt*I)),e[12]=ut*(Tt*S+$t*L+wt*w-(Pt*L+ht*w+St*S)),e[13]=ut*(Wt*L+ht*g+Ht*S-(Xt*S+jt*L+wt*g)),e[14]=ut*(Xt*w+Qt*L+St*g-(Zt*L+Tt*g+Ht*w)),e[15]=ut*(Zt*S+Pt*g+jt*w-(Wt*w+Qt*S+$t*g)),e}function H(t){let a=t[0],e=t[0*4+1],o=t[0*4+2],l=t[0*4+3],g=t[1*4+0],D=t[1*4+1],u=t[1*4+2],f=t[1*4+3],w=t[2*4+0],x=t[2*4+1],y=t[2*4+2],b=t[2*4+3],S=t[3*4+0],I=t[3*4+1],A=t[3*4+2],E=t[3*4+3],L=y*E,V=A*b,N=u*E,Z=A*f,K=u*b,J=y*f,tt=o*E,ot=A*l,st=o*b,it=y*l,ct=o*f,at=u*l,dt=L*D+Z*x+K*I-(V*D+N*x+J*I),pt=V*e+tt*x+it*I-(L*e+ot*x+st*I),ht=N*e+ot*D+ct*I-(Z*e+tt*D+at*I),wt=J*e+st*D+at*x-(K*e+it*D+ct*x);return a*dt+g*pt+w*ht+S*wt}let F=Y;function nt(t,a,e){let o=e??new s(16),l=t[0],g=t[1],D=t[2],u=t[3],f=t[4],w=t[5],x=t[6],y=t[7],b=t[8],S=t[9],I=t[10],A=t[11],E=t[12],L=t[13],V=t[14],N=t[15],Z=a[0],K=a[1],J=a[2],tt=a[3],ot=a[4],st=a[5],it=a[6],ct=a[7],at=a[8],dt=a[9],pt=a[10],ht=a[11],wt=a[12],Tt=a[13],St=a[14],Pt=a[15];return o[0]=l*Z+f*K+b*J+E*tt,o[1]=g*Z+w*K+S*J+L*tt,o[2]=D*Z+x*K+I*J+V*tt,o[3]=u*Z+y*K+A*J+N*tt,o[4]=l*ot+f*st+b*it+E*ct,o[5]=g*ot+w*st+S*it+L*ct,o[6]=D*ot+x*st+I*it+V*ct,o[7]=u*ot+y*st+A*it+N*ct,o[8]=l*at+f*dt+b*pt+E*ht,o[9]=g*at+w*dt+S*pt+L*ht,o[10]=D*at+x*dt+I*pt+V*ht,o[11]=u*at+y*dt+A*pt+N*ht,o[12]=l*wt+f*Tt+b*St+E*Pt,o[13]=g*wt+w*Tt+S*St+L*Pt,o[14]=D*wt+x*Tt+I*St+V*Pt,o[15]=u*wt+y*Tt+A*St+N*Pt,o}let rt=nt;function W(t,a,e){let o=e??R();return t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11]),o[12]=a[0],o[13]=a[1],o[14]=a[2],o[15]=1,o}function et(t,a){let e=a??r.create();return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Bt(t,a,e){let o=e??r.create(),l=a*4;return o[0]=t[l+0],o[1]=t[l+1],o[2]=t[l+2],o}function gt(t,a,e,o){let l=o===t?o:G(t,o),g=e*4;return l[g+0]=a[0],l[g+1]=a[1],l[g+2]=a[2],l}function xt(t,a){let e=a??r.create(),o=t[0],l=t[1],g=t[2],D=t[4],u=t[5],f=t[6],w=t[8],x=t[9],y=t[10];return e[0]=Math.sqrt(o*o+l*l+g*g),e[1]=Math.sqrt(D*D+u*u+f*f),e[2]=Math.sqrt(w*w+x*x+y*y),e}function Mt(t,a,e,o,l){let g=l??new s(16),D=Math.tan(Math.PI*.5-.5*t);if(g[0]=D/a,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=D,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,Number.isFinite(o)){let u=1/(e-o);g[10]=o*u,g[14]=o*e*u}else g[10]=-1,g[14]=-e;return g}function mt(t,a,e,o=1/0,l){let g=l??new s(16),D=1/Math.tan(t*.5);if(g[0]=D/a,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=D,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[11]=-1,g[12]=0,g[13]=0,g[15]=0,o===1/0)g[10]=0,g[14]=e;else{let u=1/(o-e);g[10]=e*u,g[14]=o*e*u}return g}function Dt(t,a,e,o,l,g,D){let u=D??new s(16);return u[0]=2/(a-t),u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2/(o-e),u[6]=0,u[7]=0,u[8]=0,u[9]=0,u[10]=1/(l-g),u[11]=0,u[12]=(a+t)/(t-a),u[13]=(o+e)/(e-o),u[14]=l/(l-g),u[15]=1,u}function C(t,a,e,o,l,g,D){let u=D??new s(16),f=a-t,w=o-e,x=l-g;return u[0]=2*l/f,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2*l/w,u[6]=0,u[7]=0,u[8]=(t+a)/f,u[9]=(o+e)/w,u[10]=g/x,u[11]=-1,u[12]=0,u[13]=0,u[14]=l*g/x,u[15]=0,u}function _t(t,a,e,o,l,g=1/0,D){let u=D??new s(16),f=a-t,w=o-e;if(u[0]=2*l/f,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2*l/w,u[6]=0,u[7]=0,u[8]=(t+a)/f,u[9]=(o+e)/w,u[11]=-1,u[12]=0,u[13]=0,u[15]=0,g===1/0)u[10]=0,u[14]=l;else{let x=1/(g-l);u[10]=l*x,u[14]=g*l*x}return u}let q=r.create(),$=r.create(),O=r.create();function Ut(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(a,t,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=q[1],l[2]=q[2],l[3]=0,l[4]=$[0],l[5]=$[1],l[6]=$[2],l[7]=0,l[8]=O[0],l[9]=O[1],l[10]=O[2],l[11]=0,l[12]=t[0],l[13]=t[1],l[14]=t[2],l[15]=1,l}function lt(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(t,a,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=q[1],l[2]=q[2],l[3]=0,l[4]=$[0],l[5]=$[1],l[6]=$[2],l[7]=0,l[8]=O[0],l[9]=O[1],l[10]=O[2],l[11]=0,l[12]=t[0],l[13]=t[1],l[14]=t[2],l[15]=1,l}function Et(t,a,e,o){let l=o??new s(16);return r.normalize(r.subtract(t,a,O),O),r.normalize(r.cross(e,O,q),q),r.normalize(r.cross(O,q,$),$),l[0]=q[0],l[1]=$[0],l[2]=O[0],l[3]=0,l[4]=q[1],l[5]=$[1],l[6]=O[1],l[7]=0,l[8]=q[2],l[9]=$[2],l[10]=O[2],l[11]=0,l[12]=-(q[0]*t[0]+q[1]*t[1]+q[2]*t[2]),l[13]=-($[0]*t[0]+$[1]*t[1]+$[2]*t[2]),l[14]=-(O[0]*t[0]+O[1]*t[1]+O[2]*t[2]),l[15]=1,l}function ft(t,a){let e=a??new s(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function It(t,a,e){let o=e??new s(16),l=a[0],g=a[1],D=a[2],u=t[0],f=t[1],w=t[2],x=t[3],y=t[1*4+0],b=t[1*4+1],S=t[1*4+2],I=t[1*4+3],A=t[2*4+0],E=t[2*4+1],L=t[2*4+2],V=t[2*4+3],N=t[3*4+0],Z=t[3*4+1],K=t[3*4+2],J=t[3*4+3];return t!==o&&(o[0]=u,o[1]=f,o[2]=w,o[3]=x,o[4]=y,o[5]=b,o[6]=S,o[7]=I,o[8]=A,o[9]=E,o[10]=L,o[11]=V),o[12]=u*l+y*g+A*D+N,o[13]=f*l+b*g+E*D+Z,o[14]=w*l+S*g+L*D+K,o[15]=x*l+I*g+V*D+J,o}function j(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=l,e[7]=0,e[8]=0,e[9]=-l,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Lt(t,a,e){let o=e??new s(16),l=t[4],g=t[5],D=t[6],u=t[7],f=t[8],w=t[9],x=t[10],y=t[11],b=Math.cos(a),S=Math.sin(a);return o[4]=b*l+S*f,o[5]=b*g+S*w,o[6]=b*D+S*x,o[7]=b*u+S*y,o[8]=b*f-S*l,o[9]=b*w-S*g,o[10]=b*x-S*D,o[11]=b*y-S*u,t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function vt(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=o,e[1]=0,e[2]=-l,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=l,e[9]=0,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function At(t,a,e){let o=e??new s(16),l=t[0*4+0],g=t[0*4+1],D=t[0*4+2],u=t[0*4+3],f=t[2*4+0],w=t[2*4+1],x=t[2*4+2],y=t[2*4+3],b=Math.cos(a),S=Math.sin(a);return o[0]=b*l-S*f,o[1]=b*g-S*w,o[2]=b*D-S*x,o[3]=b*u-S*y,o[8]=b*f+S*l,o[9]=b*w+S*g,o[10]=b*x+S*D,o[11]=b*y+S*u,t!==o&&(o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function yt(t,a){let e=a??new s(16),o=Math.cos(t),l=Math.sin(t);return e[0]=o,e[1]=l,e[2]=0,e[3]=0,e[4]=-l,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function zt(t,a,e){let o=e??new s(16),l=t[0*4+0],g=t[0*4+1],D=t[0*4+2],u=t[0*4+3],f=t[1*4+0],w=t[1*4+1],x=t[1*4+2],y=t[1*4+3],b=Math.cos(a),S=Math.sin(a);return o[0]=b*l+S*f,o[1]=b*g+S*w,o[2]=b*D+S*x,o[3]=b*u+S*y,o[4]=b*f-S*l,o[5]=b*w-S*g,o[6]=b*x-S*D,o[7]=b*y-S*u,t!==o&&(o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function bt(t,a,e){let o=e??new s(16),l=t[0],g=t[1],D=t[2],u=Math.sqrt(l*l+g*g+D*D);l/=u,g/=u,D/=u;let f=l*l,w=g*g,x=D*D,y=Math.cos(a),b=Math.sin(a),S=1-y;return o[0]=f+(1-f)*y,o[1]=l*g*S+D*b,o[2]=l*D*S-g*b,o[3]=0,o[4]=l*g*S-D*b,o[5]=w+(1-w)*y,o[6]=g*D*S+l*b,o[7]=0,o[8]=l*D*S+g*b,o[9]=g*D*S-l*b,o[10]=x+(1-x)*y,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o}let i=bt;function p(t,a,e,o){let l=o??new s(16),g=a[0],D=a[1],u=a[2],f=Math.sqrt(g*g+D*D+u*u);g/=f,D/=f,u/=f;let w=g*g,x=D*D,y=u*u,b=Math.cos(e),S=Math.sin(e),I=1-b,A=w+(1-w)*b,E=g*D*I+u*S,L=g*u*I-D*S,V=g*D*I-u*S,N=x+(1-x)*b,Z=D*u*I+g*S,K=g*u*I+D*S,J=D*u*I-g*S,tt=y+(1-y)*b,ot=t[0],st=t[1],it=t[2],ct=t[3],at=t[4],dt=t[5],pt=t[6],ht=t[7],wt=t[8],Tt=t[9],St=t[10],Pt=t[11];return l[0]=A*ot+E*at+L*wt,l[1]=A*st+E*dt+L*Tt,l[2]=A*it+E*pt+L*St,l[3]=A*ct+E*ht+L*Pt,l[4]=V*ot+N*at+Z*wt,l[5]=V*st+N*dt+Z*Tt,l[6]=V*it+N*pt+Z*St,l[7]=V*ct+N*ht+Z*Pt,l[8]=K*ot+J*at+tt*wt,l[9]=K*st+J*dt+tt*Tt,l[10]=K*it+J*pt+tt*St,l[11]=K*ct+J*ht+tt*Pt,t!==l&&(l[12]=t[12],l[13]=t[13],l[14]=t[14],l[15]=t[15]),l}let n=p;function c(t,a){let e=a??new s(16);return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function d(t,a,e){let o=e??new s(16),l=a[0],g=a[1],D=a[2];return o[0]=l*t[0*4+0],o[1]=l*t[0*4+1],o[2]=l*t[0*4+2],o[3]=l*t[0*4+3],o[4]=g*t[1*4+0],o[5]=g*t[1*4+1],o[6]=g*t[1*4+2],o[7]=g*t[1*4+3],o[8]=D*t[2*4+0],o[9]=D*t[2*4+1],o[10]=D*t[2*4+2],o[11]=D*t[2*4+3],t!==o&&(o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}function h(t,a){let e=a??new s(16);return e[0]=t,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function M(t,a,e){let o=e??new s(16);return o[0]=a*t[0*4+0],o[1]=a*t[0*4+1],o[2]=a*t[0*4+2],o[3]=a*t[0*4+3],o[4]=a*t[1*4+0],o[5]=a*t[1*4+1],o[6]=a*t[1*4+2],o[7]=a*t[1*4+3],o[8]=a*t[2*4+0],o[9]=a*t[2*4+1],o[10]=a*t[2*4+2],o[11]=a*t[2*4+3],t!==o&&(o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o}return{create:m,set:v,fromMat3:P,fromQuat:T,negate:B,copy:G,clone:_,equalsApproximately:U,equals:z,identity:R,transpose:X,inverse:Y,determinant:H,invert:F,multiply:nt,mul:rt,setTranslation:W,getTranslation:et,getAxis:Bt,setAxis:gt,getScaling:xt,perspective:Mt,perspectiveReverseZ:mt,ortho:Dt,frustum:C,frustumReverseZ:_t,aim:Ut,cameraAim:lt,lookAt:Et,translation:ft,translate:It,rotationX:j,rotateX:Lt,rotationY:vt,rotateY:At,rotationZ:yt,rotateZ:zt,axisRotation:bt,rotation:i,axisRotate:p,rotate:n,scaling:c,scale:d,uniformScaling:h,uniformScale:M}}var cn=new Map;function zr(s){let r=cn.get(s);return r||(r=_r(s),cn.set(s,r)),r}function Gr(s){let r=pe(s);function m(i,p,n,c){let d=new s(4);return i!==void 0&&(d[0]=i,p!==void 0&&(d[1]=p,n!==void 0&&(d[2]=n,c!==void 0&&(d[3]=c)))),d}let v=m;function P(i,p,n,c,d){let h=d??new s(4);return h[0]=i,h[1]=p,h[2]=n,h[3]=c,h}function T(i,p,n){let c=n??new s(4),d=p*.5,h=Math.sin(d);return c[0]=h*i[0],c[1]=h*i[1],c[2]=h*i[2],c[3]=Math.cos(d),c}function B(i,p){let n=p??r.create(3),c=Math.acos(i[3])*2,d=Math.sin(c*.5);return d>k?(n[0]=i[0]/d,n[1]=i[1]/d,n[2]=i[2]/d):(n[0]=1,n[1]=0,n[2]=0),{angle:c,axis:n}}function G(i,p){let n=C(i,p);return Math.acos(2*n*n-1)}function _(i,p,n){let c=n??new s(4),d=i[0],h=i[1],M=i[2],t=i[3],a=p[0],e=p[1],o=p[2],l=p[3];return c[0]=d*l+t*a+h*o-M*e,c[1]=h*l+t*e+M*a-d*o,c[2]=M*l+t*o+d*e-h*a,c[3]=t*l-d*a-h*e-M*o,c}let U=_;function z(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o+a*e,c[1]=M*o+t*e,c[2]=t*o-M*e,c[3]=a*o-h*e,c}function R(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o-t*e,c[1]=M*o+a*e,c[2]=t*o+h*e,c[3]=a*o-M*e,c}function X(i,p,n){let c=n??new s(4),d=p*.5,h=i[0],M=i[1],t=i[2],a=i[3],e=Math.sin(d),o=Math.cos(d);return c[0]=h*o+M*e,c[1]=M*o-h*e,c[2]=t*o+a*e,c[3]=a*o-t*e,c}function Y(i,p,n,c){let d=c??new s(4),h=i[0],M=i[1],t=i[2],a=i[3],e=p[0],o=p[1],l=p[2],g=p[3],D=h*e+M*o+t*l+a*g;D<0&&(D=-D,e=-e,o=-o,l=-l,g=-g);let u,f;if(1-D>k){let w=Math.acos(D),x=Math.sin(w);u=Math.sin((1-n)*w)/x,f=Math.sin(n*w)/x}else u=1-n,f=n;return d[0]=u*h+f*e,d[1]=u*M+f*o,d[2]=u*t+f*l,d[3]=u*a+f*g,d}function H(i,p){let n=p??new s(4),c=i[0],d=i[1],h=i[2],M=i[3],t=c*c+d*d+h*h+M*M,a=t?1/t:0;return n[0]=-c*a,n[1]=-d*a,n[2]=-h*a,n[3]=M*a,n}function F(i,p){let n=p??new s(4);return n[0]=-i[0],n[1]=-i[1],n[2]=-i[2],n[3]=i[3],n}function nt(i,p){let n=p??new s(4),c=i[0]+i[5]+i[10];if(c>0){let d=Math.sqrt(c+1);n[3]=.5*d;let h=.5/d;n[0]=(i[6]-i[9])*h,n[1]=(i[8]-i[2])*h,n[2]=(i[1]-i[4])*h}else{let d=0;i[5]>i[0]&&(d=1),i[10]>i[d*4+d]&&(d=2);let h=(d+1)%3,M=(d+2)%3,t=Math.sqrt(i[d*4+d]-i[h*4+h]-i[M*4+M]+1);n[d]=.5*t;let a=.5/t;n[3]=(i[h*4+M]-i[M*4+h])*a,n[h]=(i[h*4+d]+i[d*4+h])*a,n[M]=(i[M*4+d]+i[d*4+M])*a}return n}function rt(i,p,n,c,d){let h=d??new s(4),M=i*.5,t=p*.5,a=n*.5,e=Math.sin(M),o=Math.cos(M),l=Math.sin(t),g=Math.cos(t),D=Math.sin(a),u=Math.cos(a);switch(c){case"xyz":h[0]=e*g*u+o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u-e*l*D;break;case"xzy":h[0]=e*g*u-o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u+e*l*D;break;case"yxz":h[0]=e*g*u+o*l*D,h[1]=o*l*u-e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u+e*l*D;break;case"yzx":h[0]=e*g*u+o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u-e*l*D;break;case"zxy":h[0]=e*g*u-o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D+e*l*u,h[3]=o*g*u-e*l*D;break;case"zyx":h[0]=e*g*u-o*l*D,h[1]=o*l*u+e*g*D,h[2]=o*g*D-e*l*u,h[3]=o*g*u+e*l*D;break;default:throw new Error(`Unknown rotation order: ${c}`)}return h}function W(i,p){let n=p??new s(4);return n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],n}let et=W;function Bt(i,p,n){let c=n??new s(4);return c[0]=i[0]+p[0],c[1]=i[1]+p[1],c[2]=i[2]+p[2],c[3]=i[3]+p[3],c}function gt(i,p,n){let c=n??new s(4);return c[0]=i[0]-p[0],c[1]=i[1]-p[1],c[2]=i[2]-p[2],c[3]=i[3]-p[3],c}let xt=gt;function Mt(i,p,n){let c=n??new s(4);return c[0]=i[0]*p,c[1]=i[1]*p,c[2]=i[2]*p,c[3]=i[3]*p,c}let mt=Mt;function Dt(i,p,n){let c=n??new s(4);return c[0]=i[0]/p,c[1]=i[1]/p,c[2]=i[2]/p,c[3]=i[3]/p,c}function C(i,p){return i[0]*p[0]+i[1]*p[1]+i[2]*p[2]+i[3]*p[3]}function _t(i,p,n,c){let d=c??new s(4);return d[0]=i[0]+n*(p[0]-i[0]),d[1]=i[1]+n*(p[1]-i[1]),d[2]=i[2]+n*(p[2]-i[2]),d[3]=i[3]+n*(p[3]-i[3]),d}function q(i){let p=i[0],n=i[1],c=i[2],d=i[3];return Math.sqrt(p*p+n*n+c*c+d*d)}let $=q;function O(i){let p=i[0],n=i[1],c=i[2],d=i[3];return p*p+n*n+c*c+d*d}let Ut=O;function lt(i,p){let n=p??new s(4),c=i[0],d=i[1],h=i[2],M=i[3],t=Math.sqrt(c*c+d*d+h*h+M*M);return t>1e-5?(n[0]=c/t,n[1]=d/t,n[2]=h/t,n[3]=M/t):(n[0]=0,n[1]=0,n[2]=0,n[3]=1),n}function Et(i,p){return Math.abs(i[0]-p[0])<k&&Math.abs(i[1]-p[1])<k&&Math.abs(i[2]-p[2])<k&&Math.abs(i[3]-p[3])<k}function ft(i,p){return i[0]===p[0]&&i[1]===p[1]&&i[2]===p[2]&&i[3]===p[3]}function It(i){let p=i??new s(4);return p[0]=0,p[1]=0,p[2]=0,p[3]=1,p}let j=r.create(),Lt=r.create(),vt=r.create();function At(i,p,n){let c=n??new s(4),d=r.dot(i,p);return d<-.999999?(r.cross(Lt,i,j),r.len(j)<1e-6&&r.cross(vt,i,j),r.normalize(j,j),T(j,Math.PI,c),c):d>.999999?(c[0]=0,c[1]=0,c[2]=0,c[3]=1,c):(r.cross(i,p,j),c[0]=j[0],c[1]=j[1],c[2]=j[2],c[3]=1+d,lt(c,c))}let yt=new s(4),zt=new s(4);function bt(i,p,n,c,d,h){let M=h??new s(4);return Y(i,c,d,yt),Y(p,n,d,zt),Y(yt,zt,2*d*(1-d),M),M}return{create:m,fromValues:v,set:P,fromAxisAngle:T,toAxisAngle:B,angle:G,multiply:_,mul:U,rotateX:z,rotateY:R,rotateZ:X,slerp:Y,inverse:H,conjugate:F,fromMat:nt,fromEuler:rt,copy:W,clone:et,add:Bt,subtract:gt,sub:xt,mulScalar:Mt,scale:mt,divScalar:Dt,dot:C,lerp:_t,length:q,len:$,lengthSq:O,lenSq:Ut,normalize:lt,equalsApproximately:Et,equals:ft,identity:It,rotationTo:At,sqlerp:bt}}var an=new Map;function Ur(s){let r=an.get(s);return r||(r=Gr(s),an.set(s,r)),r}function Er(s){function r(n,c,d,h){let M=new s(4);return n!==void 0&&(M[0]=n,c!==void 0&&(M[1]=c,d!==void 0&&(M[2]=d,h!==void 0&&(M[3]=h)))),M}let m=r;function v(n,c,d,h,M){let t=M??new s(4);return t[0]=n,t[1]=c,t[2]=d,t[3]=h,t}function P(n,c){let d=c??new s(4);return d[0]=Math.ceil(n[0]),d[1]=Math.ceil(n[1]),d[2]=Math.ceil(n[2]),d[3]=Math.ceil(n[3]),d}function T(n,c){let d=c??new s(4);return d[0]=Math.floor(n[0]),d[1]=Math.floor(n[1]),d[2]=Math.floor(n[2]),d[3]=Math.floor(n[3]),d}function B(n,c){let d=c??new s(4);return d[0]=Math.round(n[0]),d[1]=Math.round(n[1]),d[2]=Math.round(n[2]),d[3]=Math.round(n[3]),d}function G(n,c=0,d=1,h){let M=h??new s(4);return M[0]=Math.min(d,Math.max(c,n[0])),M[1]=Math.min(d,Math.max(c,n[1])),M[2]=Math.min(d,Math.max(c,n[2])),M[3]=Math.min(d,Math.max(c,n[3])),M}function _(n,c,d){let h=d??new s(4);return h[0]=n[0]+c[0],h[1]=n[1]+c[1],h[2]=n[2]+c[2],h[3]=n[3]+c[3],h}function U(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+c[0]*d,M[1]=n[1]+c[1]*d,M[2]=n[2]+c[2]*d,M[3]=n[3]+c[3]*d,M}function z(n,c,d){let h=d??new s(4);return h[0]=n[0]-c[0],h[1]=n[1]-c[1],h[2]=n[2]-c[2],h[3]=n[3]-c[3],h}let R=z;function X(n,c){return Math.abs(n[0]-c[0])<k&&Math.abs(n[1]-c[1])<k&&Math.abs(n[2]-c[2])<k&&Math.abs(n[3]-c[3])<k}function Y(n,c){return n[0]===c[0]&&n[1]===c[1]&&n[2]===c[2]&&n[3]===c[3]}function H(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+d*(c[0]-n[0]),M[1]=n[1]+d*(c[1]-n[1]),M[2]=n[2]+d*(c[2]-n[2]),M[3]=n[3]+d*(c[3]-n[3]),M}function F(n,c,d,h){let M=h??new s(4);return M[0]=n[0]+d[0]*(c[0]-n[0]),M[1]=n[1]+d[1]*(c[1]-n[1]),M[2]=n[2]+d[2]*(c[2]-n[2]),M[3]=n[3]+d[3]*(c[3]-n[3]),M}function nt(n,c,d){let h=d??new s(4);return h[0]=Math.max(n[0],c[0]),h[1]=Math.max(n[1],c[1]),h[2]=Math.max(n[2],c[2]),h[3]=Math.max(n[3],c[3]),h}function rt(n,c,d){let h=d??new s(4);return h[0]=Math.min(n[0],c[0]),h[1]=Math.min(n[1],c[1]),h[2]=Math.min(n[2],c[2]),h[3]=Math.min(n[3],c[3]),h}function W(n,c,d){let h=d??new s(4);return h[0]=n[0]*c,h[1]=n[1]*c,h[2]=n[2]*c,h[3]=n[3]*c,h}let et=W;function Bt(n,c,d){let h=d??new s(4);return h[0]=n[0]/c,h[1]=n[1]/c,h[2]=n[2]/c,h[3]=n[3]/c,h}function gt(n,c){let d=c??new s(4);return d[0]=1/n[0],d[1]=1/n[1],d[2]=1/n[2],d[3]=1/n[3],d}let xt=gt;function Mt(n,c){return n[0]*c[0]+n[1]*c[1]+n[2]*c[2]+n[3]*c[3]}function mt(n){let c=n[0],d=n[1],h=n[2],M=n[3];return Math.sqrt(c*c+d*d+h*h+M*M)}let Dt=mt;function C(n){let c=n[0],d=n[1],h=n[2],M=n[3];return c*c+d*d+h*h+M*M}let _t=C;function q(n,c){let d=n[0]-c[0],h=n[1]-c[1],M=n[2]-c[2],t=n[3]-c[3];return Math.sqrt(d*d+h*h+M*M+t*t)}let $=q;function O(n,c){let d=n[0]-c[0],h=n[1]-c[1],M=n[2]-c[2],t=n[3]-c[3];return d*d+h*h+M*M+t*t}let Ut=O;function lt(n,c){let d=c??new s(4),h=n[0],M=n[1],t=n[2],a=n[3],e=Math.sqrt(h*h+M*M+t*t+a*a);return e>1e-5?(d[0]=h/e,d[1]=M/e,d[2]=t/e,d[3]=a/e):(d[0]=0,d[1]=0,d[2]=0,d[3]=0),d}function Et(n,c){let d=c??new s(4);return d[0]=-n[0],d[1]=-n[1],d[2]=-n[2],d[3]=-n[3],d}function ft(n,c){let d=c??new s(4);return d[0]=n[0],d[1]=n[1],d[2]=n[2],d[3]=n[3],d}let It=ft;function j(n,c,d){let h=d??new s(4);return h[0]=n[0]*c[0],h[1]=n[1]*c[1],h[2]=n[2]*c[2],h[3]=n[3]*c[3],h}let Lt=j;function vt(n,c,d){let h=d??new s(4);return h[0]=n[0]/c[0],h[1]=n[1]/c[1],h[2]=n[2]/c[2],h[3]=n[3]/c[3],h}let At=vt;function yt(n){let c=n??new s(4);return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c}function zt(n,c,d){let h=d??new s(4),M=n[0],t=n[1],a=n[2],e=n[3];return h[0]=c[0]*M+c[4]*t+c[8]*a+c[12]*e,h[1]=c[1]*M+c[5]*t+c[9]*a+c[13]*e,h[2]=c[2]*M+c[6]*t+c[10]*a+c[14]*e,h[3]=c[3]*M+c[7]*t+c[11]*a+c[15]*e,h}function bt(n,c,d){let h=d??new s(4);return lt(n,h),W(h,c,h)}function i(n,c,d){let h=d??new s(4);return mt(n)>c?bt(n,c,h):ft(n,h)}function p(n,c,d){let h=d??new s(4);return H(n,c,.5,h)}return{create:r,fromValues:m,set:v,ceil:P,floor:T,round:B,clamp:G,add:_,addScaled:U,subtract:z,sub:R,equalsApproximately:X,equals:Y,lerp:H,lerpV:F,max:nt,min:rt,mulScalar:W,scale:et,divScalar:Bt,inverse:gt,invert:xt,dot:Mt,length:mt,len:Dt,lengthSq:C,lenSq:_t,distance:q,dist:$,distanceSq:O,distSq:Ut,normalize:lt,negate:Et,copy:ft,clone:It,multiply:j,mul:Lt,divide:vt,div:At,zero:yt,transformMat4:zt,setLength:bt,truncate:i,midpoint:p}}var un=new Map;function Ir(s){let r=un.get(s);return r||(r=Er(s),un.set(s,r)),r}function Pe(s,r,m,v,P,T){return{mat3:Br(s),mat4:zr(r),quat:Ur(m),vec2:ln(v),vec3:pe(P),vec4:Ir(T)}}var{mat3:ys,mat4:Nt,quat:Ms,vec2:he,vec3:Yt,vec4:Be}=Pe(Float32Array,Float32Array,Float32Array,Float32Array,Float32Array,Float32Array),{mat3:Ds,mat4:bs,quat:Ts,vec2:Ss,vec3:Ps,vec4:Bs}=Pe(Float64Array,Float64Array,Float64Array,Float64Array,Float64Array,Float64Array),{mat3:_s,mat4:zs,quat:Gs,vec2:Us,vec3:Es,vec4:Is}=Pe(br,Array,Array,Array,Array,Array);var ks=Be.create(),fn=Yt.create(),pn={type:"cobalt:overlay",refs:[{name:"spritesheet",type:"customResource",access:"read"},{name:"color",type:"textView",format:"rgba8unorm",access:"write"}],onInit:async function(s,r={}){return Lr(s,r)},onRun:function(s,r,m){Ar(s,r,m)},onDestroy:function(s,r){Rr(r)},onResize:function(s,r){dn(s,r)},onViewportPosition:function(s,r){dn(s,r)},customFunctions:{...ie}};async function Lr(s,r){let{device:m}=s,v=16192,P=v,B=Float32Array.BYTES_PER_ELEMENT*2,_=Float32Array.BYTES_PER_ELEMENT*2,z=Float32Array.BYTES_PER_ELEMENT*4,X=Float32Array.BYTES_PER_ELEMENT*4,Y=m.createBuffer({size:(B+_+z+X)*P,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),H=m.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),F=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}}]}),nt=m.createBindGroup({layout:F,entries:[{binding:0,resource:{buffer:H}},{binding:1,resource:r.refs.spritesheet.data.colorTexture.view},{binding:2,resource:r.refs.spritesheet.data.colorTexture.sampler},{binding:3,resource:{buffer:Y}}]}),rt=m.createPipelineLayout({bindGroupLayouts:[F]}),W=m.createRenderPipeline({label:"overlay",vertex:{module:m.createShaderModule({code:Se}),entryPoint:"vs_main",buffers:[r.refs.spritesheet.data.quads.bufferLayout]},fragment:{module:m.createShaderModule({code:Se}),entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:rt});return{instancedDrawCalls:new Uint32Array(v*2),instancedDrawCallCount:0,spriteBuffer:Y,uniformBuffer:H,pipeline:W,bindGroupLayout:F,bindGroup:nt,spriteData:new Float32Array(v*12),spriteCount:0,spriteIndices:new Map,dirty:!1}}function Ar(s,r,m){let{device:v}=s,P=r.options.loadOp||"load";if(r.data.dirty&&(Fr(r.data),r.data.dirty=!1),r.data.spriteCount>0){let _=r.data.spriteCount*12*Float32Array.BYTES_PER_ELEMENT;v.queue.writeBuffer(r.data.spriteBuffer,0,r.data.spriteData.buffer,0,_)}let T=m.beginRenderPass({colorAttachments:[{view:r.refs.color,clearValue:s.clearValue,loadOp:P,storeOp:"store"}]});T.setPipeline(r.data.pipeline),T.setBindGroup(0,r.data.bindGroup),T.setVertexBuffer(0,r.refs.spritesheet.data.quads.buffer);let B=6,G=0;for(let _=0;_<r.data.instancedDrawCallCount;_++){let U=r.data.instancedDrawCalls[_*2]*B,z=r.data.instancedDrawCalls[_*2+1];T.draw(B,z,U,G),G+=z}T.end()}function Fr(s){let r=-1,m=0;s.instancedDrawCallCount=0;for(let v=0;v<s.spriteCount;v++){let P=s.spriteData[v*12+11]&65535;P!==r&&(m>0&&(s.instancedDrawCalls[s.instancedDrawCallCount*2]=r,s.instancedDrawCalls[s.instancedDrawCallCount*2+1]=m,s.instancedDrawCallCount++),r=P,m=0),m++}m>0&&(s.instancedDrawCalls[s.instancedDrawCallCount*2]=r,s.instancedDrawCalls[s.instancedDrawCallCount*2+1]=m,s.instancedDrawCallCount++)}function dn(s,r){let v=Math.round(s.viewport.width/1),P=Math.round(s.viewport.height/1),T=Nt.ortho(0,v,P,0,-10,10);Yt.set(0,0,0,fn);let B=Nt.translation(fn);s.device.queue.writeBuffer(r.data.uniformBuffer,0,B.buffer),s.device.queue.writeBuffer(r.data.uniformBuffer,64,T.buffer)}function Rr(s){s.data.instancedDrawCalls=null,s.data.bindGroup=null,s.data.spriteBuffer.destroy(),s.data.spriteBuffer=null,s.data.uniformBuffer.destroy(),s.data.uniformBuffer=null,s.data.spriteData=null,s.data.spriteIndices.clear(),s.data.spriteIndices=null}var ze="@binding(0)@group(0)var tileTexture:texture_2d<f32>;@binding(1)@group(0)var tileSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vs_main(@builtin(vertex_index)VertexIndex:u32)->Fragment{var output:Fragment;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.TexCoord=vec2<f32>(uvs[VertexIndex]);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var col=textureSample(tileTexture,tileSampler,TexCoord);return vec4<f32>(col.rgb,1.0);}";var hn={type:"cobalt:fbBlit",refs:[{name:"in",type:"cobaltTexture",format:"bgra8unorm",access:"read"},{name:"out",type:"cobaltTexture",format:"bgra8unorm",access:"write"}],onInit:async function(s,r={}){return Or(s,r)},onRun:function(s,r,m){qr(s,r,m)},onDestroy:function(s,r){},onResize:function(s,r){Nr(s,r)},onViewportPosition:function(s,r){}};async function Or(s,r){let{device:m}=s,v=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),P=m.createBindGroup({layout:v,entries:[{binding:0,resource:r.refs.in.data.view},{binding:1,resource:r.refs.in.data.sampler}]}),T=m.createPipelineLayout({bindGroupLayouts:[v]}),B=m.createRenderPipeline({label:"fb-blit",vertex:{module:m.createShaderModule({code:ze}),entryPoint:"vs_main",buffers:[]},fragment:{module:m.createShaderModule({code:ze}),entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:T});return{bindGroupLayout:v,bindGroup:P,pipeline:B}}function qr(s,r,m){let{device:v}=s,P=m.beginRenderPass({colorAttachments:[{view:r.refs.out,clearValue:s.clearValue,loadOp:"load",storeOp:"store"}]});P.setPipeline(r.data.pipeline),P.setBindGroup(0,r.data.bindGroup),P.draw(3),P.end()}function Nr(s,r){let{device:m}=s;r.data.bindGroup=m.createBindGroup({layout:r.data.bindGroupLayout,entries:[{binding:0,resource:r.refs.in.data.view},{binding:1,resource:r.refs.in.data.sampler}]})}var wn="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};@binding(0)@group(0)var<uniform> transformUBO:TransformData;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)Color:vec4<f32>,};@vertex fn vs_main(@location(0)vertexPosition:vec2<f32>,@location(1)vertexColor:vec4<f32>)->Fragment{var sx:f32=1.0;var sy:f32=1.0;var sz:f32=1.0;var rot:f32=0.0;var tx:f32=1.0;var ty:f32=1.0;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;var output:Fragment;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,0.0,1.0);output.Color=vertexColor;return output;}@fragment fn fs_main(@location(0)Color:vec4<f32>)->@location(0)vec4<f32>{return Color;}";function Ct(s,r,m,v,P,T=1){let B=he.sub(v,m),G=he.normalize(B),_=$r(G),U=T/2,z=r.data.vertexCount*6;r.data.vertices[z+0]=m[0]+_[0]*U,r.data.vertices[z+1]=m[1]+_[1]*U,r.data.vertices[z+2]=P[0],r.data.vertices[z+3]=P[1],r.data.vertices[z+4]=P[2],r.data.vertices[z+5]=P[3],r.data.vertices[z+6]=m[0]-_[0]*U,r.data.vertices[z+7]=m[1]-_[1]*U,r.data.vertices[z+8]=P[0],r.data.vertices[z+9]=P[1],r.data.vertices[z+10]=P[2],r.data.vertices[z+11]=P[3],r.data.vertices[z+12]=v[0]+_[0]*U,r.data.vertices[z+13]=v[1]+_[1]*U,r.data.vertices[z+14]=P[0],r.data.vertices[z+15]=P[1],r.data.vertices[z+16]=P[2],r.data.vertices[z+17]=P[3],r.data.vertices[z+18]=m[0]-_[0]*U,r.data.vertices[z+19]=m[1]-_[1]*U,r.data.vertices[z+20]=P[0],r.data.vertices[z+21]=P[1],r.data.vertices[z+22]=P[2],r.data.vertices[z+23]=P[3],r.data.vertices[z+24]=v[0]+_[0]*U,r.data.vertices[z+25]=v[1]+_[1]*U,r.data.vertices[z+26]=P[0],r.data.vertices[z+27]=P[1],r.data.vertices[z+28]=P[2],r.data.vertices[z+29]=P[3],r.data.vertices[z+30]=v[0]-_[0]*U,r.data.vertices[z+31]=v[1]-_[1]*U,r.data.vertices[z+32]=P[0],r.data.vertices[z+33]=P[1],r.data.vertices[z+34]=P[2],r.data.vertices[z+35]=P[3],r.data.vertexCount+=6,r.data.dirty=!0}function $r(s){return[-s[1],s[0]]}var gn={line:Ct,ellipse:function(s,r,m,v,P,T,B,G=1){let[_,U]=m,z=2*Math.PI/T;for(let R=0;R<T;R++){let X=R*z,Y=(R+1)*z,H=_+v*Math.cos(X),F=U+P*Math.sin(X),nt=_+v*Math.cos(Y),rt=U+P*Math.sin(Y);Ct(s,r,[H,F],[nt,rt],B,G)}},filledEllipse:function(s,r,m,v,P,T,B){let[G,_]=m,U=2*Math.PI/T;for(let z=0;z<T;z++){let R=z*U,X=(z+1)*U,Y=G+v*Math.cos(R),H=_+P*Math.sin(R),F=G+v*Math.cos(X),nt=_+P*Math.sin(X),W=r.data.vertexCount*6+z*18;r.data.vertices[W+0]=G,r.data.vertices[W+1]=_,r.data.vertices[W+2]=B[0],r.data.vertices[W+3]=B[1],r.data.vertices[W+4]=B[2],r.data.vertices[W+5]=B[3],r.data.vertices[W+6]=Y,r.data.vertices[W+7]=H,r.data.vertices[W+8]=B[0],r.data.vertices[W+9]=B[1],r.data.vertices[W+10]=B[2],r.data.vertices[W+11]=B[3],r.data.vertices[W+12]=F,r.data.vertices[W+13]=nt,r.data.vertices[W+14]=B[0],r.data.vertices[W+15]=B[1],r.data.vertices[W+16]=B[2],r.data.vertices[W+17]=B[3]}r.data.vertexCount+=3*T,r.data.dirty=!0},box:function(s,r,m,v,P,T,B=0,G=1){let[_,U]=m,z=v/2,R=P/2,X=[_-z,U-R],Y=[_+z,U-R],H=[_-z,U+R],F=[_+z,U+R];B!==0&&(Kt(X,m,B,X),Kt(Y,m,B,Y),Kt(H,m,B,H),Kt(F,m,B,F)),Ct(s,r,X,Y,T,G),Ct(s,r,H,F,T,G),Ct(s,r,X,H,T,G),Ct(s,r,Y,F,T,G)},filledBox:function(s,r,m,v,P,T,B=0){let[G,_]=m,U=v/2,z=P/2,R=[G-U,_-z],X=[G+U,_-z],Y=[G-U,_+z],H=[G+U,_+z];B!==0&&(Kt(R,m,B,R),Kt(X,m,B,X),Kt(Y,m,B,Y),Kt(H,m,B,H));let F=r.data.vertexCount*6;r.data.vertices[F+0]=R[0],r.data.vertices[F+1]=R[1],r.data.vertices[F+2]=T[0],r.data.vertices[F+3]=T[1],r.data.vertices[F+4]=T[2],r.data.vertices[F+5]=T[3],r.data.vertices[F+6]=Y[0],r.data.vertices[F+7]=Y[1],r.data.vertices[F+8]=T[0],r.data.vertices[F+9]=T[1],r.data.vertices[F+10]=T[2],r.data.vertices[F+11]=T[3],r.data.vertices[F+12]=X[0],r.data.vertices[F+13]=X[1],r.data.vertices[F+14]=T[0],r.data.vertices[F+15]=T[1],r.data.vertices[F+16]=T[2],r.data.vertices[F+17]=T[3],r.data.vertices[F+18]=Y[0],r.data.vertices[F+19]=Y[1],r.data.vertices[F+20]=T[0],r.data.vertices[F+21]=T[1],r.data.vertices[F+22]=T[2],r.data.vertices[F+23]=T[3],r.data.vertices[F+24]=H[0],r.data.vertices[F+25]=H[1],r.data.vertices[F+26]=T[0],r.data.vertices[F+27]=T[1],r.data.vertices[F+28]=T[2],r.data.vertices[F+29]=T[3],r.data.vertices[F+30]=X[0],r.data.vertices[F+31]=X[1],r.data.vertices[F+32]=T[0],r.data.vertices[F+33]=T[1],r.data.vertices[F+34]=T[2],r.data.vertices[F+35]=T[3],r.data.vertexCount+=6,r.data.dirty=!0},clear:function(s,r){r.data.vertexCount=0,r.data.dirty=!0}};function Kt(s,r,m,v){let P=s[0]-r[0],T=s[1]-r[1],B=Math.sin(m),G=Math.cos(m);return v[0]=P*G-T*B+r[0],v[1]=P*B+T*G+r[1],v}var xn=Yt.create(0,0,0),vn={type:"cobalt:primitives",refs:[{name:"color",type:"textView",format:"rgba8unorm",access:"write"}],onInit:async function(s,r={}){return Xr(s,r)},onRun:function(s,r,m){Hr(s,r,m)},onDestroy:function(s,r){Wr(r)},onResize:function(s,r){mn(s,r)},onViewportPosition:function(s,r){mn(s,r)},customFunctions:gn};async function Xr(s,r){let{device:m}=s,v=new Float32Array(3e5),P=m.createBuffer({size:v.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),T=m.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),B=m.createShaderModule({code:wn}),G=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}}]}),_=m.createPipelineLayout({bindGroupLayouts:[G]}),U=m.createBindGroup({layout:G,entries:[{binding:0,resource:{buffer:T}}]}),z=m.createRenderPipeline({layout:_,vertex:{module:B,entryPoint:"vs_main",buffers:[{arrayStride:6*Float32Array.BYTES_PER_ELEMENT,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,format:"float32x4",offset:8}]}]},fragment:{module:B,entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"}});return{uniformBuffer:T,vertexBuffer:P,pipeline:z,bindGroup:U,vertexCount:0,dirty:!1,vertices:v}}function Hr(s,r,m){if(r.data.vertexCount===0)return;let{device:v}=s;if(r.data.dirty){r.data.dirty=!1;let B=6*Float32Array.BYTES_PER_ELEMENT,G=r.data.vertexCount*B;if(G>r.data.vertexBuffer.size){console.warn("too many primitives, bailing");return}s.device.queue.writeBuffer(r.data.vertexBuffer,0,r.data.vertices.buffer,0,G)}let P=r.options.loadOp||"load",T=m.beginRenderPass({colorAttachments:[{view:r.refs.color,clearValue:s.clearValue,loadOp:P,storeOp:"store"}]});T.setPipeline(r.data.pipeline),T.setBindGroup(0,r.data.bindGroup),T.setVertexBuffer(0,r.data.vertexBuffer),T.draw(r.data.vertexCount),T.end()}function Wr(s){s.data.vertexBuffer.destroy(),s.data.vertexBuffer=null,s.data.uniformBuffer.destroy(),s.data.uniformBuffer=null}function mn(s,r){let{device:m}=s,v=s.viewport.width/s.viewport.zoom,P=s.viewport.height/s.viewport.zoom,T=Nt.ortho(0,v,P,0,-10,10);Yt.set(-s.viewport.position[0],-s.viewport.position[1],0,xn);let B=Nt.translation(xn);m.queue.writeBuffer(r.data.uniformBuffer,0,B.buffer),m.queue.writeBuffer(r.data.uniformBuffer,64,T.buffer)}var Ge={};Ie(Ge,{setAmbientLight:()=>Zr,setLights:()=>jr,setOccluders:()=>Qr});function jr(s,r,m){r.data.lights=m,r.data.lightsBufferNeedsUpdate=!0}function Zr(s,r,m){r.data.lightsRenderer.setAmbientLight(m)}function Qr(s,r,m){r.data.lightsRenderer.setObstacles(m),r.data.lightsTextureNeedsUpdate=!0}var we=class{invViewProjectionMatrix=Gt.identity();viewportSize={width:1,height:1};topLeft=[0,0];zoom=1;constructor(r){this.setViewportSize(r.viewportSize.width,r.viewportSize.height);let m=r.center??this.topLeft;this.setTopLeft(...m);let v=r.zoom??1;this.setZoom(v)}get invertViewProjectionMatrix(){return this.invViewProjectionMatrix}setViewportSize(r,m){this.viewportSize.width=r,this.viewportSize.height=m,this.updateMatrices()}setTopLeft(r,m){this.topLeft[0]=r,this.topLeft[1]=m,this.updateMatrices()}setZoom(r){this.zoom=r,this.updateMatrices()}updateMatrices(){Gt.identity(this.invViewProjectionMatrix),Gt.multiply(Gt.scaling([1,-1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Gt.multiply(Gt.translation([1,1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Gt.multiply(Gt.scaling([.5*this.viewportSize.width/this.zoom,.5*this.viewportSize.height/this.zoom,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Gt.multiply(Gt.translation([this.topLeft[0],this.topLeft[1],0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix)}};var Vt=class s{static structs={definition:`
1
+ var Tn=Object.create;var Ue=Object.defineProperty;var Mn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var Pn=Object.getPrototypeOf,_n=Object.prototype.hasOwnProperty;var Ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tr=(e,t)=>{for(var n in t)Ue(e,n,{get:t[n],enumerable:!0})},Dn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let v of Sn(t))!_n.call(e,v)&&v!==n&&Ue(e,v,{get:()=>t[v],enumerable:!(r=Mn(t,v))||r.enumerable});return e};var Bn=(e,t,n)=>(n=e!=null?Tn(Pn(e)):{},Dn(t||!e||!e.__esModule?Ue(n,"default",{value:e,enumerable:!0}):n,e));var ee=Ot((ws,Er)=>{"use strict";function Ui(e,t,n,r,v){for(var i=v+1;r<=v;){var a=r+v>>>1,u=e[a],l=n!==void 0?n(u,t):u-t;l>=0?(i=a,v=a-1):r=a+1}return i}function Gi(e,t,n,r,v){for(var i=v+1;r<=v;){var a=r+v>>>1,u=e[a],l=n!==void 0?n(u,t):u-t;l>0?(i=a,v=a-1):r=a+1}return i}function Ei(e,t,n,r,v){for(var i=r-1;r<=v;){var a=r+v>>>1,u=e[a],l=n!==void 0?n(u,t):u-t;l<0?(i=a,r=a+1):v=a-1}return i}function zi(e,t,n,r,v){for(var i=r-1;r<=v;){var a=r+v>>>1,u=e[a],l=n!==void 0?n(u,t):u-t;l<=0?(i=a,r=a+1):v=a-1}return i}function Li(e,t,n,r,v){for(;r<=v;){var i=r+v>>>1,a=e[i],u=n!==void 0?n(a,t):a-t;if(u===0)return i;u<=0?r=i+1:v=i-1}return-1}function te(e,t,n,r,v,i){return typeof n=="function"?i(e,t,n,r===void 0?0:r|0,v===void 0?e.length-1:v|0):i(e,t,void 0,n===void 0?0:n|0,r===void 0?e.length-1:r|0)}Er.exports={ge:function(e,t,n,r,v){return te(e,t,n,r,v,Ui)},gt:function(e,t,n,r,v){return te(e,t,n,r,v,Gi)},lt:function(e,t,n,r,v){return te(e,t,n,r,v,Ei)},le:function(e,t,n,r,v){return te(e,t,n,r,v,zi)},eq:function(e,t,n,r,v){return te(e,t,n,r,v,Li)}}});var ge=Ot((ys,Lr)=>{"use strict";Lr.exports=Ii;var zr=+(Math.pow(2,27)+1);function Ii(e,t,n){var r=e*t,v=zr*e,i=v-e,a=v-i,u=e-a,l=zr*t,h=l-t,w=l-h,B=t-w,F=r-a*w,R=F-u*w,L=R-a*B,G=u*B-L;return n?(n[0]=G,n[1]=r,n):[G,r]}});var Ae=Ot((bs,Ir)=>{"use strict";Ir.exports=Ri;function Fi(e,t){var n=e+t,r=n-e,v=n-r,i=t-r,a=e-v,u=a+i;return u?[u,n]:[n]}function Ri(e,t){var n=e.length|0,r=t.length|0;if(n===1&&r===1)return Fi(e[0],t[0]);var v=n+r,i=new Array(v),a=0,u=0,l=0,h=Math.abs,w=e[u],B=h(w),F=t[l],R=h(F),L,G;B<R?(G=w,u+=1,u<n&&(w=e[u],B=h(w))):(G=F,l+=1,l<r&&(F=t[l],R=h(F))),u<n&&B<R||l>=r?(L=w,u+=1,u<n&&(w=e[u],B=h(w))):(L=F,l+=1,l<r&&(F=t[l],R=h(F)));for(var V=L+G,W=V-L,N=G-W,O=N,C=V,q,Y,nt,$,k;u<n&&l<r;)B<R?(L=w,u+=1,u<n&&(w=e[u],B=h(w))):(L=F,l+=1,l<r&&(F=t[l],R=h(F))),G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q;for(;u<n;)L=w,G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q,u+=1,u<n&&(w=e[u]);for(;l<r;)L=F,G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q,l+=1,l<r&&(F=t[l]);return O&&(i[a++]=O),C&&(i[a++]=C),a||(i[a++]=0),i.length=a,i}});var Rr=Ot((Ts,Fr)=>{"use strict";Fr.exports=Ai;function Ai(e,t,n){var r=e+t,v=r-e,i=r-v,a=t-v,u=e-i;return n?(n[0]=u+a,n[1]=r,n):[u+a,r]}});var Oe=Ot((Ms,Ar)=>{"use strict";var Ve=ge(),Vi=Rr();Ar.exports=Oi;function Oi(e,t){var n=e.length;if(n===1){var r=Ve(e[0],t);return r[0]?r:[r[1]]}var v=new Array(2*n),i=[.1,.1],a=[.1,.1],u=0;Ve(e[0],t,i),i[0]&&(v[u++]=i[0]);for(var l=1;l<n;++l){Ve(e[l],t,a);var h=i[1];Vi(h,a[0],i),i[0]&&(v[u++]=i[0]);var w=a[1],B=i[1],F=w+B,R=F-w,L=B-R;i[1]=F,L&&(v[u++]=L)}return i[1]&&(v[u++]=i[1]),u===0&&(v[u++]=0),v.length=u,v}});var Ce=Ot((Ss,Vr)=>{"use strict";Vr.exports=Ni;function Ci(e,t){var n=e+t,r=n-e,v=n-r,i=t-r,a=e-v,u=a+i;return u?[u,n]:[n]}function Ni(e,t){var n=e.length|0,r=t.length|0;if(n===1&&r===1)return Ci(e[0],-t[0]);var v=n+r,i=new Array(v),a=0,u=0,l=0,h=Math.abs,w=e[u],B=h(w),F=-t[l],R=h(F),L,G;B<R?(G=w,u+=1,u<n&&(w=e[u],B=h(w))):(G=F,l+=1,l<r&&(F=-t[l],R=h(F))),u<n&&B<R||l>=r?(L=w,u+=1,u<n&&(w=e[u],B=h(w))):(L=F,l+=1,l<r&&(F=-t[l],R=h(F)));for(var V=L+G,W=V-L,N=G-W,O=N,C=V,q,Y,nt,$,k;u<n&&l<r;)B<R?(L=w,u+=1,u<n&&(w=e[u],B=h(w))):(L=F,l+=1,l<r&&(F=-t[l],R=h(F))),G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q;for(;u<n;)L=w,G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q,u+=1,u<n&&(w=e[u]);for(;l<r;)L=F,G=O,V=L+G,W=V-L,N=G-W,N&&(i[a++]=N),q=C+V,Y=q-C,nt=q-Y,$=V-Y,k=C-nt,O=k+$,C=q,l+=1,l<r&&(F=-t[l]);return O&&(i[a++]=O),C&&(i[a++]=C),a||(i[a++]=0),i.length=a,i}});var Cr=Ot((Ps,Ne)=>{"use strict";var qi=ge(),Yi=Ae(),Xi=Oe(),Hi=Ce(),Or=5,xe=11102230246251565e-32,$i=(3+16*xe)*xe,Wi=(7+56*xe)*xe;function Zi(e,t,n,r){return function(i,a,u){var l=e(e(t(a[1],u[0]),t(-u[1],a[0])),e(t(i[1],a[0]),t(-a[1],i[0]))),h=e(t(i[1],u[0]),t(-u[1],i[0])),w=r(l,h);return w[w.length-1]}}function ki(e,t,n,r){return function(i,a,u,l){var h=e(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),a[2]),e(n(e(t(a[1],l[0]),t(-l[1],a[0])),-u[2]),n(e(t(a[1],u[0]),t(-u[1],a[0])),l[2]))),e(n(e(t(a[1],l[0]),t(-l[1],a[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),l[2])))),w=e(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-u[2]),n(e(t(i[1],u[0]),t(-u[1],i[0])),l[2]))),e(n(e(t(a[1],u[0]),t(-u[1],a[0])),i[2]),e(n(e(t(i[1],u[0]),t(-u[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),u[2])))),B=r(h,w);return B[B.length-1]}}function Qi(e,t,n,r){return function(i,a,u,l,h){var w=e(e(e(n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),u[2]),e(n(e(t(u[1],h[0]),t(-h[1],u[0])),-l[2]),n(e(t(u[1],l[0]),t(-l[1],u[0])),h[2]))),a[3]),e(n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-l[2]),n(e(t(a[1],l[0]),t(-l[1],a[0])),h[2]))),-u[3]),n(e(n(e(t(u[1],h[0]),t(-h[1],u[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-u[2]),n(e(t(a[1],u[0]),t(-u[1],a[0])),h[2]))),l[3]))),e(n(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),a[2]),e(n(e(t(a[1],l[0]),t(-l[1],a[0])),-u[2]),n(e(t(a[1],u[0]),t(-u[1],a[0])),l[2]))),-h[3]),e(n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-l[2]),n(e(t(a[1],l[0]),t(-l[1],a[0])),h[2]))),i[3]),n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-l[2]),n(e(t(i[1],l[0]),t(-l[1],i[0])),h[2]))),-a[3])))),e(e(n(e(n(e(t(a[1],h[0]),t(-h[1],a[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),h[2]))),l[3]),e(n(e(n(e(t(a[1],l[0]),t(-l[1],a[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),l[2]))),-h[3]),n(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),a[2]),e(n(e(t(a[1],l[0]),t(-l[1],a[0])),-u[2]),n(e(t(a[1],u[0]),t(-u[1],a[0])),l[2]))),i[3]))),e(n(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-u[2]),n(e(t(i[1],u[0]),t(-u[1],i[0])),l[2]))),-a[3]),e(n(e(n(e(t(a[1],l[0]),t(-l[1],a[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),l[2]))),u[3]),n(e(n(e(t(a[1],u[0]),t(-u[1],a[0])),i[2]),e(n(e(t(i[1],u[0]),t(-u[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),u[2]))),-l[3]))))),B=e(e(e(n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),u[2]),e(n(e(t(u[1],h[0]),t(-h[1],u[0])),-l[2]),n(e(t(u[1],l[0]),t(-l[1],u[0])),h[2]))),i[3]),n(e(n(e(t(l[1],h[0]),t(-h[1],l[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-l[2]),n(e(t(i[1],l[0]),t(-l[1],i[0])),h[2]))),-u[3])),e(n(e(n(e(t(u[1],h[0]),t(-h[1],u[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-u[2]),n(e(t(i[1],u[0]),t(-u[1],i[0])),h[2]))),l[3]),n(e(n(e(t(u[1],l[0]),t(-l[1],u[0])),i[2]),e(n(e(t(i[1],l[0]),t(-l[1],i[0])),-u[2]),n(e(t(i[1],u[0]),t(-u[1],i[0])),l[2]))),-h[3]))),e(e(n(e(n(e(t(u[1],h[0]),t(-h[1],u[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-u[2]),n(e(t(a[1],u[0]),t(-u[1],a[0])),h[2]))),i[3]),n(e(n(e(t(u[1],h[0]),t(-h[1],u[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-u[2]),n(e(t(i[1],u[0]),t(-u[1],i[0])),h[2]))),-a[3])),e(n(e(n(e(t(a[1],h[0]),t(-h[1],a[0])),i[2]),e(n(e(t(i[1],h[0]),t(-h[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),h[2]))),u[3]),n(e(n(e(t(a[1],u[0]),t(-u[1],a[0])),i[2]),e(n(e(t(i[1],u[0]),t(-u[1],i[0])),-a[2]),n(e(t(i[1],a[0]),t(-a[1],i[0])),u[2]))),-h[3])))),F=r(w,B);return F[F.length-1]}}function we(e){var t=e===3?Zi:e===4?ki:Qi;return t(Yi,qi,Xi,Hi)}var Ki=we(3),ji=we(4),Wt=[function(){return 0},function(){return 0},function(t,n){return n[0]-t[0]},function(t,n,r){var v=(t[1]-r[1])*(n[0]-r[0]),i=(t[0]-r[0])*(n[1]-r[1]),a=v-i,u;if(v>0){if(i<=0)return a;u=v+i}else if(v<0){if(i>=0)return a;u=-(v+i)}else return a;var l=$i*u;return a>=l||a<=-l?a:Ki(t,n,r)},function(t,n,r,v){var i=t[0]-v[0],a=n[0]-v[0],u=r[0]-v[0],l=t[1]-v[1],h=n[1]-v[1],w=r[1]-v[1],B=t[2]-v[2],F=n[2]-v[2],R=r[2]-v[2],L=a*w,G=u*h,V=u*l,W=i*w,N=i*h,O=a*l,C=B*(L-G)+F*(V-W)+R*(N-O),q=(Math.abs(L)+Math.abs(G))*Math.abs(B)+(Math.abs(V)+Math.abs(W))*Math.abs(F)+(Math.abs(N)+Math.abs(O))*Math.abs(R),Y=Wi*q;return C>Y||-C>Y?C:ji(t,n,r,v)}];function Ji(e){var t=Wt[e.length];return t||(t=Wt[e.length]=we(e.length)),t.apply(void 0,e)}function mi(e,t,n,r,v,i,a){return function(l,h,w,B,F){switch(arguments.length){case 0:case 1:return 0;case 2:return r(l,h);case 3:return v(l,h,w);case 4:return i(l,h,w,B);case 5:return a(l,h,w,B,F)}for(var R=new Array(arguments.length),L=0;L<arguments.length;++L)R[L]=arguments[L];return e(R)}}function to(){for(;Wt.length<=Or;)Wt.push(we(Wt.length));Ne.exports=mi.apply(void 0,[Ji].concat(Wt));for(var e=0;e<=Or;++e)Ne.exports[e]=Wt[e]}to()});var $r=Ot((_s,Hr)=>{"use strict";var ye=ee(),$t=Cr()[3],Ye=0,Nr=1,qe=2;Hr.exports=oo;function Yr(e,t,n,r,v){this.a=e,this.b=t,this.idx=n,this.lowerIds=r,this.upperIds=v}function re(e,t,n,r){this.a=e,this.b=t,this.type=n,this.idx=r}function eo(e,t){var n=e.a[0]-t.a[0]||e.a[1]-t.a[1]||e.type-t.type;return n||e.type!==Ye&&(n=$t(e.a,e.b,t.b),n)?n:e.idx-t.idx}function qr(e,t){return $t(e.a,e.b,t)}function ro(e,t,n,r,v){for(var i=ye.lt(t,r,qr),a=ye.gt(t,r,qr),u=i;u<a;++u){for(var l=t[u],h=l.lowerIds,B=h.length;B>1&&$t(n[h[B-2]],n[h[B-1]],r)>0;)e.push([h[B-1],h[B-2],v]),B-=1;h.length=B,h.push(v);for(var w=l.upperIds,B=w.length;B>1&&$t(n[w[B-2]],n[w[B-1]],r)<0;)e.push([w[B-2],w[B-1],v]),B-=1;w.length=B,w.push(v)}}function Xr(e,t){var n;return e.a[0]<t.a[0]?n=$t(e.a,e.b,t.a):n=$t(t.b,t.a,e.a),n||(t.b[0]<e.b[0]?n=$t(e.a,e.b,t.b):n=$t(t.b,t.a,e.b),n||e.idx-t.idx)}function no(e,t,n){var r=ye.le(e,n,Xr),v=e[r],i=v.upperIds,a=i[i.length-1];v.upperIds=[a],e.splice(r+1,0,new Yr(n.a,n.b,n.idx,[a],i))}function io(e,t,n){var r=n.a;n.a=n.b,n.b=r;var v=ye.eq(e,n,Xr),i=e[v],a=e[v-1];a.upperIds=i.upperIds,e.splice(v,1)}function oo(e,t){for(var n=e.length,r=t.length,v=[],i=0;i<n;++i)v.push(new re(e[i],null,Ye,i));for(var i=0;i<r;++i){var a=t[i],u=e[a[0]],l=e[a[1]];u[0]<l[0]?v.push(new re(u,l,qe,i),new re(l,u,Nr,i)):u[0]>l[0]&&v.push(new re(l,u,qe,i),new re(u,l,Nr,i))}v.sort(eo);for(var h=v[0].a[0]-(1+Math.abs(v[0].a[0]))*Math.pow(2,-52),w=[new Yr([h,1],[h,0],-1,[],[],[],[])],B=[],i=0,F=v.length;i<F;++i){var R=v[i],L=R.type;L===Ye?ro(B,w,e,R.a,R.idx):L===qe?no(w,e,R):io(w,e,R)}return B}});var kr=Ot((Ds,Zr)=>{"use strict";var ao=ee();Zr.exports=so;function Wr(e,t){this.stars=e,this.edges=t}var Zt=Wr.prototype;function Xe(e,t,n){for(var r=1,v=e.length;r<v;r+=2)if(e[r-1]===t&&e[r]===n){e[r-1]=e[v-2],e[r]=e[v-1],e.length=v-2;return}}Zt.isConstraint=function(){var e=[0,0];function t(n,r){return n[0]-r[0]||n[1]-r[1]}return function(n,r){return e[0]=Math.min(n,r),e[1]=Math.max(n,r),ao.eq(this.edges,e,t)>=0}}();Zt.removeTriangle=function(e,t,n){var r=this.stars;Xe(r[e],t,n),Xe(r[t],n,e),Xe(r[n],e,t)};Zt.addTriangle=function(e,t,n){var r=this.stars;r[e].push(t,n),r[t].push(n,e),r[n].push(e,t)};Zt.opposite=function(e,t){for(var n=this.stars[t],r=1,v=n.length;r<v;r+=2)if(n[r]===e)return n[r-1];return-1};Zt.flip=function(e,t){var n=this.opposite(e,t),r=this.opposite(t,e);this.removeTriangle(e,t,n),this.removeTriangle(t,e,r),this.addTriangle(e,r,n),this.addTriangle(t,n,r)};Zt.edges=function(){for(var e=this.stars,t=[],n=0,r=e.length;n<r;++n)for(var v=e[n],i=0,a=v.length;i<a;i+=2)t.push([v[i],v[i+1]]);return t};Zt.cells=function(){for(var e=this.stars,t=[],n=0,r=e.length;n<r;++n)for(var v=e[n],i=0,a=v.length;i<a;i+=2){var u=v[i],l=v[i+1];n<Math.min(u,l)&&t.push([n,u,l])}return t};function so(e,t){for(var n=new Array(e),r=0;r<e;++r)n[r]=[];return new Wr(n,t)}});var jr=Ot((Bs,He)=>{"use strict";var uo=ge(),co=Ae(),lo=Ce(),po=Oe(),Qr=6;function Kr(e){var t=e===3?go:e===4?xo:e===5?wo:yo;return t(co,lo,uo,po)}function fo(){return 0}function vo(){return 0}function ho(){return 0}function go(e,t,n,r){function v(i,a,u){var l=n(i[0],i[0]),h=r(l,a[0]),w=r(l,u[0]),B=n(a[0],a[0]),F=r(B,i[0]),R=r(B,u[0]),L=n(u[0],u[0]),G=r(L,i[0]),V=r(L,a[0]),W=e(t(V,R),t(F,h)),N=t(G,w),O=t(W,N);return O[O.length-1]}return v}function xo(e,t,n,r){function v(i,a,u,l){var h=e(n(i[0],i[0]),n(i[1],i[1])),w=r(h,a[0]),B=r(h,u[0]),F=r(h,l[0]),R=e(n(a[0],a[0]),n(a[1],a[1])),L=r(R,i[0]),G=r(R,u[0]),V=r(R,l[0]),W=e(n(u[0],u[0]),n(u[1],u[1])),N=r(W,i[0]),O=r(W,a[0]),C=r(W,l[0]),q=e(n(l[0],l[0]),n(l[1],l[1])),Y=r(q,i[0]),nt=r(q,a[0]),$=r(q,u[0]),k=e(e(r(t($,C),a[1]),e(r(t(nt,V),-u[1]),r(t(O,G),l[1]))),e(r(t(nt,V),i[1]),e(r(t(Y,F),-a[1]),r(t(L,w),l[1])))),J=e(e(r(t($,C),i[1]),e(r(t(Y,F),-u[1]),r(t(N,B),l[1]))),e(r(t(O,G),i[1]),e(r(t(N,B),-a[1]),r(t(L,w),u[1])))),m=t(k,J);return m[m.length-1]}return v}function wo(e,t,n,r){function v(i,a,u,l,h){var w=e(n(i[0],i[0]),e(n(i[1],i[1]),n(i[2],i[2]))),B=r(w,a[0]),F=r(w,u[0]),R=r(w,l[0]),L=r(w,h[0]),G=e(n(a[0],a[0]),e(n(a[1],a[1]),n(a[2],a[2]))),V=r(G,i[0]),W=r(G,u[0]),N=r(G,l[0]),O=r(G,h[0]),C=e(n(u[0],u[0]),e(n(u[1],u[1]),n(u[2],u[2]))),q=r(C,i[0]),Y=r(C,a[0]),nt=r(C,l[0]),$=r(C,h[0]),k=e(n(l[0],l[0]),e(n(l[1],l[1]),n(l[2],l[2]))),J=r(k,i[0]),m=r(k,a[0]),X=r(k,u[0]),at=r(k,h[0]),H=e(n(h[0],h[0]),e(n(h[1],h[1]),n(h[2],h[2]))),it=r(H,i[0]),tt=r(H,a[0]),ot=r(H,u[0]),et=r(H,l[0]),wt=e(e(e(r(e(r(t(et,at),u[1]),e(r(t(ot,$),-l[1]),r(t(X,nt),h[1]))),a[2]),e(r(e(r(t(et,at),a[1]),e(r(t(tt,O),-l[1]),r(t(m,N),h[1]))),-u[2]),r(e(r(t(ot,$),a[1]),e(r(t(tt,O),-u[1]),r(t(Y,W),h[1]))),l[2]))),e(r(e(r(t(X,nt),a[1]),e(r(t(m,N),-u[1]),r(t(Y,W),l[1]))),-h[2]),e(r(e(r(t(et,at),a[1]),e(r(t(tt,O),-l[1]),r(t(m,N),h[1]))),i[2]),r(e(r(t(et,at),i[1]),e(r(t(it,L),-l[1]),r(t(J,R),h[1]))),-a[2])))),e(e(r(e(r(t(tt,O),i[1]),e(r(t(it,L),-a[1]),r(t(V,B),h[1]))),l[2]),e(r(e(r(t(m,N),i[1]),e(r(t(J,R),-a[1]),r(t(V,B),l[1]))),-h[2]),r(e(r(t(X,nt),a[1]),e(r(t(m,N),-u[1]),r(t(Y,W),l[1]))),i[2]))),e(r(e(r(t(X,nt),i[1]),e(r(t(J,R),-u[1]),r(t(q,F),l[1]))),-a[2]),e(r(e(r(t(m,N),i[1]),e(r(t(J,R),-a[1]),r(t(V,B),l[1]))),u[2]),r(e(r(t(Y,W),i[1]),e(r(t(q,F),-a[1]),r(t(V,B),u[1]))),-l[2]))))),j=e(e(e(r(e(r(t(et,at),u[1]),e(r(t(ot,$),-l[1]),r(t(X,nt),h[1]))),i[2]),r(e(r(t(et,at),i[1]),e(r(t(it,L),-l[1]),r(t(J,R),h[1]))),-u[2])),e(r(e(r(t(ot,$),i[1]),e(r(t(it,L),-u[1]),r(t(q,F),h[1]))),l[2]),r(e(r(t(X,nt),i[1]),e(r(t(J,R),-u[1]),r(t(q,F),l[1]))),-h[2]))),e(e(r(e(r(t(ot,$),a[1]),e(r(t(tt,O),-u[1]),r(t(Y,W),h[1]))),i[2]),r(e(r(t(ot,$),i[1]),e(r(t(it,L),-u[1]),r(t(q,F),h[1]))),-a[2])),e(r(e(r(t(tt,O),i[1]),e(r(t(it,L),-a[1]),r(t(V,B),h[1]))),u[2]),r(e(r(t(Y,W),i[1]),e(r(t(q,F),-a[1]),r(t(V,B),u[1]))),-h[2])))),ut=t(wt,j);return ut[ut.length-1]}return v}function yo(e,t,n,r){function v(i,a,u,l,h,w){var B=e(e(n(i[0],i[0]),n(i[1],i[1])),e(n(i[2],i[2]),n(i[3],i[3]))),F=r(B,a[0]),R=r(B,u[0]),L=r(B,l[0]),G=r(B,h[0]),V=r(B,w[0]),W=e(e(n(a[0],a[0]),n(a[1],a[1])),e(n(a[2],a[2]),n(a[3],a[3]))),N=r(W,i[0]),O=r(W,u[0]),C=r(W,l[0]),q=r(W,h[0]),Y=r(W,w[0]),nt=e(e(n(u[0],u[0]),n(u[1],u[1])),e(n(u[2],u[2]),n(u[3],u[3]))),$=r(nt,i[0]),k=r(nt,a[0]),J=r(nt,l[0]),m=r(nt,h[0]),X=r(nt,w[0]),at=e(e(n(l[0],l[0]),n(l[1],l[1])),e(n(l[2],l[2]),n(l[3],l[3]))),H=r(at,i[0]),it=r(at,a[0]),tt=r(at,u[0]),ot=r(at,h[0]),et=r(at,w[0]),wt=e(e(n(h[0],h[0]),n(h[1],h[1])),e(n(h[2],h[2]),n(h[3],h[3]))),j=r(wt,i[0]),ut=r(wt,a[0]),ct=r(wt,u[0]),dt=r(wt,l[0]),lt=r(wt,w[0]),Tt=e(e(n(w[0],w[0]),n(w[1],w[1])),e(n(w[2],w[2]),n(w[3],w[3]))),ft=r(Tt,i[0]),p=r(Tt,a[0]),M=r(Tt,u[0]),c=r(Tt,l[0]),d=r(Tt,h[0]),T=e(e(e(r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),u[2]),r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),-l[2])),e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),h[2]),r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),-w[2]))),a[3]),e(r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),a[2]),r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),-l[2])),e(r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),h[2]),r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),-w[2]))),-u[3]),r(e(e(r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),a[2]),r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),-u[2])),e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),h[2]),r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),-w[2]))),l[3]))),e(e(r(e(e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),a[2]),r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),-u[2])),e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),l[2]),r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),-w[2]))),-h[3]),r(e(e(r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),a[2]),r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),-u[2])),e(r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),l[2]),r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),-h[2]))),w[3])),e(r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),a[2]),r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),-l[2])),e(r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),h[2]),r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),-w[2]))),i[3]),r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-l[2])),e(r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),h[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-w[2]))),-a[3])))),e(e(e(r(e(e(r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),h[2]),r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),-w[2]))),l[3]),r(e(e(r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),i[2]),r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),l[2]),r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),-w[2]))),-h[3])),e(r(e(e(r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),i[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-a[2])),e(r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),l[2]),r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),-h[2]))),w[3]),r(e(e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),a[2]),r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),-u[2])),e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),l[2]),r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),-w[2]))),i[3]))),e(e(r(e(e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),i[2]),r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),-u[2])),e(r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),l[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-w[2]))),-a[3]),r(e(e(r(e(r(t(c,et),a[1]),e(r(t(p,Y),-l[1]),r(t(it,C),w[1]))),i[2]),r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),l[2]),r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),-w[2]))),u[3])),e(r(e(e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),i[2]),r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-w[2]))),-l[3]),r(e(e(r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),i[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-a[2])),e(r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-l[2]))),w[3]))))),S=e(e(e(r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),u[2]),r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),-l[2])),e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),h[2]),r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),-w[2]))),i[3]),e(r(e(e(r(e(r(t(d,lt),l[1]),e(r(t(c,et),-h[1]),r(t(dt,ot),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-l[2])),e(r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),h[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-w[2]))),-u[3]),r(e(e(r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-u[2])),e(r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),h[2]),r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),-w[2]))),l[3]))),e(e(r(e(e(r(e(r(t(c,et),u[1]),e(r(t(M,X),-l[1]),r(t(tt,J),w[1]))),i[2]),r(e(r(t(c,et),i[1]),e(r(t(ft,V),-l[1]),r(t(H,L),w[1]))),-u[2])),e(r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),l[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-w[2]))),-h[3]),r(e(e(r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),i[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-u[2])),e(r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),l[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-h[2]))),w[3])),e(r(e(e(r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),a[2]),r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),-u[2])),e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),h[2]),r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),-w[2]))),i[3]),r(e(e(r(e(r(t(d,lt),u[1]),e(r(t(M,X),-h[1]),r(t(ct,m),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-u[2])),e(r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),h[2]),r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),-w[2]))),-a[3])))),e(e(e(r(e(e(r(e(r(t(d,lt),a[1]),e(r(t(p,Y),-h[1]),r(t(ut,q),w[1]))),i[2]),r(e(r(t(d,lt),i[1]),e(r(t(ft,V),-h[1]),r(t(j,G),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),h[2]),r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),-w[2]))),u[3]),r(e(e(r(e(r(t(M,X),a[1]),e(r(t(p,Y),-u[1]),r(t(k,O),w[1]))),i[2]),r(e(r(t(M,X),i[1]),e(r(t(ft,V),-u[1]),r(t($,R),w[1]))),-a[2])),e(r(e(r(t(p,Y),i[1]),e(r(t(ft,V),-a[1]),r(t(N,F),w[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-w[2]))),-h[3])),e(r(e(e(r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),i[2]),r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),-a[2])),e(r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-h[2]))),w[3]),r(e(e(r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),a[2]),r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),-u[2])),e(r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),l[2]),r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),-h[2]))),i[3]))),e(e(r(e(e(r(e(r(t(dt,ot),u[1]),e(r(t(ct,m),-l[1]),r(t(tt,J),h[1]))),i[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-u[2])),e(r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),l[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-h[2]))),-a[3]),r(e(e(r(e(r(t(dt,ot),a[1]),e(r(t(ut,q),-l[1]),r(t(it,C),h[1]))),i[2]),r(e(r(t(dt,ot),i[1]),e(r(t(j,G),-l[1]),r(t(H,L),h[1]))),-a[2])),e(r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),l[2]),r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),-h[2]))),u[3])),e(r(e(e(r(e(r(t(ct,m),a[1]),e(r(t(ut,q),-u[1]),r(t(k,O),h[1]))),i[2]),r(e(r(t(ct,m),i[1]),e(r(t(j,G),-u[1]),r(t($,R),h[1]))),-a[2])),e(r(e(r(t(ut,q),i[1]),e(r(t(j,G),-a[1]),r(t(N,F),h[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-h[2]))),-l[3]),r(e(e(r(e(r(t(tt,J),a[1]),e(r(t(it,C),-u[1]),r(t(k,O),l[1]))),i[2]),r(e(r(t(tt,J),i[1]),e(r(t(H,L),-u[1]),r(t($,R),l[1]))),-a[2])),e(r(e(r(t(it,C),i[1]),e(r(t(H,L),-a[1]),r(t(N,F),l[1]))),u[2]),r(e(r(t(k,O),i[1]),e(r(t($,R),-a[1]),r(t(N,F),u[1]))),-l[2]))),h[3]))))),U=t(T,S);return U[U.length-1]}return v}var kt=[fo,vo,ho];function bo(e){var t=kt[e.length];return t||(t=kt[e.length]=Kr(e.length)),t.apply(void 0,e)}function To(e,t,n,r,v,i,a,u){function l(h,w,B,F,R,L){switch(arguments.length){case 0:case 1:return 0;case 2:return r(h,w);case 3:return v(h,w,B);case 4:return i(h,w,B,F);case 5:return a(h,w,B,F,R);case 6:return u(h,w,B,F,R,L)}for(var G=new Array(arguments.length),V=0;V<arguments.length;++V)G[V]=arguments[V];return e(G)}return l}function Mo(){for(;kt.length<=Qr;)kt.push(Kr(kt.length));He.exports=To.apply(void 0,[bo].concat(kt));for(var e=0;e<=Qr;++e)He.exports[e]=kt[e]}Mo()});var mr=Ot((Gs,Jr)=>{"use strict";var $e=jr()[4],Us=ee();Jr.exports=So;function be(e,t,n,r,v,i){var a=t.opposite(r,v);if(!(a<0)){if(v<r){var u=r;r=v,v=u,u=i,i=a,a=u}t.isConstraint(r,v)||$e(e[r],e[v],e[i],e[a])<0&&n.push(r,v)}}function So(e,t){for(var n=[],r=e.length,v=t.stars,i=0;i<r;++i)for(var a=v[i],u=1;u<a.length;u+=2){var l=a[u];if(!(l<i)&&!t.isConstraint(i,l)){for(var h=a[u-1],w=-1,B=1;B<a.length;B+=2)if(a[B-1]===l){w=a[B];break}w<0||$e(e[i],e[l],e[h],e[w])<0&&n.push(i,l)}}for(;n.length>0;){for(var l=n.pop(),i=n.pop(),h=-1,w=-1,a=v[i],F=1;F<a.length;F+=2){var R=a[F-1],L=a[F];R===l?w=L:L===l&&(h=R)}h<0||w<0||$e(e[i],e[l],e[h],e[w])>=0||(t.flip(i,l),be(e,t,n,h,i,w),be(e,t,n,i,w,h),be(e,t,n,w,l,h),be(e,t,n,l,h,w))}}});var nn=Ot((Es,rn)=>{"use strict";var Po=ee();rn.exports=Uo;function tn(e,t,n,r,v,i,a){this.cells=e,this.neighbor=t,this.flags=r,this.constraint=n,this.active=v,this.next=i,this.boundary=a}var _o=tn.prototype;function en(e,t){return e[0]-t[0]||e[1]-t[1]||e[2]-t[2]}_o.locate=function(){var e=[0,0,0];return function(t,n,r){var v=t,i=n,a=r;return n<r?n<t&&(v=n,i=r,a=t):r<t&&(v=r,i=t,a=n),v<0?-1:(e[0]=v,e[1]=i,e[2]=a,Po.eq(this.cells,e,en))}}();function Do(e,t){for(var n=e.cells(),r=n.length,v=0;v<r;++v){var i=n[v],a=i[0],u=i[1],l=i[2];u<l?u<a&&(i[0]=u,i[1]=l,i[2]=a):l<a&&(i[0]=l,i[1]=a,i[2]=u)}n.sort(en);for(var h=new Array(r),v=0;v<h.length;++v)h[v]=0;var w=[],B=[],F=new Array(3*r),R=new Array(3*r),L=null;t&&(L=[]);for(var G=new tn(n,F,R,h,w,B,L),v=0;v<r;++v)for(var i=n[v],V=0;V<3;++V){var a=i[V],u=i[(V+1)%3],W=F[3*v+V]=G.locate(u,a,e.opposite(u,a)),N=R[3*v+V]=e.isConstraint(a,u);W<0&&(N?B.push(v):(w.push(v),h[v]=1),t&&L.push([u,a,-1]))}return G}function Bo(e,t,n){for(var r=0,v=0;v<e.length;++v)t[v]===n&&(e[r++]=e[v]);return e.length=r,e}function Uo(e,t,n){var r=Do(e,n);if(t===0)return n?r.cells.concat(r.boundary):r.cells;for(var v=1,i=r.active,a=r.next,u=r.flags,l=r.cells,h=r.constraint,w=r.neighbor;i.length>0||a.length>0;){for(;i.length>0;){var B=i.pop();if(u[B]!==-v){u[B]=v;for(var F=l[B],R=0;R<3;++R){var L=w[3*B+R];L>=0&&u[L]===0&&(h[3*B+R]?a.push(L):(i.push(L),u[L]=v))}}}var G=a;a=i,i=G,a.length=0,v=-v}var V=Bo(l,u,t);return n?V.concat(r.boundary):V}});var an=Ot((zs,on)=>{"use strict";var Go=$r(),Eo=kr(),zo=mr(),We=nn();on.exports=Ro;function Lo(e){return[Math.min(e[0],e[1]),Math.max(e[0],e[1])]}function Io(e,t){return e[0]-t[0]||e[1]-t[1]}function Fo(e){return e.map(Lo).sort(Io)}function Te(e,t,n){return t in e?e[t]:n}function Ro(e,t,n){Array.isArray(t)?(n=n||{},t=t||[]):(n=t||{},t=[]);var r=!!Te(n,"delaunay",!0),v=!!Te(n,"interior",!0),i=!!Te(n,"exterior",!0),a=!!Te(n,"infinity",!1);if(!v&&!i||e.length===0)return[];var u=Go(e,t);if(r||v!==i||a){for(var l=Eo(e.length,Fo(t)),h=0;h<u.length;++h){var w=u[h];l.addTriangle(w[0],w[1],w[2])}return r&&zo(e,l),i?v?a?We(l,0,a):l.cells():We(l,1,a):We(l,-1)}else return u}});function Ft(e,t,n,r,v,i,a){let u=e.createTexture({label:t,size:{width:n,height:r},format:i,usage:a,mipLevelCount:v,sampleCount:1,dimension:"2d"}),l=u.createView(),h=[];for(let B=0;B<v;B++)h.push(u.createView({label:t,format:i,dimension:"2d",aspect:"all",baseMipLevel:B,mipLevelCount:1,baseArrayLayer:0,arrayLayerCount:1}));let w=e.createSampler({label:`${t} sampler`,addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"});return{size:{width:n,height:r},texture:u,view:l,mip_view:h,sampler:w}}async function qt(e,t,n,r="rgba8unorm"){let i=await(await fetch(n)).blob(),a=await createImageBitmap(i),u=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,h=Ft(e.device,t,a.width,a.height,1,r,u);e.device.queue.copyExternalImageToTexture({source:a},{texture:h.texture},{width:a.width,height:a.height});let w={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return h.sampler=e.device.createSampler(w),h}function jt(e,t,n,r="rgba8unorm"){let v=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,a=Ft(e.device,t,n.width,n.height,1,r,v);e.device.queue.writeTexture({texture:a.texture},n.data,{bytesPerRow:4*n.width},{width:n.width,height:n.height});let u={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return a.sampler=e.device.createSampler(u),a}var er="const BLOOM_MIP_COUNT:i32=7;const MODE_PREFILTER:u32=0u;const MODE_DOWNSAMPLE:u32=1u;const MODE_UPSAMPLE_FIRST:u32=2u;const MODE_UPSAMPLE:u32=3u;const EPSILON:f32=1.0e-4;struct bloom_param{parameters:vec4<f32>,combine_constant:f32,doop:u32,ferp:u32,}struct mode_lod_param{mode_lod:u32,}@group(0)@binding(0)var output_texture:texture_storage_2d<rgba16float,write>;@group(0)@binding(1)var input_texture:texture_2d<f32>;@group(0)@binding(2)var bloom_texture:texture_2d<f32>;@group(0)@binding(3)var samp:sampler;@group(0)@binding(4)var<uniform> param:bloom_param;@group(0)@binding(5)var<uniform> pc:mode_lod_param;fn QuadraticThreshold(color:vec4<f32>,threshold:f32,curve:vec3<f32>)->vec4<f32>{let brightness=max(max(color.r,color.g),color.b);var rq:f32=clamp(brightness-curve.x,0.0,curve.y);rq=curve.z*(rq*rq);let ret_color=color*max(rq,brightness-threshold)/max(brightness,EPSILON);return ret_color;}fn Prefilter(color:vec4<f32>,uv:vec2<f32>)->vec4<f32>{let clamp_value=20.0;var c=min(vec4<f32>(clamp_value),color);c=QuadraticThreshold(color,param.parameters.x,param.parameters.yzw);return c;}fn DownsampleBox13(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,tex_size:vec2<f32>)->vec3<f32>{let A=textureSampleLevel(tex,samp,uv,lod).rgb;let texel_size=tex_size*0.5;let B=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,-1.0),lod).rgb;let C=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,1.0),lod).rgb;let D=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,1.0),lod).rgb;let E=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,-1.0),lod).rgb;let F=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let G=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,0.0),lod).rgb;let H=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,2.0),lod).rgb;let I=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let J=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let K=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,0.0),lod).rgb;let L=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let M=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,-2.0),lod).rgb;var result:vec3<f32>=vec3<f32>(0.0);result=result+(B+C+D+E)*0.5;result=result+(F+G+A+M)*0.125;result=result+(G+H+I+A)*0.125;result=result+(A+I+J+K)*0.125;result=result+(M+A+K+L)*0.125;result=result*0.25;return result;}fn UpsampleTent9(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,texel_size:vec2<f32>,radius:f32)->vec3<f32>{let offset=texel_size.xyxy*vec4<f32>(1.0,1.0,-1.0,0.0)*radius;var result:vec3<f32>=textureSampleLevel(tex,samp,uv,lod).rgb*4.0;result=result+textureSampleLevel(tex,samp,uv-offset.xy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv-offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv-offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.zw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xy,lod).rgb;return result*(1.0/16.0);}fn combine(ex_color:vec3<f32>,color_to_add:vec3<f32>,combine_constant:f32)->vec3<f32>{let existing_color=ex_color+(-color_to_add);let blended_color=(combine_constant*existing_color)+color_to_add;return blended_color;}@compute @workgroup_size(8,4,1)fn cs_main(@builtin(global_invocation_id)global_invocation_id:vec3<u32>){let mode=pc.mode_lod>>16u;let lod=pc.mode_lod&65535u;let imgSize=textureDimensions(output_texture);if(global_invocation_id.x<u32(imgSize.x)&&global_invocation_id.y<u32(imgSize.y)){var texCoords:vec2<f32>=vec2<f32>(f32(global_invocation_id.x)/f32(imgSize.x),f32(global_invocation_id.y)/f32(imgSize.y));texCoords=texCoords+(1.0/vec2<f32>(imgSize))*0.5;let texSize=vec2<f32>(textureDimensions(input_texture,i32(lod)));var color:vec4<f32>=vec4<f32>(1.0);if(mode==MODE_PREFILTER){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);color=Prefilter(color,texCoords);}else if(mode==MODE_DOWNSAMPLE){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);}else if(mode==MODE_UPSAMPLE_FIRST){let bloomTexSize=textureDimensions(input_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(input_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}else if(mode==MODE_UPSAMPLE){let bloomTexSize=textureDimensions(bloom_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(bloom_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}textureStore(output_texture,vec2<i32>(global_invocation_id.xy),color);}}";var Nt=7,Gn=0,rr=1,En=2,nr=3,ir={type:"cobalt:bloom",refs:[{name:"emissive",type:"textureView",format:"rgba16",access:"read"},{name:"hdr",type:"textureView",format:"rgba16",access:"read"},{name:"bloom",type:"textureView",format:"rgba16",access:"readwrite"}],onInit:async function(e,t={}){return zn(e,t)},onRun:function(e,t,n){Ln(e,t.data,n)},onDestroy:function(e,t){ar(t)},onResize:function(e,t){In(e,t)},onViewportPosition:function(e,t){}};function zn(e,t){let{device:n}=e,r=e.viewport.width,v=e.viewport.height,i={compute_pipeline:null,bind_group:[],bind_group_layout:[],bind_groups_textures:[]},a=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba16float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:2,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:3,visibility:GPUShaderStage.COMPUTE,sampler:{}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});i.bind_group_layout.push(a),i.bind_groups_textures.push(Ft(n,"bloom downsampler image 0",r/2,v/2,Nt,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),i.bind_groups_textures.push(Ft(n,"bloom downsampler image 1",r/2,v/2,Nt,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),i.bind_groups_textures.push(t.refs.bloom.data);let u=n.createPipelineLayout({bindGroupLayouts:i.bind_group_layout}),l=n.createComputePipeline({layout:u,compute:{module:n.createShaderModule({code:er}),entryPoint:"cs_main"}});return or(e,i,t),i.compute_pipeline=l,i}function or(e,t,n){let{refs:r}=n,{device:v}=e,i=n.options.bloom_threshold??.1,a=n.options.bloom_knee??.2,u=n.options.bloom_combine_constant??.68,l=new Float32Array([i,i-a,a*2,.25/a,u,0,0,0]),h=v.createBuffer({label:"bloom static parameters buffer",size:l.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(h.getMappedRange()).set(l),h.unmap(),t.bind_group.length=0,t.params_buf=h,t.bind_group.push(Kt(v,t,t.bind_groups_textures[0].mip_view[0],r.emissive.data.view,r.hdr.data.view,r.hdr.data.sampler,h,Gn<<16|0));for(let B=1;B<Nt;B++)t.bind_group.push(Kt(v,t,t.bind_groups_textures[1].mip_view[B],t.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,h,rr<<16|B-1)),t.bind_group.push(Kt(v,t,t.bind_groups_textures[0].mip_view[B],t.bind_groups_textures[1].view,r.hdr.data.view,r.hdr.data.sampler,h,rr<<16|B));t.bind_group.push(Kt(v,t,t.bind_groups_textures[2].mip_view[Nt-1],t.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,h,En<<16|Nt-2));let w=!0;for(let B=Nt-2;B>=0;B--)w?(t.bind_group.push(Kt(v,t,t.bind_groups_textures[1].mip_view[B],t.bind_groups_textures[0].view,t.bind_groups_textures[2].view,r.hdr.data.sampler,h,nr<<16|B)),w=!1):(t.bind_group.push(Kt(v,t,t.bind_groups_textures[2].mip_view[B],t.bind_groups_textures[0].view,t.bind_groups_textures[1].view,r.hdr.data.sampler,h,nr<<16|B)),w=!0)}function Kt(e,t,n,r,v,i,a,u){let l=new Uint32Array([u]),h=e.createBuffer({label:"bloom static mode_lod buffer",size:l.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return new Uint32Array(h.getMappedRange()).set(l),h.unmap(),e.createBindGroup({label:"bloom bind group layout",layout:t.bind_group_layout[0],entries:[{binding:0,resource:n},{binding:1,resource:r},{binding:2,resource:v},{binding:3,resource:i},{binding:4,resource:{buffer:a}},{binding:5,resource:{buffer:h}}]})}function Ln(e,t,n){let u=0,l=n.beginComputePass({label:"bloom Compute Pass"});l.setPipeline(t.compute_pipeline),l.setBindGroup(0,t.bind_group[u]),u+=1;let h=le(0,t.bind_groups_textures[0]);l.dispatchWorkgroups(h.width/8+1,h.height/4+1,1);for(let w=1;w<Nt;w++)h=le(w,t.bind_groups_textures[0]),l.setBindGroup(0,t.bind_group[u]),u+=1,l.dispatchWorkgroups(h.width/8+1,h.height/4+1,1),l.setBindGroup(0,t.bind_group[u]),u+=1,l.dispatchWorkgroups(h.width/8+1,h.height/4+1,1);l.setBindGroup(0,t.bind_group[u]),u+=1,h=le(Nt-1,t.bind_groups_textures[2]),l.dispatchWorkgroups(h.width/8+1,h.height/4+1,1);for(let w=Nt-2;w>=0;w--)h=le(w,t.bind_groups_textures[2]),l.setBindGroup(0,t.bind_group[u]),u+=1,l.dispatchWorkgroups(h.width/8+1,h.height/4+1,1);l.end()}function le(e,t){let n=t.size.width,r=t.size.height;for(let v=0;v<e;v++)n/=2,r/=2;return{width:n,height:r,depthOrArrayLayers:1}}function In(e,t){let{device:n}=e,r=t.data;ar(r),r.bind_groups_textures.push(Ft(n,"bloom downsampler image 0",e.viewport.width/2,e.viewport.height/2,Nt,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(Ft(n,"bloom downsampler image 1",e.viewport.width/2,e.viewport.height/2,Nt,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(t.refs.bloom.data),or(e,r,t)}function ar(e){for(let t of e.bind_groups_textures)t.texture.destroy();e.bind_groups_textures.length=0}var Ge="struct BloomComposite{bloom_intensity:f32,bloom_combine_constant:f32,}@group(0)@binding(0)var mySampler:sampler;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var emissiveTexture:texture_2d<f32>;@group(0)@binding(3)var<uniform> composite_parameter:BloomComposite;struct VertexOutput{@builtin(position)Position:vec4<f32>,@location(0)fragUV:vec2<f32>,}const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vert_main(@builtin(vertex_index)VertexIndex:u32)->VertexOutput{var output:VertexOutput;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.fragUV=vec2<f32>(uvs[VertexIndex]);return output;}fn GTTonemap_point(x:f32)->f32{let m:f32=0.22;let a:f32=1.0;let c:f32=1.33;let P:f32=1.0;let l:f32=0.4;let l0:f32=((P-m)*l)/a;let S0:f32=m+l0;let S1:f32=m+a*l0;let C2:f32=(a*P)/(P-S1);let L:f32=m+a*(x-m);let T:f32=m*pow(x/m,c);let S:f32=P-(P-S1)*exp(-C2*(x-S0)/P);let w0:f32=1.0-smoothstep(0.0,m,x);var w2:f32=1.0;if(x<m+l){w2=0.0;}let w1:f32=1.0-w0-w2;return f32(T*w0+L*w1+S*w2);}fn GTTonemap(x:vec3<f32>)->vec3<f32>{return vec3<f32>(GTTonemap_point(x.r),GTTonemap_point(x.g),GTTonemap_point(x.b));}fn aces(x:vec3<f32>)->vec3<f32>{let a:f32=2.51;let b:f32=0.03;let c:f32=2.43;let d:f32=0.59;let e:f32=0.14;return clamp((x*(a*x+b))/(x*(c*x+d)+e),vec3<f32>(0.0),vec3<f32>(1.0));}@fragment fn frag_main(@location(0)fragUV:vec2<f32>)->@location(0)vec4<f32>{let hdr_color=textureSample(colorTexture,mySampler,fragUV);let bloom_color=textureSample(emissiveTexture,mySampler,fragUV);let combined_color=((bloom_color*composite_parameter.bloom_intensity)*composite_parameter.bloom_combine_constant);let mapped_color=GTTonemap(combined_color.rgb);let gamma_corrected_color=pow(mapped_color,vec3<f32>(1.0/2.2));return vec4<f32>(gamma_corrected_color+hdr_color.rgb,1.0);}";var sr={type:"cobalt:bloom",refs:[{name:"hdr",type:"textureView",format:"rgba16",access:"read"},{name:"bloom",type:"textureView",format:"rgba16",access:"read"},{name:"combined",type:"textureView",format:"rgba8unorm",access:"write"}],onInit:async function(e,t={}){return Rn(e,t)},onRun:function(e,t,n){An(e,t,n)},onDestroy:function(e,t){},onResize:function(e,t){Vn(e,t)},onViewportPosition:function(e,t){}};function Rn(e,t){let{options:n,refs:r}=t,{device:v}=e,i=ur(e),a=n.bloom_intensity??40,u=n.bloom_combine_constant??.68,l=new Float32Array([a,u]),h=v.createBuffer({label:"scene composite params buffer",size:l.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(h.getMappedRange()).set(l),h.unmap();let w=v.createRenderPipeline({layout:"auto",vertex:{module:v.createShaderModule({code:Ge}),entryPoint:"vert_main"},fragment:{module:v.createShaderModule({code:Ge}),entryPoint:"frag_main",targets:[{format:i}]},primitive:{topology:"triangle-list"}});return{bindGroup:v.createBindGroup({layout:w.getBindGroupLayout(0),entries:[{binding:0,resource:r.hdr.data.sampler},{binding:1,resource:r.hdr.data.view},{binding:2,resource:r.bloom.data.mip_view[0]},{binding:3,resource:{buffer:h}}]}),pipeline:w,params_buf:h}}function An(e,t,n){let r=n.beginRenderPass({colorAttachments:[{view:t.refs.combined.data.view,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),{pipeline:v,bindGroup:i}=t.data;r.setPipeline(v),r.setBindGroup(0,i),r.draw(3),r.end()}function Vn(e,t){let{pipeline:n,params_buf:r}=t.data,{device:v}=e;t.data.bindGroup=v.createBindGroup({layout:n.getBindGroupLayout(0),entries:[{binding:0,resource:t.refs.hdr.data.sampler},{binding:1,resource:t.refs.hdr.data.view},{binding:2,resource:t.refs.bloom.data.mip_view[0]},{binding:3,resource:{buffer:r}}]})}var mt={};tr(mt,{addSprite:()=>Cn,clear:()=>qn,removeSprite:()=>Nn,setSprite:()=>kn,setSpriteName:()=>Yn,setSpriteOpacity:()=>$n,setSpritePosition:()=>Xn,setSpriteRotation:()=>Wn,setSpriteScale:()=>Zn,setSpriteTint:()=>Hn});function Ee(e,t,n){if(n.spriteCount===0)return 0;let r=0,v=n.spriteCount-1,i=e<<16&16711680|t&65535;for(;r<=v;){let a=n.spriteData[r*12+11];if(i<=a)return r;let u=n.spriteData[v*12+11];if(i>=u)return v+1;let l=Math.floor((r+v)/2),h=n.spriteData[l*12+11];if(i===h)return l+1;i>h?r=l+1:v=l-1}return r}function Jt(){return Math.ceil(Math.random()*(Number.MAX_SAFE_INTEGER-10))}function Cn(e,t,n,r,v,i,a,u,l){let h=t.refs.spritesheet.data.spritesheet;t=t.data;let w=h.locations.indexOf(n),B=Ee(l,w,t),F=(B+1)*12;t.spriteData.set(t.spriteData.subarray(B*12,t.spriteCount*12),F),cr(t,h,B,n,r,v,i,a,u,l);for(let[L,G]of t.spriteIndices)G>=B&&t.spriteIndices.set(L,G+1);let R=Jt();return t.spriteIndices.set(R,B),t.spriteCount++,t.dirty=!0,R}function Nn(e,t,n){t=t.data;let r=t.spriteIndices.get(n);for(let[i,a]of t.spriteIndices)a>r&&t.spriteIndices.set(i,a-1);let v=r*12;t.spriteData.set(t.spriteData.subarray((r+1)*12,t.spriteCount*12),v),t.spriteIndices.delete(n),t.spriteCount--,t.dirty=!0}function qn(e,t){t=t.data,t.spriteIndices.clear(),t.spriteCount=0,t.instancedDrawCallCount=0,t.dirty=!0}function Yn(e,t,n,r,v){let i=t.refs.spritesheet.data.spritesheet;t=t.data;let a=i.locations.indexOf(r),u=i.spriteMeta[r].w,l=i.spriteMeta[r].h,w=t.spriteIndices.get(n)*12;t.spriteData[w+2]=u*v[0],t.spriteData[w+3]=l*v[1];let F=(t.spriteData[w+11]>>16&255)<<16&16711680|a&65535;t.spriteData[w+11]=F,t.dirty=!0}function Xn(e,t,n,r){t=t.data;let i=t.spriteIndices.get(n)*12;t.spriteData[i]=r[0],t.spriteData[i+1]=r[1],t.dirty=!0}function Hn(e,t,n,r){t=t.data;let i=t.spriteIndices.get(n)*12;t.spriteData[i+4]=r[0],t.spriteData[i+5]=r[1],t.spriteData[i+6]=r[2],t.spriteData[i+7]=r[3],t.dirty=!0}function $n(e,t,n,r){t=t.data;let i=t.spriteIndices.get(n)*12;t.spriteData[i+8]=r,t.dirty=!0}function Wn(e,t,n,r){t=t.data;let i=t.spriteIndices.get(n)*12;t.spriteData[i+9]=r,t.dirty=!0}function Zn(e,t,n,r,v){let i=t.refs.spritesheet.data.spritesheet;t=t.data;let u=t.spriteIndices.get(n)*12,l=i.spriteMeta[r].w,h=i.spriteMeta[r].h;t.spriteData[u+2]=l*v[0],t.spriteData[u+3]=h*v[1],t.dirty=!0}function kn(e,t,n,r,v,i,a,u,l,h){let w=t.refs.spritesheet.data.spritesheet;t=t.data;let B=t.spriteIndices.get(n);cr(t,w,B,r,v,i,a,u,l,h),t.dirty=!0}function cr(e,t,n,r,v,i,a,u,l,h){if(!t.spriteMeta[r])throw new Error(`Sprite name ${r} could not be found in the spritesheet metaData`);let w=n*12,B=t.spriteMeta[r].w,F=t.spriteMeta[r].h,R=t.locations.indexOf(r),L=h<<16&16711680|R&65535;e.spriteData[w]=v[0],e.spriteData[w+1]=v[1],e.spriteData[w+2]=B*i[0],e.spriteData[w+3]=F*i[1],e.spriteData[w+4]=a[0],e.spriteData[w+5]=a[1],e.spriteData[w+6]=a[2],e.spriteData[w+7]=a[3],e.spriteData[w+8]=u,e.spriteData[w+9]=l,e.spriteData[w+11]=L}var lr={type:"cobalt:sprite",refs:[{name:"spritesheet",type:"customResource",access:"read"},{name:"hdr",type:"textureView",format:"rgba16float",access:"write"},{name:"emissive",type:"textureView",format:"rgba16float",access:"write"}],onInit:async function(e,t={}){return Qn(e,t)},onRun:function(e,t,n){Kn(e,t,n)},onDestroy:function(e,t){Jn(t)},onResize:function(e,t){},onViewportPosition:function(e,t){},customFunctions:{...mt}};async function Qn(e,t){let{device:n}=e,r=16192,v=r,a=Float32Array.BYTES_PER_ELEMENT*2,l=Float32Array.BYTES_PER_ELEMENT*2,w=Float32Array.BYTES_PER_ELEMENT*4,F=Float32Array.BYTES_PER_ELEMENT*4,R=n.createBuffer({size:(a+l+w+F)*v,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),L=t.refs.spritesheet.data,G=n.createBindGroup({layout:t.refs.spritesheet.data.bindGroupLayout,entries:[{binding:0,resource:{buffer:L.uniformBuffer}},{binding:1,resource:L.colorTexture.view},{binding:2,resource:L.colorTexture.sampler},{binding:3,resource:{buffer:R}},{binding:4,resource:L.emissiveTexture.view}]});return{instancedDrawCalls:new Uint32Array(r*2),instancedDrawCallCount:0,bindGroup:G,spriteBuffer:R,spriteData:new Float32Array(r*12),spriteCount:0,spriteIndices:new Map,dirty:!1}}function Kn(e,t,n){let{device:r}=e,v=t.options.loadOp||"load";if(t.data.dirty&&(jn(t.data),t.data.dirty=!1),t.data.spriteCount>0){let l=t.data.spriteCount*12*Float32Array.BYTES_PER_ELEMENT;r.queue.writeBuffer(t.data.spriteBuffer,0,t.data.spriteData.buffer,0,l)}let i=n.beginRenderPass({colorAttachments:[{view:t.refs.hdr.data.view,clearValue:e.clearValue,loadOp:v,storeOp:"store"},{view:t.refs.emissive.data.view,clearValue:e.clearValue,loadOp:"clear",storeOp:"store"}]});i.setPipeline(t.refs.spritesheet.data.pipeline),i.setBindGroup(0,t.data.bindGroup),i.setVertexBuffer(0,t.refs.spritesheet.data.quads.buffer);let a=6,u=0;for(let l=0;l<t.data.instancedDrawCallCount;l++){let h=t.data.instancedDrawCalls[l*2]*a,w=t.data.instancedDrawCalls[l*2+1];i.draw(a,w,h,u),u+=w}i.end()}function jn(e){let t=-1,n=0;e.instancedDrawCallCount=0;for(let r=0;r<e.spriteCount;r++){let v=e.spriteData[r*12+11]&65535;v!==t&&(n>0&&(e.instancedDrawCalls[e.instancedDrawCallCount*2]=t,e.instancedDrawCalls[e.instancedDrawCallCount*2+1]=n,e.instancedDrawCallCount++),t=v,n=0),n++}n>0&&(e.instancedDrawCalls[e.instancedDrawCallCount*2]=t,e.instancedDrawCalls[e.instancedDrawCallCount*2+1]=n,e.instancedDrawCallCount++)}function Jn(e){e.data.instancedDrawCalls=null,e.data.bindGroup=null,e.data.spriteBuffer.destroy(),e.data.spriteBuffer=null,e.data.spriteData=null,e.data.spriteIndices.clear(),e.data.spriteIndices=null}var fr={type:"cobalt:tile",refs:[{name:"tileAtlas",type:"textureView",format:"rgba8unorm",access:"write"}],onInit:async function(e,t={}){return mn(e,t)},onRun:function(e,t,n){ti(e,t,n)},onDestroy:function(e,t){pr(t)},onResize:function(e,t){},onViewportPosition:function(e,t){},customFunctions:{setTexture:async function(e,t,n){let{device:r}=e;pr(t),t.options.textureUrl=n;let v=await qt(e,"tile map",t.options.textureUrl),i=r.createBindGroup({layout:t.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:t.data.uniformBuffer}},{binding:1,resource:v.view},{binding:2,resource:v.sampler}]});t.data.bindGroup=i,t.data.material=v}}};async function mn(e,t){let{device:n}=e,r=await qt(e,"tile map",t.options.textureUrl),v=new Float32Array([t.options.scrollScale,t.options.scrollScale]),i=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,a={size:v.byteLength,usage:i,mappedAtCreation:!0},u=n.createBuffer(a);return new Float32Array(u.getMappedRange()).set(v),u.unmap(),{bindGroup:n.createBindGroup({layout:t.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:u}},{binding:1,resource:r.view},{binding:2,resource:r.sampler}]}),material:r,uniformBuffer:u,scrollScale:t.options.scrollScale}}function ti(e,t,n){let{device:r}=e,v=t.options.loadOp||"load",i=n.beginRenderPass({colorAttachments:[{view:t.refs.hdr.data.view,clearValue:e.clearValue,loadOp:v,storeOp:"store"}]}),a=t.refs.tileAtlas.data;i.setPipeline(a.pipeline),i.setBindGroup(0,t.data.bindGroup),i.setBindGroup(1,a.atlasBindGroup),i.draw(3),i.end()}function pr(e){e.data.material.texture.destroy(),e.data.material.texture=void 0}var pe=class{device;floatsPerSprite=6;bufferGpu;bufferNeedsUpdate=!1;sprites=new Map;get spriteCount(){return this.sprites.size}constructor(t){this.device=t.device,this.bufferGpu=this.device.createBuffer({size:t.maxSpriteCount*this.floatsPerSprite*Float32Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}destroy(){this.bufferGpu.destroy}update(){if(this.bufferNeedsUpdate){let t=[];for(let r of this.sprites.values())t.push(...r);let n=new Float32Array(t);this.device.queue.writeBuffer(this.bufferGpu,0,n)}}addTriangle(t){let n=Jt();if(this.sprites.has(n))throw new Error(`Duplicate triangle "${n}".`);let r=this.buildTriangleData(t);return this.sprites.set(n,r),this.bufferNeedsUpdate=!0,n}removeTriangle(t){if(!this.sprites.has(t))throw new Error(`Unknown triangle "${t}".`);this.sprites.delete(t),this.bufferNeedsUpdate=!0}setTriangle(t,n){if(!this.sprites.has(t))throw new Error(`Unknown triangle "${t}".`);let r=this.buildTriangleData(n);this.sprites.set(t,r),this.bufferNeedsUpdate=!0}buildTriangleData(t){return[t[0][0],t[0][1],t[1][0],t[1][1],t[2][0],t[2][1]]}};var fe=class{device;bufferGpu;needsUpdate=!0;constructor(t){this.device=t.device,this.bufferGpu=this.device.createBuffer({label:"DisplacementParametersBuffer buffer",size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.setParameters(t.initialParameters)}setParameters(t){this.device.queue.writeBuffer(this.bufferGpu,0,new Float32Array([t.offsetX,t.offsetY,t.scale]))}destroy(){this.bufferGpu.destroy()}};var dr="struct DisplacementParameters{offset:vec2<f32>,scale:f32,};@group(0)@binding(0)var<uniform> uniforms:DisplacementParameters;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var colorSampler:sampler;@group(0)@binding(3)var noiseTexture:texture_2d<f32>;@group(0)@binding(4)var noiseSampler:sampler;@group(0)@binding(5)var displacementTexture:texture_2d<f32>;struct VertexIn{@builtin(vertex_index)vertexIndex:u32,};struct VertexOut{@builtin(position)position:vec4<f32>,@location(0)uv:vec2<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{const corners=array<vec2<f32>,4>(vec2<f32>(-1,-1),vec2<f32>(1,-1),vec2<f32>(-1,1),vec2<f32>(1,1),);let screenPosition=corners[in.vertexIndex];var out:VertexOut;out.position=vec4<f32>(screenPosition,0,1);out.uv=(0.5+0.5*screenPosition*vec2<f32>(1,-1));return out;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment(in:VertexOut)->FragmentOut{let noiseTextureDimensions=vec2<f32>(textureDimensions(noiseTexture,0));let noiseUv=in.uv+uniforms.offset/noiseTextureDimensions;var noise=textureSample(noiseTexture,noiseSampler,noiseUv).rg;noise-=0.5;noise*=uniforms.scale/noiseTextureDimensions;let displacement=textureSample(displacementTexture,colorSampler,in.uv).r;noise*=displacement;let colorUv=in.uv+noise;var out:FragmentOut;out.color=textureSample(colorTexture,colorSampler,colorUv);return out;}";var de=class{device;targetFormat;renderPipeline;colorSampler;noiseSampler;displacementParametersBuffer;renderBundle=null;colorTextureView;noiseMapTextureView;displacementTextureView;constructor(t){this.device=t.device,this.targetFormat=t.targetFormat,this.colorTextureView=t.colorTextureView,this.noiseMapTextureView=t.noiseMapTextureView,this.displacementTextureView=t.displacementTextureView,this.displacementParametersBuffer=t.displacementParametersBuffer;let n=this.device.createShaderModule({label:"DisplacementComposition shader module",code:dr});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementComposition renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex"},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:t.targetFormat}]},primitive:{cullMode:"none",topology:"triangle-strip"}}),this.noiseSampler=this.device.createSampler({label:"DisplacementComposition noisesampler",addressModeU:"repeat",addressModeV:"repeat",addressModeW:"repeat",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"}),this.colorSampler=this.device.createSampler({label:"DisplacementComposition colorSampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"})}getRenderBundle(){return this.renderBundle||(this.renderBundle=this.buildRenderBundle()),this.renderBundle}destroy(){}setColorTextureView(t){this.colorTextureView=t,this.renderBundle=null}setNoiseMapTextureView(t){this.noiseMapTextureView=t,this.renderBundle=null}setDisplacementTextureView(t){this.displacementTextureView=t,this.renderBundle=null}buildRenderBundle(){let t=this.device.createBindGroup({label:"DisplacementComposition bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.displacementParametersBuffer.bufferGpu}},{binding:1,resource:this.colorTextureView},{binding:2,resource:this.colorSampler},{binding:3,resource:this.noiseMapTextureView},{binding:4,resource:this.noiseSampler},{binding:5,resource:this.displacementTextureView}]}),n=this.device.createRenderBundleEncoder({label:"DisplacementComposition renderbundle encoder",colorFormats:[this.targetFormat]});return n.setPipeline(this.renderPipeline),n.setBindGroup(0,t),n.draw(4),n.finish({label:"DisplacementComposition renderbundle"})}};var vr="struct TransformData{mvpMatrix:mat4x4<f32>,};@group(0)@binding(0)var<uniform> transformUBO:TransformData;struct VertexIn{@location(0)position:vec2<f32>,};struct VertexOut{@builtin(position)position:vec4<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{var output:VertexOut;output.position=transformUBO.mvpMatrix*vec4<f32>(in.position,0.0,1.0);return output;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment()->FragmentOut{var out:FragmentOut;out.color=vec4<f32>(1.0,1.0,1.0,1.0);return out;}";function ni(e,t){return class extends e{constructor(...n){super(...n),t(this)}}}var ii=ni(Array,e=>e.fill(0)),st=1e-6;function oi(e){function t(o=0,g=0){let s=new e(2);return o!==void 0&&(s[0]=o,g!==void 0&&(s[1]=g)),s}let n=t;function r(o,g,s){let f=s??new e(2);return f[0]=o,f[1]=g,f}function v(o,g){let s=g??new e(2);return s[0]=Math.ceil(o[0]),s[1]=Math.ceil(o[1]),s}function i(o,g){let s=g??new e(2);return s[0]=Math.floor(o[0]),s[1]=Math.floor(o[1]),s}function a(o,g){let s=g??new e(2);return s[0]=Math.round(o[0]),s[1]=Math.round(o[1]),s}function u(o,g=0,s=1,f){let y=f??new e(2);return y[0]=Math.min(s,Math.max(g,o[0])),y[1]=Math.min(s,Math.max(g,o[1])),y}function l(o,g,s){let f=s??new e(2);return f[0]=o[0]+g[0],f[1]=o[1]+g[1],f}function h(o,g,s,f){let y=f??new e(2);return y[0]=o[0]+g[0]*s,y[1]=o[1]+g[1]*s,y}function w(o,g){let s=o[0],f=o[1],y=g[0],_=g[1],z=Math.sqrt(s*s+f*f),x=Math.sqrt(y*y+_*_),b=z*x,P=b&&k(o,g)/b;return Math.acos(P)}function B(o,g,s){let f=s??new e(2);return f[0]=o[0]-g[0],f[1]=o[1]-g[1],f}let F=B;function R(o,g){return Math.abs(o[0]-g[0])<st&&Math.abs(o[1]-g[1])<st}function L(o,g){return o[0]===g[0]&&o[1]===g[1]}function G(o,g,s,f){let y=f??new e(2);return y[0]=o[0]+s*(g[0]-o[0]),y[1]=o[1]+s*(g[1]-o[1]),y}function V(o,g,s,f){let y=f??new e(2);return y[0]=o[0]+s[0]*(g[0]-o[0]),y[1]=o[1]+s[1]*(g[1]-o[1]),y}function W(o,g,s){let f=s??new e(2);return f[0]=Math.max(o[0],g[0]),f[1]=Math.max(o[1],g[1]),f}function N(o,g,s){let f=s??new e(2);return f[0]=Math.min(o[0],g[0]),f[1]=Math.min(o[1],g[1]),f}function O(o,g,s){let f=s??new e(2);return f[0]=o[0]*g,f[1]=o[1]*g,f}let C=O;function q(o,g,s){let f=s??new e(2);return f[0]=o[0]/g,f[1]=o[1]/g,f}function Y(o,g){let s=g??new e(2);return s[0]=1/o[0],s[1]=1/o[1],s}let nt=Y;function $(o,g,s){let f=s??new e(3),y=o[0]*g[1]-o[1]*g[0];return f[0]=0,f[1]=0,f[2]=y,f}function k(o,g){return o[0]*g[0]+o[1]*g[1]}function J(o){let g=o[0],s=o[1];return Math.sqrt(g*g+s*s)}let m=J;function X(o){let g=o[0],s=o[1];return g*g+s*s}let at=X;function H(o,g){let s=o[0]-g[0],f=o[1]-g[1];return Math.sqrt(s*s+f*f)}let it=H;function tt(o,g){let s=o[0]-g[0],f=o[1]-g[1];return s*s+f*f}let ot=tt;function et(o,g){let s=g??new e(2),f=o[0],y=o[1],_=Math.sqrt(f*f+y*y);return _>1e-5?(s[0]=f/_,s[1]=y/_):(s[0]=0,s[1]=0),s}function wt(o,g){let s=g??new e(2);return s[0]=-o[0],s[1]=-o[1],s}function j(o,g){let s=g??new e(2);return s[0]=o[0],s[1]=o[1],s}let ut=j;function ct(o,g,s){let f=s??new e(2);return f[0]=o[0]*g[0],f[1]=o[1]*g[1],f}let dt=ct;function lt(o,g,s){let f=s??new e(2);return f[0]=o[0]/g[0],f[1]=o[1]/g[1],f}let Tt=lt;function ft(o=1,g){let s=g??new e(2),f=Math.random()*2*Math.PI;return s[0]=Math.cos(f)*o,s[1]=Math.sin(f)*o,s}function p(o){let g=o??new e(2);return g[0]=0,g[1]=0,g}function M(o,g,s){let f=s??new e(2),y=o[0],_=o[1];return f[0]=y*g[0]+_*g[4]+g[12],f[1]=y*g[1]+_*g[5]+g[13],f}function c(o,g,s){let f=s??new e(2),y=o[0],_=o[1];return f[0]=g[0]*y+g[4]*_+g[8],f[1]=g[1]*y+g[5]*_+g[9],f}function d(o,g,s,f){let y=f??new e(2),_=o[0]-g[0],z=o[1]-g[1],x=Math.sin(s),b=Math.cos(s);return y[0]=_*b-z*x+g[0],y[1]=_*x+z*b+g[1],y}function T(o,g,s){let f=s??new e(2);return et(o,f),O(f,g,f)}function S(o,g,s){let f=s??new e(2);return J(o)>g?T(o,g,f):j(o,f)}function U(o,g,s){let f=s??new e(2);return G(o,g,.5,f)}return{create:t,fromValues:n,set:r,ceil:v,floor:i,round:a,clamp:u,add:l,addScaled:h,angle:w,subtract:B,sub:F,equalsApproximately:R,equals:L,lerp:G,lerpV:V,max:W,min:N,mulScalar:O,scale:C,divScalar:q,inverse:Y,invert:nt,cross:$,dot:k,length:J,len:m,lengthSq:X,lenSq:at,distance:H,dist:it,distanceSq:tt,distSq:ot,normalize:et,negate:wt,copy:j,clone:ut,multiply:ct,mul:dt,divide:lt,div:Tt,random:ft,zero:p,transformMat4:M,transformMat3:c,rotate:d,setLength:T,truncate:S,midpoint:U}}var hr=new Map;function Tr(e){let t=hr.get(e);return t||(t=oi(e),hr.set(e,t)),t}function ai(e){function t(x,b,P){let D=new e(3);return x!==void 0&&(D[0]=x,b!==void 0&&(D[1]=b,P!==void 0&&(D[2]=P))),D}let n=t;function r(x,b,P,D){let E=D??new e(3);return E[0]=x,E[1]=b,E[2]=P,E}function v(x,b){let P=b??new e(3);return P[0]=Math.ceil(x[0]),P[1]=Math.ceil(x[1]),P[2]=Math.ceil(x[2]),P}function i(x,b){let P=b??new e(3);return P[0]=Math.floor(x[0]),P[1]=Math.floor(x[1]),P[2]=Math.floor(x[2]),P}function a(x,b){let P=b??new e(3);return P[0]=Math.round(x[0]),P[1]=Math.round(x[1]),P[2]=Math.round(x[2]),P}function u(x,b=0,P=1,D){let E=D??new e(3);return E[0]=Math.min(P,Math.max(b,x[0])),E[1]=Math.min(P,Math.max(b,x[1])),E[2]=Math.min(P,Math.max(b,x[2])),E}function l(x,b,P){let D=P??new e(3);return D[0]=x[0]+b[0],D[1]=x[1]+b[1],D[2]=x[2]+b[2],D}function h(x,b,P,D){let E=D??new e(3);return E[0]=x[0]+b[0]*P,E[1]=x[1]+b[1]*P,E[2]=x[2]+b[2]*P,E}function w(x,b){let P=x[0],D=x[1],E=x[2],I=b[0],A=b[1],Q=b[2],rt=Math.sqrt(P*P+D*D+E*E),Z=Math.sqrt(I*I+A*A+Q*Q),K=rt*Z,pt=K&&k(x,b)/K;return Math.acos(pt)}function B(x,b,P){let D=P??new e(3);return D[0]=x[0]-b[0],D[1]=x[1]-b[1],D[2]=x[2]-b[2],D}let F=B;function R(x,b){return Math.abs(x[0]-b[0])<st&&Math.abs(x[1]-b[1])<st&&Math.abs(x[2]-b[2])<st}function L(x,b){return x[0]===b[0]&&x[1]===b[1]&&x[2]===b[2]}function G(x,b,P,D){let E=D??new e(3);return E[0]=x[0]+P*(b[0]-x[0]),E[1]=x[1]+P*(b[1]-x[1]),E[2]=x[2]+P*(b[2]-x[2]),E}function V(x,b,P,D){let E=D??new e(3);return E[0]=x[0]+P[0]*(b[0]-x[0]),E[1]=x[1]+P[1]*(b[1]-x[1]),E[2]=x[2]+P[2]*(b[2]-x[2]),E}function W(x,b,P){let D=P??new e(3);return D[0]=Math.max(x[0],b[0]),D[1]=Math.max(x[1],b[1]),D[2]=Math.max(x[2],b[2]),D}function N(x,b,P){let D=P??new e(3);return D[0]=Math.min(x[0],b[0]),D[1]=Math.min(x[1],b[1]),D[2]=Math.min(x[2],b[2]),D}function O(x,b,P){let D=P??new e(3);return D[0]=x[0]*b,D[1]=x[1]*b,D[2]=x[2]*b,D}let C=O;function q(x,b,P){let D=P??new e(3);return D[0]=x[0]/b,D[1]=x[1]/b,D[2]=x[2]/b,D}function Y(x,b){let P=b??new e(3);return P[0]=1/x[0],P[1]=1/x[1],P[2]=1/x[2],P}let nt=Y;function $(x,b,P){let D=P??new e(3),E=x[2]*b[0]-x[0]*b[2],I=x[0]*b[1]-x[1]*b[0];return D[0]=x[1]*b[2]-x[2]*b[1],D[1]=E,D[2]=I,D}function k(x,b){return x[0]*b[0]+x[1]*b[1]+x[2]*b[2]}function J(x){let b=x[0],P=x[1],D=x[2];return Math.sqrt(b*b+P*P+D*D)}let m=J;function X(x){let b=x[0],P=x[1],D=x[2];return b*b+P*P+D*D}let at=X;function H(x,b){let P=x[0]-b[0],D=x[1]-b[1],E=x[2]-b[2];return Math.sqrt(P*P+D*D+E*E)}let it=H;function tt(x,b){let P=x[0]-b[0],D=x[1]-b[1],E=x[2]-b[2];return P*P+D*D+E*E}let ot=tt;function et(x,b){let P=b??new e(3),D=x[0],E=x[1],I=x[2],A=Math.sqrt(D*D+E*E+I*I);return A>1e-5?(P[0]=D/A,P[1]=E/A,P[2]=I/A):(P[0]=0,P[1]=0,P[2]=0),P}function wt(x,b){let P=b??new e(3);return P[0]=-x[0],P[1]=-x[1],P[2]=-x[2],P}function j(x,b){let P=b??new e(3);return P[0]=x[0],P[1]=x[1],P[2]=x[2],P}let ut=j;function ct(x,b,P){let D=P??new e(3);return D[0]=x[0]*b[0],D[1]=x[1]*b[1],D[2]=x[2]*b[2],D}let dt=ct;function lt(x,b,P){let D=P??new e(3);return D[0]=x[0]/b[0],D[1]=x[1]/b[1],D[2]=x[2]/b[2],D}let Tt=lt;function ft(x=1,b){let P=b??new e(3),D=Math.random()*2*Math.PI,E=Math.random()*2-1,I=Math.sqrt(1-E*E)*x;return P[0]=Math.cos(D)*I,P[1]=Math.sin(D)*I,P[2]=E*x,P}function p(x){let b=x??new e(3);return b[0]=0,b[1]=0,b[2]=0,b}function M(x,b,P){let D=P??new e(3),E=x[0],I=x[1],A=x[2],Q=b[3]*E+b[7]*I+b[11]*A+b[15]||1;return D[0]=(b[0]*E+b[4]*I+b[8]*A+b[12])/Q,D[1]=(b[1]*E+b[5]*I+b[9]*A+b[13])/Q,D[2]=(b[2]*E+b[6]*I+b[10]*A+b[14])/Q,D}function c(x,b,P){let D=P??new e(3),E=x[0],I=x[1],A=x[2];return D[0]=E*b[0*4+0]+I*b[1*4+0]+A*b[2*4+0],D[1]=E*b[0*4+1]+I*b[1*4+1]+A*b[2*4+1],D[2]=E*b[0*4+2]+I*b[1*4+2]+A*b[2*4+2],D}function d(x,b,P){let D=P??new e(3),E=x[0],I=x[1],A=x[2];return D[0]=E*b[0]+I*b[4]+A*b[8],D[1]=E*b[1]+I*b[5]+A*b[9],D[2]=E*b[2]+I*b[6]+A*b[10],D}function T(x,b,P){let D=P??new e(3),E=b[0],I=b[1],A=b[2],Q=b[3]*2,rt=x[0],Z=x[1],K=x[2],pt=I*K-A*Z,vt=A*rt-E*K,gt=E*Z-I*rt;return D[0]=rt+pt*Q+(I*gt-A*vt)*2,D[1]=Z+vt*Q+(A*pt-E*gt)*2,D[2]=K+gt*Q+(E*vt-I*pt)*2,D}function S(x,b){let P=b??new e(3);return P[0]=x[12],P[1]=x[13],P[2]=x[14],P}function U(x,b,P){let D=P??new e(3),E=b*4;return D[0]=x[E+0],D[1]=x[E+1],D[2]=x[E+2],D}function o(x,b){let P=b??new e(3),D=x[0],E=x[1],I=x[2],A=x[4],Q=x[5],rt=x[6],Z=x[8],K=x[9],pt=x[10];return P[0]=Math.sqrt(D*D+E*E+I*I),P[1]=Math.sqrt(A*A+Q*Q+rt*rt),P[2]=Math.sqrt(Z*Z+K*K+pt*pt),P}function g(x,b,P,D){let E=D??new e(3),I=[],A=[];return I[0]=x[0]-b[0],I[1]=x[1]-b[1],I[2]=x[2]-b[2],A[0]=I[0],A[1]=I[1]*Math.cos(P)-I[2]*Math.sin(P),A[2]=I[1]*Math.sin(P)+I[2]*Math.cos(P),E[0]=A[0]+b[0],E[1]=A[1]+b[1],E[2]=A[2]+b[2],E}function s(x,b,P,D){let E=D??new e(3),I=[],A=[];return I[0]=x[0]-b[0],I[1]=x[1]-b[1],I[2]=x[2]-b[2],A[0]=I[2]*Math.sin(P)+I[0]*Math.cos(P),A[1]=I[1],A[2]=I[2]*Math.cos(P)-I[0]*Math.sin(P),E[0]=A[0]+b[0],E[1]=A[1]+b[1],E[2]=A[2]+b[2],E}function f(x,b,P,D){let E=D??new e(3),I=[],A=[];return I[0]=x[0]-b[0],I[1]=x[1]-b[1],I[2]=x[2]-b[2],A[0]=I[0]*Math.cos(P)-I[1]*Math.sin(P),A[1]=I[0]*Math.sin(P)+I[1]*Math.cos(P),A[2]=I[2],E[0]=A[0]+b[0],E[1]=A[1]+b[1],E[2]=A[2]+b[2],E}function y(x,b,P){let D=P??new e(3);return et(x,D),O(D,b,D)}function _(x,b,P){let D=P??new e(3);return J(x)>b?y(x,b,D):j(x,D)}function z(x,b,P){let D=P??new e(3);return G(x,b,.5,D)}return{create:t,fromValues:n,set:r,ceil:v,floor:i,round:a,clamp:u,add:l,addScaled:h,angle:w,subtract:B,sub:F,equalsApproximately:R,equals:L,lerp:G,lerpV:V,max:W,min:N,mulScalar:O,scale:C,divScalar:q,inverse:Y,invert:nt,cross:$,dot:k,length:J,len:m,lengthSq:X,lenSq:at,distance:H,dist:it,distanceSq:tt,distSq:ot,normalize:et,negate:wt,copy:j,clone:ut,multiply:ct,mul:dt,divide:lt,div:Tt,random:ft,zero:p,transformMat4:M,transformMat4Upper3x3:c,transformMat3:d,transformQuat:T,getTranslation:S,getAxis:U,getScaling:o,rotateX:g,rotateY:s,rotateZ:f,setLength:y,truncate:_,midpoint:z}}var gr=new Map;function ve(e){let t=gr.get(e);return t||(t=ai(e),gr.set(e,t)),t}function si(e){let t=Tr(e),n=ve(e);function r(p,M,c,d,T,S,U,o,g){let s=new e(12);return s[3]=0,s[7]=0,s[11]=0,p!==void 0&&(s[0]=p,M!==void 0&&(s[1]=M,c!==void 0&&(s[2]=c,d!==void 0&&(s[4]=d,T!==void 0&&(s[5]=T,S!==void 0&&(s[6]=S,U!==void 0&&(s[8]=U,o!==void 0&&(s[9]=o,g!==void 0&&(s[10]=g))))))))),s}function v(p,M,c,d,T,S,U,o,g,s){let f=s??new e(12);return f[0]=p,f[1]=M,f[2]=c,f[3]=0,f[4]=d,f[5]=T,f[6]=S,f[7]=0,f[8]=U,f[9]=o,f[10]=g,f[11]=0,f}function i(p,M){let c=M??new e(12);return c[0]=p[0],c[1]=p[1],c[2]=p[2],c[3]=0,c[4]=p[4],c[5]=p[5],c[6]=p[6],c[7]=0,c[8]=p[8],c[9]=p[9],c[10]=p[10],c[11]=0,c}function a(p,M){let c=M??new e(12),d=p[0],T=p[1],S=p[2],U=p[3],o=d+d,g=T+T,s=S+S,f=d*o,y=T*o,_=T*g,z=S*o,x=S*g,b=S*s,P=U*o,D=U*g,E=U*s;return c[0]=1-_-b,c[1]=y+E,c[2]=z-D,c[3]=0,c[4]=y-E,c[5]=1-f-b,c[6]=x+P,c[7]=0,c[8]=z+D,c[9]=x-P,c[10]=1-f-_,c[11]=0,c}function u(p,M){let c=M??new e(12);return c[0]=-p[0],c[1]=-p[1],c[2]=-p[2],c[4]=-p[4],c[5]=-p[5],c[6]=-p[6],c[8]=-p[8],c[9]=-p[9],c[10]=-p[10],c}function l(p,M){let c=M??new e(12);return c[0]=p[0],c[1]=p[1],c[2]=p[2],c[4]=p[4],c[5]=p[5],c[6]=p[6],c[8]=p[8],c[9]=p[9],c[10]=p[10],c}let h=l;function w(p,M){return Math.abs(p[0]-M[0])<st&&Math.abs(p[1]-M[1])<st&&Math.abs(p[2]-M[2])<st&&Math.abs(p[4]-M[4])<st&&Math.abs(p[5]-M[5])<st&&Math.abs(p[6]-M[6])<st&&Math.abs(p[8]-M[8])<st&&Math.abs(p[9]-M[9])<st&&Math.abs(p[10]-M[10])<st}function B(p,M){return p[0]===M[0]&&p[1]===M[1]&&p[2]===M[2]&&p[4]===M[4]&&p[5]===M[5]&&p[6]===M[6]&&p[8]===M[8]&&p[9]===M[9]&&p[10]===M[10]}function F(p){let M=p??new e(12);return M[0]=1,M[1]=0,M[2]=0,M[4]=0,M[5]=1,M[6]=0,M[8]=0,M[9]=0,M[10]=1,M}function R(p,M){let c=M??new e(12);if(c===p){let _;return _=p[1],p[1]=p[4],p[4]=_,_=p[2],p[2]=p[8],p[8]=_,_=p[6],p[6]=p[9],p[9]=_,c}let d=p[0*4+0],T=p[0*4+1],S=p[0*4+2],U=p[1*4+0],o=p[1*4+1],g=p[1*4+2],s=p[2*4+0],f=p[2*4+1],y=p[2*4+2];return c[0]=d,c[1]=U,c[2]=s,c[4]=T,c[5]=o,c[6]=f,c[8]=S,c[9]=g,c[10]=y,c}function L(p,M){let c=M??new e(12),d=p[0*4+0],T=p[0*4+1],S=p[0*4+2],U=p[1*4+0],o=p[1*4+1],g=p[1*4+2],s=p[2*4+0],f=p[2*4+1],y=p[2*4+2],_=y*o-g*f,z=-y*U+g*s,x=f*U-o*s,b=1/(d*_+T*z+S*x);return c[0]=_*b,c[1]=(-y*T+S*f)*b,c[2]=(g*T-S*o)*b,c[4]=z*b,c[5]=(y*d-S*s)*b,c[6]=(-g*d+S*U)*b,c[8]=x*b,c[9]=(-f*d+T*s)*b,c[10]=(o*d-T*U)*b,c}function G(p){let M=p[0],c=p[0*4+1],d=p[0*4+2],T=p[1*4+0],S=p[1*4+1],U=p[1*4+2],o=p[2*4+0],g=p[2*4+1],s=p[2*4+2];return M*(S*s-g*U)-T*(c*s-g*d)+o*(c*U-S*d)}let V=L;function W(p,M,c){let d=c??new e(12),T=p[0],S=p[1],U=p[2],o=p[4],g=p[5],s=p[6],f=p[8],y=p[9],_=p[10],z=M[0],x=M[1],b=M[2],P=M[4],D=M[5],E=M[6],I=M[8],A=M[9],Q=M[10];return d[0]=T*z+o*x+f*b,d[1]=S*z+g*x+y*b,d[2]=U*z+s*x+_*b,d[4]=T*P+o*D+f*E,d[5]=S*P+g*D+y*E,d[6]=U*P+s*D+_*E,d[8]=T*I+o*A+f*Q,d[9]=S*I+g*A+y*Q,d[10]=U*I+s*A+_*Q,d}let N=W;function O(p,M,c){let d=c??F();return p!==d&&(d[0]=p[0],d[1]=p[1],d[2]=p[2],d[4]=p[4],d[5]=p[5],d[6]=p[6]),d[8]=M[0],d[9]=M[1],d[10]=1,d}function C(p,M){let c=M??t.create();return c[0]=p[8],c[1]=p[9],c}function q(p,M,c){let d=c??t.create(),T=M*4;return d[0]=p[T+0],d[1]=p[T+1],d}function Y(p,M,c,d){let T=d===p?p:l(p,d),S=c*4;return T[S+0]=M[0],T[S+1]=M[1],T}function nt(p,M){let c=M??t.create(),d=p[0],T=p[1],S=p[4],U=p[5];return c[0]=Math.sqrt(d*d+T*T),c[1]=Math.sqrt(S*S+U*U),c}function $(p,M){let c=M??n.create(),d=p[0],T=p[1],S=p[2],U=p[4],o=p[5],g=p[6],s=p[8],f=p[9],y=p[10];return c[0]=Math.sqrt(d*d+T*T+S*S),c[1]=Math.sqrt(U*U+o*o+g*g),c[2]=Math.sqrt(s*s+f*f+y*y),c}function k(p,M){let c=M??new e(12);return c[0]=1,c[1]=0,c[2]=0,c[4]=0,c[5]=1,c[6]=0,c[8]=p[0],c[9]=p[1],c[10]=1,c}function J(p,M,c){let d=c??new e(12),T=M[0],S=M[1],U=p[0],o=p[1],g=p[2],s=p[1*4+0],f=p[1*4+1],y=p[1*4+2],_=p[2*4+0],z=p[2*4+1],x=p[2*4+2];return p!==d&&(d[0]=U,d[1]=o,d[2]=g,d[4]=s,d[5]=f,d[6]=y),d[8]=U*T+s*S+_,d[9]=o*T+f*S+z,d[10]=g*T+y*S+x,d}function m(p,M){let c=M??new e(12),d=Math.cos(p),T=Math.sin(p);return c[0]=d,c[1]=T,c[2]=0,c[4]=-T,c[5]=d,c[6]=0,c[8]=0,c[9]=0,c[10]=1,c}function X(p,M,c){let d=c??new e(12),T=p[0*4+0],S=p[0*4+1],U=p[0*4+2],o=p[1*4+0],g=p[1*4+1],s=p[1*4+2],f=Math.cos(M),y=Math.sin(M);return d[0]=f*T+y*o,d[1]=f*S+y*g,d[2]=f*U+y*s,d[4]=f*o-y*T,d[5]=f*g-y*S,d[6]=f*s-y*U,p!==d&&(d[8]=p[8],d[9]=p[9],d[10]=p[10]),d}function at(p,M){let c=M??new e(12),d=Math.cos(p),T=Math.sin(p);return c[0]=1,c[1]=0,c[2]=0,c[4]=0,c[5]=d,c[6]=T,c[8]=0,c[9]=-T,c[10]=d,c}function H(p,M,c){let d=c??new e(12),T=p[4],S=p[5],U=p[6],o=p[8],g=p[9],s=p[10],f=Math.cos(M),y=Math.sin(M);return d[4]=f*T+y*o,d[5]=f*S+y*g,d[6]=f*U+y*s,d[8]=f*o-y*T,d[9]=f*g-y*S,d[10]=f*s-y*U,p!==d&&(d[0]=p[0],d[1]=p[1],d[2]=p[2]),d}function it(p,M){let c=M??new e(12),d=Math.cos(p),T=Math.sin(p);return c[0]=d,c[1]=0,c[2]=-T,c[4]=0,c[5]=1,c[6]=0,c[8]=T,c[9]=0,c[10]=d,c}function tt(p,M,c){let d=c??new e(12),T=p[0*4+0],S=p[0*4+1],U=p[0*4+2],o=p[2*4+0],g=p[2*4+1],s=p[2*4+2],f=Math.cos(M),y=Math.sin(M);return d[0]=f*T-y*o,d[1]=f*S-y*g,d[2]=f*U-y*s,d[8]=f*o+y*T,d[9]=f*g+y*S,d[10]=f*s+y*U,p!==d&&(d[4]=p[4],d[5]=p[5],d[6]=p[6]),d}let ot=m,et=X;function wt(p,M){let c=M??new e(12);return c[0]=p[0],c[1]=0,c[2]=0,c[4]=0,c[5]=p[1],c[6]=0,c[8]=0,c[9]=0,c[10]=1,c}function j(p,M,c){let d=c??new e(12),T=M[0],S=M[1];return d[0]=T*p[0*4+0],d[1]=T*p[0*4+1],d[2]=T*p[0*4+2],d[4]=S*p[1*4+0],d[5]=S*p[1*4+1],d[6]=S*p[1*4+2],p!==d&&(d[8]=p[8],d[9]=p[9],d[10]=p[10]),d}function ut(p,M){let c=M??new e(12);return c[0]=p[0],c[1]=0,c[2]=0,c[4]=0,c[5]=p[1],c[6]=0,c[8]=0,c[9]=0,c[10]=p[2],c}function ct(p,M,c){let d=c??new e(12),T=M[0],S=M[1],U=M[2];return d[0]=T*p[0*4+0],d[1]=T*p[0*4+1],d[2]=T*p[0*4+2],d[4]=S*p[1*4+0],d[5]=S*p[1*4+1],d[6]=S*p[1*4+2],d[8]=U*p[2*4+0],d[9]=U*p[2*4+1],d[10]=U*p[2*4+2],d}function dt(p,M){let c=M??new e(12);return c[0]=p,c[1]=0,c[2]=0,c[4]=0,c[5]=p,c[6]=0,c[8]=0,c[9]=0,c[10]=1,c}function lt(p,M,c){let d=c??new e(12);return d[0]=M*p[0*4+0],d[1]=M*p[0*4+1],d[2]=M*p[0*4+2],d[4]=M*p[1*4+0],d[5]=M*p[1*4+1],d[6]=M*p[1*4+2],p!==d&&(d[8]=p[8],d[9]=p[9],d[10]=p[10]),d}function Tt(p,M){let c=M??new e(12);return c[0]=p,c[1]=0,c[2]=0,c[4]=0,c[5]=p,c[6]=0,c[8]=0,c[9]=0,c[10]=p,c}function ft(p,M,c){let d=c??new e(12);return d[0]=M*p[0*4+0],d[1]=M*p[0*4+1],d[2]=M*p[0*4+2],d[4]=M*p[1*4+0],d[5]=M*p[1*4+1],d[6]=M*p[1*4+2],d[8]=M*p[2*4+0],d[9]=M*p[2*4+1],d[10]=M*p[2*4+2],d}return{clone:h,create:r,set:v,fromMat4:i,fromQuat:a,negate:u,copy:l,equalsApproximately:w,equals:B,identity:F,transpose:R,inverse:L,invert:V,determinant:G,mul:N,multiply:W,setTranslation:O,getTranslation:C,getAxis:q,setAxis:Y,getScaling:nt,get3DScaling:$,translation:k,translate:J,rotation:m,rotate:X,rotationX:at,rotateX:H,rotationY:it,rotateY:tt,rotationZ:ot,rotateZ:et,scaling:wt,scale:j,uniformScaling:dt,uniformScale:lt,scaling3D:ut,scale3D:ct,uniformScaling3D:Tt,uniformScale3D:ft}}var xr=new Map;function ui(e){let t=xr.get(e);return t||(t=si(e),xr.set(e,t)),t}function ci(e){let t=ve(e);function n(o,g,s,f,y,_,z,x,b,P,D,E,I,A,Q,rt){let Z=new e(16);return o!==void 0&&(Z[0]=o,g!==void 0&&(Z[1]=g,s!==void 0&&(Z[2]=s,f!==void 0&&(Z[3]=f,y!==void 0&&(Z[4]=y,_!==void 0&&(Z[5]=_,z!==void 0&&(Z[6]=z,x!==void 0&&(Z[7]=x,b!==void 0&&(Z[8]=b,P!==void 0&&(Z[9]=P,D!==void 0&&(Z[10]=D,E!==void 0&&(Z[11]=E,I!==void 0&&(Z[12]=I,A!==void 0&&(Z[13]=A,Q!==void 0&&(Z[14]=Q,rt!==void 0&&(Z[15]=rt)))))))))))))))),Z}function r(o,g,s,f,y,_,z,x,b,P,D,E,I,A,Q,rt,Z){let K=Z??new e(16);return K[0]=o,K[1]=g,K[2]=s,K[3]=f,K[4]=y,K[5]=_,K[6]=z,K[7]=x,K[8]=b,K[9]=P,K[10]=D,K[11]=E,K[12]=I,K[13]=A,K[14]=Q,K[15]=rt,K}function v(o,g){let s=g??new e(16);return s[0]=o[0],s[1]=o[1],s[2]=o[2],s[3]=0,s[4]=o[4],s[5]=o[5],s[6]=o[6],s[7]=0,s[8]=o[8],s[9]=o[9],s[10]=o[10],s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function i(o,g){let s=g??new e(16),f=o[0],y=o[1],_=o[2],z=o[3],x=f+f,b=y+y,P=_+_,D=f*x,E=y*x,I=y*b,A=_*x,Q=_*b,rt=_*P,Z=z*x,K=z*b,pt=z*P;return s[0]=1-I-rt,s[1]=E+pt,s[2]=A-K,s[3]=0,s[4]=E-pt,s[5]=1-D-rt,s[6]=Q+Z,s[7]=0,s[8]=A+K,s[9]=Q-Z,s[10]=1-D-I,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function a(o,g){let s=g??new e(16);return s[0]=-o[0],s[1]=-o[1],s[2]=-o[2],s[3]=-o[3],s[4]=-o[4],s[5]=-o[5],s[6]=-o[6],s[7]=-o[7],s[8]=-o[8],s[9]=-o[9],s[10]=-o[10],s[11]=-o[11],s[12]=-o[12],s[13]=-o[13],s[14]=-o[14],s[15]=-o[15],s}function u(o,g){let s=g??new e(16);return s[0]=o[0],s[1]=o[1],s[2]=o[2],s[3]=o[3],s[4]=o[4],s[5]=o[5],s[6]=o[6],s[7]=o[7],s[8]=o[8],s[9]=o[9],s[10]=o[10],s[11]=o[11],s[12]=o[12],s[13]=o[13],s[14]=o[14],s[15]=o[15],s}let l=u;function h(o,g){return Math.abs(o[0]-g[0])<st&&Math.abs(o[1]-g[1])<st&&Math.abs(o[2]-g[2])<st&&Math.abs(o[3]-g[3])<st&&Math.abs(o[4]-g[4])<st&&Math.abs(o[5]-g[5])<st&&Math.abs(o[6]-g[6])<st&&Math.abs(o[7]-g[7])<st&&Math.abs(o[8]-g[8])<st&&Math.abs(o[9]-g[9])<st&&Math.abs(o[10]-g[10])<st&&Math.abs(o[11]-g[11])<st&&Math.abs(o[12]-g[12])<st&&Math.abs(o[13]-g[13])<st&&Math.abs(o[14]-g[14])<st&&Math.abs(o[15]-g[15])<st}function w(o,g){return o[0]===g[0]&&o[1]===g[1]&&o[2]===g[2]&&o[3]===g[3]&&o[4]===g[4]&&o[5]===g[5]&&o[6]===g[6]&&o[7]===g[7]&&o[8]===g[8]&&o[9]===g[9]&&o[10]===g[10]&&o[11]===g[11]&&o[12]===g[12]&&o[13]===g[13]&&o[14]===g[14]&&o[15]===g[15]}function B(o){let g=o??new e(16);return g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,g}function F(o,g){let s=g??new e(16);if(s===o){let vt;return vt=o[1],o[1]=o[4],o[4]=vt,vt=o[2],o[2]=o[8],o[8]=vt,vt=o[3],o[3]=o[12],o[12]=vt,vt=o[6],o[6]=o[9],o[9]=vt,vt=o[7],o[7]=o[13],o[13]=vt,vt=o[11],o[11]=o[14],o[14]=vt,s}let f=o[0*4+0],y=o[0*4+1],_=o[0*4+2],z=o[0*4+3],x=o[1*4+0],b=o[1*4+1],P=o[1*4+2],D=o[1*4+3],E=o[2*4+0],I=o[2*4+1],A=o[2*4+2],Q=o[2*4+3],rt=o[3*4+0],Z=o[3*4+1],K=o[3*4+2],pt=o[3*4+3];return s[0]=f,s[1]=x,s[2]=E,s[3]=rt,s[4]=y,s[5]=b,s[6]=I,s[7]=Z,s[8]=_,s[9]=P,s[10]=A,s[11]=K,s[12]=z,s[13]=D,s[14]=Q,s[15]=pt,s}function R(o,g){let s=g??new e(16),f=o[0*4+0],y=o[0*4+1],_=o[0*4+2],z=o[0*4+3],x=o[1*4+0],b=o[1*4+1],P=o[1*4+2],D=o[1*4+3],E=o[2*4+0],I=o[2*4+1],A=o[2*4+2],Q=o[2*4+3],rt=o[3*4+0],Z=o[3*4+1],K=o[3*4+2],pt=o[3*4+3],vt=A*pt,gt=K*Q,yt=P*pt,bt=K*D,Mt=P*Q,St=A*D,Pt=_*pt,_t=K*z,Dt=_*Q,Bt=A*z,Et=_*D,zt=P*z,Lt=E*Z,It=rt*I,Rt=x*Z,At=rt*b,Vt=x*I,ne=E*b,ie=f*Z,oe=rt*y,ae=f*I,se=E*y,ue=f*b,ce=x*y,Ke=vt*b+bt*I+Mt*Z-(gt*b+yt*I+St*Z),je=gt*y+Pt*I+Bt*Z-(vt*y+_t*I+Dt*Z),Je=yt*y+_t*b+Et*Z-(bt*y+Pt*b+zt*Z),me=St*y+Dt*b+zt*I-(Mt*y+Bt*b+Et*I),Ut=1/(f*Ke+x*je+E*Je+rt*me);return s[0]=Ut*Ke,s[1]=Ut*je,s[2]=Ut*Je,s[3]=Ut*me,s[4]=Ut*(gt*x+yt*E+St*rt-(vt*x+bt*E+Mt*rt)),s[5]=Ut*(vt*f+_t*E+Dt*rt-(gt*f+Pt*E+Bt*rt)),s[6]=Ut*(bt*f+Pt*x+zt*rt-(yt*f+_t*x+Et*rt)),s[7]=Ut*(Mt*f+Bt*x+Et*E-(St*f+Dt*x+zt*E)),s[8]=Ut*(Lt*D+At*Q+Vt*pt-(It*D+Rt*Q+ne*pt)),s[9]=Ut*(It*z+ie*Q+se*pt-(Lt*z+oe*Q+ae*pt)),s[10]=Ut*(Rt*z+oe*D+ue*pt-(At*z+ie*D+ce*pt)),s[11]=Ut*(ne*z+ae*D+ce*Q-(Vt*z+se*D+ue*Q)),s[12]=Ut*(Rt*A+ne*K+It*P-(Vt*K+Lt*P+At*A)),s[13]=Ut*(ae*K+Lt*_+oe*A-(ie*A+se*K+It*_)),s[14]=Ut*(ie*P+ce*K+At*_-(ue*K+Rt*_+oe*P)),s[15]=Ut*(ue*A+Vt*_+se*P-(ae*P+ce*A+ne*_)),s}function L(o){let g=o[0],s=o[0*4+1],f=o[0*4+2],y=o[0*4+3],_=o[1*4+0],z=o[1*4+1],x=o[1*4+2],b=o[1*4+3],P=o[2*4+0],D=o[2*4+1],E=o[2*4+2],I=o[2*4+3],A=o[3*4+0],Q=o[3*4+1],rt=o[3*4+2],Z=o[3*4+3],K=E*Z,pt=rt*I,vt=x*Z,gt=rt*b,yt=x*I,bt=E*b,Mt=f*Z,St=rt*y,Pt=f*I,_t=E*y,Dt=f*b,Bt=x*y,Et=K*z+gt*D+yt*Q-(pt*z+vt*D+bt*Q),zt=pt*s+Mt*D+_t*Q-(K*s+St*D+Pt*Q),Lt=vt*s+St*z+Dt*Q-(gt*s+Mt*z+Bt*Q),It=bt*s+Pt*z+Bt*D-(yt*s+_t*z+Dt*D);return g*Et+_*zt+P*Lt+A*It}let G=R;function V(o,g,s){let f=s??new e(16),y=o[0],_=o[1],z=o[2],x=o[3],b=o[4],P=o[5],D=o[6],E=o[7],I=o[8],A=o[9],Q=o[10],rt=o[11],Z=o[12],K=o[13],pt=o[14],vt=o[15],gt=g[0],yt=g[1],bt=g[2],Mt=g[3],St=g[4],Pt=g[5],_t=g[6],Dt=g[7],Bt=g[8],Et=g[9],zt=g[10],Lt=g[11],It=g[12],Rt=g[13],At=g[14],Vt=g[15];return f[0]=y*gt+b*yt+I*bt+Z*Mt,f[1]=_*gt+P*yt+A*bt+K*Mt,f[2]=z*gt+D*yt+Q*bt+pt*Mt,f[3]=x*gt+E*yt+rt*bt+vt*Mt,f[4]=y*St+b*Pt+I*_t+Z*Dt,f[5]=_*St+P*Pt+A*_t+K*Dt,f[6]=z*St+D*Pt+Q*_t+pt*Dt,f[7]=x*St+E*Pt+rt*_t+vt*Dt,f[8]=y*Bt+b*Et+I*zt+Z*Lt,f[9]=_*Bt+P*Et+A*zt+K*Lt,f[10]=z*Bt+D*Et+Q*zt+pt*Lt,f[11]=x*Bt+E*Et+rt*zt+vt*Lt,f[12]=y*It+b*Rt+I*At+Z*Vt,f[13]=_*It+P*Rt+A*At+K*Vt,f[14]=z*It+D*Rt+Q*At+pt*Vt,f[15]=x*It+E*Rt+rt*At+vt*Vt,f}let W=V;function N(o,g,s){let f=s??B();return o!==f&&(f[0]=o[0],f[1]=o[1],f[2]=o[2],f[3]=o[3],f[4]=o[4],f[5]=o[5],f[6]=o[6],f[7]=o[7],f[8]=o[8],f[9]=o[9],f[10]=o[10],f[11]=o[11]),f[12]=g[0],f[13]=g[1],f[14]=g[2],f[15]=1,f}function O(o,g){let s=g??t.create();return s[0]=o[12],s[1]=o[13],s[2]=o[14],s}function C(o,g,s){let f=s??t.create(),y=g*4;return f[0]=o[y+0],f[1]=o[y+1],f[2]=o[y+2],f}function q(o,g,s,f){let y=f===o?f:u(o,f),_=s*4;return y[_+0]=g[0],y[_+1]=g[1],y[_+2]=g[2],y}function Y(o,g){let s=g??t.create(),f=o[0],y=o[1],_=o[2],z=o[4],x=o[5],b=o[6],P=o[8],D=o[9],E=o[10];return s[0]=Math.sqrt(f*f+y*y+_*_),s[1]=Math.sqrt(z*z+x*x+b*b),s[2]=Math.sqrt(P*P+D*D+E*E),s}function nt(o,g,s,f,y){let _=y??new e(16),z=Math.tan(Math.PI*.5-.5*o);if(_[0]=z/g,_[1]=0,_[2]=0,_[3]=0,_[4]=0,_[5]=z,_[6]=0,_[7]=0,_[8]=0,_[9]=0,_[11]=-1,_[12]=0,_[13]=0,_[15]=0,Number.isFinite(f)){let x=1/(s-f);_[10]=f*x,_[14]=f*s*x}else _[10]=-1,_[14]=-s;return _}function $(o,g,s,f=1/0,y){let _=y??new e(16),z=1/Math.tan(o*.5);if(_[0]=z/g,_[1]=0,_[2]=0,_[3]=0,_[4]=0,_[5]=z,_[6]=0,_[7]=0,_[8]=0,_[9]=0,_[11]=-1,_[12]=0,_[13]=0,_[15]=0,f===1/0)_[10]=0,_[14]=s;else{let x=1/(f-s);_[10]=s*x,_[14]=f*s*x}return _}function k(o,g,s,f,y,_,z){let x=z??new e(16);return x[0]=2/(g-o),x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=2/(f-s),x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=1/(y-_),x[11]=0,x[12]=(g+o)/(o-g),x[13]=(f+s)/(s-f),x[14]=y/(y-_),x[15]=1,x}function J(o,g,s,f,y,_,z){let x=z??new e(16),b=g-o,P=f-s,D=y-_;return x[0]=2*y/b,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=2*y/P,x[6]=0,x[7]=0,x[8]=(o+g)/b,x[9]=(f+s)/P,x[10]=_/D,x[11]=-1,x[12]=0,x[13]=0,x[14]=y*_/D,x[15]=0,x}function m(o,g,s,f,y,_=1/0,z){let x=z??new e(16),b=g-o,P=f-s;if(x[0]=2*y/b,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=2*y/P,x[6]=0,x[7]=0,x[8]=(o+g)/b,x[9]=(f+s)/P,x[11]=-1,x[12]=0,x[13]=0,x[15]=0,_===1/0)x[10]=0,x[14]=y;else{let D=1/(_-y);x[10]=y*D,x[14]=_*y*D}return x}let X=t.create(),at=t.create(),H=t.create();function it(o,g,s,f){let y=f??new e(16);return t.normalize(t.subtract(g,o,H),H),t.normalize(t.cross(s,H,X),X),t.normalize(t.cross(H,X,at),at),y[0]=X[0],y[1]=X[1],y[2]=X[2],y[3]=0,y[4]=at[0],y[5]=at[1],y[6]=at[2],y[7]=0,y[8]=H[0],y[9]=H[1],y[10]=H[2],y[11]=0,y[12]=o[0],y[13]=o[1],y[14]=o[2],y[15]=1,y}function tt(o,g,s,f){let y=f??new e(16);return t.normalize(t.subtract(o,g,H),H),t.normalize(t.cross(s,H,X),X),t.normalize(t.cross(H,X,at),at),y[0]=X[0],y[1]=X[1],y[2]=X[2],y[3]=0,y[4]=at[0],y[5]=at[1],y[6]=at[2],y[7]=0,y[8]=H[0],y[9]=H[1],y[10]=H[2],y[11]=0,y[12]=o[0],y[13]=o[1],y[14]=o[2],y[15]=1,y}function ot(o,g,s,f){let y=f??new e(16);return t.normalize(t.subtract(o,g,H),H),t.normalize(t.cross(s,H,X),X),t.normalize(t.cross(H,X,at),at),y[0]=X[0],y[1]=at[0],y[2]=H[0],y[3]=0,y[4]=X[1],y[5]=at[1],y[6]=H[1],y[7]=0,y[8]=X[2],y[9]=at[2],y[10]=H[2],y[11]=0,y[12]=-(X[0]*o[0]+X[1]*o[1]+X[2]*o[2]),y[13]=-(at[0]*o[0]+at[1]*o[1]+at[2]*o[2]),y[14]=-(H[0]*o[0]+H[1]*o[1]+H[2]*o[2]),y[15]=1,y}function et(o,g){let s=g??new e(16);return s[0]=1,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=1,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=1,s[11]=0,s[12]=o[0],s[13]=o[1],s[14]=o[2],s[15]=1,s}function wt(o,g,s){let f=s??new e(16),y=g[0],_=g[1],z=g[2],x=o[0],b=o[1],P=o[2],D=o[3],E=o[1*4+0],I=o[1*4+1],A=o[1*4+2],Q=o[1*4+3],rt=o[2*4+0],Z=o[2*4+1],K=o[2*4+2],pt=o[2*4+3],vt=o[3*4+0],gt=o[3*4+1],yt=o[3*4+2],bt=o[3*4+3];return o!==f&&(f[0]=x,f[1]=b,f[2]=P,f[3]=D,f[4]=E,f[5]=I,f[6]=A,f[7]=Q,f[8]=rt,f[9]=Z,f[10]=K,f[11]=pt),f[12]=x*y+E*_+rt*z+vt,f[13]=b*y+I*_+Z*z+gt,f[14]=P*y+A*_+K*z+yt,f[15]=D*y+Q*_+pt*z+bt,f}function j(o,g){let s=g??new e(16),f=Math.cos(o),y=Math.sin(o);return s[0]=1,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=f,s[6]=y,s[7]=0,s[8]=0,s[9]=-y,s[10]=f,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function ut(o,g,s){let f=s??new e(16),y=o[4],_=o[5],z=o[6],x=o[7],b=o[8],P=o[9],D=o[10],E=o[11],I=Math.cos(g),A=Math.sin(g);return f[4]=I*y+A*b,f[5]=I*_+A*P,f[6]=I*z+A*D,f[7]=I*x+A*E,f[8]=I*b-A*y,f[9]=I*P-A*_,f[10]=I*D-A*z,f[11]=I*E-A*x,o!==f&&(f[0]=o[0],f[1]=o[1],f[2]=o[2],f[3]=o[3],f[12]=o[12],f[13]=o[13],f[14]=o[14],f[15]=o[15]),f}function ct(o,g){let s=g??new e(16),f=Math.cos(o),y=Math.sin(o);return s[0]=f,s[1]=0,s[2]=-y,s[3]=0,s[4]=0,s[5]=1,s[6]=0,s[7]=0,s[8]=y,s[9]=0,s[10]=f,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function dt(o,g,s){let f=s??new e(16),y=o[0*4+0],_=o[0*4+1],z=o[0*4+2],x=o[0*4+3],b=o[2*4+0],P=o[2*4+1],D=o[2*4+2],E=o[2*4+3],I=Math.cos(g),A=Math.sin(g);return f[0]=I*y-A*b,f[1]=I*_-A*P,f[2]=I*z-A*D,f[3]=I*x-A*E,f[8]=I*b+A*y,f[9]=I*P+A*_,f[10]=I*D+A*z,f[11]=I*E+A*x,o!==f&&(f[4]=o[4],f[5]=o[5],f[6]=o[6],f[7]=o[7],f[12]=o[12],f[13]=o[13],f[14]=o[14],f[15]=o[15]),f}function lt(o,g){let s=g??new e(16),f=Math.cos(o),y=Math.sin(o);return s[0]=f,s[1]=y,s[2]=0,s[3]=0,s[4]=-y,s[5]=f,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=1,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function Tt(o,g,s){let f=s??new e(16),y=o[0*4+0],_=o[0*4+1],z=o[0*4+2],x=o[0*4+3],b=o[1*4+0],P=o[1*4+1],D=o[1*4+2],E=o[1*4+3],I=Math.cos(g),A=Math.sin(g);return f[0]=I*y+A*b,f[1]=I*_+A*P,f[2]=I*z+A*D,f[3]=I*x+A*E,f[4]=I*b-A*y,f[5]=I*P-A*_,f[6]=I*D-A*z,f[7]=I*E-A*x,o!==f&&(f[8]=o[8],f[9]=o[9],f[10]=o[10],f[11]=o[11],f[12]=o[12],f[13]=o[13],f[14]=o[14],f[15]=o[15]),f}function ft(o,g,s){let f=s??new e(16),y=o[0],_=o[1],z=o[2],x=Math.sqrt(y*y+_*_+z*z);y/=x,_/=x,z/=x;let b=y*y,P=_*_,D=z*z,E=Math.cos(g),I=Math.sin(g),A=1-E;return f[0]=b+(1-b)*E,f[1]=y*_*A+z*I,f[2]=y*z*A-_*I,f[3]=0,f[4]=y*_*A-z*I,f[5]=P+(1-P)*E,f[6]=_*z*A+y*I,f[7]=0,f[8]=y*z*A+_*I,f[9]=_*z*A-y*I,f[10]=D+(1-D)*E,f[11]=0,f[12]=0,f[13]=0,f[14]=0,f[15]=1,f}let p=ft;function M(o,g,s,f){let y=f??new e(16),_=g[0],z=g[1],x=g[2],b=Math.sqrt(_*_+z*z+x*x);_/=b,z/=b,x/=b;let P=_*_,D=z*z,E=x*x,I=Math.cos(s),A=Math.sin(s),Q=1-I,rt=P+(1-P)*I,Z=_*z*Q+x*A,K=_*x*Q-z*A,pt=_*z*Q-x*A,vt=D+(1-D)*I,gt=z*x*Q+_*A,yt=_*x*Q+z*A,bt=z*x*Q-_*A,Mt=E+(1-E)*I,St=o[0],Pt=o[1],_t=o[2],Dt=o[3],Bt=o[4],Et=o[5],zt=o[6],Lt=o[7],It=o[8],Rt=o[9],At=o[10],Vt=o[11];return y[0]=rt*St+Z*Bt+K*It,y[1]=rt*Pt+Z*Et+K*Rt,y[2]=rt*_t+Z*zt+K*At,y[3]=rt*Dt+Z*Lt+K*Vt,y[4]=pt*St+vt*Bt+gt*It,y[5]=pt*Pt+vt*Et+gt*Rt,y[6]=pt*_t+vt*zt+gt*At,y[7]=pt*Dt+vt*Lt+gt*Vt,y[8]=yt*St+bt*Bt+Mt*It,y[9]=yt*Pt+bt*Et+Mt*Rt,y[10]=yt*_t+bt*zt+Mt*At,y[11]=yt*Dt+bt*Lt+Mt*Vt,o!==y&&(y[12]=o[12],y[13]=o[13],y[14]=o[14],y[15]=o[15]),y}let c=M;function d(o,g){let s=g??new e(16);return s[0]=o[0],s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=o[1],s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=o[2],s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function T(o,g,s){let f=s??new e(16),y=g[0],_=g[1],z=g[2];return f[0]=y*o[0*4+0],f[1]=y*o[0*4+1],f[2]=y*o[0*4+2],f[3]=y*o[0*4+3],f[4]=_*o[1*4+0],f[5]=_*o[1*4+1],f[6]=_*o[1*4+2],f[7]=_*o[1*4+3],f[8]=z*o[2*4+0],f[9]=z*o[2*4+1],f[10]=z*o[2*4+2],f[11]=z*o[2*4+3],o!==f&&(f[12]=o[12],f[13]=o[13],f[14]=o[14],f[15]=o[15]),f}function S(o,g){let s=g??new e(16);return s[0]=o,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=o,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=o,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s}function U(o,g,s){let f=s??new e(16);return f[0]=g*o[0*4+0],f[1]=g*o[0*4+1],f[2]=g*o[0*4+2],f[3]=g*o[0*4+3],f[4]=g*o[1*4+0],f[5]=g*o[1*4+1],f[6]=g*o[1*4+2],f[7]=g*o[1*4+3],f[8]=g*o[2*4+0],f[9]=g*o[2*4+1],f[10]=g*o[2*4+2],f[11]=g*o[2*4+3],o!==f&&(f[12]=o[12],f[13]=o[13],f[14]=o[14],f[15]=o[15]),f}return{create:n,set:r,fromMat3:v,fromQuat:i,negate:a,copy:u,clone:l,equalsApproximately:h,equals:w,identity:B,transpose:F,inverse:R,determinant:L,invert:G,multiply:V,mul:W,setTranslation:N,getTranslation:O,getAxis:C,setAxis:q,getScaling:Y,perspective:nt,perspectiveReverseZ:$,ortho:k,frustum:J,frustumReverseZ:m,aim:it,cameraAim:tt,lookAt:ot,translation:et,translate:wt,rotationX:j,rotateX:ut,rotationY:ct,rotateY:dt,rotationZ:lt,rotateZ:Tt,axisRotation:ft,rotation:p,axisRotate:M,rotate:c,scaling:d,scale:T,uniformScaling:S,uniformScale:U}}var wr=new Map;function li(e){let t=wr.get(e);return t||(t=ci(e),wr.set(e,t)),t}function pi(e){let t=ve(e);function n(p,M,c,d){let T=new e(4);return p!==void 0&&(T[0]=p,M!==void 0&&(T[1]=M,c!==void 0&&(T[2]=c,d!==void 0&&(T[3]=d)))),T}let r=n;function v(p,M,c,d,T){let S=T??new e(4);return S[0]=p,S[1]=M,S[2]=c,S[3]=d,S}function i(p,M,c){let d=c??new e(4),T=M*.5,S=Math.sin(T);return d[0]=S*p[0],d[1]=S*p[1],d[2]=S*p[2],d[3]=Math.cos(T),d}function a(p,M){let c=M??t.create(3),d=Math.acos(p[3])*2,T=Math.sin(d*.5);return T>st?(c[0]=p[0]/T,c[1]=p[1]/T,c[2]=p[2]/T):(c[0]=1,c[1]=0,c[2]=0),{angle:d,axis:c}}function u(p,M){let c=J(p,M);return Math.acos(2*c*c-1)}function l(p,M,c){let d=c??new e(4),T=p[0],S=p[1],U=p[2],o=p[3],g=M[0],s=M[1],f=M[2],y=M[3];return d[0]=T*y+o*g+S*f-U*s,d[1]=S*y+o*s+U*g-T*f,d[2]=U*y+o*f+T*s-S*g,d[3]=o*y-T*g-S*s-U*f,d}let h=l;function w(p,M,c){let d=c??new e(4),T=M*.5,S=p[0],U=p[1],o=p[2],g=p[3],s=Math.sin(T),f=Math.cos(T);return d[0]=S*f+g*s,d[1]=U*f+o*s,d[2]=o*f-U*s,d[3]=g*f-S*s,d}function B(p,M,c){let d=c??new e(4),T=M*.5,S=p[0],U=p[1],o=p[2],g=p[3],s=Math.sin(T),f=Math.cos(T);return d[0]=S*f-o*s,d[1]=U*f+g*s,d[2]=o*f+S*s,d[3]=g*f-U*s,d}function F(p,M,c){let d=c??new e(4),T=M*.5,S=p[0],U=p[1],o=p[2],g=p[3],s=Math.sin(T),f=Math.cos(T);return d[0]=S*f+U*s,d[1]=U*f-S*s,d[2]=o*f+g*s,d[3]=g*f-o*s,d}function R(p,M,c,d){let T=d??new e(4),S=p[0],U=p[1],o=p[2],g=p[3],s=M[0],f=M[1],y=M[2],_=M[3],z=S*s+U*f+o*y+g*_;z<0&&(z=-z,s=-s,f=-f,y=-y,_=-_);let x,b;if(1-z>st){let P=Math.acos(z),D=Math.sin(P);x=Math.sin((1-c)*P)/D,b=Math.sin(c*P)/D}else x=1-c,b=c;return T[0]=x*S+b*s,T[1]=x*U+b*f,T[2]=x*o+b*y,T[3]=x*g+b*_,T}function L(p,M){let c=M??new e(4),d=p[0],T=p[1],S=p[2],U=p[3],o=d*d+T*T+S*S+U*U,g=o?1/o:0;return c[0]=-d*g,c[1]=-T*g,c[2]=-S*g,c[3]=U*g,c}function G(p,M){let c=M??new e(4);return c[0]=-p[0],c[1]=-p[1],c[2]=-p[2],c[3]=p[3],c}function V(p,M){let c=M??new e(4),d=p[0]+p[5]+p[10];if(d>0){let T=Math.sqrt(d+1);c[3]=.5*T;let S=.5/T;c[0]=(p[6]-p[9])*S,c[1]=(p[8]-p[2])*S,c[2]=(p[1]-p[4])*S}else{let T=0;p[5]>p[0]&&(T=1),p[10]>p[T*4+T]&&(T=2);let S=(T+1)%3,U=(T+2)%3,o=Math.sqrt(p[T*4+T]-p[S*4+S]-p[U*4+U]+1);c[T]=.5*o;let g=.5/o;c[3]=(p[S*4+U]-p[U*4+S])*g,c[S]=(p[S*4+T]+p[T*4+S])*g,c[U]=(p[U*4+T]+p[T*4+U])*g}return c}function W(p,M,c,d,T){let S=T??new e(4),U=p*.5,o=M*.5,g=c*.5,s=Math.sin(U),f=Math.cos(U),y=Math.sin(o),_=Math.cos(o),z=Math.sin(g),x=Math.cos(g);switch(d){case"xyz":S[0]=s*_*x+f*y*z,S[1]=f*y*x-s*_*z,S[2]=f*_*z+s*y*x,S[3]=f*_*x-s*y*z;break;case"xzy":S[0]=s*_*x-f*y*z,S[1]=f*y*x-s*_*z,S[2]=f*_*z+s*y*x,S[3]=f*_*x+s*y*z;break;case"yxz":S[0]=s*_*x+f*y*z,S[1]=f*y*x-s*_*z,S[2]=f*_*z-s*y*x,S[3]=f*_*x+s*y*z;break;case"yzx":S[0]=s*_*x+f*y*z,S[1]=f*y*x+s*_*z,S[2]=f*_*z-s*y*x,S[3]=f*_*x-s*y*z;break;case"zxy":S[0]=s*_*x-f*y*z,S[1]=f*y*x+s*_*z,S[2]=f*_*z+s*y*x,S[3]=f*_*x-s*y*z;break;case"zyx":S[0]=s*_*x-f*y*z,S[1]=f*y*x+s*_*z,S[2]=f*_*z-s*y*x,S[3]=f*_*x+s*y*z;break;default:throw new Error(`Unknown rotation order: ${d}`)}return S}function N(p,M){let c=M??new e(4);return c[0]=p[0],c[1]=p[1],c[2]=p[2],c[3]=p[3],c}let O=N;function C(p,M,c){let d=c??new e(4);return d[0]=p[0]+M[0],d[1]=p[1]+M[1],d[2]=p[2]+M[2],d[3]=p[3]+M[3],d}function q(p,M,c){let d=c??new e(4);return d[0]=p[0]-M[0],d[1]=p[1]-M[1],d[2]=p[2]-M[2],d[3]=p[3]-M[3],d}let Y=q;function nt(p,M,c){let d=c??new e(4);return d[0]=p[0]*M,d[1]=p[1]*M,d[2]=p[2]*M,d[3]=p[3]*M,d}let $=nt;function k(p,M,c){let d=c??new e(4);return d[0]=p[0]/M,d[1]=p[1]/M,d[2]=p[2]/M,d[3]=p[3]/M,d}function J(p,M){return p[0]*M[0]+p[1]*M[1]+p[2]*M[2]+p[3]*M[3]}function m(p,M,c,d){let T=d??new e(4);return T[0]=p[0]+c*(M[0]-p[0]),T[1]=p[1]+c*(M[1]-p[1]),T[2]=p[2]+c*(M[2]-p[2]),T[3]=p[3]+c*(M[3]-p[3]),T}function X(p){let M=p[0],c=p[1],d=p[2],T=p[3];return Math.sqrt(M*M+c*c+d*d+T*T)}let at=X;function H(p){let M=p[0],c=p[1],d=p[2],T=p[3];return M*M+c*c+d*d+T*T}let it=H;function tt(p,M){let c=M??new e(4),d=p[0],T=p[1],S=p[2],U=p[3],o=Math.sqrt(d*d+T*T+S*S+U*U);return o>1e-5?(c[0]=d/o,c[1]=T/o,c[2]=S/o,c[3]=U/o):(c[0]=0,c[1]=0,c[2]=0,c[3]=1),c}function ot(p,M){return Math.abs(p[0]-M[0])<st&&Math.abs(p[1]-M[1])<st&&Math.abs(p[2]-M[2])<st&&Math.abs(p[3]-M[3])<st}function et(p,M){return p[0]===M[0]&&p[1]===M[1]&&p[2]===M[2]&&p[3]===M[3]}function wt(p){let M=p??new e(4);return M[0]=0,M[1]=0,M[2]=0,M[3]=1,M}let j=t.create(),ut=t.create(),ct=t.create();function dt(p,M,c){let d=c??new e(4),T=t.dot(p,M);return T<-.999999?(t.cross(ut,p,j),t.len(j)<1e-6&&t.cross(ct,p,j),t.normalize(j,j),i(j,Math.PI,d),d):T>.999999?(d[0]=0,d[1]=0,d[2]=0,d[3]=1,d):(t.cross(p,M,j),d[0]=j[0],d[1]=j[1],d[2]=j[2],d[3]=1+T,tt(d,d))}let lt=new e(4),Tt=new e(4);function ft(p,M,c,d,T,S){let U=S??new e(4);return R(p,d,T,lt),R(M,c,T,Tt),R(lt,Tt,2*T*(1-T),U),U}return{create:n,fromValues:r,set:v,fromAxisAngle:i,toAxisAngle:a,angle:u,multiply:l,mul:h,rotateX:w,rotateY:B,rotateZ:F,slerp:R,inverse:L,conjugate:G,fromMat:V,fromEuler:W,copy:N,clone:O,add:C,subtract:q,sub:Y,mulScalar:nt,scale:$,divScalar:k,dot:J,lerp:m,length:X,len:at,lengthSq:H,lenSq:it,normalize:tt,equalsApproximately:ot,equals:et,identity:wt,rotationTo:dt,sqlerp:ft}}var yr=new Map;function fi(e){let t=yr.get(e);return t||(t=pi(e),yr.set(e,t)),t}function di(e){function t(c,d,T,S){let U=new e(4);return c!==void 0&&(U[0]=c,d!==void 0&&(U[1]=d,T!==void 0&&(U[2]=T,S!==void 0&&(U[3]=S)))),U}let n=t;function r(c,d,T,S,U){let o=U??new e(4);return o[0]=c,o[1]=d,o[2]=T,o[3]=S,o}function v(c,d){let T=d??new e(4);return T[0]=Math.ceil(c[0]),T[1]=Math.ceil(c[1]),T[2]=Math.ceil(c[2]),T[3]=Math.ceil(c[3]),T}function i(c,d){let T=d??new e(4);return T[0]=Math.floor(c[0]),T[1]=Math.floor(c[1]),T[2]=Math.floor(c[2]),T[3]=Math.floor(c[3]),T}function a(c,d){let T=d??new e(4);return T[0]=Math.round(c[0]),T[1]=Math.round(c[1]),T[2]=Math.round(c[2]),T[3]=Math.round(c[3]),T}function u(c,d=0,T=1,S){let U=S??new e(4);return U[0]=Math.min(T,Math.max(d,c[0])),U[1]=Math.min(T,Math.max(d,c[1])),U[2]=Math.min(T,Math.max(d,c[2])),U[3]=Math.min(T,Math.max(d,c[3])),U}function l(c,d,T){let S=T??new e(4);return S[0]=c[0]+d[0],S[1]=c[1]+d[1],S[2]=c[2]+d[2],S[3]=c[3]+d[3],S}function h(c,d,T,S){let U=S??new e(4);return U[0]=c[0]+d[0]*T,U[1]=c[1]+d[1]*T,U[2]=c[2]+d[2]*T,U[3]=c[3]+d[3]*T,U}function w(c,d,T){let S=T??new e(4);return S[0]=c[0]-d[0],S[1]=c[1]-d[1],S[2]=c[2]-d[2],S[3]=c[3]-d[3],S}let B=w;function F(c,d){return Math.abs(c[0]-d[0])<st&&Math.abs(c[1]-d[1])<st&&Math.abs(c[2]-d[2])<st&&Math.abs(c[3]-d[3])<st}function R(c,d){return c[0]===d[0]&&c[1]===d[1]&&c[2]===d[2]&&c[3]===d[3]}function L(c,d,T,S){let U=S??new e(4);return U[0]=c[0]+T*(d[0]-c[0]),U[1]=c[1]+T*(d[1]-c[1]),U[2]=c[2]+T*(d[2]-c[2]),U[3]=c[3]+T*(d[3]-c[3]),U}function G(c,d,T,S){let U=S??new e(4);return U[0]=c[0]+T[0]*(d[0]-c[0]),U[1]=c[1]+T[1]*(d[1]-c[1]),U[2]=c[2]+T[2]*(d[2]-c[2]),U[3]=c[3]+T[3]*(d[3]-c[3]),U}function V(c,d,T){let S=T??new e(4);return S[0]=Math.max(c[0],d[0]),S[1]=Math.max(c[1],d[1]),S[2]=Math.max(c[2],d[2]),S[3]=Math.max(c[3],d[3]),S}function W(c,d,T){let S=T??new e(4);return S[0]=Math.min(c[0],d[0]),S[1]=Math.min(c[1],d[1]),S[2]=Math.min(c[2],d[2]),S[3]=Math.min(c[3],d[3]),S}function N(c,d,T){let S=T??new e(4);return S[0]=c[0]*d,S[1]=c[1]*d,S[2]=c[2]*d,S[3]=c[3]*d,S}let O=N;function C(c,d,T){let S=T??new e(4);return S[0]=c[0]/d,S[1]=c[1]/d,S[2]=c[2]/d,S[3]=c[3]/d,S}function q(c,d){let T=d??new e(4);return T[0]=1/c[0],T[1]=1/c[1],T[2]=1/c[2],T[3]=1/c[3],T}let Y=q;function nt(c,d){return c[0]*d[0]+c[1]*d[1]+c[2]*d[2]+c[3]*d[3]}function $(c){let d=c[0],T=c[1],S=c[2],U=c[3];return Math.sqrt(d*d+T*T+S*S+U*U)}let k=$;function J(c){let d=c[0],T=c[1],S=c[2],U=c[3];return d*d+T*T+S*S+U*U}let m=J;function X(c,d){let T=c[0]-d[0],S=c[1]-d[1],U=c[2]-d[2],o=c[3]-d[3];return Math.sqrt(T*T+S*S+U*U+o*o)}let at=X;function H(c,d){let T=c[0]-d[0],S=c[1]-d[1],U=c[2]-d[2],o=c[3]-d[3];return T*T+S*S+U*U+o*o}let it=H;function tt(c,d){let T=d??new e(4),S=c[0],U=c[1],o=c[2],g=c[3],s=Math.sqrt(S*S+U*U+o*o+g*g);return s>1e-5?(T[0]=S/s,T[1]=U/s,T[2]=o/s,T[3]=g/s):(T[0]=0,T[1]=0,T[2]=0,T[3]=0),T}function ot(c,d){let T=d??new e(4);return T[0]=-c[0],T[1]=-c[1],T[2]=-c[2],T[3]=-c[3],T}function et(c,d){let T=d??new e(4);return T[0]=c[0],T[1]=c[1],T[2]=c[2],T[3]=c[3],T}let wt=et;function j(c,d,T){let S=T??new e(4);return S[0]=c[0]*d[0],S[1]=c[1]*d[1],S[2]=c[2]*d[2],S[3]=c[3]*d[3],S}let ut=j;function ct(c,d,T){let S=T??new e(4);return S[0]=c[0]/d[0],S[1]=c[1]/d[1],S[2]=c[2]/d[2],S[3]=c[3]/d[3],S}let dt=ct;function lt(c){let d=c??new e(4);return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d}function Tt(c,d,T){let S=T??new e(4),U=c[0],o=c[1],g=c[2],s=c[3];return S[0]=d[0]*U+d[4]*o+d[8]*g+d[12]*s,S[1]=d[1]*U+d[5]*o+d[9]*g+d[13]*s,S[2]=d[2]*U+d[6]*o+d[10]*g+d[14]*s,S[3]=d[3]*U+d[7]*o+d[11]*g+d[15]*s,S}function ft(c,d,T){let S=T??new e(4);return tt(c,S),N(S,d,S)}function p(c,d,T){let S=T??new e(4);return $(c)>d?ft(c,d,S):et(c,S)}function M(c,d,T){let S=T??new e(4);return L(c,d,.5,S)}return{create:t,fromValues:n,set:r,ceil:v,floor:i,round:a,clamp:u,add:l,addScaled:h,subtract:w,sub:B,equalsApproximately:F,equals:R,lerp:L,lerpV:G,max:V,min:W,mulScalar:N,scale:O,divScalar:C,inverse:q,invert:Y,dot:nt,length:$,len:k,lengthSq:J,lenSq:m,distance:X,dist:at,distanceSq:H,distSq:it,normalize:tt,negate:ot,copy:et,clone:wt,multiply:j,mul:ut,divide:ct,div:dt,zero:lt,transformMat4:Tt,setLength:ft,truncate:p,midpoint:M}}var br=new Map;function vi(e){let t=br.get(e);return t||(t=di(e),br.set(e,t)),t}function ze(e,t,n,r,v,i){return{mat3:ui(e),mat4:li(t),quat:fi(n),vec2:Tr(r),vec3:ve(v),vec4:vi(i)}}var{mat3:Ht,mat4:ht,quat:Ia,vec2:Gt,vec3:Yt,vec4:Mr}=ze(Float32Array,Float32Array,Float32Array,Float32Array,Float32Array,Float32Array),{mat3:Fa,mat4:Ra,quat:Aa,vec2:Va,vec3:Oa,vec4:Ca}=ze(Float64Array,Float64Array,Float64Array,Float64Array,Float64Array,Float64Array),{mat3:Na,mat4:qa,quat:Ya,vec2:Xa,vec3:Ha,vec4:$a}=ze(ii,Array,Array,Array,Array,Array);var he=class{device;format="r8unorm";downsizeFactor;multisample;textureSimple;textureMultisampled=null;renderPipeline;bindgroup;uniformsBuffer;trianglesBuffer;constructor(t){this.device=t.device,this.downsizeFactor=t.blurFactor,this.multisample=this.downsizeFactor>1?4:1,[this.textureSimple,this.textureMultisampled]=this.createTextures(t.width,t.height),this.trianglesBuffer=t.trianglesBuffer;let n=this.device.createShaderModule({label:"DisplacementTexture shader module",code:vr});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementTexture renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x2"}],arrayStride:2*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"}]},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:this.format}]},primitive:{cullMode:"none",topology:"triangle-list"},multisample:{count:this.multisample}}),this.uniformsBuffer=this.device.createBuffer({label:"DisplacementTexture uniforms buffer",size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.bindgroup=this.device.createBindGroup({label:"DisplacementTexture bindgroup",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.uniformsBuffer}}]})}update(t){let n=this.textureMultisampled??this.textureSimple,r={view:n.view,clearValue:[0,0,0,1],loadOp:"clear",storeOp:"store"};this.textureMultisampled&&(r.resolveTarget=this.textureSimple.view);let v=t.beginRenderPass({label:"DisplacementTexture render to texture renderpass",colorAttachments:[r]}),[i,a]=[n.texture.width,n.texture.height];v.setViewport(0,0,i,a,0,1),v.setScissorRect(0,0,i,a),v.setPipeline(this.renderPipeline),v.setBindGroup(0,this.bindgroup),v.setVertexBuffer(0,this.trianglesBuffer.bufferGpu),v.draw(3*this.trianglesBuffer.spriteCount),v.end()}resize(t,n){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),[this.textureSimple,this.textureMultisampled]=this.createTextures(t,n)}setViewport(t){let n=[1,1,1],r=0,v=[1,1,0],i=ht.identity();ht.multiply(ht.scaling(n),i,i),ht.multiply(ht.rotationZ(r),i,i),ht.multiply(ht.translation(v),i,i);let a=ht.translation([-t.position[0],-t.position[1],0]),u=t.width/t.zoom,l=t.height/t.zoom,h=ht.ortho(0,u,l,0,-10,10),w=ht.identity();ht.multiply(a,i,w),ht.multiply(h,w,w),this.device.queue.writeBuffer(this.uniformsBuffer,0,w)}getView(){return this.textureSimple.view}destroy(){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),this.uniformsBuffer.destroy()}createTextures(t,n){let r=this.device.createTexture({label:"DisplacementTexture texture",size:[Math.ceil(t/this.downsizeFactor),Math.ceil(n/this.downsizeFactor)],format:this.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),v={texture:r,view:r.createView({label:"DisplacementTexture texture view"})},i=null;if(this.multisample>1){let a=this.device.createTexture({label:"DisplacementTexture texture multisampled",size:[r.width,r.height],format:r.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:this.multisample});i={texture:a,view:a.createView({label:"DisplacementTexture texture multisampled view"})}}return[v,i]}};var Pr={type:"cobalt:displacement",refs:[{name:"color",type:"textureView",format:"bgra8unorm",access:"read"},{name:"map",type:"cobaltTexture",format:"bgra8unorm",access:"read"},{name:"out",type:"textureView",format:"bgra8unorm",access:"write"}],onInit:async function(e,t={}){return hi(e,t)},onRun:function(e,t,n){gi(e,t,n)},onDestroy:function(e,t){xi(t)},onResize:function(e,t){t.data.displacementTexture.resize(e.viewport.width,e.viewport.height),t.data.displacementComposition.setColorTextureView(t.refs.color.data.view),t.data.displacementComposition.setNoiseMapTextureView(t.refs.map.view),t.data.displacementComposition.setDisplacementTextureView(t.data.displacementTexture.getView())},onViewportPosition:function(e,t){t.data.displacementTexture.setViewport(e.viewport)},customFunctions:{addTriangle:function(e,t,n){return t.data.trianglesBuffer.addTriangle(n)},removeTriangle:function(e,t,n){t.data.trianglesBuffer.removeTriangle(n)},setPosition:function(e,t,n,r){t.data.trianglesBuffer.setTriangle(n,r)}}};async function hi(e,t){let{device:n}=e,r=new fe({device:n,initialParameters:{offsetX:t.options.offseyX??0,offsetY:t.options.offseyY??0,scale:t.options.scale??20}}),v=256,i=new pe({device:n,maxSpriteCount:v}),a=new he({device:n,width:e.viewport.width,height:e.viewport.height,blurFactor:8,trianglesBuffer:i}),u=new de({device:n,targetFormat:"bgra8unorm",colorTextureView:t.refs.color.data.view,noiseMapTextureView:t.refs.map.view,displacementTextureView:a.getView(),displacementParametersBuffer:r});return{displacementParameters:r,displacementTexture:a,displacementComposition:u,trianglesBuffer:i}}function gi(e,t,n){if(t.data.trianglesBuffer.spriteCount===0)return;t.data.trianglesBuffer.update(),t.data.displacementTexture.update(n);let v=n.beginRenderPass({colorAttachments:[{view:t.refs.out,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});v.executeBundles([t.data.displacementComposition.getRenderBundle()]),v.end()}function xi(e){e.data.trianglesBuffer.destroy(),e.data.trianglesBuffer=null,e.data.displacementParameters.destroy(),e.data.displacementParameters=null,e.data.displacementTexture.destroy(),e.data.displacementTexture=null,e.data.displacementComposition.destroy(),e.data.displacementComposition=null}function Le(e,t){let n=t.vertices,r=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,v={size:n.byteLength,usage:r,mappedAtCreation:!0},i=e.createBuffer(v);return new Float32Array(i.getMappedRange()).set(n),i.unmap(),{buffer:i,bufferLayout:{arrayStride:20,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x3",offset:0},{shaderLocation:1,format:"float32x2",offset:12}]}}}var Ie="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};struct Sprite{translate:vec2<f32>,scale:vec2<f32>,tint:vec4<f32>,opacity:f32,rotation:f32,};struct SpritesBuffer{models:array<Sprite>,};@binding(0)@group(0)var<uniform> transformUBO:TransformData;@binding(1)@group(0)var myTexture:texture_2d<f32>;@binding(2)@group(0)var mySampler:sampler;@binding(3)@group(0)var<storage,read>sprites:SpritesBuffer;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32,};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@location(0)vertexPosition:vec3<f32>,@location(1)vertexTexCoord:vec2<f32>)->Fragment{var output:Fragment;var sx:f32=sprites.models[i_id].scale.x;var sy:f32=sprites.models[i_id].scale.y;var sz:f32=1.0;var rot:f32=sprites.models[i_id].rotation;var tx:f32=sprites.models[i_id].translate.x;var ty:f32=sprites.models[i_id].translate.y;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,1.0);output.TexCoord=vertexTexCoord;output.Tint=sprites.models[i_id].tint;output.Opacity=sprites.models[i_id].opacity;return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32)->@location(0)vec4<f32>{var outColor:vec4<f32>=textureSample(myTexture,mySampler,TexCoord);var output=vec4<f32>(outColor.rgb*(1.0-Tint.a)+(Tint.rgb*Tint.a),outColor.a*Opacity);return output;}";var fs=Mr.create(),_r=Yt.create(),Br={type:"cobalt:overlay",refs:[{name:"spritesheet",type:"customResource",access:"read"},{name:"color",type:"textView",format:"rgba8unorm",access:"write"}],onInit:async function(e,t={}){return yi(e,t)},onRun:function(e,t,n){bi(e,t,n)},onDestroy:function(e,t){Mi(t)},onResize:function(e,t){Dr(e,t)},onViewportPosition:function(e,t){Dr(e,t)},customFunctions:{...mt}};async function yi(e,t){let{device:n}=e,r=16192,v=r,a=Float32Array.BYTES_PER_ELEMENT*2,l=Float32Array.BYTES_PER_ELEMENT*2,w=Float32Array.BYTES_PER_ELEMENT*4,F=Float32Array.BYTES_PER_ELEMENT*4,R=n.createBuffer({size:(a+l+w+F)*v,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),L=n.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),G=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}}]}),V=n.createBindGroup({layout:G,entries:[{binding:0,resource:{buffer:L}},{binding:1,resource:t.refs.spritesheet.data.colorTexture.view},{binding:2,resource:t.refs.spritesheet.data.colorTexture.sampler},{binding:3,resource:{buffer:R}}]}),W=n.createPipelineLayout({bindGroupLayouts:[G]}),N=n.createRenderPipeline({label:"overlay",vertex:{module:n.createShaderModule({code:Ie}),entryPoint:"vs_main",buffers:[t.refs.spritesheet.data.quads.bufferLayout]},fragment:{module:n.createShaderModule({code:Ie}),entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:W});return{instancedDrawCalls:new Uint32Array(r*2),instancedDrawCallCount:0,spriteBuffer:R,uniformBuffer:L,pipeline:N,bindGroupLayout:G,bindGroup:V,spriteData:new Float32Array(r*12),spriteCount:0,spriteIndices:new Map,dirty:!1}}function bi(e,t,n){let{device:r}=e,v=t.options.loadOp||"load";if(t.data.dirty&&(Ti(t.data),t.data.dirty=!1),t.data.spriteCount>0){let l=t.data.spriteCount*12*Float32Array.BYTES_PER_ELEMENT;r.queue.writeBuffer(t.data.spriteBuffer,0,t.data.spriteData.buffer,0,l)}let i=n.beginRenderPass({colorAttachments:[{view:t.refs.color,clearValue:e.clearValue,loadOp:v,storeOp:"store"}]});i.setPipeline(t.data.pipeline),i.setBindGroup(0,t.data.bindGroup),i.setVertexBuffer(0,t.refs.spritesheet.data.quads.buffer);let a=6,u=0;for(let l=0;l<t.data.instancedDrawCallCount;l++){let h=t.data.instancedDrawCalls[l*2]*a,w=t.data.instancedDrawCalls[l*2+1];i.draw(a,w,h,u),u+=w}i.end()}function Ti(e){let t=-1,n=0;e.instancedDrawCallCount=0;for(let r=0;r<e.spriteCount;r++){let v=e.spriteData[r*12+11]&65535;v!==t&&(n>0&&(e.instancedDrawCalls[e.instancedDrawCallCount*2]=t,e.instancedDrawCalls[e.instancedDrawCallCount*2+1]=n,e.instancedDrawCallCount++),t=v,n=0),n++}n>0&&(e.instancedDrawCalls[e.instancedDrawCallCount*2]=t,e.instancedDrawCalls[e.instancedDrawCallCount*2+1]=n,e.instancedDrawCallCount++)}function Dr(e,t){let r=Math.round(e.viewport.width/1),v=Math.round(e.viewport.height/1),i=ht.ortho(0,r,v,0,-10,10);Yt.set(0,0,0,_r);let a=ht.translation(_r);e.device.queue.writeBuffer(t.data.uniformBuffer,0,a.buffer),e.device.queue.writeBuffer(t.data.uniformBuffer,64,i.buffer)}function Mi(e){e.data.instancedDrawCalls=null,e.data.bindGroup=null,e.data.spriteBuffer.destroy(),e.data.spriteBuffer=null,e.data.uniformBuffer.destroy(),e.data.uniformBuffer=null,e.data.spriteData=null,e.data.spriteIndices.clear(),e.data.spriteIndices=null}var Re="@binding(0)@group(0)var tileTexture:texture_2d<f32>;@binding(1)@group(0)var tileSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vs_main(@builtin(vertex_index)VertexIndex:u32)->Fragment{var output:Fragment;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.TexCoord=vec2<f32>(uvs[VertexIndex]);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var col=textureSample(tileTexture,tileSampler,TexCoord);return vec4<f32>(col.rgb,1.0);}";var Ur={type:"cobalt:fbBlit",refs:[{name:"in",type:"cobaltTexture",format:"bgra8unorm",access:"read"},{name:"out",type:"cobaltTexture",format:"bgra8unorm",access:"write"}],onInit:async function(e,t={}){return Pi(e,t)},onRun:function(e,t,n){_i(e,t,n)},onDestroy:function(e,t){},onResize:function(e,t){Di(e,t)},onViewportPosition:function(e,t){}};async function Pi(e,t){let{device:n}=e,r=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),v=n.createBindGroup({layout:r,entries:[{binding:0,resource:t.refs.in.data.view},{binding:1,resource:t.refs.in.data.sampler}]}),i=n.createPipelineLayout({bindGroupLayouts:[r]}),a=n.createRenderPipeline({label:"fb-blit",vertex:{module:n.createShaderModule({code:Re}),entryPoint:"vs_main",buffers:[]},fragment:{module:n.createShaderModule({code:Re}),entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:i});return{bindGroupLayout:r,bindGroup:v,pipeline:a}}function _i(e,t,n){let{device:r}=e,v=n.beginRenderPass({colorAttachments:[{view:t.refs.out,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});v.setPipeline(t.data.pipeline),v.setBindGroup(0,t.data.bindGroup),v.draw(3),v.end()}function Di(e,t){let{device:n}=e;t.data.bindGroup=n.createBindGroup({layout:t.data.bindGroupLayout,entries:[{binding:0,resource:t.refs.in.data.view},{binding:1,resource:t.refs.in.data.sampler}]})}var Gr="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};@binding(0)@group(0)var<uniform> transformUBO:TransformData;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)Color:vec4<f32>,};@vertex fn vs_main(@location(0)vertexPosition:vec2<f32>,@location(1)vertexColor:vec4<f32>)->Fragment{var sx:f32=1.0;var sy:f32=1.0;var sz:f32=1.0;var rot:f32=0.0;var tx:f32=1.0;var ty:f32=1.0;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;var output:Fragment;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,0.0,1.0);output.Color=vertexColor;return output;}@fragment fn fs_main(@location(0)Color:vec4<f32>)->@location(0)vec4<f32>{return Color;}";var sn=Bn(an(),1);var un={line:Qt,save:function(e,t){t.data.transforms.push(Ht.clone(t.data.transforms.at(-1)))},restore:function(e,t){t.data.transforms.length>1&&t.data.transforms.pop()},translate:function(e,t,n){let r=t.data.transforms.at(-1);Ht.translate(r,n,r)},rotate:function(e,t,n){let r=t.data.transforms.at(-1);Ht.rotate(r,n,r)},scale:function(e,t,n){let r=t.data.transforms.at(-1);Ht.scale(r,n,r)},strokePath:function(e,t,n,r,v=1){for(let i of n)Qt(e,t,i[0],i[1],r,v)},filledPath:function(e,t,n,r){let v=[];for(let h=1;h<n.length;h++)v.push([h-1,h]);let i=(0,sn.default)(n,v,{exterior:!0}),a=t.data.transforms.at(-1),u=t.data.vertexCount*6,l=Gt.create();for(let h of i)Gt.transformMat3(n[h[0]],a,l),t.data.vertices[u+0]=l[0],t.data.vertices[u+1]=l[1],t.data.vertices[u+2]=r[0],t.data.vertices[u+3]=r[1],t.data.vertices[u+4]=r[2],t.data.vertices[u+5]=r[3],Gt.transformMat3(n[h[1]],a,l),t.data.vertices[u+6]=l[0],t.data.vertices[u+7]=l[1],t.data.vertices[u+8]=r[0],t.data.vertices[u+9]=r[1],t.data.vertices[u+10]=r[2],t.data.vertices[u+11]=r[3],Gt.transformMat3(n[h[2]],a,l),t.data.vertices[u+12]=l[0],t.data.vertices[u+13]=l[1],t.data.vertices[u+14]=r[0],t.data.vertices[u+15]=r[1],t.data.vertices[u+16]=r[2],t.data.vertices[u+17]=r[3],u+=18;t.data.vertexCount+=3*i.length,t.data.dirty=!0},ellipse:function(e,t,n,r,v,i,a,u=1){let[l,h]=n,w=2*Math.PI/i;for(let B=0;B<i;B++){let F=B*w,R=(B+1)*w,L=l+r*Math.cos(F),G=h+v*Math.sin(F),V=l+r*Math.cos(R),W=h+v*Math.sin(R);Qt(e,t,[L,G],[V,W],a,u)}},filledEllipse:function(e,t,n,r,v,i,a){let[u,l]=n,h=2*Math.PI/i,w=t.data.transforms.at(-1);for(let B=0;B<i;B++){let F=B*h,R=(B+1)*h,L=u+r*Math.cos(F),G=l+v*Math.sin(F),V=u+r*Math.cos(R),W=l+v*Math.sin(R),O=t.data.vertexCount*6+B*18,C=Gt.transformMat3([u,l],w);t.data.vertices[O+0]=C[0],t.data.vertices[O+1]=C[1],t.data.vertices[O+2]=a[0],t.data.vertices[O+3]=a[1],t.data.vertices[O+4]=a[2],t.data.vertices[O+5]=a[3],Gt.transformMat3([L,G],w,C),t.data.vertices[O+6]=C[0],t.data.vertices[O+7]=C[1],t.data.vertices[O+8]=a[0],t.data.vertices[O+9]=a[1],t.data.vertices[O+10]=a[2],t.data.vertices[O+11]=a[3],Gt.transformMat3([V,W],w,C),t.data.vertices[O+12]=C[0],t.data.vertices[O+13]=C[1],t.data.vertices[O+14]=a[0],t.data.vertices[O+15]=a[1],t.data.vertices[O+16]=a[2],t.data.vertices[O+17]=a[3]}t.data.vertexCount+=3*i,t.data.dirty=!0},box:function(e,t,n,r,v,i,a=1){let[u,l]=n,h=r/2,w=v/2,B=[u-h,l-w],F=[u+h,l-w],R=[u-h,l+w],L=[u+h,l+w];Qt(e,t,B,F,i,a),Qt(e,t,R,L,i,a),Qt(e,t,B,R,i,a),Qt(e,t,F,L,i,a)},filledBox:function(e,t,n,r,v,i){let[a,u]=n,l=r/2,h=v/2,w=t.data.transforms.at(-1),B=Gt.transformMat3([a-l,u-h],w),F=Gt.transformMat3([a+l,u-h],w),R=Gt.transformMat3([a-l,u+h],w),L=Gt.transformMat3([a+l,u+h],w),G=t.data.vertexCount*6;t.data.vertices[G+0]=B[0],t.data.vertices[G+1]=B[1],t.data.vertices[G+2]=i[0],t.data.vertices[G+3]=i[1],t.data.vertices[G+4]=i[2],t.data.vertices[G+5]=i[3],t.data.vertices[G+6]=R[0],t.data.vertices[G+7]=R[1],t.data.vertices[G+8]=i[0],t.data.vertices[G+9]=i[1],t.data.vertices[G+10]=i[2],t.data.vertices[G+11]=i[3],t.data.vertices[G+12]=F[0],t.data.vertices[G+13]=F[1],t.data.vertices[G+14]=i[0],t.data.vertices[G+15]=i[1],t.data.vertices[G+16]=i[2],t.data.vertices[G+17]=i[3],t.data.vertices[G+18]=R[0],t.data.vertices[G+19]=R[1],t.data.vertices[G+20]=i[0],t.data.vertices[G+21]=i[1],t.data.vertices[G+22]=i[2],t.data.vertices[G+23]=i[3],t.data.vertices[G+24]=L[0],t.data.vertices[G+25]=L[1],t.data.vertices[G+26]=i[0],t.data.vertices[G+27]=i[1],t.data.vertices[G+28]=i[2],t.data.vertices[G+29]=i[3],t.data.vertices[G+30]=F[0],t.data.vertices[G+31]=F[1],t.data.vertices[G+32]=i[0],t.data.vertices[G+33]=i[1],t.data.vertices[G+34]=i[2],t.data.vertices[G+35]=i[3],t.data.vertexCount+=6,t.data.dirty=!0},clear:function(e,t){t.data.vertexCount=0,t.data.transforms.length=1,Ht.identity(t.data.transforms[0]),t.data.dirty=!0}};function Qt(e,t,n,r,v,i=1){let a=t.data.transforms.at(-1);n=Gt.transformMat3(n,a),r=Gt.transformMat3(r,a);let u=Gt.sub(r,n),l=Gt.normalize(u),h=Ao(l),w=i/2,B=t.data.vertexCount*6;t.data.vertices[B+0]=n[0]+h[0]*w,t.data.vertices[B+1]=n[1]+h[1]*w,t.data.vertices[B+2]=v[0],t.data.vertices[B+3]=v[1],t.data.vertices[B+4]=v[2],t.data.vertices[B+5]=v[3],t.data.vertices[B+6]=n[0]-h[0]*w,t.data.vertices[B+7]=n[1]-h[1]*w,t.data.vertices[B+8]=v[0],t.data.vertices[B+9]=v[1],t.data.vertices[B+10]=v[2],t.data.vertices[B+11]=v[3],t.data.vertices[B+12]=r[0]+h[0]*w,t.data.vertices[B+13]=r[1]+h[1]*w,t.data.vertices[B+14]=v[0],t.data.vertices[B+15]=v[1],t.data.vertices[B+16]=v[2],t.data.vertices[B+17]=v[3],t.data.vertices[B+18]=n[0]-h[0]*w,t.data.vertices[B+19]=n[1]-h[1]*w,t.data.vertices[B+20]=v[0],t.data.vertices[B+21]=v[1],t.data.vertices[B+22]=v[2],t.data.vertices[B+23]=v[3],t.data.vertices[B+24]=r[0]+h[0]*w,t.data.vertices[B+25]=r[1]+h[1]*w,t.data.vertices[B+26]=v[0],t.data.vertices[B+27]=v[1],t.data.vertices[B+28]=v[2],t.data.vertices[B+29]=v[3],t.data.vertices[B+30]=r[0]-h[0]*w,t.data.vertices[B+31]=r[1]-h[1]*w,t.data.vertices[B+32]=v[0],t.data.vertices[B+33]=v[1],t.data.vertices[B+34]=v[2],t.data.vertices[B+35]=v[3],t.data.vertexCount+=6,t.data.dirty=!0}function Ao(e){return[-e[1],e[0]]}var cn=Yt.create(0,0,0),pn={type:"cobalt:primitives",refs:[{name:"color",type:"textView",format:"rgba8unorm",access:"write"}],onInit:async function(e,t={}){return Vo(e,t)},onRun:function(e,t,n){Oo(e,t,n)},onDestroy:function(e,t){Co(t)},onResize:function(e,t){ln(e,t)},onViewportPosition:function(e,t){ln(e,t)},customFunctions:un};async function Vo(e,t){let{device:n}=e,r=new Float32Array(3e5),v=n.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),i=n.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=n.createShaderModule({code:Gr}),u=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}}]}),l=n.createPipelineLayout({bindGroupLayouts:[u]}),h=n.createBindGroup({layout:u,entries:[{binding:0,resource:{buffer:i}}]}),w=n.createRenderPipeline({layout:l,vertex:{module:a,entryPoint:"vs_main",buffers:[{arrayStride:6*Float32Array.BYTES_PER_ELEMENT,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,format:"float32x4",offset:8}]}]},fragment:{module:a,entryPoint:"fs_main",targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"}});return{uniformBuffer:i,vertexBuffer:v,pipeline:w,bindGroup:h,vertexCount:0,dirty:!1,vertices:r,transforms:[Ht.identity()]}}function Oo(e,t,n){if(t.data.vertexCount===0)return;let{device:r}=e;if(t.data.dirty){t.data.dirty=!1;let a=6*Float32Array.BYTES_PER_ELEMENT,u=t.data.vertexCount*a;if(u>t.data.vertexBuffer.size){console.warn("too many primitives, bailing");return}e.device.queue.writeBuffer(t.data.vertexBuffer,0,t.data.vertices.buffer,0,u)}let v=t.options.loadOp||"load",i=n.beginRenderPass({colorAttachments:[{view:t.refs.color,clearValue:e.clearValue,loadOp:v,storeOp:"store"}]});i.setPipeline(t.data.pipeline),i.setBindGroup(0,t.data.bindGroup),i.setVertexBuffer(0,t.data.vertexBuffer),i.draw(t.data.vertexCount),i.end()}function Co(e){e.data.vertexBuffer.destroy(),e.data.vertexBuffer=null,e.data.uniformBuffer.destroy(),e.data.uniformBuffer=null,e.data.transforms.length=0}function ln(e,t){let{device:n}=e,r=e.viewport.width/e.viewport.zoom,v=e.viewport.height/e.viewport.zoom,i=ht.ortho(0,r,v,0,-10,10);Yt.set(-e.viewport.position[0],-e.viewport.position[1],0,cn);let a=ht.translation(cn);n.queue.writeBuffer(t.data.uniformBuffer,0,a.buffer),n.queue.writeBuffer(t.data.uniformBuffer,64,i.buffer)}var Ze={};tr(Ze,{setAmbientLight:()=>qo,setLights:()=>No,setOccluders:()=>Yo});function No(e,t,n){t.data.lights=n,t.data.lightsBufferNeedsUpdate=!0}function qo(e,t,n){t.data.lightsRenderer.setAmbientLight(n)}function Yo(e,t,n){t.data.lightsRenderer.setObstacles(n),t.data.lightsTextureNeedsUpdate=!0}var Me=class{invViewProjectionMatrix=ht.identity();viewportSize={width:1,height:1};topLeft=[0,0];zoom=1;constructor(t){this.setViewportSize(t.viewportSize.width,t.viewportSize.height);let n=t.center??this.topLeft;this.setTopLeft(...n);let r=t.zoom??1;this.setZoom(r)}get invertViewProjectionMatrix(){return this.invViewProjectionMatrix}setViewportSize(t,n){this.viewportSize.width=t,this.viewportSize.height=n,this.updateMatrices()}setTopLeft(t,n){this.topLeft[0]=t,this.topLeft[1]=n,this.updateMatrices()}setZoom(t){this.zoom=t,this.updateMatrices()}updateMatrices(){ht.identity(this.invViewProjectionMatrix),ht.multiply(ht.scaling([1,-1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),ht.multiply(ht.translation([1,1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),ht.multiply(ht.scaling([.5*this.viewportSize.width/this.zoom,.5*this.viewportSize.height/this.zoom,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),ht.multiply(ht.translation([this.topLeft[0],this.topLeft[1],0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix)}};var Ct=class e{static structs={definition:`
2
2
  struct Light { // align(16) size(48)
3
3
  color: vec3<f32>, // offset(0) align(16) size(12)
4
4
  radius: f32, // offset(12) align(4) size(4)
@@ -13,8 +13,8 @@ struct LightsBuffer { // align(16)
13
13
  // padding
14
14
  lights: array<Light>, // offset(16) align(16)
15
15
  };
16
- `,light:{radius:{offset:12},position:{offset:16}},lightsBuffer:{lights:{offset:16,stride:48}}};device;maxLightsCount;currentLightsCount=0;buffer;get gpuBuffer(){return this.buffer.bufferGpu}constructor(r,m){this.device=r,this.maxLightsCount=m;let v=new ArrayBuffer(s.computeBufferBytesLength(m)),P=r.createBuffer({label:"LightsBuffer buffer",size:v.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX});this.buffer={bufferCpu:v,bufferGpu:P},this.setLights([])}setLights(r){if(r.length>this.maxLightsCount)throw new Error(`Too many lights "${r.length}", max is "${this.maxLightsCount}".`);let m=s.computeBufferBytesLength(r.length);new Uint32Array(this.buffer.bufferCpu,0,1).set([r.length]),r.forEach((v,P)=>{new Float32Array(this.buffer.bufferCpu,s.structs.lightsBuffer.lights.offset+s.structs.lightsBuffer.lights.stride*P,9).set([...v.color,v.radius,...v.position,v.intensity,v.attenuationLinear,v.attenuationExp])}),this.device.queue.writeBuffer(this.buffer.bufferGpu,0,this.buffer.bufferCpu,0,m),this.currentLightsCount=r.length}get lightsCount(){return this.currentLightsCount}destroy(){this.buffer.bufferGpu.destroy()}static computeBufferBytesLength(r){return s.structs.lightsBuffer.lights.offset+s.structs.lightsBuffer.lights.stride*r}};var ge=class{lightsBuffer;renderPipeline;bindgroup;renderBundle;constructor(r,m,v,P){this.lightsBuffer=m;let T=r.createShaderModule({label:"LightsTextureInitializer shader module",code:`
17
- ${Vt.structs.definition}
16
+ `,light:{radius:{offset:12},position:{offset:16}},lightsBuffer:{lights:{offset:16,stride:48}}};device;maxLightsCount;currentLightsCount=0;buffer;get gpuBuffer(){return this.buffer.bufferGpu}constructor(t,n){this.device=t,this.maxLightsCount=n;let r=new ArrayBuffer(e.computeBufferBytesLength(n)),v=t.createBuffer({label:"LightsBuffer buffer",size:r.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX});this.buffer={bufferCpu:r,bufferGpu:v},this.setLights([])}setLights(t){if(t.length>this.maxLightsCount)throw new Error(`Too many lights "${t.length}", max is "${this.maxLightsCount}".`);let n=e.computeBufferBytesLength(t.length);new Uint32Array(this.buffer.bufferCpu,0,1).set([t.length]),t.forEach((r,v)=>{new Float32Array(this.buffer.bufferCpu,e.structs.lightsBuffer.lights.offset+e.structs.lightsBuffer.lights.stride*v,9).set([...r.color,r.radius,...r.position,r.intensity,r.attenuationLinear,r.attenuationExp])}),this.device.queue.writeBuffer(this.buffer.bufferGpu,0,this.buffer.bufferCpu,0,n),this.currentLightsCount=t.length}get lightsCount(){return this.currentLightsCount}destroy(){this.buffer.bufferGpu.destroy()}static computeBufferBytesLength(t){return e.structs.lightsBuffer.lights.offset+e.structs.lightsBuffer.lights.stride*t}};var Se=class{lightsBuffer;renderPipeline;bindgroup;renderBundle;constructor(t,n,r,v){this.lightsBuffer=n;let i=t.createShaderModule({label:"LightsTextureInitializer shader module",code:`
17
+ ${Ct.structs.definition}
18
18
 
19
19
  @group(0) @binding(0) var<storage,read> lightsBuffer: LightsBuffer;
20
20
 
@@ -27,8 +27,8 @@ struct VertexOut {
27
27
  @location(0) uv: vec2<f32>,
28
28
  };
29
29
 
30
- const cellsGridSizeU = vec2<u32>(${v.gridSize.x}, ${v.gridSize.y});
31
- const cellsGridSizeF = vec2<f32>(${v.gridSize.x}, ${v.gridSize.y});
30
+ const cellsGridSizeU = vec2<u32>(${r.gridSize.x}, ${r.gridSize.y});
31
+ const cellsGridSizeF = vec2<f32>(${r.gridSize.x}, ${r.gridSize.y});
32
32
 
33
33
  @vertex
34
34
  fn main_vertex(in: VertexIn) -> VertexOut {
@@ -96,7 +96,7 @@ fn main_fragment(in: VertexOut) -> FragmentOut {
96
96
  let localUv = fract(in.uv);
97
97
  let fromCenter = 2.0 * localUv - 1.0;
98
98
  let uvDistanceFromCenter = distance(vec2<f32>(0,0), fromCenter);
99
- let distancesFromCenter = vec4<f32>(uvDistanceFromCenter / sizes * f32(${P}));
99
+ let distancesFromCenter = vec4<f32>(uvDistanceFromCenter / sizes * f32(${v}));
100
100
 
101
101
  let intensities = vec4<f32>(
102
102
  lightProperties[0].intensity * (1.0 + 1.0 * step(uvDistanceFromCenter, 0.01)),
@@ -125,7 +125,7 @@ fn main_fragment(in: VertexOut) -> FragmentOut {
125
125
  out.color = lightIntensities;
126
126
  return out;
127
127
  }
128
- `});this.renderPipeline=r.createRenderPipeline({label:"LightsTextureInitializer renderpipeline",layout:"auto",vertex:{module:T,entryPoint:"main_vertex"},fragment:{module:T,entryPoint:"main_fragment",targets:[{format:v.format}]},primitive:{cullMode:"none",topology:"triangle-strip"},multisample:{count:v.sampleCount}}),this.bindgroup=r.createBindGroup({label:"LightsTextureInitializer bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.lightsBuffer.gpuBuffer}}]});let B=r.createRenderBundleEncoder({label:"LightsTextureInitializer renderbundle encoder",colorFormats:[v.format],sampleCount:v.sampleCount});B.setPipeline(this.renderPipeline),B.setBindGroup(0,this.bindgroup),B.draw(4),this.renderBundle=B.finish({label:"LightsTextureInitializer renderbundle"})}getRenderBundle(){return this.renderBundle}destroy(){}};var xe=class{device;renderPipeline;renderBundleEncoderDescriptor;renderBundle;lightsBuffer;indirectDrawing;obstacles=null;constructor(r,m,v,P){this.device=r,this.lightsBuffer=m;let T=!0,B=r.createShaderModule({label:"LightsTextureMask shader module",code:`
128
+ `});this.renderPipeline=t.createRenderPipeline({label:"LightsTextureInitializer renderpipeline",layout:"auto",vertex:{module:i,entryPoint:"main_vertex"},fragment:{module:i,entryPoint:"main_fragment",targets:[{format:r.format}]},primitive:{cullMode:"none",topology:"triangle-strip"},multisample:{count:r.sampleCount}}),this.bindgroup=t.createBindGroup({label:"LightsTextureInitializer bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.lightsBuffer.gpuBuffer}}]});let a=t.createRenderBundleEncoder({label:"LightsTextureInitializer renderbundle encoder",colorFormats:[r.format],sampleCount:r.sampleCount});a.setPipeline(this.renderPipeline),a.setBindGroup(0,this.bindgroup),a.draw(4),this.renderBundle=a.finish({label:"LightsTextureInitializer renderbundle"})}getRenderBundle(){return this.renderBundle}destroy(){}};var Pe=class{device;renderPipeline;renderBundleEncoderDescriptor;renderBundle;lightsBuffer;indirectDrawing;obstacles=null;constructor(t,n,r,v){this.device=t,this.lightsBuffer=n;let i=!0,a=t.createShaderModule({label:"LightsTextureMask shader module",code:`
129
129
  struct VertexIn {
130
130
  @builtin(instance_index) lightIndex: u32,
131
131
  @location(0) position: vec3<f32>,
@@ -139,14 +139,14 @@ struct VertexOut {
139
139
  @location(1) localPosition: vec2<f32>,
140
140
  };
141
141
 
142
- const cellsGridSizeU = vec2<u32>(${v.gridSize.x}, ${v.gridSize.y});
143
- const cellsGridSizeF = vec2<f32>(${v.gridSize.x}, ${v.gridSize.y});
142
+ const cellsGridSizeU = vec2<u32>(${r.gridSize.x}, ${r.gridSize.y});
143
+ const cellsGridSizeF = vec2<f32>(${r.gridSize.x}, ${r.gridSize.y});
144
144
 
145
145
  @vertex
146
146
  fn main_vertex(in: VertexIn) -> VertexOut {
147
147
  let worldPosition = in.lightPosition + (in.position.xy - in.lightPosition) * (1.0 + 10000.0 * in.position.z);
148
148
 
149
- let scaling = f32(${P});
149
+ let scaling = f32(${v});
150
150
 
151
151
  let cellIndex = in.lightIndex / 4u;
152
152
  let indexInCell = in.lightIndex % 4u;
@@ -183,13 +183,13 @@ fn main_fragment(in: VertexOut) -> FragmentOut {
183
183
  out.color = in.color;
184
184
  return out;
185
185
  }
186
- `});this.renderPipeline=r.createRenderPipeline({label:"LightsTextureMask renderpipeline",layout:"auto",vertex:{module:B,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x3"}],arrayStride:3*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"},{attributes:[{shaderLocation:1,offset:Vt.structs.light.radius.offset,format:"float32"},{shaderLocation:2,offset:Vt.structs.light.position.offset,format:"float32x2"}],arrayStride:Vt.structs.lightsBuffer.lights.stride,stepMode:"instance"}]},fragment:{module:B,entryPoint:"main_fragment",targets:[{format:v.format,blend:{color:{operation:"min",srcFactor:"one",dstFactor:"one"},alpha:{operation:"min",srcFactor:"one",dstFactor:"one"}}}]},primitive:{cullMode:T?"none":"back",topology:"triangle-list"},multisample:{count:v.sampleCount}}),this.indirectDrawing={bufferCpu:new ArrayBuffer(20),bufferGpu:r.createBuffer({label:"LightsTextureMask indirect buffer",size:20,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST})},this.uploadIndirectDrawingBuffer(),this.renderBundleEncoderDescriptor={label:"LightsTextureMask renderbundle encoder",colorFormats:[v.format],sampleCount:v.sampleCount},this.renderBundle=this.buildRenderBundle()}getRenderBundle(){return this.renderBundle}setObstacles(r){let m=[],v=[];for(let U of r){let z=m.length/3;m.push(...U[0],0,...U[1],0,...U[0],1,...U[1],1),v.push(z+0,z+1,z+3,z+0,z+3,z+2)}let P=!1,T=new Float32Array(m),B=this.obstacles?.positionsBufferGpu;(!B||B.size<T.byteLength)&&(B?.destroy(),B=this.device.createBuffer({label:"LightsTextureMask positions buffer",size:T.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),P=!0),this.device.queue.writeBuffer(B,0,T);let G=new Uint16Array(v),_=this.obstacles?.indexBufferGpu;(!_||_.size<G.byteLength)&&(_?.destroy(),_=this.device.createBuffer({label:"LightsTextureMask index buffer",size:G.byteLength,usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST}),P=!0),this.device.queue.writeBuffer(_,0,G),this.obstacles={positionsBufferGpu:B,indexBufferGpu:_},this.setIndirectIndexCount(v.length),P&&(this.renderBundle=this.buildRenderBundle())}setLightsCount(r){this.setIndirectInstanceCount(r)}destroy(){this.indirectDrawing.bufferGpu.destroy(),this.obstacles?.positionsBufferGpu.destroy(),this.obstacles?.indexBufferGpu.destroy()}setIndirectIndexCount(r){let m=new Uint32Array(this.indirectDrawing.bufferCpu);m[0]!==r&&(m[0]=r,this.uploadIndirectDrawingBuffer())}setIndirectInstanceCount(r){let m=new Uint32Array(this.indirectDrawing.bufferCpu);m[1]!==r&&(m[1]=r,this.uploadIndirectDrawingBuffer())}buildRenderBundle(){let r=this.device.createRenderBundleEncoder(this.renderBundleEncoderDescriptor);return this.obstacles&&(r.setPipeline(this.renderPipeline),r.setVertexBuffer(0,this.obstacles.positionsBufferGpu),r.setVertexBuffer(1,this.lightsBuffer.gpuBuffer,Vt.structs.lightsBuffer.lights.offset),r.setIndexBuffer(this.obstacles.indexBufferGpu,"uint16"),r.drawIndexedIndirect(this.indirectDrawing.bufferGpu,0)),r.finish({label:"LightsTextureMask renderbundle"})}uploadIndirectDrawingBuffer(){this.device.queue.writeBuffer(this.indirectDrawing.bufferGpu,0,this.indirectDrawing.bufferCpu)}};var me=class{lightsBuffer;texture;gridSize;textureMultisampled=null;textureRenderpassDescriptor;textureInitializer;textureMask;constructor(r,m,v){this.lightsBuffer=m;let P=this.lightsBuffer.maxLightsCount/4,T={x:Math.ceil(Math.sqrt(P)),y:0};T.y=Math.ceil(P/T.x),this.gridSize=T;let B={width:T.x*v.resolutionPerLight,height:T.y*v.resolutionPerLight},G="rgba8unorm";this.texture=r.createTexture({label:"LightsTextureMask texture",size:[B.width,B.height],format:G,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),v.antialiased&&(this.textureMultisampled=r.createTexture({label:"LightsTextureMask texture multisampled",size:[B.width,B.height],format:G,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:4}));let U={view:(this.textureMultisampled??this.texture).createView(),clearValue:[0,0,0,1],loadOp:"load",storeOp:"store"};v.antialiased&&(U.resolveTarget=this.texture.createView()),this.textureRenderpassDescriptor={label:"lights-renderer render to texture renderpass",colorAttachments:[U]};let z={gridSize:T,format:G,sampleCount:this.textureMultisampled?.sampleCount??1};this.textureInitializer=new ge(r,m,z,v.maxLightSize),this.textureMask=new xe(r,m,z,v.maxLightSize)}update(r){this.textureMask.setLightsCount(this.lightsBuffer.lightsCount);let m=r.beginRenderPass(this.textureRenderpassDescriptor),[v,P]=[this.texture.width,this.texture.height];m.setViewport(0,0,v,P,0,1),m.setScissorRect(0,0,v,P),m.executeBundles([this.textureInitializer.getRenderBundle(),this.textureMask.getRenderBundle()]),m.end()}setObstacles(r){this.textureMask.setObstacles(r)}destroy(){this.texture.destroy(),this.textureMultisampled?.destroy(),this.textureInitializer.destroy(),this.textureMask.destroy()}};var ve=class{device;ambientLight=[.2,.2,.2];targetTexture;renderPipeline;uniformsBufferGpu;bindgroup0;bindgroup1;renderBundle;lightsBuffer;lightsTexture;constructor(r){this.device=r.device,this.targetTexture=r.targetTexture,this.lightsBuffer=r.lightsBuffer,this.lightsTexture=new me(r.device,r.lightsBuffer,r.lightsTextureProperties),this.uniformsBufferGpu=r.device.createBuffer({label:"LightsRenderer uniforms buffer",size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});let m=r.device.createShaderModule({label:"LightsRenderer shader module",code:`
186
+ `});this.renderPipeline=t.createRenderPipeline({label:"LightsTextureMask renderpipeline",layout:"auto",vertex:{module:a,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x3"}],arrayStride:3*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"},{attributes:[{shaderLocation:1,offset:Ct.structs.light.radius.offset,format:"float32"},{shaderLocation:2,offset:Ct.structs.light.position.offset,format:"float32x2"}],arrayStride:Ct.structs.lightsBuffer.lights.stride,stepMode:"instance"}]},fragment:{module:a,entryPoint:"main_fragment",targets:[{format:r.format,blend:{color:{operation:"min",srcFactor:"one",dstFactor:"one"},alpha:{operation:"min",srcFactor:"one",dstFactor:"one"}}}]},primitive:{cullMode:i?"none":"back",topology:"triangle-list"},multisample:{count:r.sampleCount}}),this.indirectDrawing={bufferCpu:new ArrayBuffer(20),bufferGpu:t.createBuffer({label:"LightsTextureMask indirect buffer",size:20,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST})},this.uploadIndirectDrawingBuffer(),this.renderBundleEncoderDescriptor={label:"LightsTextureMask renderbundle encoder",colorFormats:[r.format],sampleCount:r.sampleCount},this.renderBundle=this.buildRenderBundle()}getRenderBundle(){return this.renderBundle}setObstacles(t){let n=[],r=[];for(let h of t){let w=n.length/3;n.push(...h[0],0,...h[1],0,...h[0],1,...h[1],1),r.push(w+0,w+1,w+3,w+0,w+3,w+2)}let v=!1,i=new Float32Array(n),a=this.obstacles?.positionsBufferGpu;(!a||a.size<i.byteLength)&&(a?.destroy(),a=this.device.createBuffer({label:"LightsTextureMask positions buffer",size:i.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),v=!0),this.device.queue.writeBuffer(a,0,i);let u=new Uint16Array(r),l=this.obstacles?.indexBufferGpu;(!l||l.size<u.byteLength)&&(l?.destroy(),l=this.device.createBuffer({label:"LightsTextureMask index buffer",size:u.byteLength,usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST}),v=!0),this.device.queue.writeBuffer(l,0,u),this.obstacles={positionsBufferGpu:a,indexBufferGpu:l},this.setIndirectIndexCount(r.length),v&&(this.renderBundle=this.buildRenderBundle())}setLightsCount(t){this.setIndirectInstanceCount(t)}destroy(){this.indirectDrawing.bufferGpu.destroy(),this.obstacles?.positionsBufferGpu.destroy(),this.obstacles?.indexBufferGpu.destroy()}setIndirectIndexCount(t){let n=new Uint32Array(this.indirectDrawing.bufferCpu);n[0]!==t&&(n[0]=t,this.uploadIndirectDrawingBuffer())}setIndirectInstanceCount(t){let n=new Uint32Array(this.indirectDrawing.bufferCpu);n[1]!==t&&(n[1]=t,this.uploadIndirectDrawingBuffer())}buildRenderBundle(){let t=this.device.createRenderBundleEncoder(this.renderBundleEncoderDescriptor);return this.obstacles&&(t.setPipeline(this.renderPipeline),t.setVertexBuffer(0,this.obstacles.positionsBufferGpu),t.setVertexBuffer(1,this.lightsBuffer.gpuBuffer,Ct.structs.lightsBuffer.lights.offset),t.setIndexBuffer(this.obstacles.indexBufferGpu,"uint16"),t.drawIndexedIndirect(this.indirectDrawing.bufferGpu,0)),t.finish({label:"LightsTextureMask renderbundle"})}uploadIndirectDrawingBuffer(){this.device.queue.writeBuffer(this.indirectDrawing.bufferGpu,0,this.indirectDrawing.bufferCpu)}};var _e=class{lightsBuffer;texture;gridSize;textureMultisampled=null;textureRenderpassDescriptor;textureInitializer;textureMask;constructor(t,n,r){this.lightsBuffer=n;let v=this.lightsBuffer.maxLightsCount/4,i={x:Math.ceil(Math.sqrt(v)),y:0};i.y=Math.ceil(v/i.x),this.gridSize=i;let a={width:i.x*r.resolutionPerLight,height:i.y*r.resolutionPerLight},u="rgba8unorm";this.texture=t.createTexture({label:"LightsTextureMask texture",size:[a.width,a.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),r.antialiased&&(this.textureMultisampled=t.createTexture({label:"LightsTextureMask texture multisampled",size:[a.width,a.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:4}));let h={view:(this.textureMultisampled??this.texture).createView(),clearValue:[0,0,0,1],loadOp:"load",storeOp:"store"};r.antialiased&&(h.resolveTarget=this.texture.createView()),this.textureRenderpassDescriptor={label:"lights-renderer render to texture renderpass",colorAttachments:[h]};let w={gridSize:i,format:u,sampleCount:this.textureMultisampled?.sampleCount??1};this.textureInitializer=new Se(t,n,w,r.maxLightSize),this.textureMask=new Pe(t,n,w,r.maxLightSize)}update(t){this.textureMask.setLightsCount(this.lightsBuffer.lightsCount);let n=t.beginRenderPass(this.textureRenderpassDescriptor),[r,v]=[this.texture.width,this.texture.height];n.setViewport(0,0,r,v,0,1),n.setScissorRect(0,0,r,v),n.executeBundles([this.textureInitializer.getRenderBundle(),this.textureMask.getRenderBundle()]),n.end()}setObstacles(t){this.textureMask.setObstacles(t)}destroy(){this.texture.destroy(),this.textureMultisampled?.destroy(),this.textureInitializer.destroy(),this.textureMask.destroy()}};var De=class{device;ambientLight=[.2,.2,.2];targetTexture;renderPipeline;uniformsBufferGpu;bindgroup0;bindgroup1;renderBundle;lightsBuffer;lightsTexture;constructor(t){this.device=t.device,this.targetTexture=t.targetTexture,this.lightsBuffer=t.lightsBuffer,this.lightsTexture=new _e(t.device,t.lightsBuffer,t.lightsTextureProperties),this.uniformsBufferGpu=t.device.createBuffer({label:"LightsRenderer uniforms buffer",size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});let n=t.device.createShaderModule({label:"LightsRenderer shader module",code:`
187
187
  struct Uniforms { // align(16) size(80)
188
188
  invertViewMatrix: mat4x4<f32>, // offset(0) align(16) size(64)
189
189
  ambientLight: vec3<f32>, // offset(64) align(16) size(12)
190
190
  };
191
191
 
192
- ${Vt.structs.definition}
192
+ ${Ct.structs.definition}
193
193
 
194
194
  @group(0) @binding(0) var<uniform> uniforms: Uniforms;
195
195
  @group(0) @binding(1) var<storage,read> lightsBuffer: LightsBuffer;
@@ -254,12 +254,12 @@ fn sampleLightBaseIntensity(lightId: u32, localUv: vec2<f32>) -> f32 {
254
254
  fn compute_lights(worldPosition: vec2<f32>) -> vec3<f32> {
255
255
  var color = vec3<f32>(uniforms.ambientLight);
256
256
 
257
- const maxUvDistance = f32(${1-2/r.lightsTextureProperties.resolutionPerLight});
257
+ const maxUvDistance = f32(${1-2/t.lightsTextureProperties.resolutionPerLight});
258
258
 
259
259
  let lightsCount = lightsBuffer.count;
260
260
  for (var iLight = 0u; iLight < lightsCount; iLight++) {
261
261
  let light = lightsBuffer.lights[iLight];
262
- let lightSize = f32(${r.lightsTextureProperties.resolutionPerLight});
262
+ let lightSize = f32(${t.lightsTextureProperties.resolutionPerLight});
263
263
  let relativePosition = (worldPosition - light.position) / lightSize;
264
264
  if (max(abs(relativePosition.x), abs(relativePosition.y)) < maxUvDistance) {
265
265
  let localUv = 0.5 + 0.5 * relativePosition;
@@ -281,4 +281,4 @@ fn main_fragment(in: VertexOut) -> FragmentOut {
281
281
  out.color = vec4<f32>(color, 1.0);
282
282
  return out;
283
283
  }
284
- `});this.renderPipeline=r.device.createRenderPipeline({label:"LightsRenderer renderpipeline",layout:"auto",vertex:{module:m,entryPoint:"main_vertex"},fragment:{module:m,entryPoint:"main_fragment",targets:[{format:this.targetTexture.format}]},primitive:{cullMode:"none",topology:"triangle-strip"}});let v=this.renderPipeline.getBindGroupLayout(0);this.bindgroup0=r.device.createBindGroup({label:"LightsRenderer bindgroup 0",layout:v,entries:[{binding:0,resource:{buffer:this.uniformsBufferGpu}},{binding:1,resource:{buffer:this.lightsBuffer.gpuBuffer}},{binding:2,resource:this.lightsTexture.texture.createView({label:"LightsRenderer lightsTexture view"})},{binding:3,resource:r.device.createSampler({label:"LightsRenderer sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:r.lightsTextureProperties.filtering,minFilter:r.lightsTextureProperties.filtering})}]}),this.bindgroup1=this.buildBindgroup1(r.albedo),this.renderBundle=this.buildRenderBundle()}computeLightsTexture(r){this.lightsTexture.update(r)}render(r,m){let v=new ArrayBuffer(80);new Float32Array(v,0,16).set(m),new Float32Array(v,64,3).set(this.ambientLight),this.device.queue.writeBuffer(this.uniformsBufferGpu,0,v),r.executeBundles([this.renderBundle])}setAlbedo(r){this.bindgroup1=this.buildBindgroup1(r),this.renderBundle=this.buildRenderBundle()}setAmbientLight(r){this.ambientLight=[...r]}setObstacles(r){this.lightsTexture.setObstacles(r)}destroy(){this.uniformsBufferGpu.destroy(),this.lightsTexture.destroy()}buildBindgroup1(r){return this.device.createBindGroup({label:"LightsRenderer bindgroup 1",layout:this.renderPipeline.getBindGroupLayout(1),entries:[{binding:0,resource:r.view},{binding:1,resource:r.sampler}]})}buildRenderBundle(){let r=this.device.createRenderBundleEncoder({label:"LightsRenderer renderbundle encoder",colorFormats:[this.targetTexture.format]});return r.setPipeline(this.renderPipeline),r.setBindGroup(0,this.bindgroup0),r.setBindGroup(1,this.bindgroup1),r.draw(4),r.finish({label:"LightsRenderer renderbundle"})}};var yn={type:"cobalt:light",refs:[{name:"in",type:"textureView",format:"rgba16float",access:"read"},{name:"out",type:"textureView",format:"rgba16float",access:"write"}],onInit:async function(s,r={}){return kr(s,r)},onRun:function(s,r,m){Kr(s,r,m)},onDestroy:function(s,r){Jr(r)},onResize:function(s,r){Cr(s,r)},onViewportPosition:function(s,r){r.data.viewport.setTopLeft(...s.viewport.position)},customFunctions:{...Ge}};async function kr(s,r){let{device:m}=s,v=256,P=256,T=new Vt(m,v),B=new we({viewportSize:{width:s.viewport.width,height:s.viewport.height},center:s.viewport.position,zoom:s.viewport.zoom}),G=new ve({device:m,albedo:{view:r.refs.in.data.view,sampler:r.refs.in.data.sampler},targetTexture:r.refs.out.data.texture,lightsBuffer:T,lightsTextureProperties:{resolutionPerLight:P,maxLightSize:P,antialiased:!1,filtering:"nearest"}});return{lightsBuffer:T,lightsBufferNeedsUpdate:!0,lightsTextureNeedsUpdate:!0,lightsRenderer:G,viewport:B,lights:[]}}function Kr(s,r,m){r.data.lightsBufferNeedsUpdate&&(r.data.lightsBuffer.setLights(r.data.lights),r.data.lightsBufferNeedsUpdate=!1,r.data.lightsTextureNeedsUpdate=!0);let v=r.data.lightsRenderer;r.data.lightsTextureNeedsUpdate&&(v.computeLightsTexture(m),r.data.lightsTextureNeedsUpdate=!1);let P=m.beginRenderPass({colorAttachments:[{view:r.refs.out.data.view,clearValue:s.clearValue,loadOp:"load",storeOp:"store"}]});r.data.viewport.setZoom(s.viewport.zoom);let T=r.data.viewport.invertViewProjectionMatrix;v.render(P,T),P.end()}function Jr(s){s.data.lightsBuffer.destroy(),s.data.lightsRenderer.destroy()}function Cr(s,r){r.data.lightsRenderer.setAlbedo({view:r.refs.in.data.view,sampler:r.refs.in.data.sampler}),r.data.viewport.setViewportSize(s.viewport.width,s.viewport.height)}var Ue="struct TransformData{viewOffset:vec2<f32>,viewportSize:vec2<f32>,inverseAtlasTextureSize:vec2<f32>,tileSize:f32,inverseTileSize:f32,};struct TileScroll{scrollScale:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@binding(0)@group(0)var<uniform> myScroll:TileScroll;@binding(1)@group(0)var tileTexture:texture_2d<f32>;@binding(2)@group(0)var tileSampler:sampler;@binding(0)@group(1)var<uniform> transformUBO:TransformData;@binding(1)@group(1)var atlasTexture:texture_2d<f32>;@binding(2)@group(1)var atlasSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@builtin(vertex_index)VertexIndex:u32)->Fragment{var vertexPosition=vec2<f32>(positions[VertexIndex]);var vertexTexCoord=vec2<f32>(uvs[VertexIndex]);var output:Fragment;let inverseTileTextureSize=1/vec2<f32>(textureDimensions(tileTexture,0));var scrollScale=myScroll.scrollScale;var viewOffset:vec2<f32>=transformUBO.viewOffset*scrollScale;let PixelCoord=(vertexTexCoord*transformUBO.viewportSize)+viewOffset;output.TexCoord=PixelCoord/transformUBO.tileSize;output.Position=vec4<f32>(vertexPosition,0.0,1.0);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var tilemapCoord=floor(TexCoord);var u_tilemapSize=vec2<f32>(textureDimensions(tileTexture,0));var tileFoo=fract((tilemapCoord+vec2<f32>(0.5,0.5))/u_tilemapSize);var tile=floor(textureSample(tileTexture,tileSampler,tileFoo)*255.0);if(tile.x==255&&tile.y==255){discard;}var u_tilesetSize=vec2<f32>(textureDimensions(atlasTexture,0))/transformUBO.tileSize;let u_tileUVMinBounds=vec2<f32>(0.5/transformUBO.tileSize,0.5/transformUBO.tileSize);let u_tileUVMaxBounds=vec2<f32>((transformUBO.tileSize-0.5)/transformUBO.tileSize,(transformUBO.tileSize-0.5)/transformUBO.tileSize);var texcoord=clamp(fract(TexCoord),u_tileUVMinBounds,u_tileUVMaxBounds);var tileCoord=(tile.xy+texcoord)/u_tilesetSize;var color=textureSample(atlasTexture,atlasSampler,tileCoord);if(color.a<=0.1){discard;}return color;}";var kt=new Float32Array(8),Dn={type:"cobalt:tileAtlas",refs:[],onInit:async function(s,r={}){return eo(s,r)},onRun:function(s,r,m){},onDestroy:function(s,r){no(data)},onResize:function(s,r){Mn(s,r)},onViewportPosition:function(s,r){Mn(s,r)}};async function eo(s,r){let{device:m}=s,v=await qt(s,"tile atlas",r.options.textureUrl),P=m.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),T=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),B=m.createBindGroup({layout:T,entries:[{binding:0,resource:{buffer:P}},{binding:1,resource:v.view},{binding:2,resource:v.sampler}]}),G=m.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),_=m.createPipelineLayout({bindGroupLayouts:[G,T]});return{pipeline:m.createRenderPipeline({label:"tile",vertex:{module:m.createShaderModule({code:Ue}),entryPoint:"vs_main",buffers:[]},fragment:{module:m.createShaderModule({code:Ue}),entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:_}),uniformBuffer:P,atlasBindGroup:B,atlasMaterial:v,tileBindGroupLayout:G,tileSize:r.options.tileSize,tileScale:r.options.tileScale}}function no(s){s.atlasMaterial.texture.destroy(),s.atlasMaterial.texture=void 0}function Mn(s,r){kt[0]=s.viewport.position[0],kt[1]=s.viewport.position[1];let m=r.data,{tileScale:v,tileSize:P}=m,T=s.viewport.width/s.viewport.zoom,B=s.viewport.height/s.viewport.zoom;kt[2]=T/v,kt[3]=B/v,kt[4]=1/m.atlasMaterial.texture.width,kt[5]=1/m.atlasMaterial.texture.height,kt[6]=P,kt[7]=1/P,s.device.queue.writeBuffer(m.uniformBuffer,0,kt,0,8)}function ye(s){let m=Object.keys(s.frames).length,v=new Float32Array(m*30),P=[],T={},B=0;for(let G in s.frames){let _=s.frames[G];P.push(G),T[G]=_.sourceSize;let U=-.5+_.spriteSourceSize.x/_.sourceSize.w,z=-.5+_.spriteSourceSize.y/_.sourceSize.h,R=-.5+(_.spriteSourceSize.x+_.spriteSourceSize.w)/_.sourceSize.w,X=-.5+(_.spriteSourceSize.y+_.spriteSourceSize.h)/_.sourceSize.h,Y=[U,z,0],H=[U,X,0],F=[R,X,0],nt=[R,z,0],rt=0+_.frame.x/s.meta.size.w,W=0+_.frame.y/s.meta.size.h,et=0+(_.frame.x+_.frame.w)/s.meta.size.w,Bt=0+(_.frame.y+_.frame.h)/s.meta.size.h,gt=[rt,W],xt=[rt,Bt],Mt=[et,Bt],mt=[et,W];v.set(Y,B),v.set(gt,B+3),v.set(H,B+5),v.set(xt,B+8),v.set(F,B+10),v.set(Mt,B+13),v.set(Y,B+15),v.set(gt,B+18),v.set(F,B+20),v.set(Mt,B+23),v.set(nt,B+25),v.set(mt,B+28),B+=30}return{spriteMeta:T,locations:P,vertices:v}}var Ee="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};struct Sprite{translate:vec2<f32>,scale:vec2<f32>,tint:vec4<f32>,opacity:f32,rotation:f32,emissiveIntensity:f32,sortValue:f32,};struct SpritesBuffer{models:array<Sprite>,};@binding(0)@group(0)var<uniform> transformUBO:TransformData;@binding(1)@group(0)var myTexture:texture_2d<f32>;@binding(2)@group(0)var mySampler:sampler;@binding(3)@group(0)var<storage,read>sprites:SpritesBuffer;@binding(4)@group(0)var emissiveTexture:texture_2d<f32>;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32,};struct GBufferOutput{@location(0)color:vec4<f32>,@location(1)emissive:vec4<f32>,}@vertex fn vs_main(@builtin(instance_index)i_id:u32,@location(0)vertexPosition:vec3<f32>,@location(1)vertexTexCoord:vec2<f32>)->Fragment{var output:Fragment;var sx:f32=sprites.models[i_id].scale.x;var sy:f32=sprites.models[i_id].scale.y;var sz:f32=1.0;var rot:f32=sprites.models[i_id].rotation;var tx:f32=sprites.models[i_id].translate.x;var ty:f32=sprites.models[i_id].translate.y;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,1.0);output.TexCoord=vertexTexCoord;output.Tint=sprites.models[i_id].tint;output.Opacity=sprites.models[i_id].opacity;return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32)->GBufferOutput{var output:GBufferOutput;var outColor:vec4<f32>=textureSample(myTexture,mySampler,TexCoord);output.color=vec4<f32>(outColor.rgb*(1.0-Tint.a)+(Tint.rgb*Tint.a),outColor.a*Opacity);let emissive=textureSample(emissiveTexture,mySampler,TexCoord);output.emissive=vec4(emissive.rgb,1.0)*emissive.a;return output;}";var bn=Yt.create(0,0,0),Sn={type:"cobalt:spritesheet",refs:[],onInit:async function(s,r={}){return oo(s,r)},onRun:function(s,r,m){},onDestroy:function(s,r){so(r)},onResize:function(s,r){Tn(s,r)},onViewportPosition:function(s,r){Tn(s,r)}};async function oo(s,r){let{canvas:m,device:v}=s,P,T,B;m?(P=await io(r.options.spriteSheetJsonUrl),P=ye(P),T=await qt(s,"sprite",r.options.colorTextureUrl,"rgba8unorm"),B=await qt(s,"emissive sprite",r.options.emissiveTextureUrl,"rgba8unorm"),m.style.imageRendering="pixelated"):(P=ye(r.options.spriteSheetJson),T=await oe(s,"sprite",r.options.colorTexture,"rgba8unorm"),B=await oe(s,"emissive sprite",r.options.emissiveTexture,"rgba8unorm"));let G=Te(v,P),_=v.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),U=v.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),z=v.createPipelineLayout({bindGroupLayouts:[U]});return{pipeline:v.createRenderPipeline({label:"sprite",vertex:{module:v.createShaderModule({code:Ee}),entryPoint:"vs_main",buffers:[G.bufferLayout]},fragment:{module:v.createShaderModule({code:Ee}),entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}},{format:"rgba16float"}]},primitive:{topology:"triangle-list"},layout:z}),uniformBuffer:_,quads:G,colorTexture:T,emissiveTexture:B,bindGroupLayout:U,spritesheet:P}}function so(s){s.data.quads.buffer.destroy(),s.data.colorTexture.buffer.destroy(),s.data.uniformBuffer.destroy(),s.data.emissiveTexture.texture.destroy()}async function io(s){return(await fetch(s)).json()}function Tn(s,r){let{device:m,viewport:v}=s,P=v.width/v.zoom,T=v.height/v.zoom,B=Nt.ortho(0,P,T,0,-10,10);Yt.set(-v.position[0],-v.position[1],0,bn);let G=Nt.translation(bn);m.queue.writeBuffer(r.data.uniformBuffer,0,G.buffer),m.queue.writeBuffer(r.data.uniformBuffer,64,B.buffer)}var Pn={type:"fbTexture",refs:[],onInit:async function(s,r={}){return co(s,r)},onRun:function(s,r,m){},onDestroy:function(s,r){Bn(data)},onResize:function(s,r){ao(s,r)},onViewportPosition:function(s,r){}};async function co(s,r){let{device:m}=s,{label:v,mip_count:P,format:T,usage:B,viewportScale:G}=r.options;return Rt(m,v,s.viewport.width*G,s.viewport.height*G,P,T,B)}function Bn(s){s.data.texture.destroy()}function ao(s,r){let{device:m}=s;Bn(r);let{width:v,height:P}=s.viewport,{options:T}=r,B=r.options.viewportScale;r.data=Rt(m,T.label,v*B,P*B,T.mip_count,T.format,T.usage)}async function cc(s,r,m){let v,P,T,B;return s.sdlWindow&&s.gpu?(P=s.gpu,v=await(await P.create(["verbose=1"]).requestAdapter()).requestDevice(),T=P.renderGPUDeviceToWindow({device:v,window:s.sdlWindow}),global.GPUBufferUsage=P.GPUBufferUsage,global.GPUShaderStage=P.GPUShaderStage,global.GPUTextureUsage=P.GPUTextureUsage):(B=s,v=await(await navigator.gpu?.requestAdapter({powerPreference:"high-performance"}))?.requestDevice(),P=navigator.gpu,T=B.getContext("webgpu"),T.configure({device:v,format:navigator.gpu?.getPreferredCanvasFormat(),alphaMode:"opaque"})),{nodeDefs:{"cobalt:tileAtlas":Dn,"cobalt:spritesheet":Sn,"cobalt:fbTexture":Pn,"cobalt:bloom":Re,"cobalt:composite":qe,"cobalt:sprite":$e,"cobalt:tile":He,"cobalt:displacement":nn,"cobalt:overlay":pn,"cobalt:fbBlit":hn,"cobalt:primitives":vn,"cobalt:light":yn},nodes:[],defaultTextureViewRefs:[],canvas:B,device:v,context:T,gpu:P,clearValue:{r:0,g:0,b:0,a:1},viewport:{width:r,height:m,zoom:1,position:[0,0]}}}function ac(s,r){if(!r?.type)throw new Error("Can't define a new node missing a type.");s.nodeDefs[r.type]=r}async function uc(s,r){let m=s.nodeDefs[r?.type];if(!m)throw new Error("Can't initialize a new node missing a type.");let v={type:r.type,refs:r.refs||{},options:r.options||{},data:{},enabled:!0};for(let T in v.refs)v.refs[T]==="FRAME_TEXTURE_VIEW"&&(s.defaultTextureViewRefs.push({node:v,refName:T}),v.refs[T]=_n(s));v.data=await m.onInit(s,v);let P=m.customFunctions||{};for(let T in P)v[T]=function(...B){return P[T](s,v,...B)};return s.nodes.push(v),v}function lc(s){let{device:r,context:m}=s,v=r.createCommandEncoder(),P=_n(s);for(let T of s.defaultTextureViewRefs)T.node.refs[T.refName]=P;for(let T of s.nodes){if(!T.enabled)continue;s.nodeDefs[T.type].onRun(s,T,v)}r.queue.submit([v.finish()]),s.canvas||s.context.swap()}function fc(s){for(let r of s.nodes)s.nodeDefs[r.type].onDestroy(s,r);s.nodes.length=0,s.defaultTextureViewRefs.length=0}function dc(s,r,m){s.viewport.width=r,s.viewport.height=m;for(let v of s.nodes)s.nodeDefs[v.type].onResize(s,v)}function pc(s,r){s.viewport.position[0]=r[0]-s.viewport.width/2/s.viewport.zoom,s.viewport.position[1]=r[1]-s.viewport.height/2/s.viewport.zoom;for(let m of s.nodes)s.nodeDefs[m.type].onViewportPosition(s,m)}function Ne(s){return s.canvas?navigator.gpu.getPreferredCanvasFormat():s.context.getPreferredFormat()}function _n(s){return s.canvas?s.context.getCurrentTexture().createView():s.context.getCurrentTextureView()}export{Rt as createTexture,oe as createTextureFromBuffer,qt as createTextureFromUrl,ac as defineNode,lc as draw,_n as getCurrentTextureView,Ne as getPreferredFormat,cc as init,uc as initNode,fc as reset,dc as setViewportDimensions,pc as setViewportPosition};
284
+ `});this.renderPipeline=t.device.createRenderPipeline({label:"LightsRenderer renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex"},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:this.targetTexture.format}]},primitive:{cullMode:"none",topology:"triangle-strip"}});let r=this.renderPipeline.getBindGroupLayout(0);this.bindgroup0=t.device.createBindGroup({label:"LightsRenderer bindgroup 0",layout:r,entries:[{binding:0,resource:{buffer:this.uniformsBufferGpu}},{binding:1,resource:{buffer:this.lightsBuffer.gpuBuffer}},{binding:2,resource:this.lightsTexture.texture.createView({label:"LightsRenderer lightsTexture view"})},{binding:3,resource:t.device.createSampler({label:"LightsRenderer sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:t.lightsTextureProperties.filtering,minFilter:t.lightsTextureProperties.filtering})}]}),this.bindgroup1=this.buildBindgroup1(t.albedo),this.renderBundle=this.buildRenderBundle()}computeLightsTexture(t){this.lightsTexture.update(t)}render(t,n){let r=new ArrayBuffer(80);new Float32Array(r,0,16).set(n),new Float32Array(r,64,3).set(this.ambientLight),this.device.queue.writeBuffer(this.uniformsBufferGpu,0,r),t.executeBundles([this.renderBundle])}setAlbedo(t){this.bindgroup1=this.buildBindgroup1(t),this.renderBundle=this.buildRenderBundle()}setAmbientLight(t){this.ambientLight=[...t]}setObstacles(t){this.lightsTexture.setObstacles(t)}destroy(){this.uniformsBufferGpu.destroy(),this.lightsTexture.destroy()}buildBindgroup1(t){return this.device.createBindGroup({label:"LightsRenderer bindgroup 1",layout:this.renderPipeline.getBindGroupLayout(1),entries:[{binding:0,resource:t.view},{binding:1,resource:t.sampler}]})}buildRenderBundle(){let t=this.device.createRenderBundleEncoder({label:"LightsRenderer renderbundle encoder",colorFormats:[this.targetTexture.format]});return t.setPipeline(this.renderPipeline),t.setBindGroup(0,this.bindgroup0),t.setBindGroup(1,this.bindgroup1),t.draw(4),t.finish({label:"LightsRenderer renderbundle"})}};var fn={type:"cobalt:light",refs:[{name:"in",type:"textureView",format:"rgba16float",access:"read"},{name:"out",type:"textureView",format:"rgba16float",access:"write"}],onInit:async function(e,t={}){return Xo(e,t)},onRun:function(e,t,n){Ho(e,t,n)},onDestroy:function(e,t){$o(t)},onResize:function(e,t){Wo(e,t)},onViewportPosition:function(e,t){t.data.viewport.setTopLeft(...e.viewport.position)},customFunctions:{...Ze}};async function Xo(e,t){let{device:n}=e,r=256,v=256,i=new Ct(n,r),a=new Me({viewportSize:{width:e.viewport.width,height:e.viewport.height},center:e.viewport.position,zoom:e.viewport.zoom}),u=new De({device:n,albedo:{view:t.refs.in.data.view,sampler:t.refs.in.data.sampler},targetTexture:t.refs.out.data.texture,lightsBuffer:i,lightsTextureProperties:{resolutionPerLight:v,maxLightSize:v,antialiased:!1,filtering:"nearest"}});return{lightsBuffer:i,lightsBufferNeedsUpdate:!0,lightsTextureNeedsUpdate:!0,lightsRenderer:u,viewport:a,lights:[]}}function Ho(e,t,n){t.data.lightsBufferNeedsUpdate&&(t.data.lightsBuffer.setLights(t.data.lights),t.data.lightsBufferNeedsUpdate=!1,t.data.lightsTextureNeedsUpdate=!0);let r=t.data.lightsRenderer;t.data.lightsTextureNeedsUpdate&&(r.computeLightsTexture(n),t.data.lightsTextureNeedsUpdate=!1);let v=n.beginRenderPass({colorAttachments:[{view:t.refs.out.data.view,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});t.data.viewport.setZoom(e.viewport.zoom);let i=t.data.viewport.invertViewProjectionMatrix;r.render(v,i),v.end()}function $o(e){e.data.lightsBuffer.destroy(),e.data.lightsRenderer.destroy()}function Wo(e,t){t.data.lightsRenderer.setAlbedo({view:t.refs.in.data.view,sampler:t.refs.in.data.sampler}),t.data.viewport.setViewportSize(e.viewport.width,e.viewport.height)}var ke="struct TransformData{viewOffset:vec2<f32>,viewportSize:vec2<f32>,inverseAtlasTextureSize:vec2<f32>,tileSize:f32,inverseTileSize:f32,};struct TileScroll{scrollScale:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@binding(0)@group(0)var<uniform> myScroll:TileScroll;@binding(1)@group(0)var tileTexture:texture_2d<f32>;@binding(2)@group(0)var tileSampler:sampler;@binding(0)@group(1)var<uniform> transformUBO:TransformData;@binding(1)@group(1)var atlasTexture:texture_2d<f32>;@binding(2)@group(1)var atlasSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@builtin(vertex_index)VertexIndex:u32)->Fragment{var vertexPosition=vec2<f32>(positions[VertexIndex]);var vertexTexCoord=vec2<f32>(uvs[VertexIndex]);var output:Fragment;let inverseTileTextureSize=1/vec2<f32>(textureDimensions(tileTexture,0));var scrollScale=myScroll.scrollScale;var viewOffset:vec2<f32>=transformUBO.viewOffset*scrollScale;let PixelCoord=(vertexTexCoord*transformUBO.viewportSize)+viewOffset;output.TexCoord=PixelCoord/transformUBO.tileSize;output.Position=vec4<f32>(vertexPosition,0.0,1.0);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var tilemapCoord=floor(TexCoord);var u_tilemapSize=vec2<f32>(textureDimensions(tileTexture,0));var tileFoo=fract((tilemapCoord+vec2<f32>(0.5,0.5))/u_tilemapSize);var tile=floor(textureSample(tileTexture,tileSampler,tileFoo)*255.0);if(tile.x==255&&tile.y==255){discard;}var u_tilesetSize=vec2<f32>(textureDimensions(atlasTexture,0))/transformUBO.tileSize;let u_tileUVMinBounds=vec2<f32>(0.5/transformUBO.tileSize,0.5/transformUBO.tileSize);let u_tileUVMaxBounds=vec2<f32>((transformUBO.tileSize-0.5)/transformUBO.tileSize,(transformUBO.tileSize-0.5)/transformUBO.tileSize);var texcoord=clamp(fract(TexCoord),u_tileUVMinBounds,u_tileUVMaxBounds);var tileCoord=(tile.xy+texcoord)/u_tilesetSize;var color=textureSample(atlasTexture,atlasSampler,tileCoord);if(color.a<=0.1){discard;}return color;}";var Xt=new Float32Array(8),vn={type:"cobalt:tileAtlas",refs:[],onInit:async function(e,t={}){return ko(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){Qo(data)},onResize:function(e,t){dn(e,t)},onViewportPosition:function(e,t){dn(e,t)}};async function ko(e,t){let{device:n}=e,r=await qt(e,"tile atlas",t.options.textureUrl),v=n.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),a=n.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:v}},{binding:1,resource:r.view},{binding:2,resource:r.sampler}]}),u=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),l=n.createPipelineLayout({bindGroupLayouts:[u,i]});return{pipeline:n.createRenderPipeline({label:"tile",vertex:{module:n.createShaderModule({code:ke}),entryPoint:"vs_main",buffers:[]},fragment:{module:n.createShaderModule({code:ke}),entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:l}),uniformBuffer:v,atlasBindGroup:a,atlasMaterial:r,tileBindGroupLayout:u,tileSize:t.options.tileSize,tileScale:t.options.tileScale}}function Qo(e){e.atlasMaterial.texture.destroy(),e.atlasMaterial.texture=void 0}function dn(e,t){Xt[0]=e.viewport.position[0],Xt[1]=e.viewport.position[1];let n=t.data,{tileScale:r,tileSize:v}=n,i=e.viewport.width/e.viewport.zoom,a=e.viewport.height/e.viewport.zoom;Xt[2]=i/r,Xt[3]=a/r,Xt[4]=1/n.atlasMaterial.texture.width,Xt[5]=1/n.atlasMaterial.texture.height,Xt[6]=v,Xt[7]=1/v,e.device.queue.writeBuffer(n.uniformBuffer,0,Xt,0,8)}function Be(e){let n=Object.keys(e.frames).length,r=new Float32Array(n*30),v=[],i={},a=0;for(let u in e.frames){let l=e.frames[u];v.push(u),i[u]=l.sourceSize;let h=-.5+l.spriteSourceSize.x/l.sourceSize.w,w=-.5+l.spriteSourceSize.y/l.sourceSize.h,B=-.5+(l.spriteSourceSize.x+l.spriteSourceSize.w)/l.sourceSize.w,F=-.5+(l.spriteSourceSize.y+l.spriteSourceSize.h)/l.sourceSize.h,R=[h,w,0],L=[h,F,0],G=[B,F,0],V=[B,w,0],W=0+l.frame.x/e.meta.size.w,N=0+l.frame.y/e.meta.size.h,O=0+(l.frame.x+l.frame.w)/e.meta.size.w,C=0+(l.frame.y+l.frame.h)/e.meta.size.h,q=[W,N],Y=[W,C],nt=[O,C],$=[O,N];r.set(R,a),r.set(q,a+3),r.set(L,a+5),r.set(Y,a+8),r.set(G,a+10),r.set(nt,a+13),r.set(R,a+15),r.set(q,a+18),r.set(G,a+20),r.set(nt,a+23),r.set(V,a+25),r.set($,a+28),a+=30}return{spriteMeta:i,locations:v,vertices:r}}var Qe="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};struct Sprite{translate:vec2<f32>,scale:vec2<f32>,tint:vec4<f32>,opacity:f32,rotation:f32,emissiveIntensity:f32,sortValue:f32,};struct SpritesBuffer{models:array<Sprite>,};@binding(0)@group(0)var<uniform> transformUBO:TransformData;@binding(1)@group(0)var myTexture:texture_2d<f32>;@binding(2)@group(0)var mySampler:sampler;@binding(3)@group(0)var<storage,read>sprites:SpritesBuffer;@binding(4)@group(0)var emissiveTexture:texture_2d<f32>;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32,};struct GBufferOutput{@location(0)color:vec4<f32>,@location(1)emissive:vec4<f32>,}@vertex fn vs_main(@builtin(instance_index)i_id:u32,@location(0)vertexPosition:vec3<f32>,@location(1)vertexTexCoord:vec2<f32>)->Fragment{var output:Fragment;var sx:f32=sprites.models[i_id].scale.x;var sy:f32=sprites.models[i_id].scale.y;var sz:f32=1.0;var rot:f32=sprites.models[i_id].rotation;var tx:f32=sprites.models[i_id].translate.x;var ty:f32=sprites.models[i_id].translate.y;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,1.0);output.TexCoord=vertexTexCoord;output.Tint=sprites.models[i_id].tint;output.Opacity=sprites.models[i_id].opacity;return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>,@location(1)Tint:vec4<f32>,@location(2)Opacity:f32)->GBufferOutput{var output:GBufferOutput;var outColor:vec4<f32>=textureSample(myTexture,mySampler,TexCoord);output.color=vec4<f32>(outColor.rgb*(1.0-Tint.a)+(Tint.rgb*Tint.a),outColor.a*Opacity);let emissive=textureSample(emissiveTexture,mySampler,TexCoord);output.emissive=vec4(emissive.rgb,1.0)*emissive.a;return output;}";var hn=Yt.create(0,0,0),xn={type:"cobalt:spritesheet",refs:[],onInit:async function(e,t={}){return jo(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){Jo(t)},onResize:function(e,t){gn(e,t)},onViewportPosition:function(e,t){gn(e,t)}};async function jo(e,t){let{canvas:n,device:r}=e,v,i,a;n?(v=await mo(t.options.spriteSheetJsonUrl),v=Be(v),i=await qt(e,"sprite",t.options.colorTextureUrl,"rgba8unorm"),a=await qt(e,"emissive sprite",t.options.emissiveTextureUrl,"rgba8unorm"),n.style.imageRendering="pixelated"):(v=Be(t.options.spriteSheetJson),i=await jt(e,"sprite",t.options.colorTexture,"rgba8unorm"),a=await jt(e,"emissive sprite",t.options.emissiveTexture,"rgba8unorm"));let u=Le(r,v),l=r.createBuffer({size:64*2,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),h=r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{}}]}),w=r.createPipelineLayout({bindGroupLayouts:[h]});return{pipeline:r.createRenderPipeline({label:"sprite",vertex:{module:r.createShaderModule({code:Qe}),entryPoint:"vs_main",buffers:[u.bufferLayout]},fragment:{module:r.createShaderModule({code:Qe}),entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}},{format:"rgba16float"}]},primitive:{topology:"triangle-list"},layout:w}),uniformBuffer:l,quads:u,colorTexture:i,emissiveTexture:a,bindGroupLayout:h,spritesheet:v}}function Jo(e){e.data.quads.buffer.destroy(),e.data.colorTexture.buffer.destroy(),e.data.uniformBuffer.destroy(),e.data.emissiveTexture.texture.destroy()}async function mo(e){return(await fetch(e)).json()}function gn(e,t){let{device:n,viewport:r}=e,v=r.width/r.zoom,i=r.height/r.zoom,a=ht.ortho(0,v,i,0,-10,10);Yt.set(-r.position[0],-r.position[1],0,hn);let u=ht.translation(hn);n.queue.writeBuffer(t.data.uniformBuffer,0,u.buffer),n.queue.writeBuffer(t.data.uniformBuffer,64,a.buffer)}var wn={type:"fbTexture",refs:[],onInit:async function(e,t={}){return ta(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){yn(data)},onResize:function(e,t){ea(e,t)},onViewportPosition:function(e,t){}};async function ta(e,t){let{device:n}=e,{label:r,mip_count:v,format:i,usage:a,viewportScale:u}=t.options;return Ft(n,r,e.viewport.width*u,e.viewport.height*u,v,i,a)}function yn(e){e.data.texture.destroy()}function ea(e,t){let{device:n}=e;yn(t);let{width:r,height:v}=e.viewport,{options:i}=t,a=t.options.viewportScale;t.data=Ft(n,i.label,r*a,v*a,i.mip_count,i.format,i.usage)}async function Ou(e,t,n){let r,v,i,a;return e.sdlWindow&&e.gpu?(v=e.gpu,r=await(await v.create(["verbose=1"]).requestAdapter()).requestDevice(),i=v.renderGPUDeviceToWindow({device:r,window:e.sdlWindow}),global.GPUBufferUsage=v.GPUBufferUsage,global.GPUShaderStage=v.GPUShaderStage,global.GPUTextureUsage=v.GPUTextureUsage):(a=e,r=await(await navigator.gpu?.requestAdapter({powerPreference:"high-performance"}))?.requestDevice(),v=navigator.gpu,i=a.getContext("webgpu"),i.configure({device:r,format:navigator.gpu?.getPreferredCanvasFormat(),alphaMode:"opaque"})),{nodeDefs:{"cobalt:tileAtlas":vn,"cobalt:spritesheet":xn,"cobalt:fbTexture":wn,"cobalt:bloom":ir,"cobalt:composite":sr,"cobalt:sprite":lr,"cobalt:tile":fr,"cobalt:displacement":Pr,"cobalt:overlay":Br,"cobalt:fbBlit":Ur,"cobalt:primitives":pn,"cobalt:light":fn},nodes:[],defaultTextureViewRefs:[],canvas:a,device:r,context:i,gpu:v,clearValue:{r:0,g:0,b:0,a:1},viewport:{width:t,height:n,zoom:1,position:[0,0]}}}function Cu(e,t){if(!t?.type)throw new Error("Can't define a new node missing a type.");e.nodeDefs[t.type]=t}async function Nu(e,t){let n=e.nodeDefs[t?.type];if(!n)throw new Error("Can't initialize a new node missing a type.");let r={type:t.type,refs:t.refs||{},options:t.options||{},data:{},enabled:!0};for(let i in r.refs)r.refs[i]==="FRAME_TEXTURE_VIEW"&&(e.defaultTextureViewRefs.push({node:r,refName:i}),r.refs[i]=bn(e));r.data=await n.onInit(e,r);let v=n.customFunctions||{};for(let i in v)r[i]=function(...a){return v[i](e,r,...a)};return e.nodes.push(r),r}function qu(e){let{device:t,context:n}=e,r=t.createCommandEncoder(),v=bn(e);for(let i of e.defaultTextureViewRefs)i.node.refs[i.refName]=v;for(let i of e.nodes){if(!i.enabled)continue;e.nodeDefs[i.type].onRun(e,i,r)}t.queue.submit([r.finish()]),e.canvas||e.context.swap()}function Yu(e){for(let t of e.nodes)e.nodeDefs[t.type].onDestroy(e,t);e.nodes.length=0,e.defaultTextureViewRefs.length=0}function Xu(e,t,n){e.viewport.width=t,e.viewport.height=n;for(let r of e.nodes)e.nodeDefs[r.type].onResize(e,r)}function Hu(e,t){e.viewport.position[0]=t[0]-e.viewport.width/2/e.viewport.zoom,e.viewport.position[1]=t[1]-e.viewport.height/2/e.viewport.zoom;for(let n of e.nodes)e.nodeDefs[n.type].onViewportPosition(e,n)}function ur(e){return e.canvas?navigator.gpu.getPreferredCanvasFormat():e.context.getPreferredFormat()}function bn(e){return e.canvas?e.context.getCurrentTexture().createView():e.context.getCurrentTextureView()}export{Ft as createTexture,jt as createTextureFromBuffer,qt as createTextureFromUrl,Cu as defineNode,qu as draw,bn as getCurrentTextureView,ur as getPreferredFormat,Ou as init,Nu as initNode,Yu as reset,Xu as setViewportDimensions,Hu as setViewportPosition};