geometryview 0.1.1 → 0.1.2
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/package.json +1 -1
- package/src/mcp.mjs +1 -1
- package/src/page.mjs +6 -1
- package/web/build/geometryview-web.mjs +1 -1
- package/web/build/geometryview-web.wasm +0 -0
- package/web/chrome.js +7 -3
- package/web/engine.js +5 -0
- package/web/structure.js +2 -1
- package/web/viewer.css +4 -0
- package/web/viewer.js +26 -3
package/package.json
CHANGED
package/src/mcp.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { createInterface } from "node:readline";
|
|
6
6
|
|
|
7
|
-
const SERVER = { name: "geometryview", version: "0.1.
|
|
7
|
+
const SERVER = { name: "geometryview", version: "0.1.2" };
|
|
8
8
|
const LATEST_PROTOCOL = "2025-06-18";
|
|
9
9
|
|
|
10
10
|
/// Serves `tools` until standard input closes. Each tool is { name, description, inputSchema,
|
package/src/page.mjs
CHANGED
|
@@ -94,7 +94,12 @@ export async function openInPage(path, { launch = true, waitMs = 30_000 } = {})
|
|
|
94
94
|
const { source, info } = await modelFile(path);
|
|
95
95
|
const server = await page({ launch });
|
|
96
96
|
if (shownFor === source && server.bridge.connected) {
|
|
97
|
-
|
|
97
|
+
try {
|
|
98
|
+
return await server.bridge.request("describe", {}, { waitMs });
|
|
99
|
+
} catch (error) {
|
|
100
|
+
// The person closed it in the viewer since: it opens again below.
|
|
101
|
+
if (!/Nothing is open/.test(error.message)) throw error;
|
|
102
|
+
}
|
|
98
103
|
}
|
|
99
104
|
const description = await server.bridge.request("open", {
|
|
100
105
|
url: server.grant(source), name: basename(source), lastModified: info.mtimeMs,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
async function createGeometryView(moduleArg={}){var Module=moduleArg;var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"])return Module["locateFile"](path,scriptDirectory);return scriptDirectory+path}var readAsync;if(true){try{scriptDirectory=new URL(".",_scriptName).href}catch{}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok)return response.arrayBuffer();throw new Error(response.status+" : "+response.url)}}var out=console.log.bind(console);var err=console.error.bind(console);var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition)abort(text)}function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun==="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){0;wasmExports["Da"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun==="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";throw new WebAssembly.RuntimeError(what)}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"])return locateFile("geometryview-web.wasm");return new URL("geometryview-web.wasm",import.meta.url).href}function getBinarySync(file){if(void 0)return(void 0)(file);throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(true)try{return await readAsync(binaryFile)}catch{}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary)try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0)callbacks.shift()(Module)};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func)wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr);return func};var runtimeKeepaliveCounter=0;var handleException=e=>{if(e instanceof ExitStatus||e=="unwind")return EXITSTATUS;quit_(0,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(0,new ExitStatus(code))};var maybeExit=()=>{if(!keepRuntimeAlive())try{_exit(EXITSTATUS)}catch(e){handleException(e)}};var callUserCallback=(func,...args)=>{if(ABORT)return;try{return func(...args)}catch(e){handleException(e)}finally{maybeExit()}};var timers={};var _emscripten_get_now=()=>performance.now();var HEAP32;var HEAPU32;var HEAPU8;var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63;i++}}heap[outIdx>>>0]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func)return 1;if(mode==0)MainLoop.scheduler=function(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)};else if(mode==1)MainLoop.scheduler=function(){MainLoop.requestAnimationFrame(MainLoop.runner)};else{if(!MainLoop.setImmediate)if(globalThis.scheduler)MainLoop.setImmediate=scheduler.postTask.bind(scheduler);else{var setImmediates=[];addEventListener("message",event=>{if(event.data==="setimmediate"){event.stopPropagation();setImmediates.shift()()}},true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(false)postMessage("setimmediate");else postMessage("setimmediate","*")}}MainLoop.scheduler=function(){MainLoop.setImmediate(MainLoop.runner)}}return 0};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId<MainLoop.currentlyRunningMainloop){maybeExit();return false}return true}MainLoop.runner=function(){if(ABORT)return;if(MainLoop.queue.length>0){Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted)MainLoop.remainingBlockers=next;else{next+=.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0)MainLoop.tickStartTime=_emscripten_get_now();MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);MainLoop.scheduler()}if(simulateInfiniteLoop)throw"unwind"};var MainLoop={func:null,scheduler:null,currentlyRunningMainloop:0,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){if(MainLoop.scheduler){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++}},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining)if(remaining<expected)Module["setStatus"](`${message} (${expected-remaining}/${expected})`);else Module["setStatus"](message);else Module["setStatus"]("")}},init(){},runIter(func){if(ABORT)return;for(var pre of MainLoop.preMainLoop)if(pre()===false)return;callUserCallback(func);for(var post of MainLoop.postMainLoop)post()},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(!MainLoop.nextRAF)MainLoop.nextRAF=now+1e3/60;else while(now+2>=MainLoop.nextRAF)MainLoop.nextRAF+=1e3/60;var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame)requestAnimationFrame(func);else MainLoop.fakeRequestAnimationFrame(func)}};var safeRequestAnimationFrame=func=>MainLoop.requestAnimationFrame(()=>{callUserCallback(func)});var safeSetTimeout=(func,timeout)=>{var id=safeSetTimeout.nextId++;safeSetTimeout.pending.set(id,setTimeout(()=>{safeSetTimeout.pending.delete(id);callUserCallback(func)},timeout));return id};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var getHeapMax=()=>4294901760;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPF32;var HEAPF64;var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{idx>>>=0;var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder)return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr));var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224)u0=(u0&15)<<12|u1<<6|u2;else u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63;if(u0<65536)str+=String.fromCharCode(u0);else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127)len++;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else{len+=4;i++}}return len};var readI53FromI64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAP32[ptr+4>>>2>>>0]*4294967296;var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>>2>>>0]=num;var lower=HEAPU32[ptr>>>2>>>0];HEAPU32[ptr+4>>>2>>>0]=(num-lower)/4294967296};var WebGPU={Internals:{jsObjects:[],jsObjectInsert:(ptr,jsObject)=>{ptr>>>=0;WebGPU.Internals.jsObjects[ptr]=jsObject},bufferOnUnmaps:[],futures:[],futureInsert:()=>{}},getJsObject:ptr=>{if(!ptr)return;ptr>>>=0;return WebGPU.Internals.jsObjects[ptr]},importJsAdapter:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateAdapter(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroup:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroup(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroupLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroupLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBuffer:(buffer,parentPtr=0)=>{assert(buffer.mapState==="unmapped");var bufferPtr=_emwgpuImportBuffer(parentPtr);WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);return bufferPtr},importJsCommandBuffer:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandBuffer(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsCommandEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsDevice:(device,parentPtr=0)=>{var queuePtr=_emwgpuCreateQueue(parentPtr);var devicePtr=_emwgpuCreateDevice(parentPtr,queuePtr);WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);return devicePtr},importJsExternalTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateExternalTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsPipelineLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreatePipelineLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQuerySet:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQuerySet(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQueue:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQueue(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundle:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundle(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundleEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundleEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSampler:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSampler(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsShaderModule:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateShaderModule(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSurface:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSurface(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTextureView:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTextureView(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},errorCallback:(callback,type,message,userdata)=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(message);getWasmTableEntry(callback)(type,messagePtr,userdata);stackRestore(sp)},iterateExtensions:(root,handlers)=>{for(var ptr=HEAPU32[root>>>2>>>0];ptr;ptr=HEAPU32[ptr>>>2>>>0]){var sType=HEAP32[ptr+4>>>2>>>0];handlers[sType](ptr)}},setStringView:(ptr,data,length)=>{HEAPU32[ptr>>>2>>>0]=data;HEAPU32[ptr+4>>>2>>>0]=length},makeStringFromStringView:stringViewPtr=>{var ptr=HEAPU32[stringViewPtr>>>2>>>0];var length=HEAPU32[stringViewPtr+4>>>2>>>0];return UTF8ToString(ptr,length)},makeStringFromOptionalStringView:stringViewPtr=>{var ptr=HEAPU32[stringViewPtr>>>2>>>0];var length=HEAPU32[stringViewPtr+4>>>2>>>0];if(!ptr){if(length===0)return"";return}return UTF8ToString(ptr,length)},makeColor:ptr=>({r:HEAPF64[ptr>>>3>>>0],g:HEAPF64[ptr+8>>>3>>>0],b:HEAPF64[ptr+16>>>3>>>0],a:HEAPF64[ptr+24>>>3>>>0]}),makeExtent3D:ptr=>({width:HEAPU32[ptr>>>2>>>0],height:HEAPU32[ptr+4>>>2>>>0],depthOrArrayLayers:HEAPU32[ptr+8>>>2>>>0]}),makeOrigin3D:ptr=>({x:HEAPU32[ptr>>>2>>>0],y:HEAPU32[ptr+4>>>2>>>0],z:HEAPU32[ptr+8>>>2>>>0]}),makeTexelCopyTextureInfo:ptr=>({texture:WebGPU.getJsObject(HEAPU32[ptr>>>2>>>0]),mipLevel:HEAPU32[ptr+4>>>2>>>0],origin:WebGPU.makeOrigin3D(ptr+8),aspect:WebGPU.TextureAspect[HEAP32[ptr+20>>>2>>>0]]}),makeTexelCopyBufferLayout:ptr=>{var bytesPerRow=HEAPU32[ptr+8>>>2>>>0];var rowsPerImage=HEAPU32[ptr+12>>>2>>>0];return{offset:readI53FromI64(ptr),bytesPerRow:bytesPerRow===4294967295?void 0:bytesPerRow,rowsPerImage:rowsPerImage===4294967295?void 0:rowsPerImage}},makeTexelCopyBufferInfo:ptr=>{var layoutPtr=ptr+0;var bufferCopyView=WebGPU.makeTexelCopyBufferLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.getJsObject(HEAPU32[ptr+16>>>2>>>0]);return bufferCopyView},makePassTimestampWrites:ptr=>{if(ptr===0)return;return{querySet:WebGPU.getJsObject(HEAPU32[ptr+4>>>2>>>0]),beginningOfPassWriteIndex:HEAPU32[ptr+8>>>2>>>0],endOfPassWriteIndex:HEAPU32[ptr+12>>>2>>>0]}},makePipelineConstants:(constantCount,constantsPtr)=>{if(!constantCount)return;var constants={};for(var i=0;i<constantCount;++i){var entryPtr=constantsPtr+24*i;var key=WebGPU.makeStringFromStringView(entryPtr+4);constants[key]=HEAPF64[entryPtr+16>>>3>>>0]}return constants},makePipelineLayout:layoutPtr=>{if(!layoutPtr)return"auto";return WebGPU.getJsObject(layoutPtr)},makeComputeState:ptr=>{if(!ptr)return;var desc={module:WebGPU.getJsObject(HEAPU32[ptr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[ptr+16>>>2>>>0],HEAPU32[ptr+20>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(ptr+8)};return desc},makeComputePipelineDesc:descriptor=>{var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.makePipelineLayout(HEAPU32[descriptor+12>>>2>>>0]),compute:WebGPU.makeComputeState(descriptor+16)};return desc},makeRenderPipelineDesc:descriptor=>{function makeBlendComponent(bdPtr){if(!bdPtr)return;return{operation:WebGPU.BlendOperation[HEAP32[bdPtr>>>2>>>0]],srcFactor:WebGPU.BlendFactor[HEAP32[bdPtr+4>>>2>>>0]],dstFactor:WebGPU.BlendFactor[HEAP32[bdPtr+8>>>2>>>0]]}}function makeBlendState(bsPtr){if(!bsPtr)return;return{alpha:makeBlendComponent(bsPtr+12),color:makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var format=WebGPU.TextureFormat[HEAP32[csPtr+4>>>2>>>0]];return format?{format,blend:makeBlendState(HEAPU32[csPtr+8>>>2>>>0]),writeMask:HEAPU32[csPtr+16>>>2>>>0]}:void 0}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i<count;++i)states.push(makeColorState(csArrayPtr+24*i));return states}function makeStencilStateFace(ssfPtr){return{compare:WebGPU.CompareFunction[HEAP32[ssfPtr>>>2>>>0]],failOp:WebGPU.StencilOperation[HEAP32[ssfPtr+4>>>2>>>0]],depthFailOp:WebGPU.StencilOperation[HEAP32[ssfPtr+8>>>2>>>0]],passOp:WebGPU.StencilOperation[HEAP32[ssfPtr+12>>>2>>>0]]}}function makeVertexAttribute(vaPtr){return{format:WebGPU.VertexFormat[HEAP32[vaPtr+4>>>2>>>0]],offset:readI53FromI64(vaPtr+8),shaderLocation:HEAPU32[vaPtr+16>>>2>>>0]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i<count;++i)vas.push(makeVertexAttribute(vaArrayPtr+i*24));return vas}function makeVertexBuffer(vbPtr){if(!vbPtr)return;var stepMode=WebGPU.VertexStepMode[HEAP32[vbPtr+4>>>2>>>0]];var attributeCount=HEAPU32[vbPtr+16>>>2>>>0];if(!stepMode&&!attributeCount)return null;return{arrayStride:readI53FromI64(vbPtr+8),stepMode,attributes:makeVertexAttributes(attributeCount,HEAPU32[vbPtr+20>>>2>>>0])}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return;var vbs=[];for(var i=0;i<count;++i)vbs.push(makeVertexBuffer(vbArrayPtr+i*24));return vbs}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.makePipelineLayout(HEAPU32[descriptor+12>>>2>>>0]),vertex:function(viPtr){if(!viPtr)return;var desc={module:WebGPU.getJsObject(HEAPU32[viPtr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[viPtr+16>>>2>>>0],HEAPU32[viPtr+20>>>2>>>0]),buffers:makeVertexBuffers(HEAPU32[viPtr+24>>>2>>>0],HEAPU32[viPtr+28>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(viPtr+8)};return desc}(descriptor+16),primitive:function(psPtr){if(!psPtr)return;return{topology:WebGPU.PrimitiveTopology[HEAP32[psPtr+4>>>2>>>0]],stripIndexFormat:WebGPU.IndexFormat[HEAP32[psPtr+8>>>2>>>0]],frontFace:WebGPU.FrontFace[HEAP32[psPtr+12>>>2>>>0]],cullMode:WebGPU.CullMode[HEAP32[psPtr+16>>>2>>>0]],unclippedDepth:!!HEAPU32[psPtr+20>>>2>>>0]}}(descriptor+48),depthStencil:function(dssPtr){if(!dssPtr)return;return{format:WebGPU.TextureFormat[HEAP32[dssPtr+4>>>2>>>0]],depthWriteEnabled:!!HEAPU32[dssPtr+8>>>2>>>0],depthCompare:WebGPU.CompareFunction[HEAP32[dssPtr+12>>>2>>>0]],stencilFront:makeStencilStateFace(dssPtr+16),stencilBack:makeStencilStateFace(dssPtr+32),stencilReadMask:HEAPU32[dssPtr+48>>>2>>>0],stencilWriteMask:HEAPU32[dssPtr+52>>>2>>>0],depthBias:HEAP32[dssPtr+56>>>2>>>0],depthBiasSlopeScale:HEAPF32[dssPtr+60>>>2>>>0],depthBiasClamp:HEAPF32[dssPtr+64>>>2>>>0]}}(HEAPU32[descriptor+72>>>2>>>0]),multisample:function(msPtr){if(!msPtr)return;return{count:HEAPU32[msPtr+4>>>2>>>0],mask:HEAPU32[msPtr+8>>>2>>>0],alphaToCoverageEnabled:!!HEAPU32[msPtr+12>>>2>>>0]}}(descriptor+76),fragment:function(fsPtr){if(!fsPtr)return;var desc={module:WebGPU.getJsObject(HEAPU32[fsPtr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[fsPtr+16>>>2>>>0],HEAPU32[fsPtr+20>>>2>>>0]),targets:makeColorStates(HEAPU32[fsPtr+24>>>2>>>0],HEAPU32[fsPtr+28>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(fsPtr+8)};return desc}(HEAPU32[descriptor+92>>>2>>>0])};return desc},fillLimitStruct:(limits,limitsOutPtr)=>{var nextInChainPtr=HEAPU32[limitsOutPtr>>>2>>>0];function setLimitValueU32(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;HEAPU32[basePtr+limitOffset>>>2>>>0]=limitValue}function setLimitValueU64(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;writeI53ToI64(basePtr+limitOffset,limitValue)}setLimitValueU32("maxTextureDimension1D",limitsOutPtr,4);setLimitValueU32("maxTextureDimension2D",limitsOutPtr,8);setLimitValueU32("maxTextureDimension3D",limitsOutPtr,12);setLimitValueU32("maxTextureArrayLayers",limitsOutPtr,16);setLimitValueU32("maxBindGroups",limitsOutPtr,20);setLimitValueU32("maxBindGroupsPlusVertexBuffers",limitsOutPtr,24);setLimitValueU32("maxBindingsPerBindGroup",limitsOutPtr,28);setLimitValueU32("maxDynamicUniformBuffersPerPipelineLayout",limitsOutPtr,32);setLimitValueU32("maxDynamicStorageBuffersPerPipelineLayout",limitsOutPtr,36);setLimitValueU32("maxSampledTexturesPerShaderStage",limitsOutPtr,40);setLimitValueU32("maxSamplersPerShaderStage",limitsOutPtr,44);setLimitValueU32("maxStorageBuffersPerShaderStage",limitsOutPtr,48);setLimitValueU32("maxStorageTexturesPerShaderStage",limitsOutPtr,52);setLimitValueU32("maxUniformBuffersPerShaderStage",limitsOutPtr,56);setLimitValueU32("minUniformBufferOffsetAlignment",limitsOutPtr,80);setLimitValueU32("minStorageBufferOffsetAlignment",limitsOutPtr,84);setLimitValueU64("maxUniformBufferBindingSize",limitsOutPtr,64);setLimitValueU64("maxStorageBufferBindingSize",limitsOutPtr,72);setLimitValueU32("maxVertexBuffers",limitsOutPtr,88);setLimitValueU64("maxBufferSize",limitsOutPtr,96);setLimitValueU32("maxVertexAttributes",limitsOutPtr,104);setLimitValueU32("maxVertexBufferArrayStride",limitsOutPtr,108);setLimitValueU32("maxInterStageShaderVariables",limitsOutPtr,112);setLimitValueU32("maxColorAttachments",limitsOutPtr,116);setLimitValueU32("maxColorAttachmentBytesPerSample",limitsOutPtr,120);setLimitValueU32("maxComputeWorkgroupStorageSize",limitsOutPtr,124);setLimitValueU32("maxComputeInvocationsPerWorkgroup",limitsOutPtr,128);setLimitValueU32("maxComputeWorkgroupSizeX",limitsOutPtr,132);setLimitValueU32("maxComputeWorkgroupSizeY",limitsOutPtr,136);setLimitValueU32("maxComputeWorkgroupSizeZ",limitsOutPtr,140);setLimitValueU32("maxComputeWorkgroupsPerDimension",limitsOutPtr,144);setLimitValueU32("maxImmediateSize",limitsOutPtr,148);if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var compatibilityModeLimitsPtr=nextInChainPtr;setLimitValueU32("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,8,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,16,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,12,limits.maxStorageTexturesPerShaderStage);setLimitValueU32("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,20,limits.maxStorageTexturesPerShaderStage)}},fillAdapterInfoStruct:(info,infoStruct)=>{HEAPU32[infoStruct+52>>>2>>>0]=info.subgroupMinSize;HEAPU32[infoStruct+56>>>2>>>0]=info.subgroupMaxSize;var strs=info.vendor+info.architecture+info.device+info.description;var strPtr=stringToNewUTF8(strs);var vendorLen=lengthBytesUTF8(info.vendor);WebGPU.setStringView(infoStruct+4,strPtr,vendorLen);strPtr+=vendorLen;var architectureLen=lengthBytesUTF8(info.architecture);WebGPU.setStringView(infoStruct+12,strPtr,architectureLen);strPtr+=architectureLen;var deviceLen=lengthBytesUTF8(info.device);WebGPU.setStringView(infoStruct+20,strPtr,deviceLen);strPtr+=deviceLen;var descriptionLen=lengthBytesUTF8(info.description);WebGPU.setStringView(infoStruct+28,strPtr,descriptionLen);strPtr+=descriptionLen;HEAP32[infoStruct+36>>>2>>>0]=2;var adapterType=info.isFallbackAdapter?3:4;HEAP32[infoStruct+40>>>2>>>0]=adapterType;HEAPU32[infoStruct+44>>>2>>>0]=0;HEAPU32[infoStruct+48>>>2>>>0]=0},AddressMode:[,"clamp-to-edge","repeat","mirror-repeat"],BlendFactor:[,"zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant","src1","one-minus-src1","src1-alpha","one-minus-src1-alpha"],BlendOperation:[,"add","subtract","reverse-subtract","min","max"],BufferBindingType:[,,"uniform","storage","read-only-storage"],BufferMapState:[,"unmapped","pending","mapped"],CompareFunction:[,"never","less","equal","less-equal","greater","not-equal","greater-equal","always"],CompilationInfoRequestStatus:[,"success","callback-cancelled"],ComponentSwizzle:[,"0","1","r","g","b","a"],CompositeAlphaMode:[,"opaque","premultiplied","unpremultiplied","inherit"],CullMode:[,"none","front","back"],ErrorFilter:[,"validation","out-of-memory","internal"],FeatureLevel:[,"compatibility","core"],FeatureName:{1:"core-features-and-limits",2:"depth-clip-control",3:"depth32float-stencil8",4:"texture-compression-bc",5:"texture-compression-bc-sliced-3d",6:"texture-compression-etc2",7:"texture-compression-astc",8:"texture-compression-astc-sliced-3d",9:"timestamp-query",10:"indirect-first-instance",11:"shader-f16",12:"rg11b10ufloat-renderable",13:"bgra8unorm-storage",14:"float32-filterable",15:"float32-blendable",16:"clip-distances",17:"dual-source-blending",18:"subgroups",19:"texture-formats-tier1",20:"texture-formats-tier2",21:"primitive-index",22:"texture-component-swizzle",327692:"chromium-experimental-unorm16-texture-formats",327729:"chromium-experimental-multi-draw-indirect"},FilterMode:[,"nearest","linear"],FrontFace:[,"ccw","cw"],IndexFormat:[,"uint16","uint32"],InstanceFeatureName:[,"timed-wait-any","shader-source-spirv","multiple-devices-per-adapter"],LoadOp:[,"load","clear"],MipmapFilterMode:[,"nearest","linear"],OptionalBool:["false","true"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb","display-p3"],PrimitiveTopology:[,"point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:[,"occlusion","timestamp"],SamplerBindingType:[,,"filtering","non-filtering","comparison"],Status:[,"success","error"],StencilOperation:[,"keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,,"write-only","read-only","read-write"],StoreOp:[,"store","discard"],SurfaceGetCurrentTextureStatus:[,"success-optimal","success-suboptimal","timeout","outdated","lost","error"],TextureAspect:[,"all","stencil-only","depth-only"],TextureDimension:[,"1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16unorm","r16snorm","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16unorm","rg16snorm","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2uint","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16unorm","rgba16snorm","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],ToneMappingMode:[,"standard","extended"],VertexFormat:[,"uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"],VertexStepMode:[,"vertex","instance"],WGSLLanguageFeatureName:[,"readonly_and_readwrite_storage_textures","packed_4x8_integer_dot_product","unrestricted_pointer_parameters","pointer_composite_access","uniform_buffer_standard_layout","subgroup_id","texture_and_sampler_let","subgroup_uniformity","texture_formats_tier1","linear_indexing"]};var bigintToI53Checked=num=>num<-9007199254740992||num>9007199254740992?NaN:Number(num);var emwgpuStringToInt_DeviceLostReason={undefined:1,unknown:1,destroyed:2};var emwgpuStringToInt_PreferredFormat={rgba8unorm:22,bgra8unorm:27};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV)if(ENV[x]===void 0)delete env[x];else env[x]=ENV[x];var strings=[];for(var x in env)strings.push(`${x}=${env[x]}`);getEnvStrings.strings=strings}return getEnvStrings.strings};var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else buffer.push(curr)};var HEAPU16;var maybeCStringToJsString=cString=>cString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,document,window];var _exit=status=>{EXITSTATUS=status;_proc_exit(status)};var _emscripten_clear_timeout=id=>{var handle=safeSetTimeout.pending.get(id);if(!handle)return;safeSetTimeout.pending.delete(id);clearTimeout(handle)};var findCanvasEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement};Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();safeSetTimeout.pending=new Map;safeSetTimeout.nextId=1;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit==="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0)preInit.shift()()}Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;var _free,_emwgpuCreateBindGroup,_emwgpuCreateBindGroupLayout,_emwgpuCreateCommandBuffer,_emwgpuCreateCommandEncoder,_emwgpuCreateComputePassEncoder,_emwgpuCreateComputePipeline,_emwgpuCreateExternalTexture,_emwgpuCreatePipelineLayout,_emwgpuCreateQuerySet,_emwgpuCreateRenderBundle,_emwgpuCreateRenderBundleEncoder,_emwgpuCreateRenderPassEncoder,_emwgpuCreateRenderPipeline,_emwgpuCreateSampler,_emwgpuCreateSurface,_emwgpuCreateTexture,_emwgpuCreateTextureView,_emwgpuCreateAdapter,_emwgpuImportBuffer,_emwgpuCreateDevice,_emwgpuCreateQueue,_emwgpuCreateShaderModule,_emwgpuOnDeviceLostCompleted,_emwgpuOnMapAsyncCompleted,_emwgpuOnPopErrorScopeCompleted,_emwgpuOnRequestAdapterCompleted,_emwgpuOnRequestDeviceCompleted,_emwgpuOnUncapturedError,__emscripten_timeout,_malloc,_memalign,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,wasmMemory,wasmTable;function assignWasmExports(wasmExports){Module["_geo_web_start"]=wasmExports["Ea"];Module["_geo_web_resize"]=wasmExports["Fa"];Module["_geo_web_set_insets"]=wasmExports["Ga"];Module["_geo_web_set_overlay_shown"]=wasmExports["Ha"];Module["_geo_web_pointer"]=wasmExports["Ia"];Module["_geo_web_perform"]=wasmExports["Ja"];Module["_geo_web_set_selection_mode"]=wasmExports["Ka"];Module["_geo_web_set_tool"]=wasmExports["La"];Module["_geo_web_cache_version"]=wasmExports["Ma"];Module["_geo_web_default_look"]=wasmExports["Na"];Module["_geo_web_set_look"]=wasmExports["Oa"];Module["_geo_web_set_section"]=wasmExports["Pa"];Module["_geo_web_select_node"]=wasmExports["Qa"];Module["_geo_web_hover_node"]=wasmExports["Ra"];Module["_geo_web_node_action"]=wasmExports["Sa"];Module["_geo_web_open"]=wasmExports["Ta"];Module["_geo_web_staging"]=wasmExports["Ua"];Module["_geo_web_stream_size"]=wasmExports["Va"];Module["_geo_web_stream_chunk"]=wasmExports["Wa"];Module["_geo_web_import_segment"]=wasmExports["Xa"];Module["_geo_web_import_end"]=wasmExports["Ya"];Module["_geo_web_refine_segment"]=wasmExports["Za"];Module["_geo_web_refine_end"]=wasmExports["_a"];Module["_geo_web_stream_end"]=wasmExports["$a"];Module["_geo_web_snapshot"]=wasmExports["ab"];Module["_geo_web_set_atlas"]=wasmExports["bb"];Module["_geo_web_last_error"]=wasmExports["cb"];Module["_geo_web_request_frame"]=wasmExports["db"];Module["_geo_web_set_view"]=wasmExports["eb"];Module["_geo_web_scene_info"]=wasmExports["fb"];Module["_geo_web_model_node_count"]=wasmExports["gb"];Module["_geo_web_model_nodes"]=wasmExports["hb"];Module["_geo_web_model_strings"]=wasmExports["ib"];Module["_geo_web_model_strings_size"]=wasmExports["jb"];Module["_geo_web_node_states"]=wasmExports["kb"];Module["_geo_web_node_state_count"]=wasmExports["lb"];Module["_geo_web_swatches"]=wasmExports["mb"];Module["_geo_web_swatch_count"]=wasmExports["nb"];Module["_geo_web_swatch_bases"]=wasmExports["ob"];Module["_geo_web_swatch_base_count"]=wasmExports["pb"];Module["_geo_web_summary"]=wasmExports["qb"];Module["_geo_web_stats"]=wasmExports["rb"];_free=Module["_free"]=wasmExports["sb"];_emwgpuCreateBindGroup=wasmExports["tb"];_emwgpuCreateBindGroupLayout=wasmExports["ub"];_emwgpuCreateCommandBuffer=wasmExports["vb"];_emwgpuCreateCommandEncoder=wasmExports["wb"];_emwgpuCreateComputePassEncoder=wasmExports["xb"];_emwgpuCreateComputePipeline=wasmExports["yb"];_emwgpuCreateExternalTexture=wasmExports["zb"];_emwgpuCreatePipelineLayout=wasmExports["Ab"];_emwgpuCreateQuerySet=wasmExports["Bb"];_emwgpuCreateRenderBundle=wasmExports["Cb"];_emwgpuCreateRenderBundleEncoder=wasmExports["Db"];_emwgpuCreateRenderPassEncoder=wasmExports["Eb"];_emwgpuCreateRenderPipeline=wasmExports["Fb"];_emwgpuCreateSampler=wasmExports["Gb"];_emwgpuCreateSurface=wasmExports["Hb"];_emwgpuCreateTexture=wasmExports["Ib"];_emwgpuCreateTextureView=wasmExports["Jb"];_emwgpuCreateAdapter=wasmExports["Kb"];_emwgpuImportBuffer=wasmExports["Lb"];_emwgpuCreateDevice=wasmExports["Mb"];_emwgpuCreateQueue=wasmExports["Nb"];_emwgpuCreateShaderModule=wasmExports["Ob"];_emwgpuOnDeviceLostCompleted=wasmExports["Pb"];_emwgpuOnMapAsyncCompleted=wasmExports["Qb"];_emwgpuOnPopErrorScopeCompleted=wasmExports["Rb"];_emwgpuOnRequestAdapterCompleted=wasmExports["Sb"];_emwgpuOnRequestDeviceCompleted=wasmExports["Tb"];_emwgpuOnUncapturedError=wasmExports["Ub"];__emscripten_timeout=wasmExports["Wb"];_malloc=Module["_malloc"]=wasmExports["Xb"];_memalign=wasmExports["Yb"];__emscripten_stack_restore=wasmExports["Zb"];__emscripten_stack_alloc=wasmExports["_b"];_emscripten_stack_get_current=wasmExports["$b"];wasmMemory=wasmExports["Ca"];wasmTable=wasmExports["Vb"]}var wasmImports={X:function(fp,sig){fp>>>=0;return getWasmTableEntry(fp)(sig)},aa:()=>abort(""),Z:()=>{noExitRuntime=false;runtimeKeepaliveCounter=0},S:(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(__emscripten_timeout,which,_emscripten_get_now())},timeout_ms);timers[which]={id,timeout_ms};return 0},T:function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>>2>>>0]=stdTimezoneOffset*60;HEAP32[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}},R:function(func,arg,millis){func>>>=0;arg>>>=0;var wrapper=()=>getWasmTableEntry(func)(arg);if(millis>=0)safeSetTimeout(wrapper,millis);else safeRequestAnimationFrame(wrapper)},xa:_emscripten_clear_timeout,G:_emscripten_get_now,P:function(cb,userData){cb>>>=0;userData>>>=0;return requestAnimationFrame(function tick(timeStamp){if(getWasmTableEntry(cb)(timeStamp,userData))requestAnimationFrame(tick)})},U:function(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize)return false;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement)return true}return false},wa:function(cb,msecs,userData){cb>>>=0;userData>>>=0;return safeSetTimeout(()=>getWasmTableEntry(cb)(userData),msecs)},ga:function(adapterPtr,futureId,deviceLostFutureId,devicePtr,queuePtr,descriptor){adapterPtr>>>=0;futureId=bigintToI53Checked(futureId);deviceLostFutureId=bigintToI53Checked(deviceLostFutureId);devicePtr>>>=0;queuePtr>>>=0;descriptor>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);var desc={};if(descriptor){var requiredFeatureCount=HEAPU32[descriptor+12>>>2>>>0];if(requiredFeatureCount){var requiredFeaturesPtr=HEAPU32[descriptor+16>>>2>>>0];desc["requiredFeatures"]=Array.from(HEAPU32.subarray(requiredFeaturesPtr>>>2>>>0,requiredFeaturesPtr+requiredFeatureCount*4>>>2>>>0),feature=>WebGPU.FeatureName[feature])}var limitsPtr=HEAPU32[descriptor+20>>>2>>>0];if(limitsPtr){var nextInChainPtr=HEAPU32[limitsPtr>>>2>>>0];var requiredLimits={};function setLimitU32IfDefined(name,basePtr,limitOffset,ignoreIfZero=false){var ptr=basePtr+limitOffset;var value=HEAPU32[ptr>>>2>>>0];if(value!=4294967295&&(!ignoreIfZero||value!=0))requiredLimits[name]=value}function setLimitU64IfDefined(name,basePtr,limitOffset){var ptr=basePtr+limitOffset;var limitPart1=HEAPU32[ptr>>>2>>>0];var limitPart2=HEAPU32[ptr+4>>>2>>>0];if(limitPart1!=4294967295||limitPart2!=4294967295)requiredLimits[name]=readI53FromI64(ptr)}setLimitU32IfDefined("maxTextureDimension1D",limitsPtr,4);setLimitU32IfDefined("maxTextureDimension2D",limitsPtr,8);setLimitU32IfDefined("maxTextureDimension3D",limitsPtr,12);setLimitU32IfDefined("maxTextureArrayLayers",limitsPtr,16);setLimitU32IfDefined("maxBindGroups",limitsPtr,20);setLimitU32IfDefined("maxBindGroupsPlusVertexBuffers",limitsPtr,24);setLimitU32IfDefined("maxBindingsPerBindGroup",limitsPtr,28);setLimitU32IfDefined("maxDynamicUniformBuffersPerPipelineLayout",limitsPtr,32);setLimitU32IfDefined("maxDynamicStorageBuffersPerPipelineLayout",limitsPtr,36);setLimitU32IfDefined("maxSampledTexturesPerShaderStage",limitsPtr,40);setLimitU32IfDefined("maxSamplersPerShaderStage",limitsPtr,44);setLimitU32IfDefined("maxStorageBuffersPerShaderStage",limitsPtr,48);setLimitU32IfDefined("maxStorageTexturesPerShaderStage",limitsPtr,52);setLimitU32IfDefined("maxUniformBuffersPerShaderStage",limitsPtr,56);setLimitU32IfDefined("minUniformBufferOffsetAlignment",limitsPtr,80);setLimitU32IfDefined("minStorageBufferOffsetAlignment",limitsPtr,84);setLimitU64IfDefined("maxUniformBufferBindingSize",limitsPtr,64);setLimitU64IfDefined("maxStorageBufferBindingSize",limitsPtr,72);setLimitU32IfDefined("maxVertexBuffers",limitsPtr,88);setLimitU64IfDefined("maxBufferSize",limitsPtr,96);setLimitU32IfDefined("maxVertexAttributes",limitsPtr,104);setLimitU32IfDefined("maxVertexBufferArrayStride",limitsPtr,108);setLimitU32IfDefined("maxInterStageShaderVariables",limitsPtr,112);setLimitU32IfDefined("maxColorAttachments",limitsPtr,116);setLimitU32IfDefined("maxColorAttachmentBytesPerSample",limitsPtr,120);setLimitU32IfDefined("maxComputeWorkgroupStorageSize",limitsPtr,124);setLimitU32IfDefined("maxComputeInvocationsPerWorkgroup",limitsPtr,128);setLimitU32IfDefined("maxComputeWorkgroupSizeX",limitsPtr,132);setLimitU32IfDefined("maxComputeWorkgroupSizeY",limitsPtr,136);setLimitU32IfDefined("maxComputeWorkgroupSizeZ",limitsPtr,140);setLimitU32IfDefined("maxComputeWorkgroupsPerDimension",limitsPtr,144);setLimitU32IfDefined("maxImmediateSize",limitsPtr,148,true);if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var compatibilityModeLimitsPtr=nextInChainPtr;if("maxStorageBuffersInVertexStage"in GPUSupportedLimits.prototype){setLimitU32IfDefined("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,8);setLimitU32IfDefined("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,12);setLimitU32IfDefined("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,16);setLimitU32IfDefined("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,20)}}desc["requiredLimits"]=requiredLimits}var defaultQueuePtr=HEAPU32[descriptor+24>>>2>>>0];if(defaultQueuePtr){var defaultQueueDesc={label:WebGPU.makeStringFromOptionalStringView(defaultQueuePtr+4)};desc["defaultQueue"]=defaultQueueDesc}desc["label"]=WebGPU.makeStringFromOptionalStringView(descriptor+4)}WebGPU.Internals.futureInsert(futureId,adapter.requestDevice(desc).then(device=>{callUserCallback(()=>{WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);WebGPU.Internals.futureInsert(deviceLostFutureId,device.lost.then(info=>{callUserCallback(()=>{device.onuncapturederror=()=>{};var sp=stackSave();var messagePtr=stringToUTF8OnStack(info.message);_emwgpuOnDeviceLostCompleted(deviceLostFutureId,emwgpuStringToInt_DeviceLostReason[info.reason],messagePtr);stackRestore(sp)})}));device.onuncapturederror=ev=>{var type=5;if(ev.error instanceof GPUValidationError)type=2;else if(ev.error instanceof GPUOutOfMemoryError)type=3;else if(ev.error instanceof GPUInternalError)type=4;var sp=stackSave();var messagePtr=stringToUTF8OnStack(ev.error.message);_emwgpuOnUncapturedError(devicePtr,type,messagePtr);stackRestore(sp)};_emwgpuOnRequestDeviceCompleted(futureId,1,devicePtr,0)})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestDeviceCompleted(futureId,3,devicePtr,messagePtr);if(deviceLostFutureId)_emwgpuOnDeviceLostCompleted(deviceLostFutureId,4,messagePtr);stackRestore(sp)})}))},v:function(bufferPtr,offset,size){bufferPtr>>>=0;offset>>>=0;size>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);if(size==4294967295)size=void 0;var mapped;try{mapped=buffer.getMappedRange(offset,size)}catch(ex){return 0}var data=_memalign(16,mapped.byteLength);HEAPU8.set(new Uint8Array(mapped),data>>>0);WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(()=>_free(data));return data},ja:function(bufferPtr,futureId,mode,offset,size){bufferPtr>>>=0;futureId=bigintToI53Checked(futureId);mode=bigintToI53Checked(mode);offset>>>=0;size>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[];if(size==4294967295)size=void 0;WebGPU.Internals.futureInsert(futureId,buffer.mapAsync(mode,offset,size).then(()=>{callUserCallback(()=>{_emwgpuOnMapAsyncCompleted(futureId,1,0)})},ex=>{callUserCallback(()=>{stackSave();var messagePtr=stringToUTF8OnStack(ex.message);var status=ex.name==="AbortError"?4:ex.name==="OperationError"?3:0;_emwgpuOnMapAsyncCompleted(futureId,status,messagePtr);delete WebGPU.Internals.bufferOnUnmaps[bufferPtr]})}))},u:function(bufferPtr){bufferPtr>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);var onUnmap=WebGPU.Internals.bufferOnUnmaps[bufferPtr];if(!onUnmap)return;for(var i=0;i<onUnmap.length;++i)onUnmap[i]();delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];buffer.unmap()},a:function(ptr){ptr>>>=0;delete WebGPU.Internals.jsObjects[ptr]},c:function(devicePtr,descriptor,bufferPtr){devicePtr>>>=0;descriptor>>>=0;bufferPtr>>>=0;var mappedAtCreation=!!HEAPU32[descriptor+32>>>2>>>0];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),usage:HEAPU32[descriptor+16>>>2>>>0],size:readI53FromI64(descriptor+24),mappedAtCreation};var device=WebGPU.getJsObject(devicePtr);var buffer;try{buffer=device.createBuffer(desc)}catch(ex){return false}WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);if(mappedAtCreation)WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[];return true},n:function(devicePtr,descriptor,shaderModulePtr){devicePtr>>>=0;descriptor>>>=0;shaderModulePtr>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var sType=HEAP32[nextInChainPtr+4>>>2>>>0];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),code:""};switch(sType){case 2:desc["code"]=WebGPU.makeStringFromStringView(nextInChainPtr+8);break}var device=WebGPU.getJsObject(devicePtr);WebGPU.Internals.jsObjectInsert(shaderModulePtr,device.createShaderModule(desc))},ha:devicePtr=>{const device=WebGPU.getJsObject(devicePtr);device.onuncapturederror=null;device.destroy()},fa:function(devicePtr,futureId){devicePtr>>>=0;futureId=bigintToI53Checked(futureId);var device=WebGPU.getJsObject(devicePtr);WebGPU.Internals.futureInsert(futureId,device.popErrorScope().then(gpuError=>{callUserCallback(()=>{var type=5;if(!gpuError)type=1;else if(gpuError instanceof GPUValidationError)type=2;else if(gpuError instanceof GPUOutOfMemoryError)type=3;else if(gpuError instanceof GPUInternalError)type=4;var sp=stackSave();var messagePtr=gpuError?stringToUTF8OnStack(gpuError.message):0;_emwgpuOnPopErrorScopeCompleted(futureId,1,type,messagePtr);stackRestore(sp)})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnPopErrorScopeCompleted(futureId,1,5,messagePtr);stackRestore(sp)})}))},da:()=>{var format=navigator.gpu.getPreferredCanvasFormat();return emwgpuStringToInt_PreferredFormat[format]},ea:function(instancePtr,futureId,options,adapterPtr){instancePtr>>>=0;futureId=bigintToI53Checked(futureId);options>>>=0;adapterPtr>>>=0;var opts;if(options){opts={featureLevel:WebGPU.FeatureLevel[HEAP32[options+4>>>2>>>0]],powerPreference:WebGPU.PowerPreference[HEAP32[options+8>>>2>>>0]],forceFallbackAdapter:!!HEAPU32[options+12>>>2>>>0]};var nextInChainPtr=HEAPU32[options>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var webxrOptions=nextInChainPtr;opts.xrCompatible=!!HEAPU32[webxrOptions+8>>>2>>>0]}}if(!("gpu"in navigator)){var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (navigator.gpu is not available)");_emwgpuOnRequestAdapterCompleted(futureId,3,adapterPtr,messagePtr);stackRestore(sp);return}WebGPU.Internals.futureInsert(futureId,navigator.gpu.requestAdapter(opts).then(adapter=>{callUserCallback(()=>{if(adapter){WebGPU.Internals.jsObjectInsert(adapterPtr,adapter);_emwgpuOnRequestAdapterCompleted(futureId,1,adapterPtr,0)}else{var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (requestAdapter returned null)");_emwgpuOnRequestAdapterCompleted(futureId,3,adapterPtr,messagePtr);stackRestore(sp)}})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestAdapterCompleted(futureId,4,adapterPtr,messagePtr);stackRestore(sp)})}))},ca:function(futurePtr,futureCount,timeoutMSPtr){futurePtr>>>=0;futureCount>>>=0;timeoutMSPtr>>>=0;abort("TODO: Implement asyncify-free WaitAny for timeout=0")},_:function(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>>2>>>0]=ptr;bufSize+=stringToUTF8(string,ptr,1/0)+1;envp+=4}return 0},$:function(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;for(var string of strings)bufSize+=lengthBytesUTF8(string)+1;HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0},W:()=>52,V:function(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);newOffset>>>=0;return 70},I:function(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;for(var j=0;j<len;j++)printChar(fd,HEAPU8[ptr+j>>>0]);num+=len}HEAPU32[pnum>>>2>>>0]=num;return 0},ma:function(token){Module.geoHost.cancelImport(token)},ba:function(){Module.geoHost.cancelRefinement()},sa:function(kind,document,node,done,total,message){Module.geoHost.event(kind,document,node,done,total,UTF8ToString(message))},H:function(message){Module.geoHost.failed(UTF8ToString(message))},Ba:function(format){Module.geoHost.ready(format)},F:function(running){Module.geoHost.runFrames(running!=0)},D:function(pixels,width,height,bgra){Module.geoHost.snapshot(pixels,width,height,bgra!=0)},na:function(token,path){Module.geoHost.startImport(token,UTF8ToString(path))},ia:function(token,path,level,definitions,count){Module.geoHost.startRefinement(token,UTF8ToString(path),level,HEAPU32.slice(definitions>>2,(definitions>>2)+count))},Y:_proc_exit,Aa:function(adapterPtr,limitsOutPtr){adapterPtr>>>=0;limitsOutPtr>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);WebGPU.fillLimitStruct(adapter.limits,limitsOutPtr);return 1},za:function(adapterPtr,featureEnumValue){adapterPtr>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])},g:function(bufferPtr){bufferPtr>>>=0;var ret=(()=>{var buffer=WebGPU.getJsObject(bufferPtr);return buffer.size})();return BigInt(ret)},M:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),timestampWrites:WebGPU.makePassTimestampWrites(HEAPU32[descriptor+12>>>2>>>0])};var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateComputePassEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.beginComputePass(desc));return ptr},p:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;function makeColorAttachment(caPtr){var viewPtr=HEAPU32[caPtr+4>>>2>>>0];if(viewPtr===0)return;var depthSlice=HEAPU32[caPtr+8>>>2>>>0];if(depthSlice==4294967295)depthSlice=void 0;return{view:WebGPU.getJsObject(viewPtr),depthSlice,resolveTarget:WebGPU.getJsObject(HEAPU32[caPtr+12>>>2>>>0]),clearValue:WebGPU.makeColor(caPtr+24),loadOp:WebGPU.LoadOp[HEAP32[caPtr+16>>>2>>>0]],storeOp:WebGPU.StoreOp[HEAP32[caPtr+20>>>2>>>0]]}}function makeColorAttachments(count,caPtr){var attachments=[];for(var i=0;i<count;++i)attachments.push(makeColorAttachment(caPtr+56*i));return attachments}function makeDepthStencilAttachment(dsaPtr){if(dsaPtr===0)return;return{view:WebGPU.getJsObject(HEAPU32[dsaPtr+4>>>2>>>0]),depthClearValue:HEAPF32[dsaPtr+16>>>2>>>0],depthLoadOp:WebGPU.LoadOp[HEAP32[dsaPtr+8>>>2>>>0]],depthStoreOp:WebGPU.StoreOp[HEAP32[dsaPtr+12>>>2>>>0]],depthReadOnly:!!HEAPU32[dsaPtr+20>>>2>>>0],stencilClearValue:HEAPU32[dsaPtr+32>>>2>>>0],stencilLoadOp:WebGPU.LoadOp[HEAP32[dsaPtr+24>>>2>>>0]],stencilStoreOp:WebGPU.StoreOp[HEAP32[dsaPtr+28>>>2>>>0]],stencilReadOnly:!!HEAPU32[dsaPtr+36>>>2>>>0]}}var desc=function(descriptor){var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var maxDrawCount=void 0;if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var renderPassMaxDrawCount=nextInChainPtr;maxDrawCount=readI53FromI64(renderPassMaxDrawCount+8)}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),colorAttachments:makeColorAttachments(HEAPU32[descriptor+12>>>2>>>0],HEAPU32[descriptor+16>>>2>>>0]),depthStencilAttachment:makeDepthStencilAttachment(HEAPU32[descriptor+20>>>2>>>0]),occlusionQuerySet:WebGPU.getJsObject(HEAPU32[descriptor+24>>>2>>>0]),timestampWrites:WebGPU.makePassTimestampWrites(HEAPU32[descriptor+28>>>2>>>0]),maxDrawCount};return desc}(descriptor);var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateRenderPassEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.beginRenderPass(desc));return ptr},N:function(encoderPtr,srcPtr,srcOffset,dstPtr,dstOffset,size){encoderPtr>>>=0;srcPtr>>>=0;srcOffset=bigintToI53Checked(srcOffset);dstPtr>>>=0;dstOffset=bigintToI53Checked(dstOffset);size=bigintToI53Checked(size);var commandEncoder=WebGPU.getJsObject(encoderPtr);var src=WebGPU.getJsObject(srcPtr);var dst=WebGPU.getJsObject(dstPtr);commandEncoder.copyBufferToBuffer(src,srcOffset,dst,dstOffset,size)},m:function(encoderPtr,srcPtr,dstPtr,copySizePtr){encoderPtr>>>=0;srcPtr>>>=0;dstPtr>>>=0;copySizePtr>>>=0;var commandEncoder=WebGPU.getJsObject(encoderPtr);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder.copyTextureToBuffer(WebGPU.makeTexelCopyTextureInfo(srcPtr),WebGPU.makeTexelCopyBufferInfo(dstPtr),copySize)},y:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateCommandBuffer(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.finish());return ptr},ka:function(encoderPtr,querySetPtr,firstQuery,queryCount,destinationPtr,destinationOffset){encoderPtr>>>=0;querySetPtr>>>=0;destinationPtr>>>=0;destinationOffset=bigintToI53Checked(destinationOffset);var commandEncoder=WebGPU.getJsObject(encoderPtr);var querySet=WebGPU.getJsObject(querySetPtr);var destination=WebGPU.getJsObject(destinationPtr);commandEncoder.resolveQuerySet(querySet,firstQuery,queryCount,destination,destinationOffset)},q:function(passPtr,x,y,z){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.dispatchWorkgroups(x,y,z)},L:function(passPtr){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.end()},B:function(passPtr,groupIndex,groupPtr,dynamicOffsetCount,dynamicOffsetsPtr){passPtr>>>=0;groupPtr>>>=0;dynamicOffsetCount>>>=0;dynamicOffsetsPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var group=WebGPU.getJsObject(groupPtr);if(dynamicOffsetCount==0)pass.setBindGroup(groupIndex,group);else pass.setBindGroup(groupIndex,group,HEAPU32,dynamicOffsetsPtr>>>2,dynamicOffsetCount)},r:function(passPtr,pipelinePtr){passPtr>>>=0;pipelinePtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var pipeline=WebGPU.getJsObject(pipelinePtr);pass.setPipeline(pipeline)},oa:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;function makeEntry(entryPtr){var bufferPtr=HEAPU32[entryPtr+8>>>2>>>0];var samplerPtr=HEAPU32[entryPtr+32>>>2>>>0];var textureViewPtr=HEAPU32[entryPtr+36>>>2>>>0];var externalTexturePtr=0;WebGPU.iterateExtensions(entryPtr,{14:ptr=>{externalTexturePtr=HEAPU32[ptr+8>>>2>>>0]}});var resource;if(bufferPtr){var size=readI53FromI64(entryPtr+24);if(size==-1)size=void 0;resource={buffer:WebGPU.getJsObject(bufferPtr),offset:readI53FromI64(entryPtr+16),size}}else resource=WebGPU.getJsObject(samplerPtr||textureViewPtr||externalTexturePtr);return{binding:HEAPU32[entryPtr+4>>>2>>>0],resource}}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.getJsObject(HEAPU32[descriptor+12>>>2>>>0]),entries:function(count,entriesPtrs){var entries=[];for(var i=0;i<count;++i)entries.push(makeEntry(entriesPtrs+40*i));return entries}(HEAPU32[descriptor+16>>>2>>>0],HEAPU32[descriptor+20>>>2>>>0])};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateBindGroup(0);WebGPU.Internals.jsObjectInsert(ptr,device.createBindGroup(desc));return ptr},i:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;function makeBufferEntry(substructPtr){var typeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!typeInt)return;return{type:WebGPU.BufferBindingType[typeInt],hasDynamicOffset:!!HEAPU32[substructPtr+8>>>2>>>0],minBindingSize:readI53FromI64(substructPtr+16)}}function makeSamplerEntry(substructPtr){var typeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!typeInt)return;return{type:WebGPU.SamplerBindingType[typeInt]}}function makeTextureEntry(substructPtr){var sampleTypeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!sampleTypeInt)return;return{sampleType:WebGPU.TextureSampleType[sampleTypeInt],viewDimension:WebGPU.TextureViewDimension[HEAP32[substructPtr+8>>>2>>>0]],multisampled:!!HEAPU32[substructPtr+12>>>2>>>0]}}function makeStorageTextureEntry(substructPtr){var accessInt=HEAPU32[substructPtr+4>>>2>>>0];if(!accessInt)return;return{access:WebGPU.StorageTextureAccess[accessInt],format:WebGPU.TextureFormat[HEAP32[substructPtr+8>>>2>>>0]],viewDimension:WebGPU.TextureViewDimension[HEAP32[substructPtr+12>>>2>>>0]]}}function makeEntry(entryPtr){var entry={binding:HEAPU32[entryPtr+4>>>2>>>0],visibility:HEAPU32[entryPtr+8>>>2>>>0],buffer:makeBufferEntry(entryPtr+24),sampler:makeSamplerEntry(entryPtr+48),texture:makeTextureEntry(entryPtr+56),storageTexture:makeStorageTextureEntry(entryPtr+72)};WebGPU.iterateExtensions(entryPtr,{13:()=>{entry["externalTexture"]={}}});return entry}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),entries:function(count,entriesPtrs){var entries=[];for(var i=0;i<count;++i)entries.push(makeEntry(entriesPtrs+88*i));return entries}(HEAPU32[descriptor+12>>>2>>>0],HEAPU32[descriptor+16>>>2>>>0])};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateBindGroupLayout(0);WebGPU.Internals.jsObjectInsert(ptr,device.createBindGroupLayout(desc));return ptr},z:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4)};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateCommandEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,device.createCommandEncoder(desc));return ptr},s:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc=WebGPU.makeComputePipelineDesc(descriptor);var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateComputePipeline(0);WebGPU.Internals.jsObjectInsert(ptr,device.createComputePipeline(desc));return ptr},ua:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var bglCount=HEAPU32[descriptor+12>>>2>>>0];var bglPtr=HEAPU32[descriptor+16>>>2>>>0];var bgls=[];for(var i=0;i<bglCount;++i)bgls.push(WebGPU.getJsObject(HEAPU32[bglPtr+4*i>>>2>>>0]));var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),bindGroupLayouts:bgls};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreatePipelineLayout(0);WebGPU.Internals.jsObjectInsert(ptr,device.createPipelineLayout(desc));return ptr},qa:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc={type:WebGPU.QueryType[HEAP32[descriptor+12>>>2>>>0]],count:HEAPU32[descriptor+16>>>2>>>0]};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateQuerySet(0);WebGPU.Internals.jsObjectInsert(ptr,device.createQuerySet(desc));return ptr},E:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc=WebGPU.makeRenderPipelineDesc(descriptor);var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateRenderPipeline(0);WebGPU.Internals.jsObjectInsert(ptr,device.createRenderPipeline(desc));return ptr},ta:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),addressModeU:WebGPU.AddressMode[HEAP32[descriptor+12>>>2>>>0]],addressModeV:WebGPU.AddressMode[HEAP32[descriptor+16>>>2>>>0]],addressModeW:WebGPU.AddressMode[HEAP32[descriptor+20>>>2>>>0]],magFilter:WebGPU.FilterMode[HEAP32[descriptor+24>>>2>>>0]],minFilter:WebGPU.FilterMode[HEAP32[descriptor+28>>>2>>>0]],mipmapFilter:WebGPU.MipmapFilterMode[HEAP32[descriptor+32>>>2>>>0]],lodMinClamp:HEAPF32[descriptor+36>>>2>>>0],lodMaxClamp:HEAPF32[descriptor+40>>>2>>>0],compare:WebGPU.CompareFunction[HEAP32[descriptor+44>>>2>>>0]],maxAnisotropy:HEAPU16[descriptor+48>>>1>>>0]};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateSampler(0);WebGPU.Internals.jsObjectInsert(ptr,device.createSampler(desc));return ptr},e:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var textureBindingViewDimension;if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var textureBindingViewDimensionDescriptor=nextInChainPtr;textureBindingViewDimension=WebGPU.TextureViewDimension[HEAP32[textureBindingViewDimensionDescriptor+8>>>2>>>0]]}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),size:WebGPU.makeExtent3D(descriptor+28),mipLevelCount:HEAPU32[descriptor+44>>>2>>>0],sampleCount:HEAPU32[descriptor+48>>>2>>>0],dimension:WebGPU.TextureDimension[HEAP32[descriptor+24>>>2>>>0]],format:WebGPU.TextureFormat[HEAP32[descriptor+40>>>2>>>0]],usage:HEAPU32[descriptor+16>>>2>>>0],textureBindingViewDimension};var viewFormatCount=HEAPU32[descriptor+52>>>2>>>0];if(viewFormatCount){var viewFormatsPtr=HEAPU32[descriptor+56>>>2>>>0];desc["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>>2>>>0,viewFormatsPtr+viewFormatCount*4>>>2>>>0),format=>WebGPU.TextureFormat[format])}var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateTexture(0);WebGPU.Internals.jsObjectInsert(ptr,device.createTexture(desc));return ptr},va:function(devicePtr,limitsOutPtr){devicePtr>>>=0;limitsOutPtr>>>=0;var device=WebGPU.getJsObject(devicePtr);WebGPU.fillLimitStruct(device.limits,limitsOutPtr);return 1},ra:function(devicePtr,featureEnumValue){devicePtr>>>=0;var device=WebGPU.getJsObject(devicePtr);return device.features.has(WebGPU.FeatureName[featureEnumValue])},C:function(devicePtr,filter){devicePtr>>>=0;var device=WebGPU.getJsObject(devicePtr);device.pushErrorScope(WebGPU.ErrorFilter[filter])},ya:function(instancePtr,descriptor){instancePtr>>>=0;descriptor>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var sourceCanvasHTMLSelector=nextInChainPtr;var selectorPtr=HEAPU32[sourceCanvasHTMLSelector+8>>>2>>>0];var canvas=findCanvasEventTarget(selectorPtr);var context=canvas.getContext("webgpu");if(!context)return 0;context.surfaceLabelWebGPU=WebGPU.makeStringFromOptionalStringView(descriptor+4);var ptr=_emwgpuCreateSurface(0);WebGPU.Internals.jsObjectInsert(ptr,context);return ptr},t:function(queuePtr,commandCount,commands){queuePtr>>>=0;commandCount>>>=0;commands>>>=0;var queue=WebGPU.getJsObject(queuePtr);var cmds=Array.from(HEAP32.subarray(commands>>>2>>>0,commands+commandCount*4>>>2>>>0),id=>WebGPU.getJsObject(id));queue.submit(cmds)},d:function(queuePtr,bufferPtr,bufferOffset,data,size){queuePtr>>>=0;bufferPtr>>>=0;bufferOffset=bigintToI53Checked(bufferOffset);data>>>=0;size>>>=0;var queue=WebGPU.getJsObject(queuePtr);var buffer=WebGPU.getJsObject(bufferPtr);var subarray=HEAPU8.subarray(data>>>0,data+size>>>0);queue.writeBuffer(buffer,bufferOffset,subarray,0,size)},pa:function(queuePtr,destinationPtr,data,dataSize,dataLayoutPtr,writeSizePtr){queuePtr>>>=0;destinationPtr>>>=0;data>>>=0;dataSize>>>=0;dataLayoutPtr>>>=0;writeSizePtr>>>=0;var queue=WebGPU.getJsObject(queuePtr);var destination=WebGPU.makeTexelCopyTextureInfo(destinationPtr);var dataLayout=WebGPU.makeTexelCopyBufferLayout(dataLayoutPtr);var writeSize=WebGPU.makeExtent3D(writeSizePtr);var subarray=HEAPU8.subarray(data>>>0,data+dataSize>>>0);queue.writeTexture(destination,subarray,dataLayout,writeSize)},w:function(passPtr,vertexCount,instanceCount,firstVertex,firstInstance){passPtr>>>=0;firstVertex>>>=0;firstInstance>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.draw(vertexCount,instanceCount,firstVertex,firstInstance)},x:function(passPtr,indirectBufferPtr,indirectOffset){passPtr>>>=0;indirectBufferPtr>>>=0;indirectOffset=bigintToI53Checked(indirectOffset);var pass=WebGPU.getJsObject(passPtr);var indirectBuffer=WebGPU.getJsObject(indirectBufferPtr);pass.drawIndexedIndirect(indirectBuffer,indirectOffset)},J:function(passPtr,indirectBufferPtr,indirectOffset){passPtr>>>=0;indirectBufferPtr>>>=0;indirectOffset=bigintToI53Checked(indirectOffset);var pass=WebGPU.getJsObject(passPtr);var indirectBuffer=WebGPU.getJsObject(indirectBufferPtr);pass.drawIndirect(indirectBuffer,indirectOffset)},o:function(encoderPtr){encoderPtr>>>=0;var encoder=WebGPU.getJsObject(encoderPtr);encoder.end()},f:function(passPtr,groupIndex,groupPtr,dynamicOffsetCount,dynamicOffsetsPtr){passPtr>>>=0;groupPtr>>>=0;dynamicOffsetCount>>>=0;dynamicOffsetsPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var group=WebGPU.getJsObject(groupPtr);if(dynamicOffsetCount==0)pass.setBindGroup(groupIndex,group);else pass.setBindGroup(groupIndex,group,HEAPU32,dynamicOffsetsPtr>>>2,dynamicOffsetCount)},la:function(passPtr,colorPtr){passPtr>>>=0;colorPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var color=WebGPU.makeColor(colorPtr);pass.setBlendConstant(color)},A:function(passPtr,bufferPtr,format,offset,size){passPtr>>>=0;bufferPtr>>>=0;offset=bigintToI53Checked(offset);size=bigintToI53Checked(size);var pass=WebGPU.getJsObject(passPtr);var buffer=WebGPU.getJsObject(bufferPtr);if(size==-1)size=void 0;pass.setIndexBuffer(buffer,WebGPU.IndexFormat[format],offset,size)},h:function(passPtr,pipelinePtr){passPtr>>>=0;pipelinePtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var pipeline=WebGPU.getJsObject(pipelinePtr);pass.setPipeline(pipeline)},K:function(passPtr,x,y,w,h,minDepth,maxDepth){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.setViewport(x,y,w,h,minDepth,maxDepth)},Q:function(surfacePtr,config){surfacePtr>>>=0;config>>>=0;var context=WebGPU.getJsObject(surfacePtr);var canvasSize=[HEAPU32[config+24>>>2>>>0],HEAPU32[config+28>>>2>>>0]];if(canvasSize[0]!==0)context["canvas"]["width"]=canvasSize[0];if(canvasSize[1]!==0)context["canvas"]["height"]=canvasSize[1];var configuration={device:WebGPU.getJsObject(HEAPU32[config+4>>>2>>>0]),format:WebGPU.TextureFormat[HEAP32[config+8>>>2>>>0]],usage:HEAPU32[config+16>>>2>>>0],alphaMode:WebGPU.CompositeAlphaMode[HEAP32[config+40>>>2>>>0]]};var viewFormatCount=HEAPU32[config+32>>>2>>>0];if(viewFormatCount){var viewFormatsPtr=HEAPU32[config+36>>>2>>>0];configuration["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>>2>>>0,viewFormatsPtr+viewFormatCount*4>>>2>>>0),format=>WebGPU.TextureFormat[format])}var nextInChainPtr=HEAPU32[config>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var surfaceColorManagement=nextInChainPtr;configuration.colorSpace=WebGPU.PredefinedColorSpace[HEAP32[surfaceColorManagement+8>>>2>>>0]];configuration.toneMapping={mode:WebGPU.ToneMappingMode[HEAP32[surfaceColorManagement+12>>>2>>>0]]}}context.configure(configuration)},O:function(surfacePtr,surfaceTexturePtr){surfacePtr>>>=0;surfaceTexturePtr>>>=0;var context=WebGPU.getJsObject(surfacePtr);try{var texturePtr=_emwgpuCreateTexture(0);WebGPU.Internals.jsObjectInsert(texturePtr,context.getCurrentTexture());HEAPU32[surfaceTexturePtr+4>>>2>>>0]=texturePtr;HEAP32[surfaceTexturePtr+8>>>2>>>0]=1}catch(ex){HEAPU32[surfaceTexturePtr+4>>>2>>>0]=0;HEAP32[surfaceTexturePtr+8>>>2>>>0]=6}},b:function(texturePtr,descriptor){texturePtr>>>=0;descriptor>>>=0;var desc;if(descriptor){var swizzle;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var swizzleDescriptor=nextInChainPtr;var swizzlePtr=swizzleDescriptor+8;var r=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr>>>2>>>0]]||"r";var g=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+4>>>2>>>0]]||"g";var b=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+8>>>2>>>0]]||"b";var a=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+12>>>2>>>0]]||"a";swizzle=`${r}${g}${b}${a}`}var mipLevelCount=HEAPU32[descriptor+24>>>2>>>0];var arrayLayerCount=HEAPU32[descriptor+32>>>2>>>0];desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),format:WebGPU.TextureFormat[HEAP32[descriptor+12>>>2>>>0]],dimension:WebGPU.TextureViewDimension[HEAP32[descriptor+16>>>2>>>0]],baseMipLevel:HEAPU32[descriptor+20>>>2>>>0],mipLevelCount:mipLevelCount===4294967295?void 0:mipLevelCount,baseArrayLayer:HEAPU32[descriptor+28>>>2>>>0],arrayLayerCount:arrayLayerCount===4294967295?void 0:arrayLayerCount,aspect:WebGPU.TextureAspect[HEAP32[descriptor+36>>>2>>>0]],usage:HEAPU32[descriptor+40>>>2>>>0],swizzle}}var texture=WebGPU.getJsObject(texturePtr);var ptr=_emwgpuCreateTextureView(0);WebGPU.Internals.jsObjectInsert(ptr,texture.createView(desc));return ptr},j:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return WebGPU.TextureFormat.indexOf(texture.format)},k:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return texture.height},l:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return texture.width}};function applySignatureConversions(wasmExports){var makeWrapper_pp=f=>a0=>f(a0)>>>0;var origExports=wasmExports;wasmExports={};wasmExports["Xb"]=makeWrapper_pp(origExports["Xb"]);wasmExports["Yb"]=(f=>(a0,a1)=>f(a0,a1)>>>0)(origExports["Yb"]);wasmExports["_b"]=makeWrapper_pp(origExports["_b"]);wasmExports["$b"]=(f=>()=>f()>>>0)(origExports["$b"]);Object.setPrototypeOf(wasmExports,origExports);return wasmExports}var wasmExports;wasmExports=await async function(){function receiveInstance(instance){wasmExports=instance.exports;wasmExports=applySignatureConversions(wasmExports);assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm)return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))});wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(void 0,wasmBinaryFile,info);var exports=function(result){return receiveInstance(result["instance"])}(result);return exports}();await async function(){preRun();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}();
|
|
1
|
+
async function createGeometryView(moduleArg={}){var Module=moduleArg;var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"])return Module["locateFile"](path,scriptDirectory);return scriptDirectory+path}var readAsync;if(true){try{scriptDirectory=new URL(".",_scriptName).href}catch{}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok)return response.arrayBuffer();throw new Error(response.status+" : "+response.url)}}var out=console.log.bind(console);var err=console.error.bind(console);var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition)abort(text)}function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun==="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){0;wasmExports["Da"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun==="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";throw new WebAssembly.RuntimeError(what)}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"])return locateFile("geometryview-web.wasm");return new URL("geometryview-web.wasm",import.meta.url).href}function getBinarySync(file){if(void 0)return(void 0)(file);throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(true)try{return await readAsync(binaryFile)}catch{}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary)try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0)callbacks.shift()(Module)};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func)wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr);return func};var runtimeKeepaliveCounter=0;var handleException=e=>{if(e instanceof ExitStatus||e=="unwind")return EXITSTATUS;quit_(0,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(0,new ExitStatus(code))};var maybeExit=()=>{if(!keepRuntimeAlive())try{_exit(EXITSTATUS)}catch(e){handleException(e)}};var callUserCallback=(func,...args)=>{if(ABORT)return;try{return func(...args)}catch(e){handleException(e)}finally{maybeExit()}};var timers={};var _emscripten_get_now=()=>performance.now();var HEAP32;var HEAPU32;var HEAPU8;var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63;i++}}heap[outIdx>>>0]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func)return 1;if(mode==0)MainLoop.scheduler=function(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)};else if(mode==1)MainLoop.scheduler=function(){MainLoop.requestAnimationFrame(MainLoop.runner)};else{if(!MainLoop.setImmediate)if(globalThis.scheduler)MainLoop.setImmediate=scheduler.postTask.bind(scheduler);else{var setImmediates=[];addEventListener("message",event=>{if(event.data==="setimmediate"){event.stopPropagation();setImmediates.shift()()}},true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(false)postMessage("setimmediate");else postMessage("setimmediate","*")}}MainLoop.scheduler=function(){MainLoop.setImmediate(MainLoop.runner)}}return 0};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId<MainLoop.currentlyRunningMainloop){maybeExit();return false}return true}MainLoop.runner=function(){if(ABORT)return;if(MainLoop.queue.length>0){Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted)MainLoop.remainingBlockers=next;else{next+=.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0)MainLoop.tickStartTime=_emscripten_get_now();MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);MainLoop.scheduler()}if(simulateInfiniteLoop)throw"unwind"};var MainLoop={func:null,scheduler:null,currentlyRunningMainloop:0,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){if(MainLoop.scheduler){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++}},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining)if(remaining<expected)Module["setStatus"](`${message} (${expected-remaining}/${expected})`);else Module["setStatus"](message);else Module["setStatus"]("")}},init(){},runIter(func){if(ABORT)return;for(var pre of MainLoop.preMainLoop)if(pre()===false)return;callUserCallback(func);for(var post of MainLoop.postMainLoop)post()},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(!MainLoop.nextRAF)MainLoop.nextRAF=now+1e3/60;else while(now+2>=MainLoop.nextRAF)MainLoop.nextRAF+=1e3/60;var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame)requestAnimationFrame(func);else MainLoop.fakeRequestAnimationFrame(func)}};var safeRequestAnimationFrame=func=>MainLoop.requestAnimationFrame(()=>{callUserCallback(func)});var safeSetTimeout=(func,timeout)=>{var id=safeSetTimeout.nextId++;safeSetTimeout.pending.set(id,setTimeout(()=>{safeSetTimeout.pending.delete(id);callUserCallback(func)},timeout));return id};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var getHeapMax=()=>4294901760;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPF32;var HEAPF64;var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{idx>>>=0;var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder)return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr));var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224)u0=(u0&15)<<12|u1<<6|u2;else u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63;if(u0<65536)str+=String.fromCharCode(u0);else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127)len++;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else{len+=4;i++}}return len};var readI53FromI64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAP32[ptr+4>>>2>>>0]*4294967296;var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>>2>>>0]=num;var lower=HEAPU32[ptr>>>2>>>0];HEAPU32[ptr+4>>>2>>>0]=(num-lower)/4294967296};var WebGPU={Internals:{jsObjects:[],jsObjectInsert:(ptr,jsObject)=>{ptr>>>=0;WebGPU.Internals.jsObjects[ptr]=jsObject},bufferOnUnmaps:[],futures:[],futureInsert:()=>{}},getJsObject:ptr=>{if(!ptr)return;ptr>>>=0;return WebGPU.Internals.jsObjects[ptr]},importJsAdapter:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateAdapter(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroup:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroup(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBindGroupLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateBindGroupLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsBuffer:(buffer,parentPtr=0)=>{assert(buffer.mapState==="unmapped");var bufferPtr=_emwgpuImportBuffer(parentPtr);WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);return bufferPtr},importJsCommandBuffer:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandBuffer(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsCommandEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateCommandEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsComputePipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateComputePipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsDevice:(device,parentPtr=0)=>{var queuePtr=_emwgpuCreateQueue(parentPtr);var devicePtr=_emwgpuCreateDevice(parentPtr,queuePtr);WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);return devicePtr},importJsExternalTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateExternalTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsPipelineLayout:(obj,parentPtr=0)=>{var ptr=_emwgpuCreatePipelineLayout(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQuerySet:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQuerySet(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsQueue:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateQueue(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundle:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundle(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderBundleEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderBundleEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPassEncoder:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPassEncoder(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsRenderPipeline:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateRenderPipeline(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSampler:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSampler(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsShaderModule:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateShaderModule(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsSurface:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateSurface(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTexture:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTexture(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},importJsTextureView:(obj,parentPtr=0)=>{var ptr=_emwgpuCreateTextureView(parentPtr);WebGPU.Internals.jsObjects[ptr]=obj;return ptr},errorCallback:(callback,type,message,userdata)=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(message);getWasmTableEntry(callback)(type,messagePtr,userdata);stackRestore(sp)},iterateExtensions:(root,handlers)=>{for(var ptr=HEAPU32[root>>>2>>>0];ptr;ptr=HEAPU32[ptr>>>2>>>0]){var sType=HEAP32[ptr+4>>>2>>>0];handlers[sType](ptr)}},setStringView:(ptr,data,length)=>{HEAPU32[ptr>>>2>>>0]=data;HEAPU32[ptr+4>>>2>>>0]=length},makeStringFromStringView:stringViewPtr=>{var ptr=HEAPU32[stringViewPtr>>>2>>>0];var length=HEAPU32[stringViewPtr+4>>>2>>>0];return UTF8ToString(ptr,length)},makeStringFromOptionalStringView:stringViewPtr=>{var ptr=HEAPU32[stringViewPtr>>>2>>>0];var length=HEAPU32[stringViewPtr+4>>>2>>>0];if(!ptr){if(length===0)return"";return}return UTF8ToString(ptr,length)},makeColor:ptr=>({r:HEAPF64[ptr>>>3>>>0],g:HEAPF64[ptr+8>>>3>>>0],b:HEAPF64[ptr+16>>>3>>>0],a:HEAPF64[ptr+24>>>3>>>0]}),makeExtent3D:ptr=>({width:HEAPU32[ptr>>>2>>>0],height:HEAPU32[ptr+4>>>2>>>0],depthOrArrayLayers:HEAPU32[ptr+8>>>2>>>0]}),makeOrigin3D:ptr=>({x:HEAPU32[ptr>>>2>>>0],y:HEAPU32[ptr+4>>>2>>>0],z:HEAPU32[ptr+8>>>2>>>0]}),makeTexelCopyTextureInfo:ptr=>({texture:WebGPU.getJsObject(HEAPU32[ptr>>>2>>>0]),mipLevel:HEAPU32[ptr+4>>>2>>>0],origin:WebGPU.makeOrigin3D(ptr+8),aspect:WebGPU.TextureAspect[HEAP32[ptr+20>>>2>>>0]]}),makeTexelCopyBufferLayout:ptr=>{var bytesPerRow=HEAPU32[ptr+8>>>2>>>0];var rowsPerImage=HEAPU32[ptr+12>>>2>>>0];return{offset:readI53FromI64(ptr),bytesPerRow:bytesPerRow===4294967295?void 0:bytesPerRow,rowsPerImage:rowsPerImage===4294967295?void 0:rowsPerImage}},makeTexelCopyBufferInfo:ptr=>{var layoutPtr=ptr+0;var bufferCopyView=WebGPU.makeTexelCopyBufferLayout(layoutPtr);bufferCopyView["buffer"]=WebGPU.getJsObject(HEAPU32[ptr+16>>>2>>>0]);return bufferCopyView},makePassTimestampWrites:ptr=>{if(ptr===0)return;return{querySet:WebGPU.getJsObject(HEAPU32[ptr+4>>>2>>>0]),beginningOfPassWriteIndex:HEAPU32[ptr+8>>>2>>>0],endOfPassWriteIndex:HEAPU32[ptr+12>>>2>>>0]}},makePipelineConstants:(constantCount,constantsPtr)=>{if(!constantCount)return;var constants={};for(var i=0;i<constantCount;++i){var entryPtr=constantsPtr+24*i;var key=WebGPU.makeStringFromStringView(entryPtr+4);constants[key]=HEAPF64[entryPtr+16>>>3>>>0]}return constants},makePipelineLayout:layoutPtr=>{if(!layoutPtr)return"auto";return WebGPU.getJsObject(layoutPtr)},makeComputeState:ptr=>{if(!ptr)return;var desc={module:WebGPU.getJsObject(HEAPU32[ptr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[ptr+16>>>2>>>0],HEAPU32[ptr+20>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(ptr+8)};return desc},makeComputePipelineDesc:descriptor=>{var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.makePipelineLayout(HEAPU32[descriptor+12>>>2>>>0]),compute:WebGPU.makeComputeState(descriptor+16)};return desc},makeRenderPipelineDesc:descriptor=>{function makeBlendComponent(bdPtr){if(!bdPtr)return;return{operation:WebGPU.BlendOperation[HEAP32[bdPtr>>>2>>>0]],srcFactor:WebGPU.BlendFactor[HEAP32[bdPtr+4>>>2>>>0]],dstFactor:WebGPU.BlendFactor[HEAP32[bdPtr+8>>>2>>>0]]}}function makeBlendState(bsPtr){if(!bsPtr)return;return{alpha:makeBlendComponent(bsPtr+12),color:makeBlendComponent(bsPtr+0)}}function makeColorState(csPtr){var format=WebGPU.TextureFormat[HEAP32[csPtr+4>>>2>>>0]];return format?{format,blend:makeBlendState(HEAPU32[csPtr+8>>>2>>>0]),writeMask:HEAPU32[csPtr+16>>>2>>>0]}:void 0}function makeColorStates(count,csArrayPtr){var states=[];for(var i=0;i<count;++i)states.push(makeColorState(csArrayPtr+24*i));return states}function makeStencilStateFace(ssfPtr){return{compare:WebGPU.CompareFunction[HEAP32[ssfPtr>>>2>>>0]],failOp:WebGPU.StencilOperation[HEAP32[ssfPtr+4>>>2>>>0]],depthFailOp:WebGPU.StencilOperation[HEAP32[ssfPtr+8>>>2>>>0]],passOp:WebGPU.StencilOperation[HEAP32[ssfPtr+12>>>2>>>0]]}}function makeVertexAttribute(vaPtr){return{format:WebGPU.VertexFormat[HEAP32[vaPtr+4>>>2>>>0]],offset:readI53FromI64(vaPtr+8),shaderLocation:HEAPU32[vaPtr+16>>>2>>>0]}}function makeVertexAttributes(count,vaArrayPtr){var vas=[];for(var i=0;i<count;++i)vas.push(makeVertexAttribute(vaArrayPtr+i*24));return vas}function makeVertexBuffer(vbPtr){if(!vbPtr)return;var stepMode=WebGPU.VertexStepMode[HEAP32[vbPtr+4>>>2>>>0]];var attributeCount=HEAPU32[vbPtr+16>>>2>>>0];if(!stepMode&&!attributeCount)return null;return{arrayStride:readI53FromI64(vbPtr+8),stepMode,attributes:makeVertexAttributes(attributeCount,HEAPU32[vbPtr+20>>>2>>>0])}}function makeVertexBuffers(count,vbArrayPtr){if(!count)return;var vbs=[];for(var i=0;i<count;++i)vbs.push(makeVertexBuffer(vbArrayPtr+i*24));return vbs}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.makePipelineLayout(HEAPU32[descriptor+12>>>2>>>0]),vertex:function(viPtr){if(!viPtr)return;var desc={module:WebGPU.getJsObject(HEAPU32[viPtr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[viPtr+16>>>2>>>0],HEAPU32[viPtr+20>>>2>>>0]),buffers:makeVertexBuffers(HEAPU32[viPtr+24>>>2>>>0],HEAPU32[viPtr+28>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(viPtr+8)};return desc}(descriptor+16),primitive:function(psPtr){if(!psPtr)return;return{topology:WebGPU.PrimitiveTopology[HEAP32[psPtr+4>>>2>>>0]],stripIndexFormat:WebGPU.IndexFormat[HEAP32[psPtr+8>>>2>>>0]],frontFace:WebGPU.FrontFace[HEAP32[psPtr+12>>>2>>>0]],cullMode:WebGPU.CullMode[HEAP32[psPtr+16>>>2>>>0]],unclippedDepth:!!HEAPU32[psPtr+20>>>2>>>0]}}(descriptor+48),depthStencil:function(dssPtr){if(!dssPtr)return;return{format:WebGPU.TextureFormat[HEAP32[dssPtr+4>>>2>>>0]],depthWriteEnabled:!!HEAPU32[dssPtr+8>>>2>>>0],depthCompare:WebGPU.CompareFunction[HEAP32[dssPtr+12>>>2>>>0]],stencilFront:makeStencilStateFace(dssPtr+16),stencilBack:makeStencilStateFace(dssPtr+32),stencilReadMask:HEAPU32[dssPtr+48>>>2>>>0],stencilWriteMask:HEAPU32[dssPtr+52>>>2>>>0],depthBias:HEAP32[dssPtr+56>>>2>>>0],depthBiasSlopeScale:HEAPF32[dssPtr+60>>>2>>>0],depthBiasClamp:HEAPF32[dssPtr+64>>>2>>>0]}}(HEAPU32[descriptor+72>>>2>>>0]),multisample:function(msPtr){if(!msPtr)return;return{count:HEAPU32[msPtr+4>>>2>>>0],mask:HEAPU32[msPtr+8>>>2>>>0],alphaToCoverageEnabled:!!HEAPU32[msPtr+12>>>2>>>0]}}(descriptor+76),fragment:function(fsPtr){if(!fsPtr)return;var desc={module:WebGPU.getJsObject(HEAPU32[fsPtr+4>>>2>>>0]),constants:WebGPU.makePipelineConstants(HEAPU32[fsPtr+16>>>2>>>0],HEAPU32[fsPtr+20>>>2>>>0]),targets:makeColorStates(HEAPU32[fsPtr+24>>>2>>>0],HEAPU32[fsPtr+28>>>2>>>0]),entryPoint:WebGPU.makeStringFromOptionalStringView(fsPtr+8)};return desc}(HEAPU32[descriptor+92>>>2>>>0])};return desc},fillLimitStruct:(limits,limitsOutPtr)=>{var nextInChainPtr=HEAPU32[limitsOutPtr>>>2>>>0];function setLimitValueU32(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;HEAPU32[basePtr+limitOffset>>>2>>>0]=limitValue}function setLimitValueU64(name,basePtr,limitOffset,fallbackValue=0){var limitValue=limits[name]??fallbackValue;writeI53ToI64(basePtr+limitOffset,limitValue)}setLimitValueU32("maxTextureDimension1D",limitsOutPtr,4);setLimitValueU32("maxTextureDimension2D",limitsOutPtr,8);setLimitValueU32("maxTextureDimension3D",limitsOutPtr,12);setLimitValueU32("maxTextureArrayLayers",limitsOutPtr,16);setLimitValueU32("maxBindGroups",limitsOutPtr,20);setLimitValueU32("maxBindGroupsPlusVertexBuffers",limitsOutPtr,24);setLimitValueU32("maxBindingsPerBindGroup",limitsOutPtr,28);setLimitValueU32("maxDynamicUniformBuffersPerPipelineLayout",limitsOutPtr,32);setLimitValueU32("maxDynamicStorageBuffersPerPipelineLayout",limitsOutPtr,36);setLimitValueU32("maxSampledTexturesPerShaderStage",limitsOutPtr,40);setLimitValueU32("maxSamplersPerShaderStage",limitsOutPtr,44);setLimitValueU32("maxStorageBuffersPerShaderStage",limitsOutPtr,48);setLimitValueU32("maxStorageTexturesPerShaderStage",limitsOutPtr,52);setLimitValueU32("maxUniformBuffersPerShaderStage",limitsOutPtr,56);setLimitValueU32("minUniformBufferOffsetAlignment",limitsOutPtr,80);setLimitValueU32("minStorageBufferOffsetAlignment",limitsOutPtr,84);setLimitValueU64("maxUniformBufferBindingSize",limitsOutPtr,64);setLimitValueU64("maxStorageBufferBindingSize",limitsOutPtr,72);setLimitValueU32("maxVertexBuffers",limitsOutPtr,88);setLimitValueU64("maxBufferSize",limitsOutPtr,96);setLimitValueU32("maxVertexAttributes",limitsOutPtr,104);setLimitValueU32("maxVertexBufferArrayStride",limitsOutPtr,108);setLimitValueU32("maxInterStageShaderVariables",limitsOutPtr,112);setLimitValueU32("maxColorAttachments",limitsOutPtr,116);setLimitValueU32("maxColorAttachmentBytesPerSample",limitsOutPtr,120);setLimitValueU32("maxComputeWorkgroupStorageSize",limitsOutPtr,124);setLimitValueU32("maxComputeInvocationsPerWorkgroup",limitsOutPtr,128);setLimitValueU32("maxComputeWorkgroupSizeX",limitsOutPtr,132);setLimitValueU32("maxComputeWorkgroupSizeY",limitsOutPtr,136);setLimitValueU32("maxComputeWorkgroupSizeZ",limitsOutPtr,140);setLimitValueU32("maxComputeWorkgroupsPerDimension",limitsOutPtr,144);setLimitValueU32("maxImmediateSize",limitsOutPtr,148);if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var compatibilityModeLimitsPtr=nextInChainPtr;setLimitValueU32("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,8,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,16,limits.maxStorageBuffersPerShaderStage);setLimitValueU32("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,12,limits.maxStorageTexturesPerShaderStage);setLimitValueU32("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,20,limits.maxStorageTexturesPerShaderStage)}},fillAdapterInfoStruct:(info,infoStruct)=>{HEAPU32[infoStruct+52>>>2>>>0]=info.subgroupMinSize;HEAPU32[infoStruct+56>>>2>>>0]=info.subgroupMaxSize;var strs=info.vendor+info.architecture+info.device+info.description;var strPtr=stringToNewUTF8(strs);var vendorLen=lengthBytesUTF8(info.vendor);WebGPU.setStringView(infoStruct+4,strPtr,vendorLen);strPtr+=vendorLen;var architectureLen=lengthBytesUTF8(info.architecture);WebGPU.setStringView(infoStruct+12,strPtr,architectureLen);strPtr+=architectureLen;var deviceLen=lengthBytesUTF8(info.device);WebGPU.setStringView(infoStruct+20,strPtr,deviceLen);strPtr+=deviceLen;var descriptionLen=lengthBytesUTF8(info.description);WebGPU.setStringView(infoStruct+28,strPtr,descriptionLen);strPtr+=descriptionLen;HEAP32[infoStruct+36>>>2>>>0]=2;var adapterType=info.isFallbackAdapter?3:4;HEAP32[infoStruct+40>>>2>>>0]=adapterType;HEAPU32[infoStruct+44>>>2>>>0]=0;HEAPU32[infoStruct+48>>>2>>>0]=0},AddressMode:[,"clamp-to-edge","repeat","mirror-repeat"],BlendFactor:[,"zero","one","src","one-minus-src","src-alpha","one-minus-src-alpha","dst","one-minus-dst","dst-alpha","one-minus-dst-alpha","src-alpha-saturated","constant","one-minus-constant","src1","one-minus-src1","src1-alpha","one-minus-src1-alpha"],BlendOperation:[,"add","subtract","reverse-subtract","min","max"],BufferBindingType:[,,"uniform","storage","read-only-storage"],BufferMapState:[,"unmapped","pending","mapped"],CompareFunction:[,"never","less","equal","less-equal","greater","not-equal","greater-equal","always"],CompilationInfoRequestStatus:[,"success","callback-cancelled"],ComponentSwizzle:[,"0","1","r","g","b","a"],CompositeAlphaMode:[,"opaque","premultiplied","unpremultiplied","inherit"],CullMode:[,"none","front","back"],ErrorFilter:[,"validation","out-of-memory","internal"],FeatureLevel:[,"compatibility","core"],FeatureName:{1:"core-features-and-limits",2:"depth-clip-control",3:"depth32float-stencil8",4:"texture-compression-bc",5:"texture-compression-bc-sliced-3d",6:"texture-compression-etc2",7:"texture-compression-astc",8:"texture-compression-astc-sliced-3d",9:"timestamp-query",10:"indirect-first-instance",11:"shader-f16",12:"rg11b10ufloat-renderable",13:"bgra8unorm-storage",14:"float32-filterable",15:"float32-blendable",16:"clip-distances",17:"dual-source-blending",18:"subgroups",19:"texture-formats-tier1",20:"texture-formats-tier2",21:"primitive-index",22:"texture-component-swizzle",327692:"chromium-experimental-unorm16-texture-formats",327729:"chromium-experimental-multi-draw-indirect"},FilterMode:[,"nearest","linear"],FrontFace:[,"ccw","cw"],IndexFormat:[,"uint16","uint32"],InstanceFeatureName:[,"timed-wait-any","shader-source-spirv","multiple-devices-per-adapter"],LoadOp:[,"load","clear"],MipmapFilterMode:[,"nearest","linear"],OptionalBool:["false","true"],PowerPreference:[,"low-power","high-performance"],PredefinedColorSpace:[,"srgb","display-p3"],PrimitiveTopology:[,"point-list","line-list","line-strip","triangle-list","triangle-strip"],QueryType:[,"occlusion","timestamp"],SamplerBindingType:[,,"filtering","non-filtering","comparison"],Status:[,"success","error"],StencilOperation:[,"keep","zero","replace","invert","increment-clamp","decrement-clamp","increment-wrap","decrement-wrap"],StorageTextureAccess:[,,"write-only","read-only","read-write"],StoreOp:[,"store","discard"],SurfaceGetCurrentTextureStatus:[,"success-optimal","success-suboptimal","timeout","outdated","lost","error"],TextureAspect:[,"all","stencil-only","depth-only"],TextureDimension:[,"1d","2d","3d"],TextureFormat:[,"r8unorm","r8snorm","r8uint","r8sint","r16unorm","r16snorm","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32float","r32uint","r32sint","rg16unorm","rg16snorm","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb10a2uint","rgb10a2unorm","rg11b10ufloat","rgb9e5ufloat","rg32float","rg32uint","rg32sint","rgba16unorm","rgba16snorm","rgba16uint","rgba16sint","rgba16float","rgba32float","rgba32uint","rgba32sint","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb","etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm","astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"],TextureSampleType:[,,"float","unfilterable-float","depth","sint","uint"],TextureViewDimension:[,"1d","2d","2d-array","cube","cube-array","3d"],ToneMappingMode:[,"standard","extended"],VertexFormat:[,"uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"],VertexStepMode:[,"vertex","instance"],WGSLLanguageFeatureName:[,"readonly_and_readwrite_storage_textures","packed_4x8_integer_dot_product","unrestricted_pointer_parameters","pointer_composite_access","uniform_buffer_standard_layout","subgroup_id","texture_and_sampler_let","subgroup_uniformity","texture_formats_tier1","linear_indexing"]};var bigintToI53Checked=num=>num<-9007199254740992||num>9007199254740992?NaN:Number(num);var emwgpuStringToInt_DeviceLostReason={undefined:1,unknown:1,destroyed:2};var emwgpuStringToInt_PreferredFormat={rgba8unorm:22,bgra8unorm:27};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV)if(ENV[x]===void 0)delete env[x];else env[x]=ENV[x];var strings=[];for(var x in env)strings.push(`${x}=${env[x]}`);getEnvStrings.strings=strings}return getEnvStrings.strings};var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else buffer.push(curr)};var HEAPU16;var maybeCStringToJsString=cString=>cString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,document,window];var _exit=status=>{EXITSTATUS=status;_proc_exit(status)};var _emscripten_clear_timeout=id=>{var handle=safeSetTimeout.pending.get(id);if(!handle)return;safeSetTimeout.pending.delete(id);clearTimeout(handle)};var findCanvasEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement};Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();safeSetTimeout.pending=new Map;safeSetTimeout.nextId=1;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit==="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0)preInit.shift()()}Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;var _free,_emwgpuCreateBindGroup,_emwgpuCreateBindGroupLayout,_emwgpuCreateCommandBuffer,_emwgpuCreateCommandEncoder,_emwgpuCreateComputePassEncoder,_emwgpuCreateComputePipeline,_emwgpuCreateExternalTexture,_emwgpuCreatePipelineLayout,_emwgpuCreateQuerySet,_emwgpuCreateRenderBundle,_emwgpuCreateRenderBundleEncoder,_emwgpuCreateRenderPassEncoder,_emwgpuCreateRenderPipeline,_emwgpuCreateSampler,_emwgpuCreateSurface,_emwgpuCreateTexture,_emwgpuCreateTextureView,_emwgpuCreateAdapter,_emwgpuImportBuffer,_emwgpuCreateDevice,_emwgpuCreateQueue,_emwgpuCreateShaderModule,_emwgpuOnDeviceLostCompleted,_emwgpuOnMapAsyncCompleted,_emwgpuOnPopErrorScopeCompleted,_emwgpuOnRequestAdapterCompleted,_emwgpuOnRequestDeviceCompleted,_emwgpuOnUncapturedError,__emscripten_timeout,_malloc,_memalign,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,wasmMemory,wasmTable;function assignWasmExports(wasmExports){Module["_geo_web_start"]=wasmExports["Ea"];Module["_geo_web_resize"]=wasmExports["Fa"];Module["_geo_web_set_insets"]=wasmExports["Ga"];Module["_geo_web_set_overlay_shown"]=wasmExports["Ha"];Module["_geo_web_pointer"]=wasmExports["Ia"];Module["_geo_web_perform"]=wasmExports["Ja"];Module["_geo_web_set_selection_mode"]=wasmExports["Ka"];Module["_geo_web_set_tool"]=wasmExports["La"];Module["_geo_web_cache_version"]=wasmExports["Ma"];Module["_geo_web_default_look"]=wasmExports["Na"];Module["_geo_web_set_look"]=wasmExports["Oa"];Module["_geo_web_set_section"]=wasmExports["Pa"];Module["_geo_web_select_node"]=wasmExports["Qa"];Module["_geo_web_hover_node"]=wasmExports["Ra"];Module["_geo_web_node_action"]=wasmExports["Sa"];Module["_geo_web_open"]=wasmExports["Ta"];Module["_geo_web_close"]=wasmExports["Ua"];Module["_geo_web_staging"]=wasmExports["Va"];Module["_geo_web_stream_size"]=wasmExports["Wa"];Module["_geo_web_stream_chunk"]=wasmExports["Xa"];Module["_geo_web_import_segment"]=wasmExports["Ya"];Module["_geo_web_import_end"]=wasmExports["Za"];Module["_geo_web_refine_segment"]=wasmExports["_a"];Module["_geo_web_refine_end"]=wasmExports["$a"];Module["_geo_web_stream_end"]=wasmExports["ab"];Module["_geo_web_snapshot"]=wasmExports["bb"];Module["_geo_web_set_atlas"]=wasmExports["cb"];Module["_geo_web_last_error"]=wasmExports["db"];Module["_geo_web_request_frame"]=wasmExports["eb"];Module["_geo_web_set_view"]=wasmExports["fb"];Module["_geo_web_scene_info"]=wasmExports["gb"];Module["_geo_web_model_node_count"]=wasmExports["hb"];Module["_geo_web_model_nodes"]=wasmExports["ib"];Module["_geo_web_model_strings"]=wasmExports["jb"];Module["_geo_web_model_strings_size"]=wasmExports["kb"];Module["_geo_web_node_states"]=wasmExports["lb"];Module["_geo_web_node_state_count"]=wasmExports["mb"];Module["_geo_web_swatches"]=wasmExports["nb"];Module["_geo_web_swatch_count"]=wasmExports["ob"];Module["_geo_web_swatch_bases"]=wasmExports["pb"];Module["_geo_web_swatch_base_count"]=wasmExports["qb"];Module["_geo_web_summary"]=wasmExports["rb"];Module["_geo_web_stats"]=wasmExports["sb"];_free=Module["_free"]=wasmExports["tb"];_emwgpuCreateBindGroup=wasmExports["ub"];_emwgpuCreateBindGroupLayout=wasmExports["vb"];_emwgpuCreateCommandBuffer=wasmExports["wb"];_emwgpuCreateCommandEncoder=wasmExports["xb"];_emwgpuCreateComputePassEncoder=wasmExports["yb"];_emwgpuCreateComputePipeline=wasmExports["zb"];_emwgpuCreateExternalTexture=wasmExports["Ab"];_emwgpuCreatePipelineLayout=wasmExports["Bb"];_emwgpuCreateQuerySet=wasmExports["Cb"];_emwgpuCreateRenderBundle=wasmExports["Db"];_emwgpuCreateRenderBundleEncoder=wasmExports["Eb"];_emwgpuCreateRenderPassEncoder=wasmExports["Fb"];_emwgpuCreateRenderPipeline=wasmExports["Gb"];_emwgpuCreateSampler=wasmExports["Hb"];_emwgpuCreateSurface=wasmExports["Ib"];_emwgpuCreateTexture=wasmExports["Jb"];_emwgpuCreateTextureView=wasmExports["Kb"];_emwgpuCreateAdapter=wasmExports["Lb"];_emwgpuImportBuffer=wasmExports["Mb"];_emwgpuCreateDevice=wasmExports["Nb"];_emwgpuCreateQueue=wasmExports["Ob"];_emwgpuCreateShaderModule=wasmExports["Pb"];_emwgpuOnDeviceLostCompleted=wasmExports["Qb"];_emwgpuOnMapAsyncCompleted=wasmExports["Rb"];_emwgpuOnPopErrorScopeCompleted=wasmExports["Sb"];_emwgpuOnRequestAdapterCompleted=wasmExports["Tb"];_emwgpuOnRequestDeviceCompleted=wasmExports["Ub"];_emwgpuOnUncapturedError=wasmExports["Vb"];__emscripten_timeout=wasmExports["Xb"];_malloc=Module["_malloc"]=wasmExports["Yb"];_memalign=wasmExports["Zb"];__emscripten_stack_restore=wasmExports["_b"];__emscripten_stack_alloc=wasmExports["$b"];_emscripten_stack_get_current=wasmExports["ac"];wasmMemory=wasmExports["Ca"];wasmTable=wasmExports["Wb"]}var wasmImports={X:function(fp,sig){fp>>>=0;return getWasmTableEntry(fp)(sig)},aa:()=>abort(""),Z:()=>{noExitRuntime=false;runtimeKeepaliveCounter=0},S:(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(__emscripten_timeout,which,_emscripten_get_now())},timeout_ms);timers[which]={id,timeout_ms};return 0},T:function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>>2>>>0]=stdTimezoneOffset*60;HEAP32[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}},R:function(func,arg,millis){func>>>=0;arg>>>=0;var wrapper=()=>getWasmTableEntry(func)(arg);if(millis>=0)safeSetTimeout(wrapper,millis);else safeRequestAnimationFrame(wrapper)},xa:_emscripten_clear_timeout,G:_emscripten_get_now,P:function(cb,userData){cb>>>=0;userData>>>=0;return requestAnimationFrame(function tick(timeStamp){if(getWasmTableEntry(cb)(timeStamp,userData))requestAnimationFrame(tick)})},U:function(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize)return false;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement)return true}return false},wa:function(cb,msecs,userData){cb>>>=0;userData>>>=0;return safeSetTimeout(()=>getWasmTableEntry(cb)(userData),msecs)},ga:function(adapterPtr,futureId,deviceLostFutureId,devicePtr,queuePtr,descriptor){adapterPtr>>>=0;futureId=bigintToI53Checked(futureId);deviceLostFutureId=bigintToI53Checked(deviceLostFutureId);devicePtr>>>=0;queuePtr>>>=0;descriptor>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);var desc={};if(descriptor){var requiredFeatureCount=HEAPU32[descriptor+12>>>2>>>0];if(requiredFeatureCount){var requiredFeaturesPtr=HEAPU32[descriptor+16>>>2>>>0];desc["requiredFeatures"]=Array.from(HEAPU32.subarray(requiredFeaturesPtr>>>2>>>0,requiredFeaturesPtr+requiredFeatureCount*4>>>2>>>0),feature=>WebGPU.FeatureName[feature])}var limitsPtr=HEAPU32[descriptor+20>>>2>>>0];if(limitsPtr){var nextInChainPtr=HEAPU32[limitsPtr>>>2>>>0];var requiredLimits={};function setLimitU32IfDefined(name,basePtr,limitOffset,ignoreIfZero=false){var ptr=basePtr+limitOffset;var value=HEAPU32[ptr>>>2>>>0];if(value!=4294967295&&(!ignoreIfZero||value!=0))requiredLimits[name]=value}function setLimitU64IfDefined(name,basePtr,limitOffset){var ptr=basePtr+limitOffset;var limitPart1=HEAPU32[ptr>>>2>>>0];var limitPart2=HEAPU32[ptr+4>>>2>>>0];if(limitPart1!=4294967295||limitPart2!=4294967295)requiredLimits[name]=readI53FromI64(ptr)}setLimitU32IfDefined("maxTextureDimension1D",limitsPtr,4);setLimitU32IfDefined("maxTextureDimension2D",limitsPtr,8);setLimitU32IfDefined("maxTextureDimension3D",limitsPtr,12);setLimitU32IfDefined("maxTextureArrayLayers",limitsPtr,16);setLimitU32IfDefined("maxBindGroups",limitsPtr,20);setLimitU32IfDefined("maxBindGroupsPlusVertexBuffers",limitsPtr,24);setLimitU32IfDefined("maxBindingsPerBindGroup",limitsPtr,28);setLimitU32IfDefined("maxDynamicUniformBuffersPerPipelineLayout",limitsPtr,32);setLimitU32IfDefined("maxDynamicStorageBuffersPerPipelineLayout",limitsPtr,36);setLimitU32IfDefined("maxSampledTexturesPerShaderStage",limitsPtr,40);setLimitU32IfDefined("maxSamplersPerShaderStage",limitsPtr,44);setLimitU32IfDefined("maxStorageBuffersPerShaderStage",limitsPtr,48);setLimitU32IfDefined("maxStorageTexturesPerShaderStage",limitsPtr,52);setLimitU32IfDefined("maxUniformBuffersPerShaderStage",limitsPtr,56);setLimitU32IfDefined("minUniformBufferOffsetAlignment",limitsPtr,80);setLimitU32IfDefined("minStorageBufferOffsetAlignment",limitsPtr,84);setLimitU64IfDefined("maxUniformBufferBindingSize",limitsPtr,64);setLimitU64IfDefined("maxStorageBufferBindingSize",limitsPtr,72);setLimitU32IfDefined("maxVertexBuffers",limitsPtr,88);setLimitU64IfDefined("maxBufferSize",limitsPtr,96);setLimitU32IfDefined("maxVertexAttributes",limitsPtr,104);setLimitU32IfDefined("maxVertexBufferArrayStride",limitsPtr,108);setLimitU32IfDefined("maxInterStageShaderVariables",limitsPtr,112);setLimitU32IfDefined("maxColorAttachments",limitsPtr,116);setLimitU32IfDefined("maxColorAttachmentBytesPerSample",limitsPtr,120);setLimitU32IfDefined("maxComputeWorkgroupStorageSize",limitsPtr,124);setLimitU32IfDefined("maxComputeInvocationsPerWorkgroup",limitsPtr,128);setLimitU32IfDefined("maxComputeWorkgroupSizeX",limitsPtr,132);setLimitU32IfDefined("maxComputeWorkgroupSizeY",limitsPtr,136);setLimitU32IfDefined("maxComputeWorkgroupSizeZ",limitsPtr,140);setLimitU32IfDefined("maxComputeWorkgroupsPerDimension",limitsPtr,144);setLimitU32IfDefined("maxImmediateSize",limitsPtr,148,true);if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var compatibilityModeLimitsPtr=nextInChainPtr;if("maxStorageBuffersInVertexStage"in GPUSupportedLimits.prototype){setLimitU32IfDefined("maxStorageBuffersInVertexStage",compatibilityModeLimitsPtr,8);setLimitU32IfDefined("maxStorageTexturesInVertexStage",compatibilityModeLimitsPtr,12);setLimitU32IfDefined("maxStorageBuffersInFragmentStage",compatibilityModeLimitsPtr,16);setLimitU32IfDefined("maxStorageTexturesInFragmentStage",compatibilityModeLimitsPtr,20)}}desc["requiredLimits"]=requiredLimits}var defaultQueuePtr=HEAPU32[descriptor+24>>>2>>>0];if(defaultQueuePtr){var defaultQueueDesc={label:WebGPU.makeStringFromOptionalStringView(defaultQueuePtr+4)};desc["defaultQueue"]=defaultQueueDesc}desc["label"]=WebGPU.makeStringFromOptionalStringView(descriptor+4)}WebGPU.Internals.futureInsert(futureId,adapter.requestDevice(desc).then(device=>{callUserCallback(()=>{WebGPU.Internals.jsObjectInsert(queuePtr,device.queue);WebGPU.Internals.jsObjectInsert(devicePtr,device);WebGPU.Internals.futureInsert(deviceLostFutureId,device.lost.then(info=>{callUserCallback(()=>{device.onuncapturederror=()=>{};var sp=stackSave();var messagePtr=stringToUTF8OnStack(info.message);_emwgpuOnDeviceLostCompleted(deviceLostFutureId,emwgpuStringToInt_DeviceLostReason[info.reason],messagePtr);stackRestore(sp)})}));device.onuncapturederror=ev=>{var type=5;if(ev.error instanceof GPUValidationError)type=2;else if(ev.error instanceof GPUOutOfMemoryError)type=3;else if(ev.error instanceof GPUInternalError)type=4;var sp=stackSave();var messagePtr=stringToUTF8OnStack(ev.error.message);_emwgpuOnUncapturedError(devicePtr,type,messagePtr);stackRestore(sp)};_emwgpuOnRequestDeviceCompleted(futureId,1,devicePtr,0)})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestDeviceCompleted(futureId,3,devicePtr,messagePtr);if(deviceLostFutureId)_emwgpuOnDeviceLostCompleted(deviceLostFutureId,4,messagePtr);stackRestore(sp)})}))},v:function(bufferPtr,offset,size){bufferPtr>>>=0;offset>>>=0;size>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);if(size==4294967295)size=void 0;var mapped;try{mapped=buffer.getMappedRange(offset,size)}catch(ex){return 0}var data=_memalign(16,mapped.byteLength);HEAPU8.set(new Uint8Array(mapped),data>>>0);WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(()=>_free(data));return data},ja:function(bufferPtr,futureId,mode,offset,size){bufferPtr>>>=0;futureId=bigintToI53Checked(futureId);mode=bigintToI53Checked(mode);offset>>>=0;size>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[];if(size==4294967295)size=void 0;WebGPU.Internals.futureInsert(futureId,buffer.mapAsync(mode,offset,size).then(()=>{callUserCallback(()=>{_emwgpuOnMapAsyncCompleted(futureId,1,0)})},ex=>{callUserCallback(()=>{stackSave();var messagePtr=stringToUTF8OnStack(ex.message);var status=ex.name==="AbortError"?4:ex.name==="OperationError"?3:0;_emwgpuOnMapAsyncCompleted(futureId,status,messagePtr);delete WebGPU.Internals.bufferOnUnmaps[bufferPtr]})}))},u:function(bufferPtr){bufferPtr>>>=0;var buffer=WebGPU.getJsObject(bufferPtr);var onUnmap=WebGPU.Internals.bufferOnUnmaps[bufferPtr];if(!onUnmap)return;for(var i=0;i<onUnmap.length;++i)onUnmap[i]();delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];buffer.unmap()},a:function(ptr){ptr>>>=0;delete WebGPU.Internals.jsObjects[ptr]},c:function(devicePtr,descriptor,bufferPtr){devicePtr>>>=0;descriptor>>>=0;bufferPtr>>>=0;var mappedAtCreation=!!HEAPU32[descriptor+32>>>2>>>0];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),usage:HEAPU32[descriptor+16>>>2>>>0],size:readI53FromI64(descriptor+24),mappedAtCreation};var device=WebGPU.getJsObject(devicePtr);var buffer;try{buffer=device.createBuffer(desc)}catch(ex){return false}WebGPU.Internals.jsObjectInsert(bufferPtr,buffer);if(mappedAtCreation)WebGPU.Internals.bufferOnUnmaps[bufferPtr]=[];return true},n:function(devicePtr,descriptor,shaderModulePtr){devicePtr>>>=0;descriptor>>>=0;shaderModulePtr>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var sType=HEAP32[nextInChainPtr+4>>>2>>>0];var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),code:""};switch(sType){case 2:desc["code"]=WebGPU.makeStringFromStringView(nextInChainPtr+8);break}var device=WebGPU.getJsObject(devicePtr);WebGPU.Internals.jsObjectInsert(shaderModulePtr,device.createShaderModule(desc))},ha:devicePtr=>{const device=WebGPU.getJsObject(devicePtr);device.onuncapturederror=null;device.destroy()},fa:function(devicePtr,futureId){devicePtr>>>=0;futureId=bigintToI53Checked(futureId);var device=WebGPU.getJsObject(devicePtr);WebGPU.Internals.futureInsert(futureId,device.popErrorScope().then(gpuError=>{callUserCallback(()=>{var type=5;if(!gpuError)type=1;else if(gpuError instanceof GPUValidationError)type=2;else if(gpuError instanceof GPUOutOfMemoryError)type=3;else if(gpuError instanceof GPUInternalError)type=4;var sp=stackSave();var messagePtr=gpuError?stringToUTF8OnStack(gpuError.message):0;_emwgpuOnPopErrorScopeCompleted(futureId,1,type,messagePtr);stackRestore(sp)})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnPopErrorScopeCompleted(futureId,1,5,messagePtr);stackRestore(sp)})}))},da:()=>{var format=navigator.gpu.getPreferredCanvasFormat();return emwgpuStringToInt_PreferredFormat[format]},ea:function(instancePtr,futureId,options,adapterPtr){instancePtr>>>=0;futureId=bigintToI53Checked(futureId);options>>>=0;adapterPtr>>>=0;var opts;if(options){opts={featureLevel:WebGPU.FeatureLevel[HEAP32[options+4>>>2>>>0]],powerPreference:WebGPU.PowerPreference[HEAP32[options+8>>>2>>>0]],forceFallbackAdapter:!!HEAPU32[options+12>>>2>>>0]};var nextInChainPtr=HEAPU32[options>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var webxrOptions=nextInChainPtr;opts.xrCompatible=!!HEAPU32[webxrOptions+8>>>2>>>0]}}if(!("gpu"in navigator)){var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (navigator.gpu is not available)");_emwgpuOnRequestAdapterCompleted(futureId,3,adapterPtr,messagePtr);stackRestore(sp);return}WebGPU.Internals.futureInsert(futureId,navigator.gpu.requestAdapter(opts).then(adapter=>{callUserCallback(()=>{if(adapter){WebGPU.Internals.jsObjectInsert(adapterPtr,adapter);_emwgpuOnRequestAdapterCompleted(futureId,1,adapterPtr,0)}else{var sp=stackSave();var messagePtr=stringToUTF8OnStack("WebGPU not available on this browser (requestAdapter returned null)");_emwgpuOnRequestAdapterCompleted(futureId,3,adapterPtr,messagePtr);stackRestore(sp)}})},ex=>{callUserCallback(()=>{var sp=stackSave();var messagePtr=stringToUTF8OnStack(ex.message);_emwgpuOnRequestAdapterCompleted(futureId,4,adapterPtr,messagePtr);stackRestore(sp)})}))},ca:function(futurePtr,futureCount,timeoutMSPtr){futurePtr>>>=0;futureCount>>>=0;timeoutMSPtr>>>=0;abort("TODO: Implement asyncify-free WaitAny for timeout=0")},_:function(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>>2>>>0]=ptr;bufSize+=stringToUTF8(string,ptr,1/0)+1;envp+=4}return 0},$:function(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;for(var string of strings)bufSize+=lengthBytesUTF8(string)+1;HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0},W:()=>52,V:function(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);newOffset>>>=0;return 70},I:function(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;for(var j=0;j<len;j++)printChar(fd,HEAPU8[ptr+j>>>0]);num+=len}HEAPU32[pnum>>>2>>>0]=num;return 0},ma:function(token){Module.geoHost.cancelImport(token)},ba:function(){Module.geoHost.cancelRefinement()},sa:function(kind,document,node,done,total,message){Module.geoHost.event(kind,document,node,done,total,UTF8ToString(message))},H:function(message){Module.geoHost.failed(UTF8ToString(message))},Ba:function(format){Module.geoHost.ready(format)},F:function(running){Module.geoHost.runFrames(running!=0)},D:function(pixels,width,height,bgra){Module.geoHost.snapshot(pixels,width,height,bgra!=0)},na:function(token,path){Module.geoHost.startImport(token,UTF8ToString(path))},ia:function(token,path,level,definitions,count){Module.geoHost.startRefinement(token,UTF8ToString(path),level,HEAPU32.slice(definitions>>2,(definitions>>2)+count))},Y:_proc_exit,Aa:function(adapterPtr,limitsOutPtr){adapterPtr>>>=0;limitsOutPtr>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);WebGPU.fillLimitStruct(adapter.limits,limitsOutPtr);return 1},za:function(adapterPtr,featureEnumValue){adapterPtr>>>=0;var adapter=WebGPU.getJsObject(adapterPtr);return adapter.features.has(WebGPU.FeatureName[featureEnumValue])},g:function(bufferPtr){bufferPtr>>>=0;var ret=(()=>{var buffer=WebGPU.getJsObject(bufferPtr);return buffer.size})();return BigInt(ret)},M:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),timestampWrites:WebGPU.makePassTimestampWrites(HEAPU32[descriptor+12>>>2>>>0])};var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateComputePassEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.beginComputePass(desc));return ptr},p:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;function makeColorAttachment(caPtr){var viewPtr=HEAPU32[caPtr+4>>>2>>>0];if(viewPtr===0)return;var depthSlice=HEAPU32[caPtr+8>>>2>>>0];if(depthSlice==4294967295)depthSlice=void 0;return{view:WebGPU.getJsObject(viewPtr),depthSlice,resolveTarget:WebGPU.getJsObject(HEAPU32[caPtr+12>>>2>>>0]),clearValue:WebGPU.makeColor(caPtr+24),loadOp:WebGPU.LoadOp[HEAP32[caPtr+16>>>2>>>0]],storeOp:WebGPU.StoreOp[HEAP32[caPtr+20>>>2>>>0]]}}function makeColorAttachments(count,caPtr){var attachments=[];for(var i=0;i<count;++i)attachments.push(makeColorAttachment(caPtr+56*i));return attachments}function makeDepthStencilAttachment(dsaPtr){if(dsaPtr===0)return;return{view:WebGPU.getJsObject(HEAPU32[dsaPtr+4>>>2>>>0]),depthClearValue:HEAPF32[dsaPtr+16>>>2>>>0],depthLoadOp:WebGPU.LoadOp[HEAP32[dsaPtr+8>>>2>>>0]],depthStoreOp:WebGPU.StoreOp[HEAP32[dsaPtr+12>>>2>>>0]],depthReadOnly:!!HEAPU32[dsaPtr+20>>>2>>>0],stencilClearValue:HEAPU32[dsaPtr+32>>>2>>>0],stencilLoadOp:WebGPU.LoadOp[HEAP32[dsaPtr+24>>>2>>>0]],stencilStoreOp:WebGPU.StoreOp[HEAP32[dsaPtr+28>>>2>>>0]],stencilReadOnly:!!HEAPU32[dsaPtr+36>>>2>>>0]}}var desc=function(descriptor){var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var maxDrawCount=void 0;if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var renderPassMaxDrawCount=nextInChainPtr;maxDrawCount=readI53FromI64(renderPassMaxDrawCount+8)}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),colorAttachments:makeColorAttachments(HEAPU32[descriptor+12>>>2>>>0],HEAPU32[descriptor+16>>>2>>>0]),depthStencilAttachment:makeDepthStencilAttachment(HEAPU32[descriptor+20>>>2>>>0]),occlusionQuerySet:WebGPU.getJsObject(HEAPU32[descriptor+24>>>2>>>0]),timestampWrites:WebGPU.makePassTimestampWrites(HEAPU32[descriptor+28>>>2>>>0]),maxDrawCount};return desc}(descriptor);var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateRenderPassEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.beginRenderPass(desc));return ptr},N:function(encoderPtr,srcPtr,srcOffset,dstPtr,dstOffset,size){encoderPtr>>>=0;srcPtr>>>=0;srcOffset=bigintToI53Checked(srcOffset);dstPtr>>>=0;dstOffset=bigintToI53Checked(dstOffset);size=bigintToI53Checked(size);var commandEncoder=WebGPU.getJsObject(encoderPtr);var src=WebGPU.getJsObject(srcPtr);var dst=WebGPU.getJsObject(dstPtr);commandEncoder.copyBufferToBuffer(src,srcOffset,dst,dstOffset,size)},m:function(encoderPtr,srcPtr,dstPtr,copySizePtr){encoderPtr>>>=0;srcPtr>>>=0;dstPtr>>>=0;copySizePtr>>>=0;var commandEncoder=WebGPU.getJsObject(encoderPtr);var copySize=WebGPU.makeExtent3D(copySizePtr);commandEncoder.copyTextureToBuffer(WebGPU.makeTexelCopyTextureInfo(srcPtr),WebGPU.makeTexelCopyBufferInfo(dstPtr),copySize)},y:function(encoderPtr,descriptor){encoderPtr>>>=0;descriptor>>>=0;var commandEncoder=WebGPU.getJsObject(encoderPtr);var ptr=_emwgpuCreateCommandBuffer(0);WebGPU.Internals.jsObjectInsert(ptr,commandEncoder.finish());return ptr},ka:function(encoderPtr,querySetPtr,firstQuery,queryCount,destinationPtr,destinationOffset){encoderPtr>>>=0;querySetPtr>>>=0;destinationPtr>>>=0;destinationOffset=bigintToI53Checked(destinationOffset);var commandEncoder=WebGPU.getJsObject(encoderPtr);var querySet=WebGPU.getJsObject(querySetPtr);var destination=WebGPU.getJsObject(destinationPtr);commandEncoder.resolveQuerySet(querySet,firstQuery,queryCount,destination,destinationOffset)},q:function(passPtr,x,y,z){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.dispatchWorkgroups(x,y,z)},L:function(passPtr){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.end()},B:function(passPtr,groupIndex,groupPtr,dynamicOffsetCount,dynamicOffsetsPtr){passPtr>>>=0;groupPtr>>>=0;dynamicOffsetCount>>>=0;dynamicOffsetsPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var group=WebGPU.getJsObject(groupPtr);if(dynamicOffsetCount==0)pass.setBindGroup(groupIndex,group);else pass.setBindGroup(groupIndex,group,HEAPU32,dynamicOffsetsPtr>>>2,dynamicOffsetCount)},r:function(passPtr,pipelinePtr){passPtr>>>=0;pipelinePtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var pipeline=WebGPU.getJsObject(pipelinePtr);pass.setPipeline(pipeline)},oa:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;function makeEntry(entryPtr){var bufferPtr=HEAPU32[entryPtr+8>>>2>>>0];var samplerPtr=HEAPU32[entryPtr+32>>>2>>>0];var textureViewPtr=HEAPU32[entryPtr+36>>>2>>>0];var externalTexturePtr=0;WebGPU.iterateExtensions(entryPtr,{14:ptr=>{externalTexturePtr=HEAPU32[ptr+8>>>2>>>0]}});var resource;if(bufferPtr){var size=readI53FromI64(entryPtr+24);if(size==-1)size=void 0;resource={buffer:WebGPU.getJsObject(bufferPtr),offset:readI53FromI64(entryPtr+16),size}}else resource=WebGPU.getJsObject(samplerPtr||textureViewPtr||externalTexturePtr);return{binding:HEAPU32[entryPtr+4>>>2>>>0],resource}}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),layout:WebGPU.getJsObject(HEAPU32[descriptor+12>>>2>>>0]),entries:function(count,entriesPtrs){var entries=[];for(var i=0;i<count;++i)entries.push(makeEntry(entriesPtrs+40*i));return entries}(HEAPU32[descriptor+16>>>2>>>0],HEAPU32[descriptor+20>>>2>>>0])};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateBindGroup(0);WebGPU.Internals.jsObjectInsert(ptr,device.createBindGroup(desc));return ptr},i:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;function makeBufferEntry(substructPtr){var typeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!typeInt)return;return{type:WebGPU.BufferBindingType[typeInt],hasDynamicOffset:!!HEAPU32[substructPtr+8>>>2>>>0],minBindingSize:readI53FromI64(substructPtr+16)}}function makeSamplerEntry(substructPtr){var typeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!typeInt)return;return{type:WebGPU.SamplerBindingType[typeInt]}}function makeTextureEntry(substructPtr){var sampleTypeInt=HEAPU32[substructPtr+4>>>2>>>0];if(!sampleTypeInt)return;return{sampleType:WebGPU.TextureSampleType[sampleTypeInt],viewDimension:WebGPU.TextureViewDimension[HEAP32[substructPtr+8>>>2>>>0]],multisampled:!!HEAPU32[substructPtr+12>>>2>>>0]}}function makeStorageTextureEntry(substructPtr){var accessInt=HEAPU32[substructPtr+4>>>2>>>0];if(!accessInt)return;return{access:WebGPU.StorageTextureAccess[accessInt],format:WebGPU.TextureFormat[HEAP32[substructPtr+8>>>2>>>0]],viewDimension:WebGPU.TextureViewDimension[HEAP32[substructPtr+12>>>2>>>0]]}}function makeEntry(entryPtr){var entry={binding:HEAPU32[entryPtr+4>>>2>>>0],visibility:HEAPU32[entryPtr+8>>>2>>>0],buffer:makeBufferEntry(entryPtr+24),sampler:makeSamplerEntry(entryPtr+48),texture:makeTextureEntry(entryPtr+56),storageTexture:makeStorageTextureEntry(entryPtr+72)};WebGPU.iterateExtensions(entryPtr,{13:()=>{entry["externalTexture"]={}}});return entry}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),entries:function(count,entriesPtrs){var entries=[];for(var i=0;i<count;++i)entries.push(makeEntry(entriesPtrs+88*i));return entries}(HEAPU32[descriptor+12>>>2>>>0],HEAPU32[descriptor+16>>>2>>>0])};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateBindGroupLayout(0);WebGPU.Internals.jsObjectInsert(ptr,device.createBindGroupLayout(desc));return ptr},z:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4)};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateCommandEncoder(0);WebGPU.Internals.jsObjectInsert(ptr,device.createCommandEncoder(desc));return ptr},s:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc=WebGPU.makeComputePipelineDesc(descriptor);var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateComputePipeline(0);WebGPU.Internals.jsObjectInsert(ptr,device.createComputePipeline(desc));return ptr},ua:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var bglCount=HEAPU32[descriptor+12>>>2>>>0];var bglPtr=HEAPU32[descriptor+16>>>2>>>0];var bgls=[];for(var i=0;i<bglCount;++i)bgls.push(WebGPU.getJsObject(HEAPU32[bglPtr+4*i>>>2>>>0]));var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),bindGroupLayouts:bgls};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreatePipelineLayout(0);WebGPU.Internals.jsObjectInsert(ptr,device.createPipelineLayout(desc));return ptr},qa:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc={type:WebGPU.QueryType[HEAP32[descriptor+12>>>2>>>0]],count:HEAPU32[descriptor+16>>>2>>>0]};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateQuerySet(0);WebGPU.Internals.jsObjectInsert(ptr,device.createQuerySet(desc));return ptr},E:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc=WebGPU.makeRenderPipelineDesc(descriptor);var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateRenderPipeline(0);WebGPU.Internals.jsObjectInsert(ptr,device.createRenderPipeline(desc));return ptr},ta:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var desc;if(descriptor)desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),addressModeU:WebGPU.AddressMode[HEAP32[descriptor+12>>>2>>>0]],addressModeV:WebGPU.AddressMode[HEAP32[descriptor+16>>>2>>>0]],addressModeW:WebGPU.AddressMode[HEAP32[descriptor+20>>>2>>>0]],magFilter:WebGPU.FilterMode[HEAP32[descriptor+24>>>2>>>0]],minFilter:WebGPU.FilterMode[HEAP32[descriptor+28>>>2>>>0]],mipmapFilter:WebGPU.MipmapFilterMode[HEAP32[descriptor+32>>>2>>>0]],lodMinClamp:HEAPF32[descriptor+36>>>2>>>0],lodMaxClamp:HEAPF32[descriptor+40>>>2>>>0],compare:WebGPU.CompareFunction[HEAP32[descriptor+44>>>2>>>0]],maxAnisotropy:HEAPU16[descriptor+48>>>1>>>0]};var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateSampler(0);WebGPU.Internals.jsObjectInsert(ptr,device.createSampler(desc));return ptr},e:function(devicePtr,descriptor){devicePtr>>>=0;descriptor>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var textureBindingViewDimension;if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var textureBindingViewDimensionDescriptor=nextInChainPtr;textureBindingViewDimension=WebGPU.TextureViewDimension[HEAP32[textureBindingViewDimensionDescriptor+8>>>2>>>0]]}var desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),size:WebGPU.makeExtent3D(descriptor+28),mipLevelCount:HEAPU32[descriptor+44>>>2>>>0],sampleCount:HEAPU32[descriptor+48>>>2>>>0],dimension:WebGPU.TextureDimension[HEAP32[descriptor+24>>>2>>>0]],format:WebGPU.TextureFormat[HEAP32[descriptor+40>>>2>>>0]],usage:HEAPU32[descriptor+16>>>2>>>0],textureBindingViewDimension};var viewFormatCount=HEAPU32[descriptor+52>>>2>>>0];if(viewFormatCount){var viewFormatsPtr=HEAPU32[descriptor+56>>>2>>>0];desc["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>>2>>>0,viewFormatsPtr+viewFormatCount*4>>>2>>>0),format=>WebGPU.TextureFormat[format])}var device=WebGPU.getJsObject(devicePtr);var ptr=_emwgpuCreateTexture(0);WebGPU.Internals.jsObjectInsert(ptr,device.createTexture(desc));return ptr},va:function(devicePtr,limitsOutPtr){devicePtr>>>=0;limitsOutPtr>>>=0;var device=WebGPU.getJsObject(devicePtr);WebGPU.fillLimitStruct(device.limits,limitsOutPtr);return 1},ra:function(devicePtr,featureEnumValue){devicePtr>>>=0;var device=WebGPU.getJsObject(devicePtr);return device.features.has(WebGPU.FeatureName[featureEnumValue])},C:function(devicePtr,filter){devicePtr>>>=0;var device=WebGPU.getJsObject(devicePtr);device.pushErrorScope(WebGPU.ErrorFilter[filter])},ya:function(instancePtr,descriptor){instancePtr>>>=0;descriptor>>>=0;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];var sourceCanvasHTMLSelector=nextInChainPtr;var selectorPtr=HEAPU32[sourceCanvasHTMLSelector+8>>>2>>>0];var canvas=findCanvasEventTarget(selectorPtr);var context=canvas.getContext("webgpu");if(!context)return 0;context.surfaceLabelWebGPU=WebGPU.makeStringFromOptionalStringView(descriptor+4);var ptr=_emwgpuCreateSurface(0);WebGPU.Internals.jsObjectInsert(ptr,context);return ptr},t:function(queuePtr,commandCount,commands){queuePtr>>>=0;commandCount>>>=0;commands>>>=0;var queue=WebGPU.getJsObject(queuePtr);var cmds=Array.from(HEAP32.subarray(commands>>>2>>>0,commands+commandCount*4>>>2>>>0),id=>WebGPU.getJsObject(id));queue.submit(cmds)},d:function(queuePtr,bufferPtr,bufferOffset,data,size){queuePtr>>>=0;bufferPtr>>>=0;bufferOffset=bigintToI53Checked(bufferOffset);data>>>=0;size>>>=0;var queue=WebGPU.getJsObject(queuePtr);var buffer=WebGPU.getJsObject(bufferPtr);var subarray=HEAPU8.subarray(data>>>0,data+size>>>0);queue.writeBuffer(buffer,bufferOffset,subarray,0,size)},pa:function(queuePtr,destinationPtr,data,dataSize,dataLayoutPtr,writeSizePtr){queuePtr>>>=0;destinationPtr>>>=0;data>>>=0;dataSize>>>=0;dataLayoutPtr>>>=0;writeSizePtr>>>=0;var queue=WebGPU.getJsObject(queuePtr);var destination=WebGPU.makeTexelCopyTextureInfo(destinationPtr);var dataLayout=WebGPU.makeTexelCopyBufferLayout(dataLayoutPtr);var writeSize=WebGPU.makeExtent3D(writeSizePtr);var subarray=HEAPU8.subarray(data>>>0,data+dataSize>>>0);queue.writeTexture(destination,subarray,dataLayout,writeSize)},w:function(passPtr,vertexCount,instanceCount,firstVertex,firstInstance){passPtr>>>=0;firstVertex>>>=0;firstInstance>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.draw(vertexCount,instanceCount,firstVertex,firstInstance)},x:function(passPtr,indirectBufferPtr,indirectOffset){passPtr>>>=0;indirectBufferPtr>>>=0;indirectOffset=bigintToI53Checked(indirectOffset);var pass=WebGPU.getJsObject(passPtr);var indirectBuffer=WebGPU.getJsObject(indirectBufferPtr);pass.drawIndexedIndirect(indirectBuffer,indirectOffset)},J:function(passPtr,indirectBufferPtr,indirectOffset){passPtr>>>=0;indirectBufferPtr>>>=0;indirectOffset=bigintToI53Checked(indirectOffset);var pass=WebGPU.getJsObject(passPtr);var indirectBuffer=WebGPU.getJsObject(indirectBufferPtr);pass.drawIndirect(indirectBuffer,indirectOffset)},o:function(encoderPtr){encoderPtr>>>=0;var encoder=WebGPU.getJsObject(encoderPtr);encoder.end()},f:function(passPtr,groupIndex,groupPtr,dynamicOffsetCount,dynamicOffsetsPtr){passPtr>>>=0;groupPtr>>>=0;dynamicOffsetCount>>>=0;dynamicOffsetsPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var group=WebGPU.getJsObject(groupPtr);if(dynamicOffsetCount==0)pass.setBindGroup(groupIndex,group);else pass.setBindGroup(groupIndex,group,HEAPU32,dynamicOffsetsPtr>>>2,dynamicOffsetCount)},la:function(passPtr,colorPtr){passPtr>>>=0;colorPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var color=WebGPU.makeColor(colorPtr);pass.setBlendConstant(color)},A:function(passPtr,bufferPtr,format,offset,size){passPtr>>>=0;bufferPtr>>>=0;offset=bigintToI53Checked(offset);size=bigintToI53Checked(size);var pass=WebGPU.getJsObject(passPtr);var buffer=WebGPU.getJsObject(bufferPtr);if(size==-1)size=void 0;pass.setIndexBuffer(buffer,WebGPU.IndexFormat[format],offset,size)},h:function(passPtr,pipelinePtr){passPtr>>>=0;pipelinePtr>>>=0;var pass=WebGPU.getJsObject(passPtr);var pipeline=WebGPU.getJsObject(pipelinePtr);pass.setPipeline(pipeline)},K:function(passPtr,x,y,w,h,minDepth,maxDepth){passPtr>>>=0;var pass=WebGPU.getJsObject(passPtr);pass.setViewport(x,y,w,h,minDepth,maxDepth)},Q:function(surfacePtr,config){surfacePtr>>>=0;config>>>=0;var context=WebGPU.getJsObject(surfacePtr);var canvasSize=[HEAPU32[config+24>>>2>>>0],HEAPU32[config+28>>>2>>>0]];if(canvasSize[0]!==0)context["canvas"]["width"]=canvasSize[0];if(canvasSize[1]!==0)context["canvas"]["height"]=canvasSize[1];var configuration={device:WebGPU.getJsObject(HEAPU32[config+4>>>2>>>0]),format:WebGPU.TextureFormat[HEAP32[config+8>>>2>>>0]],usage:HEAPU32[config+16>>>2>>>0],alphaMode:WebGPU.CompositeAlphaMode[HEAP32[config+40>>>2>>>0]]};var viewFormatCount=HEAPU32[config+32>>>2>>>0];if(viewFormatCount){var viewFormatsPtr=HEAPU32[config+36>>>2>>>0];configuration["viewFormats"]=Array.from(HEAP32.subarray(viewFormatsPtr>>>2>>>0,viewFormatsPtr+viewFormatCount*4>>>2>>>0),format=>WebGPU.TextureFormat[format])}var nextInChainPtr=HEAPU32[config>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var surfaceColorManagement=nextInChainPtr;configuration.colorSpace=WebGPU.PredefinedColorSpace[HEAP32[surfaceColorManagement+8>>>2>>>0]];configuration.toneMapping={mode:WebGPU.ToneMappingMode[HEAP32[surfaceColorManagement+12>>>2>>>0]]}}context.configure(configuration)},O:function(surfacePtr,surfaceTexturePtr){surfacePtr>>>=0;surfaceTexturePtr>>>=0;var context=WebGPU.getJsObject(surfacePtr);try{var texturePtr=_emwgpuCreateTexture(0);WebGPU.Internals.jsObjectInsert(texturePtr,context.getCurrentTexture());HEAPU32[surfaceTexturePtr+4>>>2>>>0]=texturePtr;HEAP32[surfaceTexturePtr+8>>>2>>>0]=1}catch(ex){HEAPU32[surfaceTexturePtr+4>>>2>>>0]=0;HEAP32[surfaceTexturePtr+8>>>2>>>0]=6}},b:function(texturePtr,descriptor){texturePtr>>>=0;descriptor>>>=0;var desc;if(descriptor){var swizzle;var nextInChainPtr=HEAPU32[descriptor>>>2>>>0];if(nextInChainPtr!==0){HEAP32[nextInChainPtr+4>>>2>>>0];var swizzleDescriptor=nextInChainPtr;var swizzlePtr=swizzleDescriptor+8;var r=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr>>>2>>>0]]||"r";var g=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+4>>>2>>>0]]||"g";var b=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+8>>>2>>>0]]||"b";var a=WebGPU.ComponentSwizzle[HEAP32[swizzlePtr+12>>>2>>>0]]||"a";swizzle=`${r}${g}${b}${a}`}var mipLevelCount=HEAPU32[descriptor+24>>>2>>>0];var arrayLayerCount=HEAPU32[descriptor+32>>>2>>>0];desc={label:WebGPU.makeStringFromOptionalStringView(descriptor+4),format:WebGPU.TextureFormat[HEAP32[descriptor+12>>>2>>>0]],dimension:WebGPU.TextureViewDimension[HEAP32[descriptor+16>>>2>>>0]],baseMipLevel:HEAPU32[descriptor+20>>>2>>>0],mipLevelCount:mipLevelCount===4294967295?void 0:mipLevelCount,baseArrayLayer:HEAPU32[descriptor+28>>>2>>>0],arrayLayerCount:arrayLayerCount===4294967295?void 0:arrayLayerCount,aspect:WebGPU.TextureAspect[HEAP32[descriptor+36>>>2>>>0]],usage:HEAPU32[descriptor+40>>>2>>>0],swizzle}}var texture=WebGPU.getJsObject(texturePtr);var ptr=_emwgpuCreateTextureView(0);WebGPU.Internals.jsObjectInsert(ptr,texture.createView(desc));return ptr},j:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return WebGPU.TextureFormat.indexOf(texture.format)},k:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return texture.height},l:function(texturePtr){texturePtr>>>=0;var texture=WebGPU.getJsObject(texturePtr);return texture.width}};function applySignatureConversions(wasmExports){var makeWrapper_pp=f=>a0=>f(a0)>>>0;var origExports=wasmExports;wasmExports={};wasmExports["Yb"]=makeWrapper_pp(origExports["Yb"]);wasmExports["Zb"]=(f=>(a0,a1)=>f(a0,a1)>>>0)(origExports["Zb"]);wasmExports["$b"]=makeWrapper_pp(origExports["$b"]);wasmExports["ac"]=(f=>()=>f()>>>0)(origExports["ac"]);Object.setPrototypeOf(wasmExports,origExports);return wasmExports}var wasmExports;wasmExports=await async function(){function receiveInstance(instance){wasmExports=instance.exports;wasmExports=applySignatureConversions(wasmExports);assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm)return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))});wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(void 0,wasmBinaryFile,info);var exports=function(result){return receiveInstance(result["instance"])}(result);return exports}();await async function(){preRun();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}();
|
|
2
2
|
;return Module}export default createGeometryView;
|
|
Binary file
|
package/web/chrome.js
CHANGED
|
@@ -384,11 +384,15 @@ export class Toolbar {
|
|
|
384
384
|
|
|
385
385
|
// ---- The masthead -----------------------------------------------------------------------------
|
|
386
386
|
|
|
387
|
+
// What is open, with a button that closes it, a line about it, and import progress.
|
|
387
388
|
export class Masthead {
|
|
388
389
|
#title = el("div.title");
|
|
390
|
+
#close = pill({ icon: icons.close, help: "Close", style: "ghostly", onPress: () => this.onClose?.() });
|
|
389
391
|
#subtitle = el("div.subtitle");
|
|
390
392
|
#bar = el("div.progress", { hidden: true }, [el("div.fill")]);
|
|
391
|
-
element = el("header.masthead", { hidden: true },
|
|
393
|
+
element = el("header.masthead", { hidden: true },
|
|
394
|
+
[el("div.title-row", {}, [this.#title, this.#close]), this.#subtitle, this.#bar]);
|
|
395
|
+
onClose = null;
|
|
392
396
|
|
|
393
397
|
show(title, subtitle) {
|
|
394
398
|
this.#title.textContent = title;
|
|
@@ -519,7 +523,7 @@ export class ShortcutsSheet {
|
|
|
519
523
|
[["1", "2", "3"], "Clicks select faces, bodies or parts"],
|
|
520
524
|
[["H", "Click"], "Hide what you click"],
|
|
521
525
|
[["G", "Click"], "Ghost, or bring back a ghost"],
|
|
522
|
-
[["⇧H"], "Show everything"],
|
|
526
|
+
[["⇧H"], "Show everything, ghosts included"],
|
|
523
527
|
[["⇧G"], "Unghost everything"],
|
|
524
528
|
[["I"], "Isolate the selection"],
|
|
525
529
|
[["⌘", "Z"], "Undo, with ⇧ to redo"],
|
|
@@ -527,7 +531,7 @@ export class ShortcutsSheet {
|
|
|
527
531
|
[["P"], "Orthographic or perspective"],
|
|
528
532
|
[["T"], "See through the housing"],
|
|
529
533
|
[["S"], "Section across X"],
|
|
530
|
-
[["Esc"], "
|
|
534
|
+
[["Esc"], "Close a card, or clear the selection"],
|
|
531
535
|
[["⌘O"], "Open a file"],
|
|
532
536
|
[["?"], "This sheet"],
|
|
533
537
|
];
|
package/web/engine.js
CHANGED
|
@@ -210,6 +210,11 @@ export class Engine {
|
|
|
210
210
|
});
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
// Closes everything open, stopping its imports, and draws the empty view.
|
|
214
|
+
close() {
|
|
215
|
+
this.#module._geo_web_close();
|
|
216
|
+
}
|
|
217
|
+
|
|
213
218
|
// One whole segment, for the import of `token`. False if the engine refused it or the import
|
|
214
219
|
// was cancelled.
|
|
215
220
|
importSegment(token, bytes) {
|
package/web/structure.js
CHANGED
|
@@ -202,7 +202,8 @@ export class StructureCard {
|
|
|
202
202
|
this.#list.element.addEventListener("pointerleave", () => this.#hoverRow(-1));
|
|
203
203
|
this.#hiddenLabel = el("span");
|
|
204
204
|
this.#ghostedLabel = el("span");
|
|
205
|
-
this.#showAll = pill({ title: "Show all",
|
|
205
|
+
this.#showAll = pill({ title: "Show all", help: "Show everything, ghosts included (⇧H)",
|
|
206
|
+
onPress: () => engine.perform(Actions.ShowAll) });
|
|
206
207
|
this.#unghostAll = pill({ title: "Unghost all", onPress: () => engine.perform(Actions.UnghostAll) });
|
|
207
208
|
this.#footer = el("div.footer", { hidden: true }, [
|
|
208
209
|
el("div.counts", {}, [this.#hiddenLabel, this.#ghostedLabel]),
|
package/web/viewer.css
CHANGED
|
@@ -222,6 +222,10 @@ kbd.cap {
|
|
|
222
222
|
pointer-events: none;
|
|
223
223
|
}
|
|
224
224
|
.masthead .title, .masthead .subtitle { text-shadow: 0 0 3px var(--paper); }
|
|
225
|
+
/* The masthead lets clicks through to the view, but for its close button. */
|
|
226
|
+
.masthead .title-row { display: flex; align-items: center; gap: 4px; }
|
|
227
|
+
.masthead .title-row .pill { pointer-events: auto; flex: none; }
|
|
228
|
+
.masthead .title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
225
229
|
.masthead .title { font-size: var(--text-l); font-weight: 600; }
|
|
226
230
|
.masthead .subtitle { margin-top: 2px; font-size: var(--text-s); color: var(--muted); }
|
|
227
231
|
.masthead .progress {
|
package/web/viewer.js
CHANGED
|
@@ -109,6 +109,7 @@ let insets = { left: 0, top: 0, right: 0, bottom: 0 };
|
|
|
109
109
|
let pointer = null; // { x, y } in CSS pixels, while over the view
|
|
110
110
|
|
|
111
111
|
const masthead = new Masthead();
|
|
112
|
+
masthead.onClose = () => closeFiles();
|
|
112
113
|
const structure = new StructureCard(engine, { onSwitch: (show) => showLibrary(show) });
|
|
113
114
|
const library = new LibraryCard(libraryStore, {
|
|
114
115
|
open: (row, add) => openFromFolder(row, add),
|
|
@@ -304,9 +305,8 @@ function run(name) {
|
|
|
304
305
|
toolbar.projection.selected = perspective ? 1 : 0;
|
|
305
306
|
return engine.perform(Actions.ToggleProjection);
|
|
306
307
|
case "clear":
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
else engine.perform(Actions.ClearSelection);
|
|
308
|
+
// Esc closes what is open first, and only then clears the selection.
|
|
309
|
+
if (!dismissCard()) engine.perform(Actions.ClearSelection);
|
|
310
310
|
return undefined;
|
|
311
311
|
case "isolate": return engine.perform(Actions.Isolate);
|
|
312
312
|
case "showAll": return engine.perform(Actions.ShowAll);
|
|
@@ -353,6 +353,15 @@ function closeCards() {
|
|
|
353
353
|
sectionCard.element.hidden = true;
|
|
354
354
|
}
|
|
355
355
|
|
|
356
|
+
// Closes whatever card, menu or sheet is open: the shortcuts sheet, the views and More menus, the
|
|
357
|
+
// look and section cards. Returns whether any was.
|
|
358
|
+
function dismissCard() {
|
|
359
|
+
const open = [shortcuts.element, toolbar.viewsMenu, toolbar.moreMenu, lookCard.element,
|
|
360
|
+
sectionCard.element].filter((element) => !element.hidden);
|
|
361
|
+
for (const element of open) element.hidden = true;
|
|
362
|
+
return open.length > 0;
|
|
363
|
+
}
|
|
364
|
+
|
|
356
365
|
// Shows `next`, and remembers it unless it is the look the page started with: a look saved only
|
|
357
366
|
// once the person changes it keeps following the shared default until then.
|
|
358
367
|
function applyLook(next, { remember = true } = {}) {
|
|
@@ -505,6 +514,20 @@ function forget() {
|
|
|
505
514
|
structure.reset();
|
|
506
515
|
selection.element.hidden = true;
|
|
507
516
|
library.setOpen([]);
|
|
517
|
+
// The next file starts without a cut, as the engine does: the cuts go off, keeping where they
|
|
518
|
+
// were placed.
|
|
519
|
+
sectionCard.cuts.forEach((cut) => { cut.enabled = false; });
|
|
520
|
+
sectionCard.show();
|
|
521
|
+
sectionCard.element.hidden = true;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Closes everything open: back to the Library and the invitation to open something.
|
|
525
|
+
function closeFiles() {
|
|
526
|
+
forget();
|
|
527
|
+
closeCards();
|
|
528
|
+
engine.close();
|
|
529
|
+
refreshMasthead();
|
|
530
|
+
showEmpty();
|
|
508
531
|
}
|
|
509
532
|
|
|
510
533
|
function openCache(source, name, add) {
|