pixifact-cli 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/editor/assets/Cache-fNcOcM1E.js +1 -0
- package/editor/assets/CanvasPool-BKClwQdf.js +23 -0
- package/editor/assets/Filter-C-9RPzfk.js +1 -0
- package/editor/assets/GCManagedHash-DP1i0eX7.js +221 -0
- package/editor/assets/GraphicsContext-DdtyxZk_.js +1 -0
- package/editor/assets/RenderTargetSystem-ROnUCA9S.js +184 -0
- package/editor/assets/browserAll-B5EqM5Q9.js +14 -0
- package/editor/assets/canvasUtils-B0HNDru7.js +1 -0
- package/editor/assets/capture-9Xl6_ybT.js +1 -0
- package/editor/assets/captureCompilerScenePreview-B5O1JhpJ.js +461 -0
- package/editor/assets/editor-DsAgQsxk.js +4 -0
- package/editor/assets/getTexelRangeRects-CXryyjbK.js +195 -0
- package/editor/assets/getTextureBatchBindGroup-CIH9f4hr.js +1 -0
- package/editor/assets/init-DuDPG7T5.js +83 -0
- package/editor/assets/webworkerAll-BG99WFTY.js +1 -0
- package/editor/capture.html +11 -2
- package/editor/index.html +11 -2
- package/package.json +5 -5
- package/src/automation.ts +16 -16
- package/src/editorServer.ts +37 -3
- package/src/pixifact-cli.ts +1 -1
- package/src/viteTarget.ts +2 -2
- package/editor/assets/browserAll-BJUI9ZxT.js +0 -1
- package/editor/assets/capture-CUhA-7Mo.js +0 -1
- package/editor/assets/captureCompilerScenePreview-4K1ehGWd.js +0 -1126
- package/editor/assets/editor-C18Nctzn.js +0 -5
- package/editor/assets/init-B6Wk-3NE.js +0 -1
- package/editor/assets/webworkerAll-iPsb_ehV.js +0 -1
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/browserAll-B5EqM5Q9.js","assets/CanvasPool-BKClwQdf.js","assets/Filter-C-9RPzfk.js","assets/init-DuDPG7T5.js","assets/canvasUtils-B0HNDru7.js","assets/webworkerAll-BG99WFTY.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{B as e,C as t,D as n,E as r,G as i,K as a,L as o,M as s,N as c,O as l,P as u,R as d,S as f,V as p,W as m,_ as h,a as g,c as _,d as v,f as y,h as b,i as x,j as S,l as C,m as ee,n as w,o as T,q as te,r as ne,s as re,t as E,v as ie,w as D,x as O,y as k,z as ae}from"./CanvasPool-BKClwQdf.js";import{_ as oe,a as se,b as A,c as j,d as M,f as ce,g as N,h as le,i as P,l as F,n as ue,o as I,p as de,r as L,s as R,x as z}from"./Filter-C-9RPzfk.js";import{n as fe,r as pe,t as B}from"./canvasUtils-B0HNDru7.js";import{n as V,t as H}from"./Cache-fNcOcM1E.js";import{a as me,c as he,d as ge,f as _e,i as ve,l as ye,m as U,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,u as Ee}from"./RenderTargetSystem-ROnUCA9S.js";import{a as De,c as Oe,i as ke,l as Ae,n as je,o as Me,r as Ne,s as Pe,t as W,u as Fe}from"./GraphicsContext-DdtyxZk_.js";import{t as Ie}from"./getTextureBatchBindGroup-CIH9f4hr.js";import{a as Le,c as Re,d as ze,f as Be,h as Ve,i as He,l as Ue,m as We,o as Ge,p as Ke,r as qe,s as Je,t as G,u as Ye}from"./GCManagedHash-DP1i0eX7.js";import{a as Xe,c as Ze,d as Qe,f as $e,i as et,l as tt,m as nt,n as rt,o as it,p as at,r as ot,s as st,t as ct,u as lt}from"./getTexelRangeRects-CXryyjbK.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var ut=[`x`,`y`,`width`,`height`,`scaleX`,`scaleY`,`rotation`,`pivotX`,`pivotY`,`skewX`,`skewY`],dt=[`left`,`right`,`top`,`bottom`,`horizontal`,`vertical`],ft=[`alpha`,`visible`,`zIndex`,`eventMode`,`cursor`,`label`],pt=[`texture`,`anchorX`,`anchorY`,`tint`],mt=[`texture`,`fit`,`anchorX`,`anchorY`,`tint`],ht=[`texture`,`leftWidth`,`rightWidth`,`topHeight`,`bottomHeight`,`anchorX`,`anchorY`,`tint`],gt=[`texture`,`tilePositionX`,`tilePositionY`,`tileScaleX`,`tileScaleY`,`tileRotation`,`anchorX`,`anchorY`,`tint`],_t=[`leftWidth`,`rightWidth`,`topHeight`,`bottomHeight`],vt=[`tilePositionX`,`tilePositionY`,`tileScaleX`,`tileScaleY`,`tileRotation`],yt=[`text`,`fontSize`,`fontFamily`,`fontWeight`,`fill`],bt=[...yt,`lineHeight`,`letterSpacing`,`wordWrap`,`alignX`,`alignY`,`overflow`],xt=[`shape`,`radius`,`fill`,`fillAlpha`,`strokeColor`,`strokeWidth`,`strokeAlpha`],St=[`fillColor`,`fillAlpha`,`strokeColor`,`strokeAlpha`,`strokeWidth`,`radius`],Ct=[`gap`,`alignY`,`justify`],wt=[`columns`,`gapX`,`gapY`,`alignX`,`alignY`],Tt=[`gap`,`alignX`,`justify`],Et=[`columns`,`gap`,`gapX`,`gapY`,`alignX`,`alignY`,`justify`],Dt=[`direction`,`scrollX`,`scrollY`],Ot=[`fontSize`,`fontFamily`,`fontWeight`,`fill`],kt=[...pt,...mt,...ht,...gt,..._t,...vt];[...ut,...dt,...ft,...kt,...yt,...bt,...xt,...St,...Et,...Dt];var At=[`Group`,`GridContainer`,`HBoxContainer`,`ScrollContainer`,`VBoxContainer`,`Container`,`Sprite`,`NineSliceSprite`,`TilingSprite`,`Label`,`BitmapLabel`,`Text`,`BitmapText`,`HTMLText`,`Graphics`,`Rect`,`Image`,`NineImage`,`TileImage`],jt={x:{key:`x`,type:`number`},y:{key:`y`,type:`number`},width:{key:`width`,type:`number`},height:{key:`height`,type:`number`},scaleX:{key:`scaleX`,type:`number`},scaleY:{key:`scaleY`,type:`number`},rotation:{key:`rotation`,type:`number`},pivotX:{key:`pivotX`,type:`number`},pivotY:{key:`pivotY`,type:`number`},skewX:{key:`skewX`,type:`number`},skewY:{key:`skewY`,type:`number`},left:{key:`left`,type:`number`},right:{key:`right`,type:`number`},top:{key:`top`,type:`number`},bottom:{key:`bottom`,type:`number`},horizontal:{key:`horizontal`,type:`number`},vertical:{key:`vertical`,type:`number`},alpha:{key:`alpha`,type:`number`},visible:{key:`visible`,type:`boolean`},zIndex:{key:`zIndex`,type:`number`},eventMode:{key:`eventMode`,type:`enum`,options:[`none`,`passive`,`auto`,`static`,`dynamic`]},cursor:{key:`cursor`,type:`enum`,options:[`default`,`pointer`,`text`,`grab`,`grabbing`]},label:{key:`label`,type:`string`},texture:{key:`texture`,type:`string`,resource:`image`},fit:{key:`fit`,type:`enum`,options:[`stretch`,`contain`,`cover`,`none`]},anchorX:{key:`anchorX`,type:`number`},anchorY:{key:`anchorY`,type:`number`},tint:{key:`tint`,type:`color`},leftWidth:{key:`leftWidth`,type:`number`},rightWidth:{key:`rightWidth`,type:`number`},topHeight:{key:`topHeight`,type:`number`},bottomHeight:{key:`bottomHeight`,type:`number`},tilePositionX:{key:`tilePositionX`,type:`number`},tilePositionY:{key:`tilePositionY`,type:`number`},tileScaleX:{key:`tileScaleX`,type:`number`},tileScaleY:{key:`tileScaleY`,type:`number`},tileRotation:{key:`tileRotation`,type:`number`},text:{key:`text`,type:`string`},fontSize:{key:`fontSize`,type:`number`},fontFamily:{key:`fontFamily`,type:`string`},fontWeight:{key:`fontWeight`,type:`enum`,options:[400,500,600,700,`bold`]},fill:{key:`fill`,type:`color`},lineHeight:{key:`lineHeight`,type:`number`},letterSpacing:{key:`letterSpacing`,type:`number`},wordWrap:{key:`wordWrap`,type:`boolean`},overflow:{key:`overflow`,type:`enum`,options:[`visible`,`clip`]},fillColor:{key:`fillColor`,type:`color`},shape:{key:`shape`,type:`enum`,options:[`roundRect`,`rect`]},radius:{key:`radius`,type:`number`},fillAlpha:{key:`fillAlpha`,type:`number`},strokeColor:{key:`strokeColor`,type:`color`},strokeWidth:{key:`strokeWidth`,type:`number`},strokeAlpha:{key:`strokeAlpha`,type:`number`},columns:{key:`columns`,type:`number`},gap:{key:`gap`,type:`number`},gapX:{key:`gapX`,type:`number`},gapY:{key:`gapY`,type:`number`},alignX:{key:`alignX`,type:`enum`,options:[`start`,`center`,`end`]},alignY:{key:`alignY`,type:`enum`,options:[`start`,`center`,`end`]},justify:{key:`justify`,type:`enum`,options:[`start`,`center`,`end`,`space-between`]},direction:{key:`direction`,type:`enum`,options:[`vertical`,`horizontal`,`both`]},scrollX:{key:`scrollX`,type:`number`},scrollY:{key:`scrollY`,type:`number`}},Mt={Group:{type:`Group`,acceptsChildren:!0,defaults:{width:100,height:100},groups:{}},Container:{type:`Container`,acceptsChildren:!0,defaults:{width:100,height:100},groups:{}},Sprite:{type:`Sprite`,acceptsChildren:!1,defaults:{width:96,height:96},groups:{sprite:pt}},NineSliceSprite:{type:`NineSliceSprite`,acceptsChildren:!1,defaults:{width:160,height:80,leftWidth:10,rightWidth:10,topHeight:10,bottomHeight:10},groups:{sprite:pt,nineSlice:_t}},TilingSprite:{type:`TilingSprite`,acceptsChildren:!1,defaults:{width:160,height:96,tileScaleX:1,tileScaleY:1},groups:{sprite:pt,tiling:vt}},Text:{type:`Text`,acceptsChildren:!1,defaults:{text:`Text`,fontSize:16,fill:1120295},groups:{text:yt}},Label:{type:`Label`,acceptsChildren:!1,defaults:{text:`Text`,width:120,height:28,fontFamily:`Arial`,fontSize:16,fontWeight:400,fill:1120295,lineHeight:0,letterSpacing:0,wordWrap:!1,alignX:`start`,alignY:`start`,overflow:`visible`},groups:{text:bt}},BitmapLabel:{type:`BitmapLabel`,acceptsChildren:!1,defaults:{text:`Text`,width:120,height:28,fontFamily:`Arial`,fontSize:16,fontWeight:400,fill:1120295,lineHeight:0,letterSpacing:0,wordWrap:!1,alignX:`start`,alignY:`start`,overflow:`visible`},groups:{text:bt}},BitmapText:{type:`BitmapText`,acceptsChildren:!1,defaults:{text:`Text`,fontSize:16,fill:1120295},groups:{text:yt}},HTMLText:{type:`HTMLText`,acceptsChildren:!1,defaults:{text:`Text`,fontSize:16,fill:1120295},groups:{text:yt}},Graphics:{type:`Graphics`,acceptsChildren:!1,defaults:{shape:`roundRect`,width:100,height:60,radius:8,fill:15067115},groups:{graphics:xt}},Rect:{type:`Rect`,acceptsChildren:!1,defaults:{width:100,height:60,fillColor:16777215,fillAlpha:1,strokeColor:0,strokeAlpha:1,strokeWidth:0,radius:0},groups:{props:St}},Image:{type:`Image`,acceptsChildren:!1,defaults:{width:96,height:96,fit:`stretch`},groups:{props:mt}},NineImage:{type:`NineImage`,acceptsChildren:!1,defaults:{width:160,height:80,leftWidth:10,rightWidth:10,topHeight:10,bottomHeight:10},groups:{props:ht}},TileImage:{type:`TileImage`,acceptsChildren:!1,defaults:{width:160,height:96,tileScaleX:1,tileScaleY:1},groups:{props:gt}},GridContainer:{type:`GridContainer`,acceptsChildren:!0,defaults:{width:240,height:160,columns:2,gapX:8,gapY:8},groups:{stack:wt}},HBoxContainer:{type:`HBoxContainer`,acceptsChildren:!0,defaults:{width:240,height:64,gap:8},groups:{stack:Ct}},ScrollContainer:{type:`ScrollContainer`,acceptsChildren:!0,defaults:{width:240,height:160,direction:`vertical`,scrollX:0,scrollY:0},groups:{props:Dt}},VBoxContainer:{type:`VBoxContainer`,acceptsChildren:!0,defaults:{width:160,height:240,gap:8},groups:{stack:Tt}}};function Nt(e){return At.includes(e)}function Pt(e){return{...Mt[e].defaults}}function Ft(e){return Nt(e)&&Mt[e].acceptsChildren}function It(e){return Object.values(Mt[e].groups).flat()}function Lt(e){return jt[e]}var Rt=[`pointertap`,`pointerdown`,`pointerup`,`pointerupoutside`,`pointerover`,`pointerout`,`click`];function zt(e){return!!e&&typeof e==`object`&&e.kind===`binding`}function Bt(e){return structuredClone(e)}function Vt(e,t=``){let n=e.kind===`slotOutlet`?`slot:${e.name}`:e.id??(e.kind===`sceneInstance`?`${e.type}:${e.scene}`:e.type);return t?`${t}:${n}`:(e.kind,n)}function Ht(e,t,n){return Vt(t,e===`__scene__`?String(n):`${e}/${n}`)}function Ut(e){return e.trim()||`default`}function Wt(e,t,n){return e.slots[t]!==void 0||n.sceneInterfaces?.[e.scene]?.slots[t]!==void 0}function Gt(e,t,n){return t.kind!==`slotOutlet`||e!==`__scene__`&&n}function Kt(e,t,n,r=`__scene__`,i=!1){for(let[a,o]of e.entries()){let s=Ht(r,o,a);if(s===t)return{acceptsSlotOutlet:i,index:a,locator:s,node:o,nodes:e,parentLocator:r};if(o.kind===`pixi`){let e=Kt(o.children,t,n,s,Ft(o.type));if(e)return e}else if(o.kind===`sceneInstance`)for(let[e,r]of Object.entries(o.slots)){let i=Kt(r,t,n,`${s}/slot:${e}`,!1);if(i)return i}}}function qt(e,t){let n=`${e}/slot:`;if(!t.startsWith(n))return;let r=t.slice(n.length);return r.includes(`/`)?void 0:r}function Jt(e,t,n,r=`__scene__`){if(r===`__scene__`&&t===`__scene__`)return{acceptsSlotOutlet:!1,index:e.length,nodes:e,parentLocator:`__scene__`};for(let[i,a]of e.entries()){let e=Ht(r,a,i);if(a.kind===`pixi`){if(e===t)return Ft(a.type)?{acceptsSlotOutlet:!0,index:a.children.length,nodes:a.children,parentLocator:e}:void 0;let r=Jt(a.children,t,n,e);if(r)return r}else if(a.kind===`sceneInstance`){let r=qt(e,t);if(r){if(!Wt(a,r,n))return;let e=a.slots[r]??[];return a.slots[r]=e,{acceptsSlotOutlet:!1,index:e.length,nodes:e,parentLocator:t}}for(let[r,i]of Object.entries(a.slots)){let a=Jt(i,t,n,`${e}/slot:${r}`);if(a)return a}}}}function Yt(e,t,n=`__scene__`){for(let[r,i]of e.entries()){let e=Ht(n,i,r);if(i===t)return e;if(i.kind===`pixi`){let n=Yt(i.children,t,e);if(n)return n}else if(i.kind===`sceneInstance`)for(let[n,r]of Object.entries(i.slots)){let i=Yt(r,t,`${e}/slot:${n}`);if(i)return i}}}function Xt(e,t){let n=e.name;return e.name=t.value,{ok:!0,command:t,inverse:{op:`setSceneName`,value:n},selection:{type:`scene`}}}function Zt(e,t){let n=rn(e.props,t.prop);return an(e.props,t.prop,t.value),{ok:!0,command:t,inverse:{op:`setSceneProp`,prop:t.prop,value:n},selection:{type:`scene`}}}function Qt(e,t){let n=e.propDefaults??={},r=rn(n,t.prop);return an(n,t.prop,t.value),{ok:!0,command:t,inverse:{op:`setSceneDefaultProp`,prop:t.prop,value:r},selection:{type:`scene`}}}function $t(e,t){let n=e.events??={},r=n[t.event];return t.value===void 0?delete n[t.event]:n[t.event]=t.value,{ok:!0,command:t,inverse:{op:`setSceneEvent`,event:t.event,value:r},selection:{type:`scene`}}}function en(e,t,n){let r=Kt(e.children,t.node,n);if(!r||r.node.kind===`slotOutlet`)return{ok:!1,command:t,error:`Node was not found.`};let i=r.node.id,a=t.value?.trim()||void 0;if(a&&a!==i&&tn(e.children,a,r.node))return{ok:!1,command:t,error:`Scene node id "${a}" is already in use.`};r.node.id=a;let o=Ht(r.parentLocator,r.node,r.index);return{ok:!0,command:t,inverse:{op:`setNodeId`,node:o,value:i},selection:{type:`node`,node:o}}}function tn(e,t,n){for(let r of e)if(r.kind!==`slotOutlet`){if(r!==n&&r.id===t||r.kind===`pixi`&&tn(r.children,t,n))return!0;if(r.kind===`sceneInstance`){for(let e of Object.values(r.slots))if(tn(e,t,n))return!0}}return!1}function nn(e,t,n){let r=Kt(e.children,t.node,n);if(!r||r.node.kind===`slotOutlet`)return{ok:!1,command:t,error:`Node was not found.`};let i=rn(r.node.props,t.prop);return an(r.node.props,t.prop,t.value),{ok:!0,command:t,inverse:{op:`setNodeProp`,node:t.node,prop:t.prop,value:i},selection:{type:`node`,node:t.node}}}function rn(e,t){let[n,r,...i]=t.split(`.`);if(!r||i.length>0)return e[t];let a=e[n];return a&&typeof a==`object`&&!zt(a)?a[r]:void 0}function an(e,t,n){let[r,i,...a]=t.split(`.`);if(!i||a.length>0){n===void 0?delete e[t]:e[t]=n;return}let o=e[r],s=o&&typeof o==`object`&&!zt(o)?{...o}:{};n===void 0?delete s[i]:typeof n!=`object`&&(s[i]=n),Object.keys(s).length===0?delete e[r]:e[r]=s}function on(e,t,n){let r=Kt(e.children,t.node,n);if(!r||r.node.kind===`slotOutlet`)return{ok:!1,command:t,error:`Node event target was not found.`};let i=r.node.events??={},a=i[t.event];return t.value===void 0?delete i[t.event]:i[t.event]=t.value,{ok:!0,command:t,inverse:{op:`setNodeEvent`,node:t.node,event:t.event,value:a},selection:{type:`node`,node:t.node}}}function sn(e,t,n){let r=Kt(e.children,t.node,n);if(!r||r.node.kind!==`slotOutlet`)return{ok:!1,command:t,error:`Slot outlet was not found.`};let i=r.node.name;r.node.name=Ut(t.name);let a=Ht(r.parentLocator,r.node,r.index);return{ok:!0,command:t,inverse:{op:`renameSlotOutlet`,node:a,name:i},selection:{type:`node`,node:a}}}function cn(e,t,n){let r=Jt(e.children,t.parent,n);if(!r||!Gt(t.parent,t.node,r.acceptsSlotOutlet))return{ok:!1,command:t,error:`Parent cannot contain this node.`};let i=Bt(t.node),a=Math.max(0,Math.min(t.index??r.nodes.length,r.nodes.length));r.nodes.splice(a,0,i);let o=Ht(t.parent,i,a);return{ok:!0,command:t,inverse:{op:`deleteNode`,node:o},selection:{type:`node`,node:o}}}function ln(e,t,n){let r=Kt(e.children,t.node,n);if(!r)return{ok:!1,command:t,error:`Node was not found.`};let[i]=r.nodes.splice(r.index,1);return{ok:!0,command:t,inverse:{op:`insertNode`,parent:r.parentLocator,index:r.index,node:Bt(i)},selection:r.parentLocator===`__scene__`?{type:`scene`}:{type:`node`,node:r.parentLocator}}}function un(e,t,n){if(t.parent===t.node||t.parent.startsWith(`${t.node}/`))return{ok:!1,command:t,error:`Cannot move a node into itself.`};let r=Kt(e.children,t.node,n),i=Jt(e.children,t.parent,n);if(!r||!i||!Gt(t.parent,r.node,i.acceptsSlotOutlet))return{ok:!1,command:t,error:`Target cannot contain this node.`};let a=r.nodes===i.nodes,[o]=r.nodes.splice(r.index,1),s=t.index;a&&r.index<s&&--s,s=Math.max(0,Math.min(s,i.nodes.length)),i.nodes.splice(s,0,o);let c=Yt(e.children,o);if(!c)throw Error(`Moved Compiler Scene node is missing from the template.`);return{ok:!0,command:t,inverse:{op:`moveNode`,node:c,parent:r.parentLocator,index:a&&s<r.index?r.index+1:r.index},selection:{type:`node`,node:c}}}function dn(e,t,n){let r=[],i;for(let a of t.commands){let o=fn(e,a,n);if(!o.ok){for(let t=r.length-1;t>=0;t--)fn(e,r[t],n);return{ok:!1,command:t,error:o.error}}r.push(o.inverse),i=o.selection}return{ok:!0,command:t,inverse:{op:`batch`,commands:[...r].reverse()},selection:i}}function fn(e,t,n={}){switch(t.op){case`setSceneName`:return Xt(e,t);case`setSceneProp`:return Zt(e,t);case`setSceneDefaultProp`:return Qt(e,t);case`setSceneEvent`:return $t(e,t);case`setNodeId`:return en(e,t,n);case`setNodeProp`:return nn(e,t,n);case`setNodeEvent`:return on(e,t,n);case`renameSlotOutlet`:return sn(e,t,n);case`insertNode`:return cn(e,t,n);case`deleteNode`:return ln(e,t,n);case`moveNode`:return un(e,t,n);case`batch`:return dn(e,t,n)}}var pn=class{undoStack=[];redoStack=[];currentRevision=0;savedRevision=0;get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}get dirty(){return this.currentRevision!==this.savedRevision}execute(e,t,n={},r={}){let i=this.currentRevision,a=fn(e,t,r);if(!a.ok)return a;this.currentRevision+=1;let o=this.undoStack[this.undoStack.length-1];return n.mergeKey&&o?.mergeKey===n.mergeKey?(o.command=t,o.afterRevision=this.currentRevision,o.label=n.label??o.label):this.undoStack.push({afterRevision:this.currentRevision,beforeRevision:i,command:t,inverse:a.inverse,label:n.label,mergeKey:n.mergeKey}),this.redoStack.length=0,a}undo(e,t={}){let n=this.undoStack.pop();if(!n)return;let r=fn(e,n.inverse,t);return r.ok?(this.currentRevision=n.beforeRevision,this.redoStack.push(n),r):(this.undoStack.push(n),r)}redo(e,t={}){let n=this.redoStack.pop();if(!n)return;let r=fn(e,n.command,t);return r.ok?(this.currentRevision=n.afterRevision,this.undoStack.push(n),r):(this.redoStack.push(n),r)}markSaved(){this.savedRevision=this.currentRevision}clear(){this.undoStack.length=0,this.redoStack.length=0,this.currentRevision=0,this.savedRevision=0}},mn=`pixifact:`,hn=new Set([]);function gn(e){return hn.has(e)}function _n(e){if(!gn(e))throw Error(`Unknown built-in Scene "${e}".`);return`${mn}${e}.scene`}function vn(e){return e.startsWith(mn)}function yn(e){if(!vn(e)||!e.endsWith(`.scene`))throw Error(`Built-in Scene id "${e}" must use ${mn}<Name>.scene.`);let t=e.slice(9,-6);if(!gn(t))throw Error(`Unknown built-in Scene "${t}".`);return t}function bn(e){return e.replaceAll(`\\`,`/`)}function xn(e,t=``){let n=e.split(`/`).filter(Boolean).at(-1)??``;return t&&n.endsWith(t)?n.slice(0,-t.length):n}function Sn(e){let t=bn(e).replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n>=0?t.slice(0,n):``}function Cn(e){let t=[];for(let n of bn(e).split(`/`))n&&n!==`.`&&(n===`..`&&t.length&&t[t.length-1]!==`..`?t.pop():t.push(n));return t.join(`/`)}function wn(...e){return Cn(e.filter(Boolean).join(`/`))}function Tn(e){if(vn(e))return _n(yn(e));let t=bn(e).replace(/^\.\/+/,``).replace(/^\/+/,``),n=t.split(`/`).filter(Boolean);if(n.includes(`..`))throw Error(`Scene path "${e}" must stay inside projectRoot.`);if(!t.endsWith(`.scene`))throw Error(`Scene path "${e}" must end with .scene.`);return n.join(`/`)}function En(e){return vn(e)?yn(e):xn(Tn(e),`.scene`)}function Dn(e){return vn(e)?`${yn(e)}.ts`:`${Tn(e).slice(0,-6)}.ts`}function On(e,t){let n=bn(t.trim());if(vn(n))return Tn(n);if(!n.endsWith(`.scene`))throw Error(`Scene references must use .scene paths.`);return n.startsWith(`./`)||n.startsWith(`../`)?Tn(wn(Sn(Tn(e)),n)):Tn(n)}var kn=new Set([`Group`,`Container`,`Sprite`,`Text`,`Label`,`BitmapLabel`,`Graphics`,`Rect`,`Image`,`NineImage`,`TileImage`,`BitmapText`,`HTMLText`,`Mesh`,`NineSliceSprite`,`TilingSprite`,`DOMContainer`,`GridContainer`,`HBoxContainer`,`ScrollContainer`,`VBoxContainer`]);function An(e){let t=new Hn(e).parse();if(t.name!==`Scene`)throw Error(`Expected <Scene> root, received <${t.name}>.`);let n=t.attributes.name;if(!n)throw Error(`Scene template is missing name.`);if(t.attributes.class!==void 0)throw Error(`Scene class is inferred from the paired script @scene class; remove the class attribute.`);if(t.attributes.script!==void 0)throw Error(`Scene script binding is inferred from the colocated TypeScript file.`);let r=t.children.map(Mn);return Vn(n,r),{version:2,name:n,props:Nn(t,[`name`],e=>e.startsWith(`default.`)||e.startsWith(`on:`)),propDefaults:Nn({...t,attributes:Object.fromEntries(Object.entries(t.attributes).filter(([e])=>e.startsWith(`default.`)).map(([e,t])=>[e.slice(8),t]))},[],void 0,!0),events:Fn(t),interface:jn(),children:r}}function jn(){return{props:{},events:{},slots:{}}}function Mn(e){if(e.name===`slot`)return{kind:`slotOutlet`,name:e.attributes.name||`default`};if(e.attributes.scene!==void 0||gn(e.name)){let t={};for(let n of e.children){let e=n.attributes.slot||`default`;t[e]=t[e]??[],t[e].push(Mn(Bn(n,`slot`)))}return{kind:`sceneInstance`,type:e.name,scene:e.attributes.scene===void 0?_n(e.name):e.attributes.scene,props:Nn(e,[`id`,`scene`,`slot`],Ln),events:Pn(e),slots:t,...e.attributes.id?{id:e.attributes.id}:{}}}if(kn.has(e.name))return{kind:`pixi`,type:e.name,props:Nn(e,[`id`,`slot`],e=>e.startsWith(`on:`)),events:Fn(e),children:e.children.map(Mn),...e.attributes.id?{id:e.attributes.id}:{}};throw Error(`Unsupported template tag <${e.name}>. Add scene="..." or use a built-in Scene name.`)}function Nn(e,t,n=()=>!1,r=!1){let i={};for(let[a,o]of Object.entries(e.attributes)){if(t.includes(a)||n(a))continue;let e=Rn(a,o,r),s=a.split(`.`);if(s.length===1){if(i[a]&&typeof i[a]==`object`)throw Error(`Prop "${a}" cannot be both scalar and structured.`);i[a]=e;continue}let[c,l,...u]=s;if(!c||!l||u.length>0)throw Error(`Unsupported structured prop path "${a}".`);if(i[c]!==void 0&&typeof i[c]!=`object`)throw Error(`Prop "${c}" cannot be both scalar and structured.`);if(typeof e==`object`)throw Error(`Structured prop field "${a}" cannot contain an object value.`);let d=i[c]??{};d[l]=e,i[c]=d}return i}function Pn(e){let t={};for(let[n,r]of Object.entries(e.attributes)){let e=In(n);e&&(t[e]=r)}return t}function Fn(e){return Object.fromEntries(Object.entries(e.attributes).filter(([e])=>e.startsWith(`on:`)).map(([e,t])=>[e.slice(3),t]))}function In(e){if(e.startsWith(`@`))return e.slice(1);if(e.startsWith(`on-`)||e.startsWith(`on:`))return e.slice(3)}function Ln(e){return In(e)!==void 0}function Rn(e,t,n=!1){return n&&t.startsWith(`"`)&&t.endsWith(`"`)?JSON.parse(t):zn(t)||(Lt(e)?.type===`string`?t:t===`true`?!0:t===`false`?!1:/^-?\d+(\.\d+)?$/.test(t)?Number(t):/^#[0-9a-fA-F]{6}$/.test(t)?Number.parseInt(t.slice(1),16):t)}function zn(e){let t=/^\{([A-Za-z_$][\w$]*)(?:\.([A-Za-z_$][\w$]*))?\}$/.exec(e);if(t)return{kind:`binding`,path:t[2]?[t[1],t[2]]:[t[1]]};if(e.startsWith(`{`)||e.endsWith(`}`))throw Error(`Unsupported Scene binding "${e}". Use {prop} or {variant.field}.`)}function Bn(e,t){let n={...e.attributes};return delete n[t],{...e,attributes:n}}function Vn(e,t){let n=new Set;function r(t){if(t.kind!==`slotOutlet`){if(t.id){if(n.has(t.id))throw Error(`Scene "${e}" has duplicate id "${t.id}".`);n.add(t.id)}if(t.kind===`pixi`)for(let e of t.children)r(e);else for(let e of Object.values(t.slots))for(let t of e)r(t)}}for(let e of t)r(e)}var Hn=class{source;#e=0;constructor(e){this.source=e}parse(){this.#i();let e=this.#t();if(this.#i(),this.#e!==this.source.length)throw Error(`Unexpected content after <${e.name}>.`);return e}#t(){if(this.#o(`<`),this.#c(`/`))throw Error(`Unexpected closing tag.`);let e=this.#n(),t={};for(;;){if(this.#i(),this.#s(`/>`))return{name:e,attributes:t,children:[]};if(this.#s(`>`))break;let n=this.#n();this.#i(),this.#o(`=`),this.#i(),t[n]=this.#r()}let n=[];for(;;){if(this.#i(),this.#s(`</${e}>`))return{name:e,attributes:t,children:n};if(this.#c(`<!--`))this.#a();else if(this.#c(`<`))n.push(this.#t());else throw Error(`Unexpected text inside <${e}>.`)}}#n(){let e=this.#e;for(;this.#e<this.source.length&&/[A-Za-z0-9_:@.-]/.test(this.source[this.#e]);)this.#e+=1;if(e===this.#e)throw Error(`Expected name at offset ${this.#e}.`);return this.source.slice(e,this.#e)}#r(){let e=this.source[this.#e];if(e!==`"`&&e!==`'`)throw Error(`Expected quoted value at offset ${this.#e}.`);this.#e+=1;let t=this.#e;for(;this.#e<this.source.length&&this.source[this.#e]!==e;)this.#e+=1;let n=this.source.slice(t,this.#e);return this.#o(e),Un(n)}#i(){for(;this.#e<this.source.length&&/\s/.test(this.source[this.#e]);)this.#e+=1}#a(){let e=this.source.indexOf(`-->`,this.#e+4);if(e===-1)throw Error(`Unterminated comment.`);this.#e=e+3}#o(e){if(!this.#s(e))throw Error(`Expected "${e}" at offset ${this.#e}.`)}#s(e){return this.source.startsWith(e,this.#e)?(this.#e+=e.length,!0):!1}#c(e){return this.source.startsWith(e,this.#e)}};function Un(e){return e.replaceAll(`"`,`"`).replaceAll(`'`,`'`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`&`,`&`)}var Wn=new Set([`backgroundColor`,`borderColor`,`disabledColor`,`fill`,`fillColor`,`highlightedColor`,`normalColor`,`pressedColor`,`strokeColor`,`textColor`,`tint`]);function Gn(e){let t=[`<Scene${Yn([[`name`,e.name],...Object.entries(e.props),...Object.entries(e.propDefaults??{}).map(([e,t])=>[`default.${e}`,t]),...Object.entries(e.events??{}).map(([e,t])=>[`on:${e}`,t])])}>`];for(let n of e.children)t.push(...Kn(n,1));return t.push(`</Scene>`),`${t.join(`
|
|
3
|
+
`)}\n`}function Kn(e,t,n=[]){if(e.kind===`slotOutlet`){let r=[...e.name==="default"?[]:[[`name`,e.name]],...n];return[`${er(t)}<slot${Yn(r)} />`]}if(e.kind===`pixi`){let r=[...e.id?[[`id`,e.id]]:[],...n,...Object.entries(e.props),...Object.entries(e.events??{}).map(([e,t])=>[`on:${e}`,t])];return Jn(e.type,r,e.children,t)}let r=[...e.id?[[`id`,e.id]]:[],...vn(e.scene)?[]:[[`scene`,e.scene]],...n,...Object.entries(e.props),...Object.entries(e.events).map(([e,t])=>[`@${e}`,t])];return Jn(e.type,r,qn(e),t)}function qn(e){return Object.entries(e.slots).flatMap(([e,t])=>t.map(t=>({node:t,slot:e})))}function Jn(e,t,n,r){if(n.length===0)return[`${er(r)}<${e}${Yn(t)} />`];let i=[`${er(r)}<${e}${Yn(t)}>`];for(let e of n)if(`slot`in e){let t=e.slot==="default"?[]:[[`slot`,e.slot]];i.push(...Kn(e.node,r+1,t))}else i.push(...Kn(e,r+1));return i.push(`${er(r)}</${e}>`),i}function Yn(e){return Xn(e).map(([e,t])=>` ${e}="${$n(Zn(e,t))}"`).join(``)}function Xn(e){return e.flatMap(([e,t])=>!t||typeof t!=`object`||Qn(t)?[[e,t]]:Object.entries(t).map(([t,n])=>[`${e}.${t}`,n]))}function Zn(e,t){return Qn(t)?`{${t.path.join(`.`)}}`:e.startsWith(`default.`)&&typeof t==`string`&&(/^(?:true|false|-?\d+(?:\.\d+)?|#[0-9a-fA-F]{6})$/.test(t)||t.startsWith(`{`)||t.endsWith(`}`)||t.startsWith(`"`)&&t.endsWith(`"`))?JSON.stringify(t):typeof t==`number`&&Wn.has(e)?`#${t.toString(16).padStart(6,`0`).slice(-6)}`:String(t)}function Qn(e){return typeof e==`object`&&e.kind===`binding`}function $n(e){return e.replaceAll(`&`,`&`).replaceAll(`"`,`"`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}function er(e){return` `.repeat(e)}new Set(ut),new Set(dt),new Set(ft),new Set(kt),new Set(xt),new Set(bt),new Set(St),new Set(Ot);var tr=4,nr=class extends Error{status;constructor(e,t){super(t),this.status=e}};async function rr(e){if(e.ok)return e;let t=await e.json();throw new nr(e.status,t.error??`Editor request failed with ${e.status}.`)}async function ir(e={}){return(await rr(await fetch(e.refresh?`/api/project?refresh=1`:`/api/project`))).json()}async function ar(){return(await rr(await fetch(`/api/editor-ui-state`))).json()}async function or(e){return(await rr(await fetch(`/api/editor-ui-state`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(e)}))).json()}async function sr(e){return(await rr(await fetch(`/api/scene?path=${encodeURIComponent(e)}`))).json()}async function cr(){return(await rr(await fetch(`/api/scene-bindings`))).json()}async function lr(e,t,n){return(await rr(await fetch(`/api/scene?path=${encodeURIComponent(e)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({source:t,expectedVersion:n})}))).json()}function ur(e,t){return`/api/file?path=${encodeURIComponent(e)}${t===void 0?``:`&v=${encodeURIComponent(t)}`}`}async function dr(e){return rr(await fetch(ur(e)))}async function fr(e){await rr(await fetch(`/api/open-file?path=${encodeURIComponent(e)}`,{method:`POST`}))}function pr(e,t,n,r){let i=window.location.protocol===`https:`?`wss:`:`ws:`,a=new WebSocket(`${i}//${window.location.host}/api/events`);return new Promise((i,o)=>{let s=!1,c=!1,l=!1,u=e=>({initialState:e,close:()=>a.close(),clearContext(){s&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify({type:`editorContextCleared`,protocolVersion:tr}))},publishContext(e){s&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify({type:`editorContextChanged`,protocolVersion:tr,context:e}))},requestTakeover(){s||a.readyState!==WebSocket.OPEN||a.send(JSON.stringify({type:`editorSessionTakeoverRequested`,protocolVersion:tr}))}});a.addEventListener(`message`,t=>{let d=JSON.parse(String(t.data));if(d.protocolVersion!==void 0&&d.protocolVersion!==tr)a.close(),o(Error(`Editor session protocol version does not match. Restart Pixifact Editor.`));else if(d.type===`editorSessionActive`||d.type===`editorSessionStandby`){let e={status:d.type===`editorSessionActive`?`active`:`standby`,...d.resume?{resume:d.resume}:{},...d.reason?{reason:d.reason}:{},...d.error?{error:d.error}:{}};s=e.status===`active`,c=!0,l?n(e):(l=!0,i(u(e)))}else s&&d.type===`projectFileChanged`&&d.path?e(d.path):s&&d.type===`editorScreenshotRequested`&&d.requestId&&d.scene&&r(d.scene).then(e=>{s&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify({type:`editorScreenshotCompleted`,protocolVersion:tr,requestId:d.requestId,scene:d.scene,...e}))}).catch(e=>{s&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify({type:`editorScreenshotFailed`,protocolVersion:tr,requestId:d.requestId,error:e instanceof Error?e.message:String(e)}))})}),a.addEventListener(`error`,()=>{l||(l=!0,o(Error(`Editor 无法连接本地项目服务。`)))}),a.addEventListener(`close`,()=>{l?c&&t():(l=!0,o(Error(`Editor 本地项目服务连接已关闭。`)))})})}function mr(e){return e===`image`?`asset`:e===`file`?`unknown`:e}function hr(e){let t={id:e.name,name:e.name,path:e.name,kind:`folder`,depth:0,children:[]},n=new Map([[t.path,t]]);for(let r of e.files){let e=r.path.split(`/`),i=t,a=t.path;for(let[t,o]of e.entries()){if(a=`${a}/${o}`,t===e.length-1){i.children.push({id:a,name:o,path:a,kind:mr(r.kind),depth:t+1});continue}let s=n.get(a);s||(s={id:a,name:o,path:a,kind:`folder`,depth:t+1,children:[]},n.set(a,s),i.children.push(s)),i=s}}return t}var gr={readScene:sr,writeScene:lr},_r=`modulepreload`,vr=function(e){return`/`+e},yr={},br=function(e){return e.pathname.endsWith(`.css`)},xr=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},Sr=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=vr(t,n);let r=s(t),i=br(r);return xr(yr,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:_r,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{let i=a=>{t.removeEventListener(`load`,i),t.removeEventListener(`error`,i),a.type===`error`?n(Error(`Unable to preload CSS for ${r}`)):e(a)};t.addEventListener(`load`,i),t.addEventListener(`error`,i)})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Cr={extension:{type:i.Environment,name:`browser`,priority:-1},test:()=>!0,load:async()=>{await Sr(()=>import(`./browserAll-B5EqM5Q9.js`),__vite__mapDeps([0,1,2,3,4]))}},wr={extension:{type:i.Environment,name:`webworker`,priority:0},test:()=>typeof self<`u`&&self.WorkerGlobalScope!==void 0,load:async()=>{await Sr(()=>import(`./webworkerAll-BG99WFTY.js`),__vite__mapDeps([5,3,1,4,2]))}},Tr=new t;function Er(e,t,n){let r=Tr;e.measurable=!0,le(e,n,r),t.addBoundsMask(r),e.measurable=!1}function Dr(e,t,n){let r=N.get();e.measurable=!0;let i=oe.get().identity(),a=Or(e,n,i);ce(e,r,a),e.measurable=!1,t.addBoundsMask(r),oe.return(i),N.return(r)}function Or(e,t,n){return e?(e!==t&&(Or(e.parent,t,n),e.updateLocalTransform(),n.append(e.localTransform)),n):(O(`Mask bounds, renderable is not inside the root container`),n)}var kr=class{constructor(e){this.priority=0,this.inverse=!1,this.channel=`red`,this.pipe=`alphaMask`,e?.mask&&this.init(e.mask)}init(e){this.mask=e,this.renderMaskToTexture=!(e instanceof R),this.mask.renderable=this.renderMaskToTexture,this.mask.includeInBuild=!this.renderMaskToTexture,this.mask.measurable=!1}reset(){this.mask!==null&&(this.mask.measurable=!0,this.mask=null)}addBounds(e,t){this.inverse||Er(this.mask,e,t)}addLocalBounds(e,t){Dr(this.mask,e,t)}containsPoint(e,t){let n=this.mask;return t(n,e)}destroy(){this.reset()}static test(e){return e instanceof R}};kr.extension=i.MaskEffect;var Ar=class{constructor(e){this.priority=0,this.pipe=`colorMask`,e?.mask&&this.init(e.mask)}init(e){this.mask=e}destroy(){}static test(e){return typeof e==`number`}};Ar.extension=i.MaskEffect;var jr=class{constructor(e){this.priority=0,this.pipe=`stencilMask`,e?.mask&&this.init(e.mask)}init(e){this.mask=e,this.mask.includeInBuild=!1,this.mask.measurable=!1}reset(){this.mask!==null&&(this.mask.measurable=!0,this.mask.includeInBuild=!0,this.mask=null)}addBounds(e,t){Er(this.mask,e,t)}addLocalBounds(e,t){Dr(this.mask,e,t)}containsPoint(e,t){let n=this.mask;return t(n,e)}destroy(){this.reset()}static test(e){return e instanceof F}};jr.extension=i.MaskEffect;var Mr;async function Nr(){return Mr??=(async()=>{let e=b.get().createCanvas(1,1).getContext(`webgl`);if(!e)return`premultiply-alpha-on-upload`;let t=await new Promise(e=>{let t=document.createElement(`video`);t.onloadeddata=()=>e(t),t.onerror=()=>e(null),t.autoplay=!1,t.crossOrigin=`anonymous`,t.preload=`auto`,t.src=`data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=`,t.load()});if(!t)return`premultiply-alpha-on-upload`;let n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t);let i=new Uint8Array(4);return e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,i),e.deleteFramebuffer(r),e.deleteTexture(n),e.getExtension(`WEBGL_lose_context`)?.loseContext(),i[0]<=i[3]?`premultiplied-alpha`:`premultiply-alpha-on-upload`})(),Mr}var Pr=class e extends n{constructor(t){super(t),this.isReady=!1,this.uploadMethodId=`video`,t={...e.defaultOptions,...t},this._autoUpdate=!0,this._isConnectedToTicker=!1,this._updateFPS=t.updateFPS||0,this._msToNextUpdate=0,this.autoPlay=t.autoPlay!==!1,this.alphaMode=t.alphaMode??`premultiply-alpha-on-upload`,this._videoFrameRequestCallback=this._videoFrameRequestCallback.bind(this),this._videoFrameRequestCallbackHandle=null,this._load=null,this._resolve=null,this._reject=null,this._onCanPlay=this._onCanPlay.bind(this),this._onCanPlayThrough=this._onCanPlayThrough.bind(this),this._onError=this._onError.bind(this),this._onPlayStart=this._onPlayStart.bind(this),this._onPlayStop=this._onPlayStop.bind(this),this._onSeeked=this._onSeeked.bind(this),this._onLoadedMetadata=this._onLoadedMetadata.bind(this),t.autoLoad!==!1&&this.load()}updateFrame(){if(!this.destroyed){if(this._updateFPS){let e=P.shared.elapsedMS*this.resource.playbackRate;this._msToNextUpdate=Math.floor(this._msToNextUpdate-e)}(!this._updateFPS||this._msToNextUpdate<=0)&&(this._msToNextUpdate=this._updateFPS?Math.floor(1e3/this._updateFPS):0),this.isValid&&this.update()}}_videoFrameRequestCallback(){this.updateFrame(),this._videoFrameRequestCallbackHandle=this.destroyed?null:this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback)}get isValid(){return!!this.resource.videoWidth&&!!this.resource.videoHeight}async load(){if(this._load)return this._load;let e=this.resource,t=this.options;return(e.readyState===e.HAVE_ENOUGH_DATA||e.readyState===e.HAVE_FUTURE_DATA)&&e.width&&e.height&&(e.complete=!0),e.addEventListener(`play`,this._onPlayStart),e.addEventListener(`pause`,this._onPlayStop),e.addEventListener(`seeked`,this._onSeeked),this._isSourceReady()?this._mediaReady():(t.preload||e.addEventListener(`canplay`,this._onCanPlay),e.addEventListener(`canplaythrough`,this._onCanPlayThrough),e.addEventListener(`error`,this._onError,!0)),this.isValid||e.addEventListener(`loadedmetadata`,this._onLoadedMetadata),this.alphaMode=await Nr(),this._load=new Promise((n,r)=>{this.isValid?n(this):(this._resolve=n,this._reject=r,t.preloadTimeoutMs!==void 0&&(this._preloadTimeout=setTimeout(()=>{this._onError(new ErrorEvent(`Preload exceeded timeout of ${t.preloadTimeoutMs}ms`))})),e.load())}),this._load}_onError(e){this.resource.removeEventListener(`error`,this._onError,!0),this.emit(`error`,e),this._reject&&(this._reject(e),this._reject=null,this._resolve=null)}_isSourcePlaying(){let e=this.resource;return!e.paused&&!e.ended}_isSourceReady(){return this.resource.readyState>2}_onPlayStart(){this._configureAutoUpdate()}_onPlayStop(){this._configureAutoUpdate()}_onSeeked(){this._autoUpdate&&!this._isSourcePlaying()&&(this._msToNextUpdate=0,this.updateFrame(),this._msToNextUpdate=0)}_onLoadedMetadata(){this.isValid&&this._mediaReady()}_onCanPlay(){this.resource.removeEventListener(`canplay`,this._onCanPlay),this._mediaReady()}_onCanPlayThrough(){this.resource.removeEventListener(`canplaythrough`,this._onCanPlayThrough),this._preloadTimeout&&=(clearTimeout(this._preloadTimeout),void 0),this._mediaReady()}_mediaReady(){let e=this.resource;this.isValid&&(this.isReady=!0,this.resize(e.videoWidth,e.videoHeight)),this._msToNextUpdate=0,this.updateFrame(),this._msToNextUpdate=0,this._resolve&&this.isValid&&(this._resolve(this),this._resolve=null,this._reject=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&this.resource.play()}destroy(){this._configureAutoUpdate();let e=this.resource;e&&(e.removeEventListener(`play`,this._onPlayStart),e.removeEventListener(`pause`,this._onPlayStop),e.removeEventListener(`seeked`,this._onSeeked),e.removeEventListener(`canplay`,this._onCanPlay),e.removeEventListener(`canplaythrough`,this._onCanPlayThrough),e.removeEventListener(`loadedmetadata`,this._onLoadedMetadata),e.removeEventListener(`error`,this._onError,!0),e.pause(),e.src=``,e.load()),super.destroy()}get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e!==this._autoUpdate&&(this._autoUpdate=e,this._configureAutoUpdate())}get updateFPS(){return this._updateFPS}set updateFPS(e){e!==this._updateFPS&&(this._updateFPS=e,this._configureAutoUpdate())}_configureAutoUpdate(){this._autoUpdate&&this._isSourcePlaying()?!this._updateFPS&&this.resource.requestVideoFrameCallback?(this._isConnectedToTicker&&(P.shared.remove(this.updateFrame,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0),this._videoFrameRequestCallbackHandle===null&&(this._videoFrameRequestCallbackHandle=this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback))):(this._videoFrameRequestCallbackHandle!==null&&(this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker||(P.shared.add(this.updateFrame,this),this._isConnectedToTicker=!0,this._msToNextUpdate=0)):(this._videoFrameRequestCallbackHandle!==null&&(this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker&&(P.shared.remove(this.updateFrame,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0))}static test(e){return globalThis.HTMLVideoElement&&e instanceof HTMLVideoElement}};Pr.extension=i.TextureSource,Pr.defaultOptions={...n.defaultOptions,autoLoad:!0,autoPlay:!0,updateFPS:0,crossorigin:!0,loop:!1,muted:!0,playsinline:!0,preload:!1},Pr.MIME_TYPES={ogv:`video/ogg`,mov:`video/quicktime`,m4v:`video/mp4`};var Fr=Pr,Ir=[];a.handleByList(i.TextureSource,Ir);function Lr(e={}){let t=e&&e.resource,n=t?e.resource:e,r=t?e:{resource:e};for(let e=0;e<Ir.length;e++){let t=Ir[e];if(t.test(n))return new t(r)}throw Error(`Could not find a source type for resource: ${r.resource}`)}function Rr(e={},t=!1){let n=e&&e.resource,r=n?e.resource:e,i=n?e:{resource:e};if(!t&&H.has(r))return H.get(r);let a=new D({source:Lr(i)});return a.on(`destroy`,()=>{H.has(r)&&H.remove(r)}),t||H.set(r,a),a}function zr(e,t=!1){return typeof e==`string`?H.get(e):e instanceof n?new D({source:e}):Rr(e,t)}D.from=zr,n.from=Lr,a.add(kr,Ar,jr,Fr,pe,I,r);var Br=(e=>(e[e.Low=0]=`Low`,e[e.Normal=1]=`Normal`,e[e.High=2]=`High`,e))(Br||{});function K(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received ${JSON.stringify(e)}`)}function Vr(e){return e.split(`?`)[0].split(`#`)[0]}function Hr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Ur(e,t,n){return e.replace(new RegExp(Hr(t),`g`),n)}function Wr(e,t){let n=``,r=0,i=-1,a=0,o=-1;for(let s=0;s<=e.length;++s){if(s<e.length)o=e.charCodeAt(s);else if(o===47)break;else o=47;if(o===47){if(i!==s-1&&a!==1){if(i!==s-1&&a===2){if(n.length<2||r!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){let e=n.lastIndexOf(`/`);if(e!==n.length-1){e===-1?(n=``,r=0):(n=n.slice(0,e),r=n.length-1-n.lastIndexOf(`/`)),i=s,a=0;continue}}else if(n.length===2||n.length===1){n=``,r=0,i=s,a=0;continue}}t&&(n.length>0?n+=`/..`:n=`..`,r=2)}else n.length>0?n+=`/${e.slice(i+1,s)}`:n=e.slice(i+1,s),r=s-i-1}i=s,a=0}else o===46&&a!==-1?++a:a=-1}return n}var q={toPosix(e){return Ur(e,`\\`,`/`)},isUrl(e){return/^https?:/.test(this.toPosix(e))},isDataUrl(e){return/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(e)},isBlobUrl(e){return e.startsWith(`blob:`)},hasProtocol(e){return/^[^/:]+:/.test(this.toPosix(e))},getProtocol(e){K(e),e=this.toPosix(e);let t=/^file:\/\/\//.exec(e);if(t)return t[0];let n=/^[^/:]+:\/{0,2}/.exec(e);return n?n[0]:``},toAbsolute(e,t,n){if(K(e),this.isDataUrl(e)||this.isBlobUrl(e))return e;let r=Vr(this.toPosix(t??b.get().getBaseUrl())),i=Vr(this.toPosix(n??this.rootname(r)));return e=this.toPosix(e),e.startsWith(`/`)?q.join(i,e.slice(1)):this.isAbsolute(e)?e:this.join(r,e)},normalize(e){if(K(e),e.length===0)return`.`;if(this.isDataUrl(e)||this.isBlobUrl(e))return e;e=this.toPosix(e);let t=``,n=e.startsWith(`/`);this.hasProtocol(e)&&(t=this.rootname(e),e=e.slice(t.length));let r=e.endsWith(`/`);return e=Wr(e,!1),e.length>0&&r&&(e+=`/`),n?`/${e}`:t+e},isAbsolute(e){return K(e),e=this.toPosix(e),this.hasProtocol(e)?!0:e.startsWith(`/`)},join(...e){if(e.length===0)return`.`;let t;for(let n=0;n<e.length;++n){let r=e[n];if(K(r),r.length>0){if(t===void 0)t=r;else{let i=e[n-1]??``;this.joinExtensions.includes(this.extname(i).toLowerCase())?t+=`/../${r}`:t+=`/${r}`}}}return t===void 0?`.`:this.normalize(t)},dirname(e){if(K(e),e.length===0)return`.`;e=this.toPosix(e);let t=e.charCodeAt(0),n=t===47,r=-1,i=!0,a=this.getProtocol(e),o=e;e=e.slice(a.length);for(let n=e.length-1;n>=1;--n)if(t=e.charCodeAt(n),t===47){if(!i){r=n;break}}else i=!1;return r===-1?n?`/`:this.isUrl(o)?a+e:a:n&&r===1?`//`:a+e.slice(0,r)},rootname(e){K(e),e=this.toPosix(e);let t=``;if(t=e.startsWith(`/`)?`/`:this.getProtocol(e),this.isUrl(e)){let n=e.indexOf(`/`,t.length);t=n===-1?e:e.slice(0,n),t.endsWith(`/`)||(t+=`/`)}return t},basename(e,t){K(e),t&&K(t),e=Vr(this.toPosix(e));let n=0,r=-1,i=!0,a;if(t!==void 0&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return``;let o=t.length-1,s=-1;for(a=e.length-1;a>=0;--a){let c=e.charCodeAt(a);if(c===47){if(!i){n=a+1;break}}else s===-1&&(i=!1,s=a+1),o>=0&&(c===t.charCodeAt(o)?--o===-1&&(r=a):(o=-1,r=s))}return n===r?r=s:r===-1&&(r=e.length),e.slice(n,r)}for(a=e.length-1;a>=0;--a)if(e.charCodeAt(a)===47){if(!i){n=a+1;break}}else r===-1&&(i=!1,r=a+1);return r===-1?``:e.slice(n,r)},extname(e){K(e),e=Vr(this.toPosix(e));let t=-1,n=0,r=-1,i=!0,a=0;for(let o=e.length-1;o>=0;--o){let s=e.charCodeAt(o);if(s===47){if(!i){n=o+1;break}}else r===-1&&(i=!1,r=o+1),s===46?t===-1?t=o:a!==1&&(a=1):t!==-1&&(a=-1)}return t===-1||r===-1||a===0||a===1&&t===r-1&&t===n+1?``:e.slice(t,r)},parse(e){K(e);let t={root:``,dir:``,base:``,ext:``,name:``};if(e.length===0)return t;e=Vr(this.toPosix(e));let n=e.charCodeAt(0),r=this.isAbsolute(e),i;t.root=this.rootname(e),i=r||this.hasProtocol(e)?1:0;let a=-1,o=0,s=-1,c=!0,l=e.length-1,u=0;for(;l>=i;--l)if(n=e.charCodeAt(l),n===47){if(!c){o=l+1;break}}else s===-1&&(c=!1,s=l+1),n===46?a===-1?a=l:u!==1&&(u=1):a!==-1&&(u=-1);return a===-1||s===-1||u===0||u===1&&a===s-1&&a===o+1?s!==-1&&(t.base=t.name=o===0&&r?e.slice(1,s):e.slice(o,s)):(o===0&&r?(t.name=e.slice(1,a),t.base=e.slice(1,s)):(t.name=e.slice(o,a),t.base=e.slice(o,s)),t.ext=e.slice(a,s)),t.dir=this.dirname(e),t},sep:`/`,delimiter:`:`,joinExtensions:[`.html`]};function Gr(e,t,n,r,i){let a=t[n];for(let o=0;o<a.length;o++){let s=a[o];n<t.length-1?Gr(e.replace(r[n],s),t,n+1,r,i):i.push(e.replace(r[n],s))}}function Kr(e){let t=e.match(/\{(.*?)\}/g),n=[];if(t){let r=[];t.forEach(e=>{let t=e.substring(1,e.length-1).split(`,`);r.push(t)}),Gr(e,r,0,t,n)}else n.push(e);return n}var qr=e=>!Array.isArray(e),Jr=class{constructor(){this._defaultBundleIdentifierOptions={connector:`-`,createBundleAssetId:(e,t)=>`${e}${this._bundleIdConnector}${t}`,extractAssetIdFromBundle:(e,t)=>t.replace(`${e}${this._bundleIdConnector}`,``)},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(e){if(this._bundleIdConnector=e.connector??this._bundleIdConnector,this._createBundleAssetId=e.createBundleAssetId??this._createBundleAssetId,this._extractAssetIdFromBundle=e.extractAssetIdFromBundle??this._extractAssetIdFromBundle,this._extractAssetIdFromBundle(`foo`,this._createBundleAssetId(`foo`,`bar`))!==`bar`)throw Error(`[Resolver] GenerateBundleAssetId are not working correctly`)}prefer(...e){e.forEach(e=>{this._preferredOrder.push(e),e.priority||=Object.keys(e.params)}),this._resolverHash={}}set basePath(e){this._basePath=e}get basePath(){return this._basePath}set rootPath(e){this._rootPath=e}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(e){if(typeof e==`string`)this._defaultSearchParams=e;else{let t=e;this._defaultSearchParams=Object.keys(t).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join(`&`)}}getAlias(e){let{alias:t,src:n}=e;return V(t||n,e=>typeof e==`string`?e:Array.isArray(e)?e.map(e=>e?.src??e):e?.src?e.src:e,!0)}removeAlias(e,t){this._assetMap[e]&&(t&&t!==this._resolverHash[e]||(delete this._resolverHash[e],delete this._assetMap[e]))}addManifest(e){this._manifest&&O(`[Resolver] Manifest already exists, this will be overwritten`),this._manifest=e,e.bundles.forEach(e=>{this.addBundle(e.name,e.assets)})}addBundle(e,t){let n=[],r=t;Array.isArray(t)||(r=Object.entries(t).map(([e,t])=>typeof t==`string`||Array.isArray(t)?{alias:e,src:t}:{alias:e,...t})),r.forEach(t=>{let r=t.src,i=t.alias,a;if(typeof i==`string`){let t=this._createBundleAssetId(e,i);n.push(t),a=[i,t]}else{let t=i.map(t=>this._createBundleAssetId(e,t));n.push(...t),a=[...i,...t]}this.add({...t,alias:a,src:r})}),this._bundles[e]=n}add(e){let t=[];Array.isArray(e)?t.push(...e):t.push(e);let n=e=>{this.hasKey(e)&&O(`[Resolver] already has key: ${e} overwriting`)};V(t).forEach(e=>{let{src:t}=e,{data:r,format:i,loadParser:a,parser:o}=e,s=V(t).map(e=>typeof e==`string`?Kr(e):Array.isArray(e)?e:[e]),c=this.getAlias(e);Array.isArray(c)?c.forEach(n):n(c);let l=[],u=e=>({src:e,...this._parsers.find(t=>t.test(e))?.parse(e)});s.forEach(t=>{t.forEach(t=>{let n={};if(typeof t==`object`?(r=t.data??r,i=t.format??i,(t.loadParser||t.parser)&&(a=t.loadParser??a,o=t.parser??o),n={...u(t.src),...t}):n=u(t),!c)throw Error(`[Resolver] alias is undefined for this asset: ${n.src}`);n=this._buildResolvedAsset(n,{aliases:c,data:r,format:i,loadParser:a,parser:o,progressSize:e.progressSize}),l.push(n)})}),c.forEach(e=>{this._assetMap[e]=l})})}resolveBundle(e){let t=qr(e);e=V(e);let n={};return e.forEach(e=>{let t=this._bundles[e];if(t){let r=this.resolve(t),i={};for(let t in r){let n=r[t];i[this._extractAssetIdFromBundle(e,t)]=n}n[e]=i}}),t?n[e[0]]:n}resolveUrl(e){let t=this.resolve(e);if(typeof e!=`string`){let e={};for(let n in t)e[n]=t[n].src;return e}return t.src}resolve(e){let t=qr(e);e=V(e);let n={};return e.forEach(e=>{if(!this._resolverHash[e]){if(this._assetMap[e]){let t=this._assetMap[e],n=this._getPreferredOrder(t);n?.priority.forEach(e=>{n.params[e].forEach(n=>{let r=t.filter(t=>t[e]?t[e]===n:!1);r.length&&(t=r)})}),this._resolverHash[e]=t[0]}else this._resolverHash[e]=this._buildResolvedAsset({alias:[e],src:e},{})}n[e]=this._resolverHash[e]}),t?n[e[0]]:n}hasKey(e){return!!this._assetMap[e]}hasBundle(e){return!!this._bundles[e]}_getPreferredOrder(e){for(let t=0;t<e.length;t++){let n=e[t],r=this._preferredOrder.find(e=>e.params.format.includes(n.format));if(r)return r}return this._preferredOrder[0]}_appendDefaultSearchParams(e){return this._defaultSearchParams?`${e}${/\?/.test(e)?`&`:`?`}${this._defaultSearchParams}`:e}_buildResolvedAsset(e,t){let{aliases:n,data:r,loadParser:i,parser:a,format:o,progressSize:s}=t;return(this._basePath||this._rootPath)&&(e.src=q.toAbsolute(e.src,this._basePath,this._rootPath)),e.alias=n??e.alias??[e.src],e.src=this._appendDefaultSearchParams(e.src),e.data={...r||{},...e.data},e.loadParser=i??e.loadParser,e.parser=a??e.parser,e.format=o??e.format??Yr(e.src),s!==void 0&&(e.progressSize=s),e}};Jr.RETINA_PREFIX=/@([0-9\.]+)x/;function Yr(e){return e.split(`.`).pop().split(`?`).shift().split(`#`).shift()}var Xr=(e,t)=>{let n=t.split(`?`)[1];return n&&(e+=`?${n}`),e},Zr=class e{constructor(e,t){this.linkedSheets=[];let r=e;e?.source instanceof n&&(r={texture:e,data:t});let{texture:i,data:a,cachePrefix:o=``}=r;this.cachePrefix=o,this._texture=i instanceof D?i:null,this.textureSource=i.source,this.textures={},this.animations={},this.data=a;let s=parseFloat(a.meta.scale);s?(this.resolution=s,i.source.resolution=this.resolution):this.resolution=i.source._resolution,this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}parse(){return new Promise(t=>{this._callback=t,this._batchIndex=0,this._frameKeys.length<=e.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}parseSync(){return this._processFrames(0,!0),this._processAnimations(),this.textures}_processFrames(t,n=!1){let r=t,i=n?1/0:e.BATCH_SIZE;for(;r-t<i&&r<this._frameKeys.length;){let e=this._frameKeys[r],t=this._frames[e],n=t.frame;if(n){let r=null,i=null,a=t.trimmed!==!1&&t.sourceSize?t.sourceSize:t.frame,o=new d(0,0,Math.floor(a.w)/this.resolution,Math.floor(a.h)/this.resolution);r=t.rotated?new d(Math.floor(n.x)/this.resolution,Math.floor(n.y)/this.resolution,Math.floor(n.h)/this.resolution,Math.floor(n.w)/this.resolution):new d(Math.floor(n.x)/this.resolution,Math.floor(n.y)/this.resolution,Math.floor(n.w)/this.resolution,Math.floor(n.h)/this.resolution),t.trimmed!==!1&&t.spriteSourceSize&&(i=new d(Math.floor(t.spriteSourceSize.x)/this.resolution,Math.floor(t.spriteSourceSize.y)/this.resolution,Math.floor(n.w)/this.resolution,Math.floor(n.h)/this.resolution)),this.textures[e]=new D({source:this.textureSource,frame:r,orig:o,trim:i,rotate:t.rotated?2:0,defaultAnchor:t.anchor,defaultBorders:t.borders,label:e.toString()})}r++}}_processAnimations(){let e=this.data.animations||{};for(let t in e){this.animations[t]=[];for(let n=0;n<e[t].length;n++){let r=e[t][n];this.animations[t].push(this.textures[r])}}}_parseComplete(){let e=this._callback;this._callback=null,this._batchIndex=0,e.call(this,this.textures)}_nextBatch(){this._processFrames(this._batchIndex*e.BATCH_SIZE),this._batchIndex++,setTimeout(()=>{this._batchIndex*e.BATCH_SIZE<this._frameKeys.length?this._nextBatch():(this._processAnimations(),this._parseComplete())},0)}destroy(e=!1){for(let e in this.textures)this.textures[e].destroy();this._frames=null,this._frameKeys=null,this.data=null,this.textures=null,e&&(this._texture?.destroy(),this.textureSource.destroy()),this._texture=null,this.textureSource=null,this.linkedSheets=[]}};Zr.BATCH_SIZE=1e3;var Qr=Zr,$r=[`jpg`,`png`,`jpeg`,`avif`,`webp`,`basis`,`etc2`,`bc7`,`bc6h`,`bc5`,`bc4`,`bc3`,`bc2`,`bc1`,`eac`,`astc`];function ei(e,t,n){let r={};if(e.forEach(e=>{r[e]=t}),Object.keys(t.textures).forEach(e=>{r[`${t.cachePrefix}${e}`]=t.textures[e]}),!n){let n=q.dirname(e[0]);t.linkedSheets.forEach((e,i)=>{let a=ei([`${n}/${t.data.meta.related_multi_packs[i]}`],e,!0);Object.assign(r,a)})}return r}var ti={extension:i.Asset,cache:{test:e=>e instanceof Qr,getCacheableAssets:(e,t)=>ei(e,t,!1)},resolver:{extension:{type:i.ResolveParser,name:`resolveSpritesheet`},test:e=>{let t=e.split(`?`)[0].split(`.`),n=t.pop(),r=t.pop();return n===`json`&&$r.includes(r)},parse:e=>{let t=e.split(`.`);return{resolution:parseFloat(Jr.RETINA_PREFIX.exec(e)?.[1]??`1`),format:t[t.length-2],src:e}}},loader:{name:`spritesheetLoader`,id:`spritesheet`,extension:{type:i.LoadParser,priority:Br.Normal,name:`spritesheetLoader`},async testParse(e,t){return q.extname(t.src).toLowerCase()===`.json`&&!!e.frames},async parse(e,t,n){let{texture:r,imageFilename:i,textureOptions:a,cachePrefix:o}=t?.data??{},s=q.dirname(t.src);s&&s.lastIndexOf(`/`)!==s.length-1&&(s+=`/`);let c;if(r instanceof D)c=r;else{let r=Xr(s+(i??e.meta.image),t.src);c=(await n.load([{src:r,data:a}]))[r]}let l=new Qr({texture:c.source,data:e,cachePrefix:o});await l.parse();let u=e?.meta?.related_multi_packs;if(Array.isArray(u)){let e=[];for(let r of u){if(typeof r!=`string`)continue;let i=s+r;t.data?.ignoreMultiPack||(i=Xr(i,t.src),e.push(n.load({src:i,data:{textureOptions:a,ignoreMultiPack:!0}})))}let r=await Promise.all(e);l.linkedSheets=r,r.forEach(e=>{e.linkedSheets=[l].concat(l.linkedSheets.filter(t=>t!==e))})}return l},async unload(e,t,n){await n.unload(e.textureSource._sourceOrigin),e.destroy(!1)}}};a.add(ti);var ni;function ri(e){return ni===void 0&&(ni=(()=>{let t={stencil:!0,failIfMajorPerformanceCaveat:e??Se.defaultOptions.failIfMajorPerformanceCaveat};try{if(!b.get().getWebGLRenderingContext())return!1;let e=b.get().createCanvas().getContext(`webgl`,t),n=!!e?.getContextAttributes()?.stencil;if(e){let t=e.getExtension(`WEBGL_lose_context`);t&&t.loseContext()}return e=null,n}catch{return!1}})()),ni}var ii;async function ai(e={}){return ii===void 0&&(ii=await(async()=>{let t=b.get().getNavigator().gpu;if(!t)return!1;try{return await(await t.requestAdapter(e)).requestDevice(),!0}catch{return!1}})()),ii}var oi=[`webgl`,`webgpu`,`canvas`];async function si(e){let t=[];e.preference?Array.isArray(e.preference)?t=e.preference.slice():(t.push(e.preference),oi.forEach(n=>{n!==e.preference&&t.push(n)})):t=oi.slice();let n,r={};for(let i=0;i<t.length;i++){let a=t[i];if(a===`webgpu`&&await ai()){let{WebGPURenderer:t}=await Sr(async()=>{let{WebGPURenderer:e}=await Promise.resolve().then(()=>Ld);return{WebGPURenderer:e}},void 0);n=t,r={...e,...e.webgpu};break}if(a===`webgl`&&ri(e.failIfMajorPerformanceCaveat??Se.defaultOptions.failIfMajorPerformanceCaveat)){let{WebGLRenderer:t}=await Sr(async()=>{let{WebGLRenderer:e}=await Promise.resolve().then(()=>xu);return{WebGLRenderer:e}},void 0);n=t,r={...e,...e.webgl};break}if(a===`canvas`){let{CanvasRenderer:t}=await Sr(async()=>{let{CanvasRenderer:e}=await Promise.resolve().then(()=>Fc);return{CanvasRenderer:e}},void 0);n=t,r={...e,...e.canvasOptions};break}}if(delete r.webgpu,delete r.webgl,delete r.canvasOptions,!n)throw Error(`No available renderer for the current environment`);let i=new n;return await i.init(r),i}var ci=class{static init(e){Object.defineProperty(this,"resizeTo",{configurable:!0,set(e){globalThis.removeEventListener(`resize`,this.queueResize),this._resizeTo=e,e&&(globalThis.addEventListener(`resize`,this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{this._resizeTo&&(this._cancelResize(),this._resizeId=requestAnimationFrame(()=>this.resize()))},this._cancelResize=()=>{this._resizeId&&=(cancelAnimationFrame(this._resizeId),null)},this.resize=()=>{if(!this._resizeTo)return;this._cancelResize();let e,t;if(this._resizeTo===globalThis.window)e=globalThis.innerWidth,t=globalThis.innerHeight;else{let{clientWidth:n,clientHeight:r}=this._resizeTo;e=n,t=r}this.renderer.resize(e,t),this.render()},this._resizeId=null,this._resizeTo=null,this.resizeTo=e.resizeTo||null}static destroy(){globalThis.removeEventListener(`resize`,this.queueResize),this._cancelResize(),this._cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}};ci.extension=i.Application;var li=class{static init(e){e=Object.assign({autoStart:!0,sharedTicker:!1},e),Object.defineProperty(this,"ticker",{configurable:!0,set(e){this._ticker&&this._ticker.remove(this.render,this),this._ticker=e,e&&e.add(this.render,this,se.LOW)},get(){return this._ticker}}),this.stop=()=>{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=e.sharedTicker?P.shared:new P,e.autoStart&&this.start()}static destroy(){if(this._ticker){let e=this._ticker;this.ticker=null,e.destroy()}}};li.extension=i.Application,a.add(ci),a.add(li);var ui=class e{constructor(...e){this.stage=new F,e[0]!==void 0&&c(u,`Application constructor options are deprecated, please use Application.init() instead.`)}async init(t){t={...t},this.stage||=new F,this.renderer=await si(t),e._plugins.forEach(e=>{e.init.call(this,t)})}render(){this.renderer.render({container:this.stage})}get canvas(){return this.renderer.canvas}get view(){return c(u,`Application.view is deprecated, please use Application.canvas instead.`),this.renderer.canvas}get screen(){return this.renderer.screen}get domContainerRoot(){return this.renderer.renderPipes.dom?._domElement}destroy(t=!1,n=!1){let r=e._plugins.slice(0);r.reverse(),r.forEach(e=>{e.destroy.call(this)}),this.stage.destroy(n),this.stage=null,this.renderer.destroy(t),this.renderer=null}};ui._plugins=[];var di=ui;a.handleByList(i.Application,di._plugins),a.add(_e);var fi={test(e){return typeof e==`string`&&e.startsWith(`info face=`)},parse(e){let t=e.match(/^[a-z]+\s+.+$/gm),n={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(let e in t){let r=t[e].match(/^[a-z]+/gm)[0],i=t[e].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),a={};for(let e in i){let t=i[e].split(`=`),n=t[0],r=t[1].replace(/"/gm,``),o=parseFloat(r);a[n]=isNaN(o)?r:o}n[r].push(a)}let r={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:``,distanceField:null,baseLineOffset:0},[i]=n.info,[a]=n.common,[o]=n.distanceField??[];o&&(r.distanceField={range:parseInt(o.distanceRange,10),type:o.fieldType}),r.fontSize=parseInt(i.size,10),r.fontFamily=i.face,r.lineHeight=parseInt(a.lineHeight,10);let s=n.page;for(let e=0;e<s.length;e++)r.pages.push({id:parseInt(s[e].id,10)||0,file:s[e].file});let c={};r.baseLineOffset=a.base===void 0?0:r.lineHeight-parseInt(a.base,10);let l=n.char;for(let e=0;e<l.length;e++){let t=l[e],n=parseInt(t.id,10),i=t.letter??t.char??String.fromCharCode(n);i===`space`&&(i=` `),c[n]=i,r.chars[i]={id:n,page:parseInt(t.page,10)||0,x:parseInt(t.x,10),y:parseInt(t.y,10),width:parseInt(t.width,10),height:parseInt(t.height,10),xOffset:parseInt(t.xoffset,10),yOffset:parseInt(t.yoffset,10),xAdvance:parseInt(t.xadvance,10),kerning:{}}}let u=n.kerning||[];for(let e=0;e<u.length;e++){let t=parseInt(u[e].first,10),n=parseInt(u[e].second,10),i=parseInt(u[e].amount,10);r.chars[c[n]]&&(r.chars[c[n]].kerning[c[t]]=i)}return r}},pi={test(e){let t=e;return typeof t!=`string`&&`getElementsByTagName`in t&&t.getElementsByTagName(`page`).length&&t.getElementsByTagName(`info`)[0].getAttribute(`face`)!==null},parse(e){let t={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:``,distanceField:null,baseLineOffset:0},n=e.getElementsByTagName(`info`)[0],r=e.getElementsByTagName(`common`)[0],i=e.getElementsByTagName(`distanceField`)[0];i&&(t.distanceField={type:i.getAttribute(`fieldType`),range:parseInt(i.getAttribute(`distanceRange`),10)});let a=e.getElementsByTagName(`page`),o=e.getElementsByTagName(`char`),s=e.getElementsByTagName(`kerning`);t.fontSize=parseInt(n.getAttribute(`size`),10),t.fontFamily=n.getAttribute(`face`),t.lineHeight=parseInt(r.getAttribute(`lineHeight`),10);for(let e=0;e<a.length;e++)t.pages.push({id:parseInt(a[e].getAttribute(`id`),10)||0,file:a[e].getAttribute(`file`)});let c={},l=r.getAttribute(`base`);t.baseLineOffset=l===null?0:t.lineHeight-parseInt(l,10);for(let e=0;e<o.length;e++){let n=o[e],r=parseInt(n.getAttribute(`id`),10),i=n.getAttribute(`letter`)??n.getAttribute(`char`)??String.fromCharCode(r);i===`space`&&(i=` `),c[r]=i,t.chars[i]={id:r,page:parseInt(n.getAttribute(`page`),10)||0,x:parseInt(n.getAttribute(`x`),10),y:parseInt(n.getAttribute(`y`),10),width:parseInt(n.getAttribute(`width`),10),height:parseInt(n.getAttribute(`height`),10),xOffset:parseInt(n.getAttribute(`xoffset`),10),yOffset:parseInt(n.getAttribute(`yoffset`),10),xAdvance:parseInt(n.getAttribute(`xadvance`),10),kerning:{}}}for(let e=0;e<s.length;e++){let n=parseInt(s[e].getAttribute(`first`),10),r=parseInt(s[e].getAttribute(`second`),10),i=parseInt(s[e].getAttribute(`amount`),10);t.chars[c[r]]&&(t.chars[c[r]].kerning[c[n]]=i)}return t}},mi={test(e){return typeof e==`string`&&e.match(/<font(\s|>)/)?pi.test(b.get().parseXML(e)):!1},parse(e){return pi.parse(b.get().parseXML(e))}},hi=[`.xml`,`.fnt`],gi={extension:{type:i.CacheParser,name:`cacheBitmapFont`},test:e=>!!e?.pages&&!!e?.chars&&typeof e?.fontFamily==`string`&&e.fontFamily!==``,getCacheableAssets(e,t){let n={};return e.forEach(e=>{n[e]=t,n[`${e}-bitmap`]=t}),n[`${t.fontFamily}-bitmap`]=t,n}},_i={extension:{type:i.LoadParser,priority:Br.Normal},name:`loadBitmapFont`,id:`bitmap-font`,test(e){return hi.includes(q.extname(e).toLowerCase())},async testParse(e){return fi.test(e)||mi.test(e)},async parse(e,t,n){let r=fi.test(e)?fi.parse(e):mi.parse(e),{src:i}=t,{pages:a}=r,o=[],s=r.distanceField?{scaleMode:`linear`,alphaMode:`premultiply-alpha-on-upload`,autoGenerateMipmaps:!1,resolution:1}:{};for(let e=0;e<a.length;++e){let t=a[e].file,n=q.join(q.dirname(i),t);n=Xr(n,i),o.push({src:n,data:s})}let[c,{BitmapFont:l}]=await Promise.all([n.load(o),Sr(()=>Promise.resolve().then(()=>sf),void 0)]);return new l({data:r,textures:o.map(e=>c[e.src])},i)},async load(e,t){return await(await b.get().fetch(e)).text()},async unload(e,t,n){await Promise.all(e.pages.map(e=>n.unload(e.texture.source._sourceOrigin))),e.destroy()}},vi=class{constructor(e,t=!1){this._loader=e,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=t}add(e){e.forEach(e=>{this._assetList.push(e)}),this.verbose&&console.log(`[BackgroundLoader] assets: `,this._assetList),this._isActive&&!this._isLoading&&this._next()}async _next(){if(this._assetList.length&&this._isActive){this._isLoading=!0;let e=[],t=Math.min(this._assetList.length,this._maxConcurrent);for(let n=0;n<t;n++)e.push(this._assetList.pop());await this._loader.load(e),this._isLoading=!1,this._next()}}get active(){return this._isActive}set active(e){this._isActive!==e&&(this._isActive=e,e&&!this._isLoading&&this._next())}},yi={extension:{type:i.CacheParser,name:`cacheTextureArray`},test:e=>Array.isArray(e)&&e.every(e=>e instanceof D),getCacheableAssets:(e,t)=>{let n={};return e.forEach(e=>{t.forEach((t,r)=>{n[e+(r===0?``:r+1)]=t})}),n}};async function bi(e){if(`Image`in globalThis)return new Promise(t=>{let n=new Image;n.onload=()=>{t(!0)},n.onerror=()=>{t(!1)},n.src=e});if(`createImageBitmap`in globalThis&&`fetch`in globalThis){try{let t=await(await fetch(e)).blob();await createImageBitmap(t)}catch{return!1}return!0}return!1}var xi={extension:{type:i.DetectionParser,priority:1},test:async()=>bi(`data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=`),add:async e=>[...e,`avif`],remove:async e=>e.filter(e=>e!==`avif`)},Si=[`png`,`jpg`,`jpeg`],Ci={extension:{type:i.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async e=>[...e,...Si],remove:async e=>e.filter(e=>!Si.includes(e))},wi=`WorkerGlobalScope`in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function Ti(e){return!wi&&document.createElement(`video`).canPlayType(e)!==``}var Ei={extension:{type:i.DetectionParser,priority:0},test:async()=>Ti(`video/mp4`),add:async e=>[...e,`mp4`,`m4v`],remove:async e=>e.filter(e=>e!==`mp4`&&e!==`m4v`)},Di={extension:{type:i.DetectionParser,priority:0},test:async()=>Ti(`video/ogg`),add:async e=>[...e,`ogv`],remove:async e=>e.filter(e=>e!==`ogv`)},Oi={extension:{type:i.DetectionParser,priority:0},test:async()=>Ti(`video/webm`),add:async e=>[...e,`webm`],remove:async e=>e.filter(e=>e!==`webm`)},ki={extension:{type:i.DetectionParser,priority:0},test:async()=>bi(`data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=`),add:async e=>[...e,`webp`],remove:async e=>e.filter(e=>e!==`webp`)},Ai=class e{constructor(){this.loadOptions={...e.defaultOptions},this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(e,t,n)=>(this._parsersValidated=!1,e[t]=n,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(e,t){let n={promise:null,parser:null};return n.promise=(async()=>{let r=null,i=null;if((t.parser||t.loadParser)&&(i=this._parserHash[t.parser||t.loadParser],t.loadParser&&O(`[Assets] "loadParser" is deprecated, use "parser" instead for ${e}`),i||O(`[Assets] specified load parser "${t.parser||t.loadParser}" not found while loading ${e}`)),!i){for(let n=0;n<this.parsers.length;n++){let r=this.parsers[n];if(r.load&&r.test?.(e,t,this)){i=r;break}}if(!i)return O(`[Assets] ${e} could not be loaded as we don't know how to parse it, ensure the correct parser has been added`),null}r=await i.load(e,t,this),n.parser=i;for(let e=0;e<this.parsers.length;e++){let i=this.parsers[e];i.parse&&i.parse&&await i.testParse?.(r,t,this)&&(r=await i.parse(r,t,this)||r,n.parser=i)}return r})(),n}async load(t,n){this._parsersValidated||this._validateParsers();let{onProgress:r,onError:i,strategy:a,retryCount:o,retryDelay:s}=typeof n==`function`?{...e.defaultOptions,...this.loadOptions,onProgress:n}:{...e.defaultOptions,...this.loadOptions,...n||{}},c=0,l={},u=qr(t),d=V(t,e=>({alias:[e],src:e,data:{}})),f=d.reduce((e,t)=>e+(t.progressSize||1),0),p=d.map(async e=>{let t=q.toAbsolute(e.src);l[e.src]||(await this._loadAssetWithRetry(t,e,{onProgress:r,onError:i,strategy:a,retryCount:o,retryDelay:s},l),c+=e.progressSize||1,r&&r(c/f))});return await Promise.all(p),u?l[d[0].src]:l}async unload(e){let t=V(e,e=>({alias:[e],src:e})).map(async e=>{let t=q.toAbsolute(e.src),n=this.promiseCache[t];if(n){let r=await n.promise;delete this.promiseCache[t],await n.parser?.unload?.(r,e,this)}});await Promise.all(t)}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter(e=>e.name||e.id).reduce((e,t)=>(!t.name&&!t.id?O(`[Assets] parser should have an id`):(e[t.name]||e[t.id])&&O(`[Assets] parser id conflict "${t.id}"`),e[t.name]=t,t.id&&(e[t.id]=t),e),{})}async _loadAssetWithRetry(e,t,n,r){let i=0,{onError:a,strategy:o,retryCount:s,retryDelay:c}=n,l=e=>new Promise(t=>setTimeout(t,e));for(;;)try{this.promiseCache[e]||(this.promiseCache[e]=this._getLoadPromiseAndParser(e,t)),r[t.src]=await this.promiseCache[e].promise;return}catch(n){if(delete this.promiseCache[e],delete r[t.src],i++,o===`retry`&&!(o!==`retry`||i>s)){a&&a(n,t),await l(c);continue}if(o===`skip`){a&&a(n,t);return}a&&a(n,t);let u=Error(`[Loader.load] Failed to load ${e}.
|
|
4
|
+
${n}`);throw n instanceof Error&&n.stack&&(u.stack=n.stack),u}}};Ai.defaultOptions={onProgress:void 0,onError:void 0,strategy:`throw`,retryCount:3,retryDelay:250};var ji=Ai;function Mi(e,t){if(Array.isArray(t)){for(let n of t)if(e.startsWith(`data:${n}`))return!0;return!1}return e.startsWith(`data:${t}`)}function Ni(e,t){let n=e.split(`?`)[0],r=q.extname(n).toLowerCase();return Array.isArray(t)?t.includes(r):r===t}var Pi=`.json`,Fi=`application/json`,Ii={extension:{type:i.LoadParser,priority:Br.Low},name:`loadJson`,id:`json`,test(e){return Mi(e,Fi)||Ni(e,Pi)},async load(e){return await(await b.get().fetch(e)).json()}},Li=`.txt`,Ri=`text/plain`,zi={name:`loadTxt`,id:`text`,extension:{type:i.LoadParser,priority:Br.Low,name:`loadTxt`},test(e){return Mi(e,Ri)||Ni(e,Li)},async load(e){return await(await b.get().fetch(e)).text()}},Bi=[`normal`,`bold`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`],Vi=[`.ttf`,`.otf`,`.woff`,`.woff2`],Hi=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`],Ui=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;function Wi(e){let t=q.extname(e),n=q.basename(e,t).replace(/(-|_)/g,` `).toLowerCase().split(` `).map(e=>e.charAt(0).toUpperCase()+e.slice(1)),r=n.length>0;for(let e of n)if(!e.match(Ui)){r=!1;break}let i=n.join(` `);return r||(i=`"${i.replace(/[\\"]/g,`\\$&`)}"`),i}var Gi=/^[0-9A-Za-z%:/?#\[\]@!\$&'()\*\+,;=\-._~]*$/;function Ki(e){return Gi.test(e)?e:encodeURI(e)}var qi={extension:{type:i.LoadParser,priority:Br.Low},name:`loadWebFont`,id:`web-font`,test(e){return Mi(e,Hi)||Ni(e,Vi)},async load(e,t){let n=b.get().getFontFaceSet();if(n){let r=[],i=t.data?.family??Wi(e),a=t.data?.weights?.filter(e=>Bi.includes(e))??[`normal`],o=t.data??{};for(let t=0;t<a.length;t++){let s=a[t],c=new FontFace(i,`url('${Ki(e)}')`,{...o,weight:s});await c.load(),n.add(c),r.push(c)}return H.has(`${i}-and-url`)?H.get(`${i}-and-url`).entries.push({url:e,faces:r}):H.set(`${i}-and-url`,{entries:[{url:e,faces:r}]}),r.length===1?r[0]:r}return O(`[loadWebFont] FontFace API is not supported. Skipping loading font`),null},unload(e){let t=Array.isArray(e)?e:[e],n=t[0].family,r=H.get(`${n}-and-url`),i=r.entries.find(e=>e.faces.some(e=>t.indexOf(e)!==-1));i.faces=i.faces.filter(e=>t.indexOf(e)===-1),i.faces.length===0&&(r.entries=r.entries.filter(e=>e!==i)),t.forEach(e=>{b.get().getFontFaceSet().delete(e)}),r.entries.length===0&&H.remove(`${n}-and-url`)}};function Ji(e,t=1){let n=Jr.RETINA_PREFIX?.exec(e);return n?parseFloat(n[1]):t}function Yi(e,t,n){e.label=n,e._sourceOrigin=n;let r=new D({source:e,label:n}),i=()=>{delete t.promiseCache[n],H.has(n)&&H.remove(n)};return r.source.once(`destroy`,()=>{t.promiseCache[n]&&(O(`[Assets] A TextureSource managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the TextureSource.`),i())}),r.once(`destroy`,()=>{e.destroyed||(O(`[Assets] A Texture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the Texture.`),i())}),r}var Xi=`.svg`,Zi=`image/svg+xml`,Qi={extension:{type:i.LoadParser,priority:Br.Low,name:`loadSVG`},name:`loadSVG`,id:`svg`,config:{crossOrigin:`anonymous`,parseAsGraphicsContext:!1},test(e){return Mi(e,Zi)||Ni(e,Xi)},async load(e,t,n){return t.data?.parseAsGraphicsContext??this.config.parseAsGraphicsContext?ea(e):$i(e,t,n,this.config.crossOrigin)},unload(e){e.destroy(!0)}};async function $i(e,t,n,r){let i=await b.get().fetch(e),a=b.get().createImage();a.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(await i.text())}`,a.crossOrigin=r,await a.decode();let o=t.data?.width??a.width,s=t.data?.height??a.height,c=t.data?.resolution||Ji(e),l=Math.ceil(o*c),u=Math.ceil(s*c),d=b.get().createCanvas(l,u),f=d.getContext(`2d`);f.imageSmoothingEnabled=!0,f.imageSmoothingQuality=`high`,f.drawImage(a,0,0,o*c,s*c);let{parseAsGraphicsContext:p,...m}=t.data??{};return Yi(new pe({resource:d,alphaMode:`premultiply-alpha-on-upload`,resolution:c,...m}),n,e)}async function ea(e){let t=await(await b.get().fetch(e)).text(),n=new W;return n.svg(t),n}var ta=`(function () {
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const WHITE_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=";
|
|
8
|
+
async function checkImageBitmap() {
|
|
9
|
+
try {
|
|
10
|
+
if (typeof createImageBitmap !== "function") return false;
|
|
11
|
+
const response = await fetch(WHITE_PNG);
|
|
12
|
+
const imageBlob = await response.blob();
|
|
13
|
+
const imageBitmap = await createImageBitmap(imageBlob);
|
|
14
|
+
return imageBitmap.width === 1 && imageBitmap.height === 1;
|
|
15
|
+
} catch (_e) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
void checkImageBitmap().then((result) => {
|
|
20
|
+
self.postMessage(result);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
})();
|
|
24
|
+
`,na=null,ra=class{constructor(){na||=URL.createObjectURL(new Blob([ta],{type:`application/javascript`})),this.worker=new Worker(na)}};ra.revokeObjectURL=function(){na&&=(URL.revokeObjectURL(na),null)};var ia=`(function () {
|
|
25
|
+
'use strict';
|
|
26
|
+
|
|
27
|
+
async function loadImageBitmap(url, alphaMode) {
|
|
28
|
+
const response = await fetch(url);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(\`[WorkerManager.loadImageBitmap] Failed to fetch \${url}: \${response.status} \${response.statusText}\`);
|
|
31
|
+
}
|
|
32
|
+
const imageBlob = await response.blob();
|
|
33
|
+
return alphaMode === "premultiplied-alpha" ? createImageBitmap(imageBlob, { premultiplyAlpha: "none" }) : createImageBitmap(imageBlob);
|
|
34
|
+
}
|
|
35
|
+
self.onmessage = async (event) => {
|
|
36
|
+
try {
|
|
37
|
+
const imageBitmap = await loadImageBitmap(event.data.data[0], event.data.data[1]);
|
|
38
|
+
self.postMessage({
|
|
39
|
+
data: imageBitmap,
|
|
40
|
+
uuid: event.data.uuid,
|
|
41
|
+
id: event.data.id
|
|
42
|
+
}, [imageBitmap]);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
self.postMessage({
|
|
45
|
+
error: e,
|
|
46
|
+
uuid: event.data.uuid,
|
|
47
|
+
id: event.data.id
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
})();
|
|
53
|
+
`,aa=null,oa=class{constructor(){aa||=URL.createObjectURL(new Blob([ia],{type:`application/javascript`})),this.worker=new Worker(aa)}};oa.revokeObjectURL=function(){aa&&=(URL.revokeObjectURL(aa),null)};var sa=0,ca,la=new class{constructor(){this._initialized=!1,this._createdWorkers=0,this._workerPool=[],this._queue=[],this._resolveHash={}}isImageBitmapSupported(){return this._isImageBitmapSupported===void 0&&(this._isImageBitmapSupported=new Promise(e=>{let{worker:t}=new ra;t.addEventListener(`message`,n=>{t.terminate(),ra.revokeObjectURL(),e(n.data)})})),this._isImageBitmapSupported}loadImageBitmap(e,t){return this._run(`loadImageBitmap`,[e,t?.data?.alphaMode])}async _initWorkers(){this._initialized||=!0}_getWorker(){ca===void 0&&(ca=navigator.hardwareConcurrency||4);let e=this._workerPool.pop();return!e&&this._createdWorkers<ca&&(this._createdWorkers++,e=new oa().worker,e.addEventListener(`message`,e=>{this._complete(e.data),this._returnWorker(e.target),this._next()})),e}_returnWorker(e){this._workerPool.push(e)}_complete(e){this._resolveHash[e.uuid]&&(e.error===void 0?this._resolveHash[e.uuid].resolve(e.data):this._resolveHash[e.uuid].reject(e.error),delete this._resolveHash[e.uuid])}async _run(e,t){await this._initWorkers();let n=new Promise((n,r)=>{this._queue.push({id:e,arguments:t,resolve:n,reject:r})});return this._next(),n}_next(){if(!this._queue.length)return;let e=this._getWorker();if(!e)return;let t=this._queue.pop(),n=t.id;this._resolveHash[sa]={resolve:t.resolve,reject:t.reject},e.postMessage({data:t.arguments,uuid:sa++,id:n})}reset(){this._workerPool.forEach(e=>e.terminate()),this._workerPool.length=0,Object.values(this._resolveHash).forEach(({reject:e})=>{e?.(Error(`WorkerManager has been reset before completion`))}),this._resolveHash={},this._queue.length=0,this._initialized=!1,this._createdWorkers=0}},ua=[`.jpeg`,`.jpg`,`.png`,`.webp`,`.avif`],da=[`image/jpeg`,`image/png`,`image/webp`,`image/avif`];async function fa(e,t){let n=await b.get().fetch(e);if(!n.ok)throw Error(`[loadImageBitmap] Failed to fetch ${e}: ${n.status} ${n.statusText}`);let r=await n.blob();return t?.data?.alphaMode===`premultiplied-alpha`?createImageBitmap(r,{premultiplyAlpha:`none`}):createImageBitmap(r)}var pa={name:`loadTextures`,id:`texture`,extension:{type:i.LoadParser,priority:Br.High,name:`loadTextures`},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:`anonymous`},test(e){return Mi(e,da)||Ni(e,ua)},async load(e,t,n){let r=null;return r=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&await la.isImageBitmapSupported()?await la.loadImageBitmap(e,t):await fa(e,t):await new Promise((t,n)=>{r=b.get().createImage(),r.crossOrigin=this.config.crossOrigin,r.src=e,r.complete?t(r):(r.onload=()=>{t(r)},r.onerror=n)}),Yi(new pe({resource:r,alphaMode:`premultiply-alpha-on-upload`,resolution:t.data?.resolution||Ji(e),...t.data}),n,e)},unload(e){e.destroy(!0)}},ma=[`.mp4`,`.m4v`,`.webm`,`.ogg`,`.ogv`,`.h264`,`.avi`,`.mov`],ha,ga;function _a(e,t,n){n===void 0&&!t.startsWith(`data:`)?e.crossOrigin=ya(t):n!==!1&&(e.crossOrigin=typeof n==`string`?n:`anonymous`)}function va(e){return new Promise((t,n)=>{e.addEventListener(`canplaythrough`,r),e.addEventListener(`error`,i),e.load();function r(){a(),t()}function i(e){a(),n(e)}function a(){e.removeEventListener(`canplaythrough`,r),e.removeEventListener(`error`,i)}})}function ya(e,t=globalThis.location){if(e.startsWith(`data:`))return``;t||=globalThis.location;let n=new URL(e,document.baseURI);return n.hostname!==t.hostname||n.port!==t.port||n.protocol!==t.protocol?`anonymous`:``}function ba(){let e=[],t=[];for(let n of ma){let r=Fr.MIME_TYPES[n.substring(1)]||`video/${n.substring(1)}`;Ti(r)&&(e.push(n),t.includes(r)||t.push(r))}return{validVideoExtensions:e,validVideoMime:t}}var xa={name:`loadVideo`,id:`video`,extension:{type:i.LoadParser,name:`loadVideo`},test(e){if(!ha||!ga){let{validVideoExtensions:e,validVideoMime:t}=ba();ha=e,ga=t}let t=Mi(e,ga),n=Ni(e,ha);return t||n},async load(e,t,n){let r={...Fr.defaultOptions,resolution:t.data?.resolution||Ji(e),alphaMode:t.data?.alphaMode||await Nr(),...t.data},i=document.createElement(`video`),a={preload:r.autoLoad===!1?void 0:`auto`,"webkit-playsinline":r.playsinline===!1?void 0:``,playsinline:r.playsinline===!1?void 0:``,muted:r.muted===!0?``:void 0,loop:r.loop===!0?``:void 0,autoplay:r.autoPlay===!1?void 0:``};Object.keys(a).forEach(e=>{let t=a[e];t!==void 0&&i.setAttribute(e,t)}),r.muted===!0&&(i.muted=!0),_a(i,e,r.crossorigin);let o=document.createElement(`source`),s;if(r.mime)s=r.mime;else if(e.startsWith(`data:`))s=e.slice(5,e.indexOf(`;`));else if(!e.startsWith(`blob:`)){let t=e.split(`?`)[0].slice(e.lastIndexOf(`.`)+1).toLowerCase();s=Fr.MIME_TYPES[t]||`video/${t}`}return o.src=e,s&&(o.type=s),new Promise((a,s)=>{r.preload&&!r.autoPlay&&i.load(),i.addEventListener(`canplay`,c),i.addEventListener(`error`,l),o.addEventListener(`error`,l),i.appendChild(o);async function c(){let o=new Fr({...r,resource:i});u(),t.data.preload&&await va(i),a(Yi(o,n,e))}function l(e){u(),s(e)}function u(){i.removeEventListener(`canplay`,c),i.removeEventListener(`error`,l),o.removeEventListener(`error`,l)}})},unload(e){e.destroy(!0)}},Sa={extension:{type:i.ResolveParser,name:`resolveTexture`},test:pa.test,parse:e=>({resolution:parseFloat(Jr.RETINA_PREFIX.exec(e)?.[1]??`1`),format:e.split(`.`).pop(),src:e})},Ca={extension:{type:i.ResolveParser,priority:-2,name:`resolveJson`},test:e=>Jr.RETINA_PREFIX.test(e)&&e.endsWith(`.json`),parse:Sa.parse},wa=new class{constructor(){this._detections=[],this._initialized=!1,this.resolver=new Jr,this.loader=new ji,this.cache=H,this._backgroundLoader=new vi(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(e={}){if(this._initialized){O(`[Assets]AssetManager already initialized, did you load before calling this Assets.init()?`);return}if(this._initialized=!0,e.defaultSearchParams&&this.resolver.setDefaultSearchParams(e.defaultSearchParams),e.basePath&&(this.resolver.basePath=e.basePath),e.bundleIdentifier&&this.resolver.setBundleIdentifier(e.bundleIdentifier),e.manifest){let t=e.manifest;typeof t==`string`&&(t=await this.load(t)),this.resolver.addManifest(t)}let t=e.texturePreference?.resolution??1,n=typeof t==`number`?[t]:t,r=await this._detectFormats({preferredFormats:e.texturePreference?.format,skipDetections:e.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:r,resolution:n}}),e.preferences&&this.setPreferences(e.preferences),e.loadOptions&&(this.loader.loadOptions={...this.loader.loadOptions,...e.loadOptions})}add(e){this.resolver.add(e)}async load(e,t){this._initialized||await this.init();let n=qr(e),r=V(e).map(e=>{if(typeof e!=`string`){let t=this.resolver.getAlias(e);return t.some(e=>!this.resolver.hasKey(e))&&this.add(e),Array.isArray(t)?t[0]:t}return this.resolver.hasKey(e)||this.add({alias:e,src:e}),e}),i=this.resolver.resolve(r),a=await this._mapLoadToResolve(i,t);return n?a[r[0]]:a}addBundle(e,t){this.resolver.addBundle(e,t)}async loadBundle(e,t){this._initialized||await this.init();let n=!1;typeof e==`string`&&(n=!0,e=[e]);let r=this.resolver.resolveBundle(e),i={},a=Object.keys(r),o=0,s=[],c=()=>{t?.(s.reduce((e,t)=>e+t,0)/o)},l=a.map((e,t)=>{let n=r[e],a=Object.values(n),l=[...new Set(a.flat())].reduce((e,t)=>e+(t.progressSize||1),0);return s.push(0),o+=l,this._mapLoadToResolve(n,e=>{s[t]=e*l,c()}).then(t=>{i[e]=t})});return await Promise.all(l),n?i[e[0]]:i}async backgroundLoad(e){this._initialized||await this.init(),typeof e==`string`&&(e=[e]);let t=this.resolver.resolve(e);this._backgroundLoader.add(Object.values(t))}async backgroundLoadBundle(e){this._initialized||await this.init(),typeof e==`string`&&(e=[e]);let t=this.resolver.resolveBundle(e);Object.values(t).forEach(e=>{this._backgroundLoader.add(Object.values(e))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(e){if(typeof e==`string`)return H.get(e);let t={};for(let n=0;n<e.length;n++)t[n]=H.get(e[n]);return t}async _mapLoadToResolve(e,t){let n=[...new Set(Object.values(e))];this._backgroundLoader.active=!1;let r=await this.loader.load(n,t);this._backgroundLoader.active=!0;let i={};return n.forEach(e=>{let t=r[e.src],n=[e.src];e.alias&&n.push(...e.alias),n.forEach(e=>{i[e]=t}),H.set(n,t)}),i}async unload(e){this._initialized||await this.init();let t=V(e).map(e=>typeof e==`string`?e:e.src),n=this.resolver.resolve(t);await this._unloadFromResolved(n)}async unloadBundle(e){this._initialized||await this.init(),e=V(e);let t=this.resolver.resolveBundle(e),n=Object.keys(t).map(e=>this._unloadFromResolved(t[e]));await Promise.all(n)}async _unloadFromResolved(e){let t=Object.values(e);t.forEach(e=>{H.remove(e.src)}),await this.loader.unload(t)}async _detectFormats(e){let t=[];e.preferredFormats&&(t=Array.isArray(e.preferredFormats)?e.preferredFormats:[e.preferredFormats]);for(let n of e.detections)e.skipDetections||await n.test()?t=await n.add(t):e.skipDetections||(t=await n.remove(t));return t=t.filter((e,n)=>t.indexOf(e)===n),t}get detections(){return this._detections}setPreferences(e){this.loader.parsers.forEach(t=>{t.config&&Object.keys(t.config).filter(t=>t in e).forEach(n=>{t.config[n]=e[n]})})}};a.handleByList(i.LoadParser,wa.loader.parsers).handleByList(i.ResolveParser,wa.resolver.parsers).handleByList(i.CacheParser,wa.cache.parsers).handleByList(i.DetectionParser,wa.detections),a.add(yi,Ci,xi,ki,Ei,Di,Oi,Ii,zi,qi,Qi,pa,xa,_i,gi,Sa,Ca);var Ta={loader:i.LoadParser,resolver:i.ResolveParser,cache:i.CacheParser,detection:i.DetectionParser};a.handle(i.Asset,e=>{let t=e.ref;Object.entries(Ta).filter(([e])=>!!t[e]).forEach(([e,n])=>a.add(Object.assign(t[e],{extension:t[e].extension??n})))},e=>{let t=e.ref;Object.keys(Ta).filter(e=>!!t[e]).forEach(e=>a.remove(t[e]))});function Ea(e,t,n,r,i,a,o,s){let c=o-n,l=s-r,u=i-n,d=a-r,f=e-n,p=t-r,m=c*c+l*l,h=c*u+l*d,g=c*f+l*p,_=u*u+d*d,v=u*f+d*p,y=1/(m*_-h*h),b=(_*g-h*v)*y,x=(m*v-h*g)*y;return b>=0&&x>=0&&b+x<1}var Da=new t;function Oa(e,t,n,r,i=!1,a){let o=Da;o.minX=0,o.minY=0,o.maxX=e.width/r|0,o.maxY=e.height/r|0;let s=M.getOptimalTexture({width:o.width,height:o.height,resolution:r,autoGenerateMipmaps:i,scaleMode:a});return s.source.uploadMethodId=`image`,s.source.resource=e,s.source.alphaMode=`premultiply-alpha-on-upload`,s.frame.width=t/r,s.frame.height=n/r,s.source.emit(`update`,s.source),s.updateUvs(),s}var ka=class{constructor(){this.isBatchable=!1}reset(){this.isBatchable=!1,this.context=null,this.graphicsData&&=(this.graphicsData.destroy(),null)}destroy(){this.reset()}},Aa=class{constructor(){this.instructions=new h}init(){this.instructions.reset()}destroy(){this.instructions.destroy(),this.instructions=null}},ja=class e{constructor(e){this._renderer=e,this._managedContexts=new G({renderer:e,type:`resource`,name:`graphicsContext`})}init(t){e.defaultOptions.bezierSmoothness=t?.bezierSmoothness??e.defaultOptions.bezierSmoothness}getContextRenderData(e){return this.getGpuContext(e).graphicsData||this._initContextRenderData(e)}updateGpuContext(e){let t=e._gpuData,n=!!t[this._renderer.uid],r=t[this._renderer.uid]||this._initContext(e);return(e.dirty||!n)&&(n&&r.reset(),r.isBatchable=!1,e.dirty=!1),r}getGpuContext(e){return e._gpuData[this._renderer.uid]||this._initContext(e)}_initContextRenderData(e){let t=new Aa,n=this.getGpuContext(e);return n.graphicsData=t,t.init(),t}_initContext(e){let t=new ka;return t.context=e,e._gpuData[this._renderer.uid]=t,this._managedContexts.add(e),t}destroy(){this._managedContexts.destroy(),this._renderer=null}};ja.extension={type:[i.CanvasSystem],name:`graphicsContext`},ja.defaultOptions={bezierSmoothness:.5};var Ma=ja,Na=class{constructor(e,t){this.state=L.for2d(),this.renderer=e,this._adaptor=t,this.renderer.runners.contextChange.add(this),this._managedGraphics=new G({renderer:e,type:`renderable`,priority:-1,name:`graphics`})}contextChange(){this._adaptor.contextChange(this.renderer)}validateRenderable(e){return!1}addRenderable(e,t){this._managedGraphics.add(e),this.renderer.renderPipes.batch.break(t),t.add(e)}updateRenderable(e){}execute(e){e.isRenderable&&this._adaptor.execute(this,e)}destroy(){this._managedGraphics.destroy(),this.renderer=null,this._adaptor.destroy(),this._adaptor=null}};Na.extension={type:[i.CanvasPipes],name:`graphics`};var Pa=class{constructor(){this.batches=[],this.batched=!1}destroy(){this.batches.forEach(e=>{k.return(e)}),this.batches.length=0}},Fa=class{constructor(e,t){this.state=L.for2d(),this.renderer=e,this._adaptor=t,this.renderer.runners.contextChange.add(this),this._managedGraphics=new G({renderer:e,type:`renderable`,priority:-1,name:`graphics`})}contextChange(){this._adaptor.contextChange(this.renderer)}validateRenderable(e){let t=e.context,n=!!e._gpuData,r=this.renderer.graphicsContext.updateGpuContext(t);return!!(r.isBatchable||n!==r.isBatchable)}addRenderable(e,t){let n=this.renderer.graphicsContext.updateGpuContext(e.context);(e.didViewUpdate||!e._gpuData[this.renderer.uid])&&this._rebuild(e),n.isBatchable?this._addToBatcher(e,t):(this.renderer.renderPipes.batch.break(t),t.add(e))}updateRenderable(e){let t=this._getGpuDataForRenderable(e).batches;for(let e=0;e<t.length;e++){let n=t[e];n._batcher.updateElement(n)}}execute(e){if(!e.isRenderable)return;let t=this.renderer,n=e.context;if(!t.graphicsContext.getGpuContext(n).batches.length)return;let r=n.customShader||this._adaptor.shader;this.state.blendMode=e.groupBlendMode;let i=r.resources.localUniforms.uniforms;i.uTransformMatrix=e.groupTransform,i.uRound=t._roundPixels|e._roundPixels,ge(e.groupColorAlpha,i.uColor,0),this._adaptor.execute(this,e)}_rebuild(e){let t=this._getGpuDataForRenderable(e),n=this.renderer.graphicsContext.updateGpuContext(e.context);t.destroy(),n.isBatchable&&this._updateBatchesForRenderable(e,t)}_addToBatcher(e,t){let n=this.renderer.renderPipes.batch,r=this._getGpuDataForRenderable(e).batches;for(let e=0;e<r.length;e++){let i=r[e];n.addToBatch(i,t)}}_getGpuDataForRenderable(e){return e._gpuData[this.renderer.uid]||this._initGpuDataForRenderable(e)}_initGpuDataForRenderable(e){let t=new Pa;return e._gpuData[this.renderer.uid]=t,this._managedGraphics.add(e),t}_updateBatchesForRenderable(e,t){let n=e.context,r=this.renderer.graphicsContext.getGpuContext(n),i=this.renderer._roundPixels|e._roundPixels;t.batches=r.batches.map(t=>{let n=k.get(Fe);return t.copyTo(n),n.renderable=e,n.roundPixels=i,n})}destroy(){this._managedGraphics.destroy(),this.renderer=null,this._adaptor.destroy(),this._adaptor=null,this.state=null}};Fa.extension={type:[i.WebGLPipes,i.WebGPUPipes],name:`graphics`},a.add(Na),a.add(Fa),a.add(Ma),a.add(De);var Ia=class e extends j{constructor(e){e instanceof W&&(e={context:e});let{context:t,roundPixels:n,...r}=e||{};super({label:`Graphics`,...r}),this.renderPipeId=`graphics`,t?this.context=t:(this.context=this._ownedContext=new W,this.context.autoGarbageCollect=this.autoGarbageCollect),this.didViewUpdate=!0,this.allowChildren=!1,this.roundPixels=n??!1}set context(e){e!==this._context&&(this._context&&(this._context.off(`update`,this.onViewUpdate,this),this._context.off(`unload`,this.unload,this)),this._context=e,this._context.on(`update`,this.onViewUpdate,this),this._context.on(`unload`,this.unload,this),this.onViewUpdate())}get context(){return this._context}get bounds(){return this._context.bounds}updateBounds(){}containsPoint(e){return this._context.containsPoint(e)}destroy(e){this._ownedContext&&!e?this._ownedContext.destroy(e):(e===!0||e?.context===!0)&&this._context.destroy(e),this._context?.off(`update`,this.onViewUpdate,this),this._context?.off(`unload`,this.unload,this),this._ownedContext=null,this._context=null,super.destroy(e)}_onTouch(e){this._gcLastUsed=e,this._context._gcLastUsed=e}_callContextMethod(e,t){return this.context[e](...t),this}setFillStyle(...e){return this._callContextMethod(`setFillStyle`,e)}setStrokeStyle(...e){return this._callContextMethod(`setStrokeStyle`,e)}fill(...e){return this._callContextMethod(`fill`,e)}stroke(...e){return this._callContextMethod(`stroke`,e)}texture(...e){return this._callContextMethod(`texture`,e)}beginPath(){return this._callContextMethod(`beginPath`,[])}cut(){return this._callContextMethod(`cut`,[])}arc(...e){return this._callContextMethod(`arc`,e)}arcTo(...e){return this._callContextMethod(`arcTo`,e)}arcToSvg(...e){return this._callContextMethod(`arcToSvg`,e)}bezierCurveTo(...e){return this._callContextMethod(`bezierCurveTo`,e)}closePath(){return this._callContextMethod(`closePath`,[])}ellipse(...e){return this._callContextMethod(`ellipse`,e)}circle(...e){return this._callContextMethod(`circle`,e)}path(...e){return this._callContextMethod(`path`,e)}lineTo(...e){return this._callContextMethod(`lineTo`,e)}moveTo(...e){return this._callContextMethod(`moveTo`,e)}quadraticCurveTo(...e){return this._callContextMethod(`quadraticCurveTo`,e)}rect(...e){return this._callContextMethod(`rect`,e)}roundRect(...e){return this._callContextMethod(`roundRect`,e)}poly(...e){return this._callContextMethod(`poly`,e)}regularPoly(...e){return this._callContextMethod(`regularPoly`,e)}roundPoly(...e){return this._callContextMethod(`roundPoly`,e)}roundShape(...e){return this._callContextMethod(`roundShape`,e)}filletRect(...e){return this._callContextMethod(`filletRect`,e)}chamferRect(...e){return this._callContextMethod(`chamferRect`,e)}star(...e){return this._callContextMethod(`star`,e)}svg(...e){return this._callContextMethod(`svg`,e)}restore(...e){return this._callContextMethod(`restore`,e)}save(){return this._callContextMethod(`save`,[])}getTransform(){return this.context.getTransform()}resetTransform(){return this._callContextMethod(`resetTransform`,[])}rotateTransform(...e){return this._callContextMethod(`rotate`,e)}scaleTransform(...e){return this._callContextMethod(`scale`,e)}setTransform(...e){return this._callContextMethod(`setTransform`,e)}transform(...e){return this._callContextMethod(`transform`,e)}translateTransform(...e){return this._callContextMethod(`translate`,e)}clear(){return this._callContextMethod(`clear`,[])}get fillStyle(){return this._context.fillStyle}set fillStyle(e){this._context.fillStyle=e}get strokeStyle(){return this._context.strokeStyle}set strokeStyle(e){this._context.strokeStyle=e}clone(t=!1){return t?new e(this._context.clone()):(this._ownedContext=null,new e(this._context))}lineStyle(e,t,n){c(u,`Graphics#lineStyle is no longer needed. Use Graphics#setStrokeStyle to set the stroke style.`);let r={};return e&&(r.width=e),t&&(r.color=t),n&&(r.alpha=n),this.context.strokeStyle=r,this}beginFill(e,t){c(u,`Graphics#beginFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.`);let n={};return e!==void 0&&(n.color=e),t!==void 0&&(n.alpha=t),this.context.fillStyle=n,this}endFill(){c(u,`Graphics#endFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.`),this.context.fill();let e=this.context.strokeStyle;return(e.width!==W.defaultStrokeStyle.width||e.color!==W.defaultStrokeStyle.color||e.alpha!==W.defaultStrokeStyle.alpha)&&this.context.stroke(),this}drawCircle(...e){return c(u,`Graphics#drawCircle has been renamed to Graphics#circle`),this._callContextMethod(`circle`,e)}drawEllipse(...e){return c(u,`Graphics#drawEllipse has been renamed to Graphics#ellipse`),this._callContextMethod(`ellipse`,e)}drawPolygon(...e){return c(u,`Graphics#drawPolygon has been renamed to Graphics#poly`),this._callContextMethod(`poly`,e)}drawRect(...e){return c(u,`Graphics#drawRect has been renamed to Graphics#rect`),this._callContextMethod(`rect`,e)}drawRoundedRect(...e){return c(u,`Graphics#drawRoundedRect has been renamed to Graphics#roundRect`),this._callContextMethod(`roundRect`,e)}drawStar(...e){return c(u,`Graphics#drawStar has been renamed to Graphics#star`),this._callContextMethod(`star`,e)}},La=class e extends w{constructor(...t){let n=t[0]??{};n instanceof Float32Array&&(c(u,`use new MeshGeometry({ positions, uvs, indices }) instead`),n={positions:n,uvs:t[1],indices:t[2]}),n={...e.defaultOptions,...n};let r=n.positions||new Float32Array([0,0,1,0,1,1,0,1]),i=n.uvs;i||=n.positions?new Float32Array(r.length):new Float32Array([0,0,1,0,1,1,0,1]);let a=n.indices||new Uint32Array([0,1,2,0,2,3]),o=n.shrinkBuffersToFit,s=new ne({data:r,label:`attribute-mesh-positions`,shrinkToFit:o,usage:x.VERTEX|x.COPY_DST}),l=new ne({data:i,label:`attribute-mesh-uvs`,shrinkToFit:o,usage:x.VERTEX|x.COPY_DST}),d=new ne({data:a,label:`index-mesh-buffer`,shrinkToFit:o,usage:x.INDEX|x.COPY_DST});super({attributes:{aPosition:{buffer:s,format:`float32x2`,stride:8,offset:0},aUV:{buffer:l,format:`float32x2`,stride:8,offset:0}},indexBuffer:d,topology:n.topology}),this.batchMode=`auto`}get positions(){return this.attributes.aPosition.buffer.data}set positions(e){this.attributes.aPosition.buffer.data=e}get uvs(){return this.attributes.aUV.buffer.data}set uvs(e){this.attributes.aUV.buffer.data=e}get indices(){return this.indexBuffer.data}set indices(e){this.indexBuffer.data=e}};La.defaultOptions={topology:`triangle-list`,shrinkBuffersToFit:!1};var Ra=La,za=class{constructor(){this.batcherName=`default`,this.packAsQuad=!1,this.indexOffset=0,this.attributeOffset=0,this.roundPixels=0,this._batcher=null,this._batch=null,this._textureMatrixUpdateId=-1,this._uvUpdateId=-1}get blendMode(){return this.renderable.groupBlendMode}get topology(){return this._topology||this.geometry.topology}set topology(e){this._topology=e}reset(){this.renderable=null,this.texture=null,this._batcher=null,this._batch=null,this.geometry=null,this._uvUpdateId=-1,this._textureMatrixUpdateId=-1}setTexture(e){this.texture!==e&&(this.texture=e,this._textureMatrixUpdateId=-1)}get uvs(){let e=this.geometry.getBuffer(`aUV`),t=e.data,n=t,r=this.texture.textureMatrix;return r.isSimple||(n=this._transformedUvs,(this._textureMatrixUpdateId!==r._updateID||this._uvUpdateId!==e._updateID)&&((!n||n.length<t.length)&&(n=this._transformedUvs=new Float32Array(t.length)),this._textureMatrixUpdateId=r._updateID,this._uvUpdateId=e._updateID,r.multiplyUvs(t,n))),n}get positions(){return this.geometry.positions}get indices(){return this.geometry.indices}get color(){return this.renderable.groupColorAlpha}get groupTransform(){return this.renderable.groupTransform}get attributeSize(){return this.geometry.positions.length/2}get indexSize(){return this.geometry.indices.length}},Ba=class{destroy(){}},Va=class{constructor(t,n){this.localUniforms=new C({uTransformMatrix:{value:new e,type:`mat3x3<f32>`},uColor:{value:new Float32Array([1,1,1,1]),type:`vec4<f32>`},uRound:{value:0,type:`f32`}}),this.localUniformsBindGroup=new _({0:this.localUniforms}),this.renderer=t,this._adaptor=n,this._adaptor.init()}validateRenderable(e){let t=this._getMeshData(e),n=t.batched,r=e.batched;if(t.batched=r,n!==r)return!0;if(r){let n=e._geometry;if(n.indices.length!==t.indexSize||n.positions.length!==t.vertexSize)return t.indexSize=n.indices.length,t.vertexSize=n.positions.length,!0;let r=this._getBatchableMesh(e);return r.texture.uid!==e._texture.uid&&(r._textureMatrixUpdateId=-1),!r._batcher.checkAndUpdateTexture(r,e._texture)}return!1}addRenderable(e,t){let n=this.renderer.renderPipes.batch,r=this._getMeshData(e);if(e.didViewUpdate&&(r.indexSize=e._geometry.indices?.length,r.vertexSize=e._geometry.positions?.length),r.batched){let r=this._getBatchableMesh(e);r.setTexture(e._texture),r.geometry=e._geometry,n.addToBatch(r,t)}else n.break(t),t.add(e)}updateRenderable(e){if(e.batched){let t=this._getBatchableMesh(e);t.setTexture(e._texture),t.geometry=e._geometry,t._batcher.updateElement(t)}}execute(e){if(!e.isRenderable)return;e.state.blend&&(e.state.blendMode=Ke(e.groupBlendMode,e.texture._source));let t=this.localUniforms;t.uniforms.uTransformMatrix=e.groupTransform,t.uniforms.uRound=this.renderer._roundPixels|e._roundPixels,t.update(),ge(e.groupColorAlpha,t.uniforms.uColor,0),this._adaptor.execute(this,e)}_getMeshData(e){var t,n;return(t=e._gpuData)[n=this.renderer.uid]||(t[n]=new Ba),e._gpuData[this.renderer.uid].meshData||this._initMeshData(e)}_initMeshData(e){return e._gpuData[this.renderer.uid].meshData={batched:e.batched,indexSize:0,vertexSize:0},e._gpuData[this.renderer.uid].meshData}_getBatchableMesh(e){var t,n;return(t=e._gpuData)[n=this.renderer.uid]||(t[n]=new Ba),e._gpuData[this.renderer.uid].batchableMesh||this._initBatchableMesh(e)}_initBatchableMesh(e){let t=new za;return t.renderable=e,t.setTexture(e._texture),t.transform=e.groupTransform,t.roundPixels=this.renderer._roundPixels|e._roundPixels,e._gpuData[this.renderer.uid].batchableMesh=t,t}destroy(){this.localUniforms=null,this.localUniformsBindGroup=null,this._adaptor.destroy(),this._adaptor=null,this.renderer=null}};Va.extension={type:[i.WebGLPipes,i.WebGPUPipes],name:`mesh`},a.add(Va);var Ha=class extends j{constructor(...e){let t=e[0];t instanceof w&&(c(u,`Mesh: use new Mesh({ geometry, shader }) instead`),t={geometry:t,shader:e[1]},e[3]&&(c(u,`Mesh: drawMode argument has been removed, use geometry.topology instead`),t.geometry.topology=e[3]));let{geometry:n,shader:r,texture:i,roundPixels:a,state:o,...s}=t;super({label:`Mesh`,...s}),this.renderPipeId=`mesh`,this._shader=null,this.allowChildren=!1,this.shader=r??null,this.texture=i??r?.texture??D.WHITE,this.state=o??L.for2d(),this._geometry=n,this._geometry.on(`update`,this.onViewUpdate,this),this.roundPixels=a??!1}get material(){return c(u,`mesh.material property has been removed, use mesh.shader instead`),this._shader}set shader(e){this._shader!==e&&(this._shader=e,this.onViewUpdate())}get shader(){return this._shader}set geometry(e){this._geometry!==e&&(this._geometry?.off(`update`,this.onViewUpdate,this),e.on(`update`,this.onViewUpdate,this),this._geometry=e,this.onViewUpdate())}get geometry(){return this._geometry}set texture(e){e||=D.EMPTY;let t=this._texture;t!==e&&(t&&t.dynamic&&t.off(`update`,this.onViewUpdate,this),e.dynamic&&e.on(`update`,this.onViewUpdate,this),this.shader&&(this.shader.texture=e),this._texture=e,this.onViewUpdate())}get texture(){return this._texture}get batched(){return this._shader||this.state.data&12?!1:this._geometry instanceof Ra?this._geometry.batchMode===`auto`?this._geometry.positions.length/2<=100:this._geometry.batchMode===`batch`:!1}get bounds(){return this._geometry.bounds}updateBounds(){this._bounds=this._geometry.bounds}containsPoint(e){let{x:t,y:n}=e;if(!this.bounds.containsPoint(t,n))return!1;let r=this.geometry.getBuffer(`aPosition`).data,i=this.geometry.topology===`triangle-strip`?3:1;if(this.geometry.getIndex()){let e=this.geometry.getIndex().data,a=e.length;for(let o=0;o+2<a;o+=i){let i=e[o]*2,a=e[o+1]*2,s=e[o+2]*2;if(Ea(t,n,r[i],r[i+1],r[a],r[a+1],r[s],r[s+1]))return!0}}else{let e=r.length/2;for(let a=0;a+2<e;a+=i){let e=a*2,i=(a+1)*2,o=(a+2)*2;if(Ea(t,n,r[e],r[e+1],r[i],r[i+1],r[o],r[o+1]))return!0}}return!1}destroy(e){if(super.destroy(e),typeof e==`boolean`?e:e?.texture){let t=typeof e==`boolean`?e:e?.textureSource;this._texture.destroy(t)}this._geometry?.off(`update`,this.onViewUpdate,this),this._texture=null,this._geometry=null,this._shader=null}},Ua=class{constructor({matrix:t,observer:n}={}){this.dirty=!0,this._matrix=t??new e,this.observer=n,this.position=new z(this,0,0),this.scale=new z(this,1,1),this.pivot=new z(this,0,0),this.skew=new z(this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1}get matrix(){let e=this._matrix;return this.dirty&&=(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),!1),e}_onUpdate(e){this.dirty=!0,e===this.skew&&this.updateSkew(),this.observer?._onUpdate(this)}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this.dirty=!0}toString(){return`[pixi.js/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`}setFromMatrix(e){e.decompose(this),this.dirty=!0}get rotation(){return this._rotation}set rotation(e){this._rotation!==e&&(this._rotation=e,this._onUpdate(this.skew))}},Wa=new e,Ga=new e,Ka=[new p,new p,new p,new p],qa=class{constructor(e){this._renderer=e}validateRenderable(e){return!1}addRenderable(e,t){this._renderer.renderPipes.batch.break(t),t.add(e)}updateRenderable(e){}execute(e){let t=this._renderer,n=t.canvasContext,r=n.activeContext;r.save(),n.setBlendMode(e.groupBlendMode);let i=t.globalUniforms.globalUniformData?.worldColor??4294967295,a=e.groupColorAlpha,o=(i>>>24&255)/255,s=(a>>>24&255)/255,c=t.filter?.alphaMultiplier??1,l=o*s*c;if(l<=0){r.restore();return}r.globalAlpha=l;let u=i&16777215,d=a&16777215,f=de(ie(d,u)),p=e.texture,m=B.getTintedPattern(p,f),h=e.width,g=e.height,_=e.groupTransform,v=p.source._resolution??p.source.resolution??1;Ga.copyFrom(e._tileTransform.matrix),e.applyAnchorToTexture||Ga.translate(-e.anchor.x*h,-e.anchor.y*g);let y=Ga.tx,b=Ga.ty;Ga.scale(1/v,1/v),Ga.tx=y,Ga.ty=b,Wa.identity(),Wa.prepend(Ga),Wa.prepend(_);let x=t._roundPixels|e._roundPixels;n.setContextTransform(Wa,x===1),r.fillStyle=m;let S=e.anchor.x*-h,C=e.anchor.y*-g;Ka[0].set(S,C),Ka[1].set(S+h,C),Ka[2].set(S+h,C+g),Ka[3].set(S,C+g);for(let e=0;e<4;e++)Ga.applyInverse(Ka[e],Ka[e]);r.beginPath(),r.moveTo(Ka[0].x,Ka[0].y);for(let e=1;e<4;e++)r.lineTo(Ka[e].x,Ka[e].y);r.closePath(),r.fill(),r.restore()}destroy(){this._renderer=null}};qa.extension={type:[i.CanvasPipes],name:`tilingSprite`};var Ja={name:`tiling-bit`,vertex:{header:`
|
|
54
|
+
struct TilingUniforms {
|
|
55
|
+
uMapCoord:mat3x3<f32>,
|
|
56
|
+
uClampFrame:vec4<f32>,
|
|
57
|
+
uClampOffset:vec2<f32>,
|
|
58
|
+
uTextureTransform:mat3x3<f32>,
|
|
59
|
+
uSizeAnchor:vec4<f32>
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
@group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;
|
|
63
|
+
@group(2) @binding(1) var uTexture: texture_2d<f32>;
|
|
64
|
+
@group(2) @binding(2) var uSampler: sampler;
|
|
65
|
+
`,main:`
|
|
66
|
+
uv = (tilingUniforms.uTextureTransform * vec3(uv, 1.0)).xy;
|
|
67
|
+
|
|
68
|
+
position = (position - tilingUniforms.uSizeAnchor.zw) * tilingUniforms.uSizeAnchor.xy;
|
|
69
|
+
`},fragment:{header:`
|
|
70
|
+
struct TilingUniforms {
|
|
71
|
+
uMapCoord:mat3x3<f32>,
|
|
72
|
+
uClampFrame:vec4<f32>,
|
|
73
|
+
uClampOffset:vec2<f32>,
|
|
74
|
+
uTextureTransform:mat3x3<f32>,
|
|
75
|
+
uSizeAnchor:vec4<f32>
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
@group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;
|
|
79
|
+
@group(2) @binding(1) var uTexture: texture_2d<f32>;
|
|
80
|
+
@group(2) @binding(2) var uSampler: sampler;
|
|
81
|
+
`,main:`
|
|
82
|
+
|
|
83
|
+
var coord = vUV + ceil(tilingUniforms.uClampOffset - vUV);
|
|
84
|
+
coord = (tilingUniforms.uMapCoord * vec3(coord, 1.0)).xy;
|
|
85
|
+
var unclamped = coord;
|
|
86
|
+
coord = clamp(coord, tilingUniforms.uClampFrame.xy, tilingUniforms.uClampFrame.zw);
|
|
87
|
+
|
|
88
|
+
var bias = 0.;
|
|
89
|
+
|
|
90
|
+
if(unclamped.x == coord.x && unclamped.y == coord.y)
|
|
91
|
+
{
|
|
92
|
+
bias = -32.;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
outColor = textureSampleBias(uTexture, uSampler, coord, bias);
|
|
96
|
+
`}},Ya={name:`tiling-bit`,vertex:{header:`
|
|
97
|
+
uniform mat3 uTextureTransform;
|
|
98
|
+
uniform vec4 uSizeAnchor;
|
|
99
|
+
|
|
100
|
+
`,main:`
|
|
101
|
+
uv = (uTextureTransform * vec3(aUV, 1.0)).xy;
|
|
102
|
+
|
|
103
|
+
position = (position - uSizeAnchor.zw) * uSizeAnchor.xy;
|
|
104
|
+
`},fragment:{header:`
|
|
105
|
+
uniform sampler2D uTexture;
|
|
106
|
+
uniform mat3 uMapCoord;
|
|
107
|
+
uniform vec4 uClampFrame;
|
|
108
|
+
uniform vec2 uClampOffset;
|
|
109
|
+
`,main:`
|
|
110
|
+
|
|
111
|
+
vec2 coord = vUV + ceil(uClampOffset - vUV);
|
|
112
|
+
coord = (uMapCoord * vec3(coord, 1.0)).xy;
|
|
113
|
+
vec2 unclamped = coord;
|
|
114
|
+
coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);
|
|
115
|
+
|
|
116
|
+
outColor = texture(uTexture, coord, unclamped == coord ? 0.0 : -32.0);// lod-bias very negative to force lod 0
|
|
117
|
+
|
|
118
|
+
`}},Xa,Za,Qa=class extends g{constructor(){Xa??=ze({name:`tiling-sprite-shader`,bits:[$e,Ja,He]}),Za??=Ye({name:`tiling-sprite-shader`,bits:[at,Ya,Le]});let t=new C({uMapCoord:{value:new e,type:`mat3x3<f32>`},uClampFrame:{value:new Float32Array([0,0,1,1]),type:`vec4<f32>`},uClampOffset:{value:new Float32Array([0,0]),type:`vec2<f32>`},uTextureTransform:{value:new e,type:`mat3x3<f32>`},uSizeAnchor:{value:new Float32Array([100,100,.5,.5]),type:`vec4<f32>`}});super({glProgram:Za,gpuProgram:Xa,resources:{localUniforms:new C({uTransformMatrix:{value:new e,type:`mat3x3<f32>`},uColor:{value:new Float32Array([1,1,1,1]),type:`vec4<f32>`},uRound:{value:0,type:`f32`}}),tilingUniforms:t,uTexture:D.EMPTY.source,uSampler:D.EMPTY.source.style}})}updateUniforms(e,t,n,r,i,a){let o=this.resources.tilingUniforms,s=a.width,c=a.height,l=a.textureMatrix,u=o.uniforms.uTextureTransform;u.set(n.a*s/e,n.b*s/t,n.c*c/e,n.d*c/t,n.tx/e,n.ty/t),u.invert(),o.uniforms.uMapCoord=l.mapCoord,o.uniforms.uClampFrame=l.uClampFrame,o.uniforms.uClampOffset=l.uClampOffset,o.uniforms.uTextureTransform=u,o.uniforms.uSizeAnchor[0]=e,o.uniforms.uSizeAnchor[1]=t,o.uniforms.uSizeAnchor[2]=r,o.uniforms.uSizeAnchor[3]=i,a&&(this.resources.uTexture=a.source,this.resources.uSampler=a.source.style)}},$a=class extends Ra{constructor(){super({positions:new Float32Array([0,0,1,0,1,1,0,1]),uvs:new Float32Array([0,0,1,0,1,1,0,1]),indices:new Uint32Array([0,1,2,0,2,3])})}};function eo(e,t){let n=e.anchor.x,r=e.anchor.y;t[0]=-n*e.width,t[1]=-r*e.height,t[2]=(1-n)*e.width,t[3]=-r*e.height,t[4]=(1-n)*e.width,t[5]=(1-r)*e.height,t[6]=-n*e.width,t[7]=(1-r)*e.height}function to(e,t,n,r){let i=0,a=e.length/(t||2),o=r.a,s=r.b,c=r.c,l=r.d,u=r.tx,d=r.ty;for(n*=t;i<a;){let r=e[n],a=e[n+1];e[n]=o*r+c*a+u,e[n+1]=s*r+l*a+d,n+=t,i++}}function no(t,n){let r=t.texture,i=r.frame.width,a=r.frame.height,o=0,s=0;t.applyAnchorToTexture&&(o=t.anchor.x,s=t.anchor.y),n[0]=n[6]=-o,n[2]=n[4]=1-o,n[1]=n[3]=-s,n[5]=n[7]=1-s;let c=t._tileTransform.matrix,l=e.shared;l.set(c.a*i/t.width,c.b*i/t.height,c.c*a/t.width,c.d*a/t.height,c.tx/t.width,c.ty/t.height),l.invert(),to(n,2,0,l)}var ro=new $a,io=class{constructor(){this.canBatch=!0,this.geometry=new Ra({indices:ro.indices.slice(),positions:ro.positions.slice(),uvs:ro.uvs.slice()})}destroy(){this.geometry.destroy(),this.shader?.destroy()}},ao=class{constructor(e){this._state=L.default2d,this._renderer=e,this._managedTilingSprites=new G({renderer:e,type:`renderable`,name:`tilingSprite`})}validateRenderable(e){let t=this._getTilingSpriteData(e),n=t.canBatch;this._updateCanBatch(e);let r=t.canBatch;if(r&&r===n){let{batchableMesh:n}=t;return!n._batcher.checkAndUpdateTexture(n,e.texture)}return n!==r}addRenderable(e,t){let n=this._renderer.renderPipes.batch;this._updateCanBatch(e);let r=this._getTilingSpriteData(e),{geometry:i,canBatch:a}=r;if(a){r.batchableMesh||=new za;let a=r.batchableMesh;e.didViewUpdate&&(this._updateBatchableMesh(e),a.geometry=i,a.renderable=e,a.transform=e.groupTransform,a.setTexture(e._texture)),a.roundPixels=this._renderer._roundPixels|e._roundPixels,n.addToBatch(a,t)}else n.break(t),r.shader||=new Qa,this.updateRenderable(e),t.add(e)}execute(e){let t=this._renderer,{shader:n}=this._getTilingSpriteData(e);n.groups[0]=t.globalUniforms.bindGroup;let r=n.resources.localUniforms.uniforms;r.uTransformMatrix=e.groupTransform,r.uRound=t._roundPixels|e._roundPixels,ge(e.groupColorAlpha,r.uColor,0),this._state.blendMode=Ke(e.groupBlendMode,e.texture._source),t.encoder.draw({geometry:ro,shader:n,state:this._state})}updateRenderable(e){let t=this._getTilingSpriteData(e),{canBatch:n}=t;if(n){let{batchableMesh:n}=t;e.didViewUpdate&&this._updateBatchableMesh(e),n._batcher.updateElement(n)}else if(e.didViewUpdate){let{shader:n}=t;n.updateUniforms(e.width,e.height,e._tileTransform.matrix,e.anchor.x,e.anchor.y,e.texture)}}_getTilingSpriteData(e){return e._gpuData[this._renderer.uid]||this._initTilingSpriteData(e)}_initTilingSpriteData(e){let t=new io;return t.renderable=e,e._gpuData[this._renderer.uid]=t,this._managedTilingSprites.add(e),t}_updateBatchableMesh(e){let{geometry:t}=this._getTilingSpriteData(e),n=e.texture.source.style;n.addressMode!==`repeat`&&(n.addressMode=`repeat`,n.update()),no(e,t.uvs),eo(e,t.positions)}destroy(){this._managedTilingSprites.destroy(),this._renderer=null}_updateCanBatch(e){let t=this._getTilingSpriteData(e),n=e.texture,r=!0;return this._renderer.type===re.WEBGL&&(r=this._renderer.context.supports.nonPowOf2wrapping),t.canBatch=n.textureMatrix.isSimple&&(r||n.source.isPowerOfTwo),t.canBatch}};ao.extension={type:[i.WebGLPipes,i.WebGPUPipes],name:`tilingSprite`},a.add(qa),a.add(ao);var oo=class e extends j{constructor(...t){let n=t[0]||{};n instanceof D&&(n={texture:n}),t.length>1&&(c(u,`use new TilingSprite({ texture, width:100, height:100 }) instead`),n.width=t[1],n.height=t[2]),n={...e.defaultOptions,...n};let{texture:r,anchor:i,tilePosition:a,tileScale:o,tileRotation:s,width:l,height:d,applyAnchorToTexture:f,roundPixels:p,...m}=n??{};super({label:`TilingSprite`,...m}),this.renderPipeId=`tilingSprite`,this.batched=!0,this.allowChildren=!1,this._anchor=new z({_onUpdate:()=>{this.onViewUpdate()}}),this.applyAnchorToTexture=f,this.texture=r,this._width=l??r.width,this._height=d??r.height,this._tileTransform=new Ua({observer:{_onUpdate:()=>this.onViewUpdate()}}),i&&(this.anchor=i),this.tilePosition=a,this.tileScale=o,this.tileRotation=s,this.roundPixels=p??!1}static from(t,n={}){return typeof t==`string`?new e({texture:H.get(t),...n}):new e({texture:t,...n})}get uvRespectAnchor(){return c(u,`uvRespectAnchor is deprecated, please use applyAnchorToTexture instead`),this.applyAnchorToTexture}set uvRespectAnchor(e){c(u,`uvRespectAnchor is deprecated, please use applyAnchorToTexture instead`),this.applyAnchorToTexture=e}get clampMargin(){return this._texture.textureMatrix.clampMargin}set clampMargin(e){this._texture.textureMatrix.clampMargin=e}get anchor(){return this._anchor}set anchor(e){typeof e==`number`?this._anchor.set(e):this._anchor.copyFrom(e)}get tilePosition(){return this._tileTransform.position}set tilePosition(e){this._tileTransform.position.copyFrom(e)}get tileScale(){return this._tileTransform.scale}set tileScale(e){typeof e==`number`?this._tileTransform.scale.set(e):this._tileTransform.scale.copyFrom(e)}set tileRotation(e){this._tileTransform.rotation=e}get tileRotation(){return this._tileTransform.rotation}get tileTransform(){return this._tileTransform}set texture(e){e||=D.EMPTY;let t=this._texture;t!==e&&(t&&t.dynamic&&t.off(`update`,this.onViewUpdate,this),e.dynamic&&e.on(`update`,this.onViewUpdate,this),this._texture=e,this.onViewUpdate())}get texture(){return this._texture}set width(e){this._width=e,this.onViewUpdate()}get width(){return this._width}set height(e){this._height=e,this.onViewUpdate()}get height(){return this._height}setSize(e,t){typeof e==`object`&&(t=e.height??e.width,e=e.width),this._width=e,this._height=t??e,this.onViewUpdate()}getSize(e){return e||={},e.width=this._width,e.height=this._height,e}updateBounds(){let e=this._bounds,t=this._anchor,n=this._width,r=this._height;e.minX=-t._x*n,e.maxX=e.minX+n,e.minY=-t._y*r,e.maxY=e.minY+r}containsPoint(e){let t=this._width,n=this._height,r=-t*this._anchor._x,i=0;return e.x>=r&&e.x<=r+t&&(i=-n*this._anchor._y,e.y>=i&&e.y<=i+n)}destroy(e=!1){if(super.destroy(e),this._anchor=null,this._tileTransform=null,this._bounds=null,typeof e==`boolean`?e:e?.texture){let t=typeof e==`boolean`?e:e?.textureSource;this._texture.destroy(t)}this._texture=null}};oo.defaultOptions={texture:D.EMPTY,anchor:{x:0,y:0},tilePosition:{x:0,y:0},tileScale:{x:1,y:1},tileRotation:0,applyAnchorToTexture:!1};var so=oo,co=class extends j{constructor(e,t){let{text:n,resolution:r,style:i,anchor:a,width:o,height:s,roundPixels:c,...l}=e;super({...l}),this.batched=!0,this._resolution=null,this._autoResolution=!0,this._didTextUpdate=!0,this._styleClass=t,this.text=n??``,this.style=i,this.resolution=r??null,this.allowChildren=!1,this._anchor=new z({_onUpdate:()=>{this.onViewUpdate()}}),a&&(this.anchor=a),this.roundPixels=c??!1,o!==void 0&&(this.width=o),s!==void 0&&(this.height=s)}get anchor(){return this._anchor}set anchor(e){typeof e==`number`?this._anchor.set(e):this._anchor.copyFrom(e)}set text(e){e=e.toString(),this._text!==e&&(this._text=e,this.onViewUpdate())}get text(){return this._text}set resolution(e){this._autoResolution=e===null,this._resolution=e,this.onViewUpdate()}get resolution(){return this._resolution}get style(){return this._style}set style(e){e||={},this._style?.off(`update`,this.onViewUpdate,this),this._style=e instanceof this._styleClass?e:new this._styleClass(e),this._style.on(`update`,this.onViewUpdate,this),this.onViewUpdate()}get width(){return Math.abs(this.scale.x)*this.bounds.width}set width(e){this._setWidth(e,this.bounds.width)}get height(){return Math.abs(this.scale.y)*this.bounds.height}set height(e){this._setHeight(e,this.bounds.height)}getSize(e){return e||={},e.width=Math.abs(this.scale.x)*this.bounds.width,e.height=Math.abs(this.scale.y)*this.bounds.height,e}setSize(e,t){typeof e==`object`?(t=e.height??e.width,e=e.width):t??=e,e!==void 0&&this._setWidth(e,this.bounds.width),t!==void 0&&this._setHeight(t,this.bounds.height)}containsPoint(e){let t=this.bounds.width,n=this.bounds.height,r=-t*this.anchor.x,i=0;return e.x>=r&&e.x<=r+t&&(i=-n*this.anchor.y,e.y>=i&&e.y<=i+n)}onViewUpdate(){this.didViewUpdate||(this._didTextUpdate=!0),super.onViewUpdate()}destroy(e=!1){this._style?.off(`update`,this.onViewUpdate,this),super.destroy(e),this.owner=null,this._bounds=null,this._anchor=null,(typeof e==`boolean`?e:e?.style)&&this._style.destroy(e),this._style=null,this._text=null}get styleKey(){return`${this._text}:${this._style.styleKey}:${this._resolution}`}};function lo(e,t){let n=e[0]??{};return(typeof n==`string`||e[1])&&(c(u,`use new ${t}({ text: "hi!", style }) instead`),n={text:n,style:e[1]}),n}var uo=null,fo=null;function po(e,t){uo||(uo=b.get().createCanvas(256,128),fo=uo.getContext(`2d`,{willReadFrequently:!0}),fo.globalCompositeOperation=`copy`,fo.globalAlpha=1),(uo.width<e||uo.height<t)&&(uo.width=S(e),uo.height=S(t))}function mo(e,t,n){for(let r=0,i=4*n*t;r<t;++r,i+=4)if(e[i+3]!==0)return!1;return!0}function ho(e,t,n,r,i){let a=4*t;for(let t=r,o=r*a+4*n;t<=i;++t,o+=a)if(e[o+3]!==0)return!1;return!0}function go(...e){let t=e[0];t.canvas||(t={canvas:e[0],resolution:e[1]});let{canvas:n}=t,r=Math.min(t.resolution??1,1),i=t.width??n.width,a=t.height??n.height,o=t.output;if(po(i,a),!fo)throw TypeError(`Failed to get canvas 2D context`);fo.drawImage(n,0,0,i,a,0,0,i*r,a*r);let s=fo.getImageData(0,0,i,a).data,c=0,l=0,u=i-1,f=a-1;for(;l<a&&mo(s,i,l);)++l;if(l===a)return d.EMPTY;for(;mo(s,i,f);)--f;for(;ho(s,i,c,l,f);)++c;for(;ho(s,i,u,l,f);)--u;return++u,++f,fo.globalCompositeOperation=`source-over`,fo.strokeRect(c,l,u-c,f-l),fo.globalCompositeOperation=`copy`,o??=new d,o.set(c/r,l/r,(u-c)/r,(f-l)/r),o}var _o=class{constructor(e=0,t=0,n=!1){this.first=null,this.items=Object.create(null),this.last=null,this.max=e,this.resetTtl=n,this.size=0,this.ttl=t}clear(){return this.first=null,this.items=Object.create(null),this.last=null,this.size=0,this}delete(e){if(this.has(e)){let t=this.items[e];delete this.items[e],this.size--,t.prev!==null&&(t.prev.next=t.next),t.next!==null&&(t.next.prev=t.prev),this.first===t&&(this.first=t.next),this.last===t&&(this.last=t.prev)}return this}entries(e=this.keys()){let t=Array(e.length);for(let n=0;n<e.length;n++){let r=e[n];t[n]=[r,this.get(r)]}return t}evict(e=!1){if(e||this.size>0){let e=this.first;delete this.items[e.key],--this.size===0?(this.first=null,this.last=null):(this.first=e.next,this.first.prev=null)}return this}expiresAt(e){let t;return this.has(e)&&(t=this.items[e].expiry),t}get(e){let t=this.items[e];if(t!==void 0){if(this.ttl>0&&t.expiry<=Date.now()){this.delete(e);return}return this.moveToEnd(t),t.value}}has(e){return e in this.items}moveToEnd(e){this.last!==e&&(e.prev!==null&&(e.prev.next=e.next),e.next!==null&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),e.prev=this.last,e.next=null,this.last!==null&&(this.last.next=e),this.last=e,this.first===null&&(this.first=e))}keys(){let e=Array(this.size),t=this.first,n=0;for(;t!==null;)e[n++]=t.key,t=t.next;return e}setWithEvicted(e,t,n=this.resetTtl){let r=null;if(this.has(e))this.set(e,t,!0,n);else{this.max>0&&this.size===this.max&&(r={...this.first},this.evict(!0));let n=this.items[e]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:e,prev:this.last,next:null,value:t};++this.size===1?this.first=n:this.last.next=n,this.last=n}return r}set(e,t,n=!1,r=this.resetTtl){let i=this.items[e];return n||i!==void 0?(i.value=t,n===!1&&r&&(i.expiry=this.ttl>0?Date.now()+this.ttl:this.ttl),this.moveToEnd(i)):(this.max>0&&this.size===this.max&&this.evict(!0),i=this.items[e]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:e,prev:this.last,next:null,value:t},++this.size===1?this.first=i:this.last.next=i,this.last=i),this}values(e=this.keys()){let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=this.get(e[n]);return t}};function vo(e=1e3,t=0,n=!1){if(isNaN(e)||e<0)throw TypeError(`Invalid max value`);if(isNaN(t)||t<0)throw TypeError(`Invalid ttl value`);if(typeof n!=`boolean`)throw TypeError(`Invalid resetTtl value`);return new _o(e,t,n)}function yo(e){return!!e.tagStyles&&Object.keys(e.tagStyles).length>0}function bo(e){return e.includes(`<`)}function xo(e,t){return e.clone().assign(t)}function So(e,t){let n=[],r=t.tagStyles;if(!yo(t)||!bo(e))return n.push({text:e,style:t}),n;let i=[t],a=[],o=``,s=0;for(;s<e.length;){let t=e[s];if(t===`<`){let c=e.indexOf(`>`,s);if(c===-1){o+=t,s++;continue}let l=e.indexOf(`<`,s+1);if(l!==-1&&l<c){o+=t,s++;continue}let u=e.slice(s+1,c);if(u.startsWith(`/`)){let t=u.slice(1).trim();if(a.length>0&&a[a.length-1]===t){o.length>0&&(n.push({text:o,style:i[i.length-1]}),o=``),i.pop(),a.pop(),s=c+1;continue}o+=e.slice(s,c+1),s=c+1;continue}{let t=u.trim();if(r[t]){o.length>0&&(n.push({text:o,style:i[i.length-1]}),o=``);let e=i[i.length-1],l=xo(e,r[t]);i.push(l),a.push(t),s=c+1;continue}o+=e.slice(s,c+1),s=c+1;continue}}o+=t,s++}return o.length>0&&n.push({text:o,style:i[i.length-1]}),n}var Co=new Set([10,13]),wo=new Set([9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288]),To=new Set([9,32]),Eo=new Set([45,8208,8211,8212,173]),Do=/(\r\n|\r|\n)/,Oo=/(?:\r\n|\r|\n)/;function ko(e){return typeof e==`string`&&Co.has(e.charCodeAt(0))}function J(e,t){return typeof e==`string`&&wo.has(e.charCodeAt(0))}function Ao(e){return typeof e==`string`&&To.has(e.charCodeAt(0))}function jo(e){return typeof e==`string`&&Eo.has(e.charCodeAt(0))}function Mo(e){return e===`normal`||e===`pre-line`}function No(e){return e===`normal`}function Po(e){if(typeof e!=`string`)return``;let t=e.length-1;for(;t>=0&&J(e[t]);)t--;return t<e.length-1?e.slice(0,t+1):e}function Fo(e){let t=[],n=[];if(typeof e!=`string`)return t;for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];J(i,a)||ko(i)?(n.length>0&&(t.push(n.join(``)),n.length=0),i===`\r`&&a===`
|
|
119
|
+
`?(t.push(`\r
|
|
120
|
+
`),r++):t.push(i)):(n.push(i),jo(i)&&a&&!J(a)&&!ko(a)&&(t.push(n.join(``)),n.length=0))}return n.length>0&&t.push(n.join(``)),t}function Io(e,t,n,r){let i=n(e),a=[];for(let n=0;n<i.length;n++){let o=i[n],s=o,c=1;for(;i[n+c];){let a=i[n+c];if(!r(s,a,e,n,t))o+=a,s=a,c++;else break}n+=c-1,a.push(o)}return a}var Lo=/\r\n|\r|\n/g;function Ro(e,t,n,r,i,a,o,s,c){let l=So(e,t);if(No(t.whiteSpace))for(let e=0;e<l.length;e++){let t=l[e];l[e]={text:t.text.replace(Lo,` `),style:t.style}}let u=[],d=[];for(let e of l){let t=e.text.split(Do);for(let n=0;n<t.length;n++){let r=t[n];r===`\r
|
|
121
|
+
`||r===`\r`||r===`
|
|
122
|
+
`?(u.push(d),d=[]):r.length>0&&d.push({text:r,style:e.style})}}(d.length>0||u.length===0)&&u.push(d);let f=n?zo(u,t,r,a,s,c):u,p=[],m=[],h=[],g=[],_=[],v=0,y=t._fontString,b=o(y);b.fontSize===0&&(b.fontSize=t.fontSize,b.ascent=t.fontSize);let x=``,S=!!t.dropShadow,C=t._stroke?.width||0;for(let e of f){let n=0,a=b.ascent,s=b.descent,c=``;for(let t of e){let e=t.style._fontString,l=o(e);e!==x&&(r.font=e,x=e);let u=i(t.text,t.style.letterSpacing,r);n+=u,a=Math.max(a,l.ascent),s=Math.max(s,l.descent),c+=t.text;let d=t.style._stroke?.width||0;d>C&&(C=d),!S&&t.style.dropShadow&&(S=!0)}e.length===0&&(a=b.ascent,s=b.descent),p.push(n),m.push(a),h.push(s),_.push(c);let l=t.lineHeight||a+s;g.push(l+t.leading),v=Math.max(v,n)}let ee=C,w=v+ee+(t.dropShadow?t.dropShadow.distance:0),T=0;for(let e=0;e<g.length;e++)T+=g[e];return T=Math.max(T,g[0]+ee),{width:w,height:T+(t.dropShadow?t.dropShadow.distance:0),lines:_,lineWidths:p,lineHeight:(t.lineHeight||b.fontSize)+t.leading,maxLineWidth:v,fontProperties:b,runsByLine:f,lineAscents:m,lineDescents:h,lineHeights:g,hasDropShadow:S}}function zo(e,t,n,r,i,a){let{letterSpacing:o,whiteSpace:s,wordWrapWidth:c,breakWords:l}=t,u=Mo(s),d=c+o,f={},p=``,m=(e,t)=>{let i=`${e}|${t.styleKey}`,a=f[i];if(a===void 0){let o=t._fontString;o!==p&&(n.font=o,p=o),a=r(e,t.letterSpacing,n)+t.letterSpacing,f[i]=a}return a},h=[];for(let t of e){let e=Bo(t),n=h.length,r=t=>{let n=0,r=t;do{let{token:t,style:i}=e[r];n+=m(t,i),r++}while(r<e.length&&e[r].continuesFromPrevious);return n},o=t=>{let n=[],r=t;do n.push({token:e[r].token,style:e[r].style}),r++;while(r<e.length&&e[r].continuesFromPrevious);return n},s=[],c=0,f=!u,p=null,g=()=>{p&&p.text.length>0&&s.push(p),p=null},_=()=>{if(g(),s.length>0){let e=s[s.length-1];e.text=Po(e.text),e.text.length===0&&s.pop()}h.push(s),s=[],c=0,f=!1};for(let t=0;t<e.length;t++){let{token:n,style:v,continuesFromPrevious:y}=e[t],b=m(n,v);if(u){let e=J(n),t=p?.text[p.text.length-1]??s[s.length-1]?.text.slice(-1)??``,r=t?J(t):!1;if(e&&r)continue}let x=!y,S=x?r(t):b;if(S>d&&x){if(c>0&&_(),l){let e=o(t);for(let t=0;t<e.length;t++){let n=e[t].token,r=e[t].style,o=Io(n,l,a,i);for(let e of o){let t=m(e,r);t+c>d&&_(),!p||p.style!==r?(g(),p={text:e,style:r}):p.text+=e,c+=t}}t+=e.length-1}else{let e=o(t);g(),h.push(e.map(e=>({text:e.token,style:e.style}))),f=!1,t+=e.length-1}}else if(S+c>d&&x){if(J(n)){f=!1;continue}_(),p={text:n,style:v},c=b}else if(y&&!l)!p||p.style!==v?(g(),p={text:n,style:v}):p.text+=n,c+=b;else{let e=J(n);if(c===0&&e&&!f)continue;!p||p.style!==v?(g(),p={text:n,style:v}):p.text+=n,c+=b}}if(g(),s.length>0){let e=s[s.length-1];e.text=Po(e.text),e.text.length===0&&s.pop()}(s.length>0||h.length===n)&&h.push(s)}return h}function Bo(e){let t=[],n=!1;for(let r of e){let e=Fo(r.text),i=!0;for(let a of e){let e=J(a)||ko(a),o=i&&n&&!e;t.push({token:a,style:r.style,continuesFromPrevious:o}),n=!e,i=!1}}return t}var Vo={willReadFrequently:!0};function Ho(e,t,n,r,i){let a=n[e];return typeof a!=`number`&&(a=i(e,t,r)+t,n[e]=a),a}function Uo(e,t,n,r,i,a,o){let s=n.getContext(`2d`,Vo);s.font=t._fontString;let c=0,l=``,u=[],d=Object.create(null),{letterSpacing:f,whiteSpace:p}=t,m=Mo(p),h=No(p),g=!m,_=t.wordWrapWidth+f,v=Fo(e);for(let e=0;e<v.length;e++){let n=v[e];if(ko(n)){if(!h){u.push(Po(l)),g=!m,l=``,c=0;continue}n=` `}if(m){let e=J(n),t=J(l[l.length-1]);if(e&&t)continue}let p=Ho(n,f,d,s,r);if(p>_){if(l!==``&&(u.push(Po(l)),l=``,c=0),i(n,t.breakWords)){let e=Io(n,t.breakWords,o,a);for(let t of e){let e=Ho(t,f,d,s,r);e+c>_&&(u.push(Po(l)),g=!1,l=``,c=0),l+=t,c+=e}}else l.length>0&&(u.push(Po(l)),l=``,c=0),u.push(Po(n)),g=!1,l=``,c=0}else p+c>_&&(g=!1,u.push(Po(l)),l=``,c=0),(l.length>0||!J(n)||g)&&(l+=n,c+=p)}let y=Po(l);return y.length>0&&u.push(y),u.join(`
|
|
123
|
+
`)}var Wo={willReadFrequently:!0},Go=class e{static get experimentalLetterSpacingSupported(){let t=e._experimentalLetterSpacingSupported;if(t===void 0){let n=b.get().getCanvasRenderingContext2D().prototype;t=e._experimentalLetterSpacingSupported=`letterSpacing`in n||`textLetterSpacing`in n}return t}constructor(e,t,n,r,i,a,o,s,c,l){this.text=e,this.style=t,this.width=n,this.height=r,this.lines=i,this.lineWidths=a,this.lineHeight=o,this.maxLineWidth=s,this.fontProperties=c,l&&(this.runsByLine=l.runsByLine,this.lineAscents=l.lineAscents,this.lineDescents=l.lineDescents,this.lineHeights=l.lineHeights,this.hasDropShadow=l.hasDropShadow)}static measureText(t=` `,n,r=e._canvas,i=n.wordWrap){let a=`${t}-${n.styleKey}-wordWrap-${i}`;if(e._measurementCache.has(a))return e._measurementCache.get(a);if(yo(n)&&bo(t)){let r=Ro(t,n,i,e._context,e._measureText,e._measureTextAdvance,e.measureFont,e.canBreakChars,e.wordWrapSplit),o=new e(t,n,r.width,r.height,r.lines,r.lineWidths,r.lineHeight,r.maxLineWidth,r.fontProperties,{runsByLine:r.runsByLine,lineAscents:r.lineAscents,lineDescents:r.lineDescents,lineHeights:r.lineHeights,hasDropShadow:r.hasDropShadow});return e._measurementCache.set(a,o),o}let o=n._fontString,s=e.measureFont(o);s.fontSize===0&&(s.fontSize=n.fontSize,s.ascent=n.fontSize,s.descent=0);let c=e._context;c.font=o;let l=(i?e._wordWrap(t,n,r):t).split(Oo),u=Array(l.length),d=0;for(let t=0;t<l.length;t++){let r=e._measureText(l[t],n.letterSpacing,c);u[t]=r,d=Math.max(d,r)}let f=n._stroke?.width??0,p=n.lineHeight||s.fontSize,m=e._adjustWidthForStyle(d,n),h=Math.max(p,s.fontSize+f)+(l.length-1)*(p+n.leading),g=e._adjustHeightForStyle(h,n),_=new e(t,n,m,g,l,u,p+n.leading,d,s);return e._measurementCache.set(a,_),_}static _adjustWidthForStyle(e,t){let n=e+(t._stroke?.width||0);return t.dropShadow&&(n+=t.dropShadow.distance),n}static _adjustHeightForStyle(e,t){let n=e;return t.dropShadow&&(n+=t.dropShadow.distance),n}static _measureText(t,n,r){let{metricWidth:i,metrics:a,letterSpacingVal:o}=e._measureTextCore(t,n,r),s=-(a.actualBoundingBoxLeft??0),c=(a.actualBoundingBoxRight??0)-s;return a.width>0&&(c+=o),Math.max(i,c)}static _measureTextAdvance(t,n,r){return e._measureTextCore(t,n,r).metricWidth}static _measureTextCore(t,n,r){let i=!1;e.experimentalLetterSpacingSupported&&(e.experimentalLetterSpacing?(r.letterSpacing=`${n}px`,r.textLetterSpacing=`${n}px`,i=!0):(r.letterSpacing=`0px`,r.textLetterSpacing=`0px`));let a=r.measureText(t),o=a.width,s=0;return o>0&&(s=i?-n:(e.graphemeSegmenter(t).length-1)*n,o+=s),{metricWidth:o,metrics:a,letterSpacingVal:s}}static _wordWrap(t,n,r=e._canvas){return Uo(t,n,r,e._measureTextAdvance,e.canBreakWords,e.canBreakChars,e.wordWrapSplit)}static isBreakingSpace(e,t){return J(e,t)}static canBreakWords(e,t){return t}static canBreakChars(e,t,n,r,i){return!0}static wordWrapSplit(t){return e.graphemeSegmenter(t)}static measureFont(t){if(e._fonts[t])return e._fonts[t];let n=e._context;n.font=t;let r=n.measureText(e.METRICS_STRING+e.BASELINE_SYMBOL),i=r.actualBoundingBoxAscent??0,a=r.actualBoundingBoxDescent??0,o={ascent:i,descent:a,fontSize:i+a};return e._fonts[t]=o,o}static clearMetrics(t=``){t?delete e._fonts[t]:e._fonts={}}static get _canvas(){if(!e.__canvas){let t;try{let n=new OffscreenCanvas(0,0);if(n.getContext(`2d`,Wo)?.measureText)return e.__canvas=n,n;t=b.get().createCanvas()}catch{t=b.get().createCanvas()}t.width=t.height=10,e.__canvas=t}return e.__canvas}static get _context(){return e.__context||=e._canvas.getContext(`2d`,Wo),e.__context}};Go.METRICS_STRING=`|ÉqÅ`,Go.BASELINE_SYMBOL=`M`,Go.BASELINE_MULTIPLIER=1.4,Go.HEIGHT_MULTIPLIER=2,Go.graphemeSegmenter=(()=>{if(typeof Intl?.Segmenter==`function`){let e=new Intl.Segmenter;return t=>{let n=e.segment(t),r=[],i=0;for(let e of n)r[i++]=e.segment;return r}}return e=>[...e]})(),Go.experimentalLetterSpacing=!1,Go._fonts={},Go._measurementCache=vo(1e3);var Y=Go,Ko=[`serif`,`sans-serif`,`monospace`,`cursive`,`fantasy`,`system-ui`];function qo(e){let t=typeof e.fontSize==`number`?`${e.fontSize}px`:e.fontSize,n=e.fontFamily;Array.isArray(e.fontFamily)||(n=e.fontFamily.split(`,`));for(let e=n.length-1;e>=0;e--){let t=n[e].trim();!/([\"\'])[^\'\"]+\1/.test(t)&&!Ko.includes(t)&&(t=`"${t}"`),n[e]=t}return`${e.fontStyle} ${e.fontVariant} ${e.fontWeight} ${t} ${n.join(`,`)}`}var Jo=1e5;function Yo(t,n,r,i=0,a=0,o=0){if(t.texture===D.WHITE&&!t.fill)return f.shared.setValue(t.color).setAlpha(t.alpha??1).toHexa();if(!t.fill){let r=n.createPattern(t.texture.source.resource,`repeat`),i=t.matrix.copyTo(e.shared);return i.scale(t.texture.source.pixelWidth,t.texture.source.pixelHeight),r.setTransform(i),r}if(t.fill instanceof ke){let e=t.fill,r=n.createPattern(e.texture.source.resource,`repeat`);return B.applyPatternTransform(r,e.transform,!1),r}if(t.fill instanceof Oe){let e=t.fill,s=e.type===`linear`,c=e.textureSpace===`local`,l=1,u=1;c&&r&&(l=r.width+i,u=r.height+i);let d,p=!1;if(s){let{start:t,end:r}=e;d=n.createLinearGradient(t.x*l+a,t.y*u+o,r.x*l+a,r.y*u+o),p=Math.abs(r.x-t.x)<Math.abs((r.y-t.y)*.1)}else{let{center:t,innerRadius:r,outerCenter:i,outerRadius:s}=e;d=n.createRadialGradient(t.x*l+a,t.y*u+o,r*l,i.x*l+a,i.y*u+o,s*l)}if(p&&c&&r){let t=r.lineHeight/u;for(let n=0;n<r.lines.length;n++){let a=(n*r.lineHeight+i/2)/u;e.colorStops.forEach(e=>{let n=a+e.offset*t;n=Math.max(0,Math.min(1,n)),d.addColorStop(Math.floor(n*Jo)/Jo,f.shared.setValue(e.color).toHex())})}}else e.colorStops.forEach(e=>{d.addColorStop(e.offset,f.shared.setValue(e.color).toHex())});return d}return O(`FillStyle not recognised`,t),`red`}var Xo=new d;function Zo(e){let t=0;for(let n=0;n<e.length;n++)e.charCodeAt(n)===32&&t++;return t}var Qo=new class{getCanvasAndContext(e){let{text:t,style:n,resolution:r=1}=e,i=n._getFinalPadding(),a=Y.measureText(t||` `,n),o=Math.ceil(Math.ceil(Math.max(1,a.width)+i*2)*r),s=Math.ceil(Math.ceil(Math.max(1,a.height)+i*2)*r),c=E.getOptimalCanvasAndContext(o,s);return this._renderTextToCanvas(n,i,r,c,a),{canvasAndContext:c,frame:n.trim?go({canvas:c.canvas,width:o,height:s,resolution:1,output:Xo}):Xo.set(0,0,o,s)}}returnCanvasAndContext(e){E.returnCanvasAndContext(e)}_renderTextToCanvas(e,t,n,r,i){if(i.runsByLine&&i.runsByLine.length>0){this._renderTaggedTextToCanvas(i,e,t,n,r);return}let{canvas:a,context:o}=r,s=qo(e),c=i.lines,l=i.lineHeight,u=i.lineWidths,d=i.maxLineWidth,f=i.fontProperties,p=a.height;if(o.resetTransform(),o.scale(n,n),o.textBaseline=e.textBaseline,e._stroke?.width){let t=e._stroke;o.lineWidth=t.width,o.miterLimit=t.miterLimit,o.lineJoin=t.join,o.lineCap=t.cap}o.font=s;let m,h,g=e.dropShadow?2:1,_=(e._stroke?.width??0)/2,v=(l-f.fontSize)/2;l-f.fontSize<0&&(v=0);for(let a=0;a<g;++a){let s=e.dropShadow&&a===0,g=s?Math.ceil(Math.max(1,p)+t*2):0,y=g*n;if(s)this._setupDropShadow(o,e,n,y);else{let n=e._gradientBounds,r=e._gradientOffset;if(n){let a={width:n.width,height:n.height,lineHeight:n.height,lines:i.lines};this._setFillAndStrokeStyles(o,e,a,t,_,r?.x??0,r?.y??0)}else r?this._setFillAndStrokeStyles(o,e,i,t,_,r.x,r.y):this._setFillAndStrokeStyles(o,e,i,t,_);o.shadowColor=`rgba(0,0,0,0)`}for(let n=0;n<c.length;n++){m=_,h=_+n*l+f.ascent+v,m+=this._getAlignmentOffset(u[n],d,e.align);let i=0;if(e.align===`justify`&&e.wordWrap&&n<c.length-1){let e=Zo(c[n]);e>0&&(i=(d-u[n])/e)}e._stroke?.width&&this._drawLetterSpacing(c[n],e,r,m+t,h+t-g,!0,i),e._fill!==void 0&&this._drawLetterSpacing(c[n],e,r,m+t,h+t-g,!1,i)}}}_renderTaggedTextToCanvas(e,t,n,r,i){let{canvas:a,context:o}=i,{runsByLine:s,lineWidths:c,maxLineWidth:l,lineAscents:u,lineHeights:d,hasDropShadow:f}=e,p=a.height;o.resetTransform(),o.scale(r,r),o.textBaseline=t.textBaseline;let m=f?2:1,h=t._stroke?.width??0;for(let e of s)for(let t of e){let e=t.style._stroke?.width??0;e>h&&(h=e)}let g=h/2,_=[];for(let e=0;e<s.length;e++){let t=s[e],n=[];for(let e of t){let t=qo(e.style);o.font=t,n.push({width:Y._measureText(e.text,e.style.letterSpacing,o),font:t})}_.push(n)}for(let e=0;e<m;++e){let a=f&&e===0,m=a?Math.ceil(Math.max(1,p)+n*2):0,h=m*r;a||(o.shadowColor=`rgba(0,0,0,0)`);let v=g;for(let e=0;e<s.length;e++){let f=s[e],p=c[e],y=u[e],b=d[e],x=_[e],S=g;S+=this._getAlignmentOffset(p,l,t.align);let C=0;if(t.align===`justify`&&t.wordWrap&&e<s.length-1){let e=0;for(let t of f)e+=Zo(t.text);e>0&&(C=(l-p)/e)}let ee=v+y,w=S+n;for(let e=0;e<f.length;e++){let t=f[e],{width:s,font:c}=x[e];if(o.font=c,o.textBaseline=t.style.textBaseline,t.style._stroke?.width){let e=t.style._stroke;if(o.lineWidth=e.width,o.miterLimit=e.miterLimit,o.lineJoin=e.join,o.lineCap=e.cap,a){if(t.style.dropShadow)this._setupDropShadow(o,t.style,r,h);else{let e=Zo(t.text);w+=s+e*C;continue}}else{let r=Y.measureFont(c),i=t.style.lineHeight||r.fontSize;o.strokeStyle=Yo(e,o,{width:s,height:i,lineHeight:i,lines:[t.text]},n*2,w-n,v)}this._drawLetterSpacing(t.text,t.style,i,w,ee+n-m,!0,C)}let l=Zo(t.text);w+=s+l*C}w=S+n;for(let e=0;e<f.length;e++){let t=f[e],{width:s,font:c}=x[e];if(o.font=c,o.textBaseline=t.style.textBaseline,t.style._fill!==void 0){if(a){if(t.style.dropShadow)this._setupDropShadow(o,t.style,r,h);else{let e=Zo(t.text);w+=s+e*C;continue}}else{let e=Y.measureFont(c),r=t.style.lineHeight||e.fontSize,i={width:s,height:r,lineHeight:r,lines:[t.text]};o.fillStyle=Yo(t.style._fill,o,i,n*2,w-n,v)}this._drawLetterSpacing(t.text,t.style,i,w,ee+n-m,!1,C)}let l=Zo(t.text);w+=s+l*C}v+=b}}}_setFillAndStrokeStyles(e,t,n,r,i,a=0,o=0){if(e.fillStyle=t._fill?Yo(t._fill,e,n,r*2,a,o):null,t._stroke?.width){let s=i+r*2;e.strokeStyle=Yo(t._stroke,e,n,s,a,o)}}_setupDropShadow(e,t,n,r){e.fillStyle=`black`,e.strokeStyle=`black`;let i=t.dropShadow,a=i.color,o=i.alpha;e.shadowColor=f.shared.setValue(a).setAlpha(o).toRgbaString();let s=i.blur*n,c=i.distance*n;e.shadowBlur=s,e.shadowOffsetX=Math.cos(i.angle)*c,e.shadowOffsetY=Math.sin(i.angle)*c+r}_getAlignmentOffset(e,t,n){return n===`right`?t-e:n===`center`?(t-e)/2:0}_drawLetterSpacing(e,t,n,r,i,a=!1,o=0){let{context:s}=n,c=t.letterSpacing,l=!1;if(Y.experimentalLetterSpacingSupported&&(Y.experimentalLetterSpacing?(s.letterSpacing=`${c}px`,s.textLetterSpacing=`${c}px`,l=!0):(s.letterSpacing=`0px`,s.textLetterSpacing=`0px`)),(c===0||l)&&o===0){a?s.strokeText(e,r,i):s.fillText(e,r,i);return}if(o!==0&&(c===0||l)){let t=e.split(` `),n=r,c=s.measureText(` `).width;for(let e=0;e<t.length;e++)a?s.strokeText(t[e],n,i):s.fillText(t[e],n,i),n+=s.measureText(t[e]).width+c+o;return}let u=r,d=Y.graphemeSegmenter(e),f=s.measureText(e).width,p=0;for(let e=0;e<d.length;++e){let t=d[e];a?s.strokeText(t,u,i):s.fillText(t,u,i);let n=``;for(let t=e+1;t<d.length;++t)n+=d[t];p=s.measureText(n).width,u+=f-p+c,t===` `&&(u+=o),f=p}}},$o=class e extends m{constructor(t={}){super(),this.uid=o(`textStyle`),this._tick=0,this._cachedFontString=null,es(t),t instanceof e&&(t=t._toObject());let n={...e.defaultTextStyle,...t};for(let e in n){let t=e;this[t]=n[e]}this._tagStyles=t.tagStyles??void 0,this.update(),this._tick=0}get align(){return this._align}set align(e){this._align!==e&&(this._align=e,this.update())}get breakWords(){return this._breakWords}set breakWords(e){this._breakWords!==e&&(this._breakWords=e,this.update())}get dropShadow(){return this._dropShadow}set dropShadow(t){this._dropShadow!==t&&(this._dropShadow=typeof t==`object`&&t?this._createProxy({...e.defaultDropShadow,...t}):t?this._createProxy({...e.defaultDropShadow}):null,this.update())}get fontFamily(){return this._fontFamily}set fontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.update())}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!==e&&(this._fontSize=typeof e==`string`?parseInt(e,10):e,this.update())}get fontStyle(){return this._fontStyle}set fontStyle(e){this._fontStyle!==e&&(this._fontStyle=e.toLowerCase(),this.update())}get fontVariant(){return this._fontVariant}set fontVariant(e){this._fontVariant!==e&&(this._fontVariant=e,this.update())}get fontWeight(){return this._fontWeight}set fontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.update())}get leading(){return this._leading}set leading(e){this._leading!==e&&(this._leading=e,this.update())}get letterSpacing(){return this._letterSpacing}set letterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.update())}get lineHeight(){return this._lineHeight}set lineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.update())}get padding(){return this._padding}set padding(e){this._padding!==e&&(this._padding=e,this.update())}get filters(){return this._filters}set filters(e){this._filters!==e&&(this._filters=Object.freeze(e),this.update())}get trim(){return this._trim}set trim(e){this._trim!==e&&(this._trim=e,this.update())}get textBaseline(){return this._textBaseline}set textBaseline(e){this._textBaseline!==e&&(this._textBaseline=e,this.update())}get whiteSpace(){return this._whiteSpace}set whiteSpace(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.update())}get wordWrap(){return this._wordWrap}set wordWrap(e){this._wordWrap!==e&&(this._wordWrap=e,this.update())}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.update())}get fill(){return this._originalFill}set fill(e){e!==this._originalFill&&(this._originalFill=e,this._isFillStyle(e)&&(this._originalFill=this._createProxy({...W.defaultFillStyle,...e},()=>{this._fill=je({...this._originalFill},W.defaultFillStyle)})),this._fill=je(e===0?`black`:e,W.defaultFillStyle),this.update())}get stroke(){return this._originalStroke}set stroke(e){e!==this._originalStroke&&(this._originalStroke=e,this._isFillStyle(e)&&(this._originalStroke=this._createProxy({...W.defaultStrokeStyle,...e},()=>{this._stroke=Ne({...this._originalStroke},W.defaultStrokeStyle)})),this._stroke=Ne(e,W.defaultStrokeStyle),this.update())}get tagStyles(){return this._tagStyles}set tagStyles(e){this._tagStyles!==e&&(this._tagStyles=e??void 0,this.update())}update(){this._tick++,this._cachedFontString=null,this.emit(`update`,this)}reset(){let t=e.defaultTextStyle;for(let e in t)this[e]=t[e]}assign(e){for(let t in e){let n=t;this[n]=e[t]}return this}get styleKey(){return`${this.uid}-${this._tick}`}get _fontString(){return this._cachedFontString===null&&(this._cachedFontString=qo(this)),this._cachedFontString}_toObject(){return{align:this.align,breakWords:this.breakWords,dropShadow:this._dropShadow?{...this._dropShadow}:null,fill:this._fill?{...this._fill}:void 0,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,leading:this.leading,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke?{...this._stroke}:void 0,textBaseline:this.textBaseline,trim:this.trim,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth,filters:this._filters?[...this._filters]:void 0,tagStyles:this._tagStyles?{...this._tagStyles}:void 0}}clone(){return new e(this._toObject())}_getFinalPadding(){let e=0;if(this._filters)for(let t=0;t<this._filters.length;t++)e+=this._filters[t].padding;return Math.max(this._padding,e)}destroy(e=!1){if(this.removeAllListeners(),typeof e==`boolean`?e:e?.texture){let t=typeof e==`boolean`?e:e?.textureSource;this._fill?.texture&&this._fill.texture.destroy(t),this._originalFill?.texture&&this._originalFill.texture.destroy(t),this._stroke?.texture&&this._stroke.texture.destroy(t),this._originalStroke?.texture&&this._originalStroke.texture.destroy(t)}this._fill=null,this._stroke=null,this.dropShadow=null,this._originalStroke=null,this._originalFill=null}_createProxy(e,t){return new Proxy(e,{set:(e,n,r)=>(e[n]===r||(e[n]=r,t?.(n,r),this.update()),!0)})}_isFillStyle(e){return(e??null)!==null&&!(f.isColorLike(e)||e instanceof Oe||e instanceof ke)}};$o.defaultDropShadow={alpha:1,angle:Math.PI/6,blur:0,color:`black`,distance:5},$o.defaultTextStyle={align:`left`,breakWords:!1,dropShadow:null,fill:`black`,fontFamily:`Arial`,fontSize:26,fontStyle:`normal`,fontVariant:`normal`,fontWeight:`normal`,leading:0,letterSpacing:0,lineHeight:0,padding:0,stroke:null,textBaseline:`alphabetic`,trim:!1,whiteSpace:`pre`,wordWrap:!1,wordWrapWidth:100};var X=$o;function es(e){let t=e;if(typeof t.dropShadow==`boolean`&&t.dropShadow){let n=X.defaultDropShadow;e.dropShadow={alpha:t.dropShadowAlpha??n.alpha,angle:t.dropShadowAngle??n.angle,blur:t.dropShadowBlur??n.blur,color:t.dropShadowColor??n.color,distance:t.dropShadowDistance??n.distance}}if(t.strokeThickness!==void 0){c(u,`strokeThickness is now a part of stroke`);let n=t.stroke,r={};if(f.isColorLike(n))r.color=n;else if(n instanceof Oe||n instanceof ke)r.fill=n;else if(Object.hasOwnProperty.call(n,`color`)||Object.hasOwnProperty.call(n,`fill`))r=n;else throw Error(`Invalid stroke value.`);e.stroke={...r,width:t.strokeThickness}}if(Array.isArray(t.fillGradientStops)){if(c(u,"gradient fill is now a fill pattern: `new FillGradient(...)`"),!Array.isArray(t.fill)||t.fill.length===0)throw Error(`Invalid fill value. Expected an array of colors for gradient fill.`);t.fill.length!==t.fillGradientStops.length&&O(`The number of fill colors must match the number of fill gradient stops.`);let n=new Oe({start:{x:0,y:0},end:{x:0,y:1},textureSpace:`local`}),r=t.fillGradientStops.slice(),i=t.fill.map(e=>f.shared.setValue(e).toNumber());r.forEach((e,t)=>{n.addColorStop(e,i[t])}),e.fill={fill:n}}}var ts=!1;function ns(e){if(ts)return;let t=new l({scaleMode:e.scaleMode});e._resourceId!==t._resourceId&&(ts=!0,O(`Text textureStyle: only scaleMode is applied to a text texture, the other fields are ignored`))}function rs(e,t){let{texture:n,bounds:r}=e,i=t._style._getFinalPadding();A(r,t._anchor,n);let a=t._anchor._x*i*2,o=t._anchor._y*i*2;r.minX-=i-a,r.minY-=i-o,r.maxX-=i-a,r.maxY-=i-o}var is=class extends Ee{},as=class{constructor(e){this._renderer=e,e.runners.resolutionChange.add(this),e.runners.contextChange.add(this),this._managedTexts=new G({renderer:e,type:`renderable`,onUnload:this.onTextUnload.bind(this),name:`canvasText`})}resolutionChange(){for(let e in this._managedTexts.items){let t=this._managedTexts.items[e];t?._autoResolution&&t.onViewUpdate()}}contextChange(){for(let e in this._managedTexts.items)this._managedTexts.items[e]?.unload()}validateRenderable(e){let t=this._getGpuText(e),n=e.styleKey;return t.currentKey!==n||e._didTextUpdate}addRenderable(e,t){let n=this._getGpuText(e);if(e._didTextUpdate||n.currentKey!==e.styleKey){let t=e._autoResolution?this._renderer.resolution:e.resolution;(n.currentKey!==e.styleKey||e._resolution!==t)&&this._updateGpuText(e),e._didTextUpdate=!1,rs(n,e)}this._renderer.renderPipes.batch.addToBatch(n,t)}updateRenderable(e){let t=this._getGpuText(e);t._batcher.updateElement(t)}_updateGpuText(e){let t=this._getGpuText(e);t.texture&&this._renderer.canvasText.decreaseReferenceCount(t.currentKey),e._resolution=e._autoResolution?this._renderer.resolution:e.resolution,t.texture=this._renderer.canvasText.getManagedTexture(e),t.currentKey=e.styleKey}_getGpuText(e){return e._gpuData[this._renderer.uid]||this.initGpuText(e)}initGpuText(e){let t=new is;return t.currentKey=`--`,t.renderable=e,t.transform=e.groupTransform,t.bounds={minX:0,maxX:1,minY:0,maxY:0},t.roundPixels=this._renderer._roundPixels|e._roundPixels,e._gpuData[this._renderer.uid]=t,this._managedTexts.add(e),t}onTextUnload(e){let t=e._gpuData[this._renderer.uid];if(!t)return;let{canvasText:n}=this._renderer;n.getReferenceCount(t.currentKey)>0?n.decreaseReferenceCount(t.currentKey):t.texture&&n.returnTexture(t.texture)}destroy(){this._managedTexts.destroy(),this._renderer=null}};as.extension={type:[i.WebGLPipes,i.WebGPUPipes,i.CanvasPipes],name:`text`};var os=class{constructor(e,t){this._activeTextures={},this._renderer=e,this._retainCanvasContext=t}getTexture(e,t,n,r){typeof e==`string`&&(c(`8.0.0`,`CanvasTextSystem.getTexture: Use object TextOptions instead of separate arguments`),e={text:e,style:n,resolution:t}),e.style instanceof X||(e.style=new X(e.style)),typeof e.text!=`string`&&(e.text=e.text.toString());let{text:i,style:a,textureStyle:o,autoGenerateMipmaps:s}=e,l=e.resolution??this._renderer.resolution,{frame:u,canvasAndContext:d}=Qo.getCanvasAndContext({text:i,style:a,resolution:l}),f=Oa(d.canvas,u.width,u.height,l,s,o?.scaleMode);if(a.trim&&(u.pad(a.padding),f.frame.copyFrom(u),f.frame.scale(1/l),f.updateUvs()),a.filters){let e=this._applyFilters(f,a.filters);return this.returnTexture(f),Qo.returnCanvasAndContext(d),e}return this._renderer.texture.initSource(f._source),this._retainCanvasContext||Qo.returnCanvasAndContext(d),f}returnTexture(e){let t=e.source,n=t.resource;if(this._retainCanvasContext&&n?.getContext){let e=n.getContext(`2d`);e&&Qo.returnCanvasAndContext({canvas:n,context:e})}t.resource=null,t.uploadMethodId=`unknown`,t.alphaMode=`no-premultiply-alpha`,M.returnTexture(e)}renderTextToCanvas(){c(`8.10.0`,`CanvasTextSystem.renderTextToCanvas: no longer supported, use CanvasTextSystem.getTexture instead`)}getManagedTexture(e){e._resolution=e._autoResolution?this._renderer.resolution:e.resolution;let t=e.styleKey;if(this._activeTextures[t])return this._increaseReferenceCount(t),this._activeTextures[t].texture;let n=this.getTexture({text:e.text,style:e.style,resolution:e._resolution,textureStyle:e.textureStyle,autoGenerateMipmaps:e.autoGenerateMipmaps});return this._activeTextures[t]={texture:n,usageCount:1},n}decreaseReferenceCount(e){let t=this._activeTextures[e];t&&(t.usageCount--,t.usageCount===0&&(this.returnTexture(t.texture),this._activeTextures[e]=null))}getReferenceCount(e){return this._activeTextures[e]?.usageCount??0}_increaseReferenceCount(e){this._activeTextures[e].usageCount++}_applyFilters(e,t){let n=this._renderer.renderTarget.renderTarget,r=this._renderer.filter.generateFilteredTexture({texture:e,filters:t});return this._renderer.renderTarget.bind({target:n,clear:!1}),r}destroy(){this._renderer=null;for(let e in this._activeTextures)this._activeTextures[e]&&this.returnTexture(this._activeTextures[e].texture);this._activeTextures=null}},ss=class extends os{constructor(e){super(e,!0)}};ss.extension={type:[i.CanvasSystem],name:`canvasText`};var cs=class extends os{constructor(e){super(e,!1)}};cs.extension={type:[i.WebGLSystem,i.WebGPUSystem],name:`canvasText`},a.add(ss),a.add(cs),a.add(as);var ls=class extends co{constructor(...e){let t=lo(e,`Text`);super(t,X),this.renderPipeId=`text`,t.textureStyle&&(this.textureStyle=t.textureStyle instanceof l?t.textureStyle:new l(t.textureStyle),ns(this.textureStyle)),this.autoGenerateMipmaps=t.autoGenerateMipmaps??n.defaultOptions.autoGenerateMipmaps}updateBounds(){let e=this._bounds,t=this._anchor,n=0,r=0;if(this._style.trim){let{frame:e,canvasAndContext:t}=Qo.getCanvasAndContext({text:this.text,style:this._style,resolution:1});Qo.returnCanvasAndContext(t),n=e.width,r=e.height}else{let e=Y.measureText(this._text,this._style);n=e.width,r=e.height}e.minX=-t._x*n,e.maxX=e.minX+n,e.minY=-t._y*r,e.maxY=e.minY+r}},us=class extends m{constructor(){super(...arguments),this.chars=Object.create(null),this.lineHeight=0,this.fontFamily=``,this.fontMetrics={fontSize:0,ascent:0,descent:0},this.baseLineOffset=0,this.distanceField={type:`none`,range:0},this.pages=[],this.applyFillAsTint=!0,this.baseMeasurementFontSize=100,this.baseRenderedFontSize=100}get font(){return c(u,`BitmapFont.font is deprecated, please use BitmapFont.fontFamily instead.`),this.fontFamily}get pageTextures(){return c(u,`BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead.`),this.pages}get size(){return c(u,`BitmapFont.size is deprecated, please use BitmapFont.fontMetrics.fontSize instead.`),this.fontMetrics.fontSize}get distanceFieldRange(){return c(u,`BitmapFont.distanceFieldRange is deprecated, please use BitmapFont.distanceField.range instead.`),this.distanceField.range}get distanceFieldType(){return c(u,`BitmapFont.distanceFieldType is deprecated, please use BitmapFont.distanceField.type instead.`),this.distanceField.type}destroy(e=!1){this.emit(`destroy`,this),this.removeAllListeners();for(let e in this.chars)this.chars[e].texture?.destroy();this.chars=null,e&&(this.pages.forEach(e=>e.texture.destroy(!0)),this.pages=null)}},ds=class e extends us{constructor(t){super(),this.resolution=1,this.pages=[],this._padding=0,this._measureCache=Object.create(null),this._currentChars=[],this._currentX=0,this._currentY=0,this._currentMaxCharHeight=0,this._currentPageIndex=-1,this._skipKerning=!1;let n={...e.defaultOptions,...t};this._textureSize=n.textureSize,this._mipmap=n.mipmap;let r=n.style.clone();n.overrideFill&&(r._fill.color=16777215,r._fill.alpha=1,r._fill.texture=D.WHITE,r._fill.fill=null),this.applyFillAsTint=n.overrideFill;let i=r.fontSize;r.fontSize=this.baseMeasurementFontSize;let a=qo(r);n.overrideSize?(r._stroke&&(r._stroke.width*=this.baseRenderedFontSize/i),r.dropShadow&&(r.dropShadow.blur*=this.baseRenderedFontSize/i,r.dropShadow.distance*=this.baseRenderedFontSize/i)):r.fontSize=this.baseRenderedFontSize=i,this._style=r,this._skipKerning=n.skipKerning??!1,this.resolution=n.resolution??1,this._padding=n.padding??4,n.textureStyle&&(this._textureStyle=n.textureStyle instanceof l?n.textureStyle:new l(n.textureStyle)),this.fontMetrics=Y.measureFont(a),this.lineHeight=r.lineHeight||this.fontMetrics.fontSize||r.fontSize}ensureCharacters(e){let t=Y.graphemeSegmenter(e).filter(e=>!this._currentChars.includes(e)).filter((e,t,n)=>n.indexOf(e)===t);if(!t.length)return;this._currentChars=[...this._currentChars,...t];let n;n=this._currentPageIndex===-1?this._nextPage():this.pages[this._currentPageIndex];let{canvas:r,context:i}=n.canvasAndContext,a=n.texture.source,o=this._style,s=this._currentX,c=this._currentY,l=this._currentMaxCharHeight,u=this.baseRenderedFontSize/this.baseMeasurementFontSize,f=(o.dropShadow?.distance??0)+(o._stroke?.width??0),p=this._padding+f,m=!1,h=r.width/this.resolution,g=r.height/this.resolution;for(let e=0;e<t.length;e++){let n=t[e],f=Y.measureText(n,o,r,!1);f.lineHeight=f.height;let _=f.width*u,v=Math.ceil((o.fontStyle===`italic`?2:1)*_),y=f.height*u,b=v+p*2,x=y+p*2;if(m=!1,n!==`
|
|
124
|
+
`&&n!==`\r`&&n!==` `&&n!==` `&&(m=!0,l=Math.ceil(Math.max(x,l))),s+b>h&&(c+=l,l=x,s=0,c+l>g)){a.update();let e=this._nextPage();r=e.canvasAndContext.canvas,i=e.canvasAndContext.context,a=e.texture.source,s=0,c=0,l=0}let S=i.measureText(n).width/u;if(this.chars[n]={id:n.codePointAt(0),xOffset:-(p/u),yOffset:-(p/u),xAdvance:S,kerning:{}},m){this._drawGlyph(i,f,s+p,c+p,u,o);let e=a.width*u,t=a.height*u,r=new d(s/e*a.width,c/t*a.height,b/e*a.width,x/t*a.height);this.chars[n].texture=new D({source:a,frame:r}),s+=Math.ceil(b)}}a.update(),this._currentX=s,this._currentY=c,this._currentMaxCharHeight=l,this._skipKerning||this._applyKerning(t,i,u)}get pageTextures(){return c(u,`BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead.`),this.pages}_applyKerning(e,t,n){let r=this._measureCache;for(let i=0;i<e.length;i++){let a=e[i];for(let e=0;e<this._currentChars.length;e++){let i=this._currentChars[e],o=r[a];o||=r[a]=t.measureText(a).width;let s=r[i];s||=r[i]=t.measureText(i).width;let c=t.measureText(a+i).width,l=c-(o+s);l&&this.chars[a]&&(this.chars[a].kerning[i]=l/n),c=t.measureText(a+i).width,l=c-(o+s),l&&this.chars[i]&&(this.chars[i].kerning[a]=l/n)}}}_nextPage(){this._currentPageIndex++;let e=this.resolution,t=E.getOptimalCanvasAndContext(this._textureSize,this._textureSize,e);this._setupContext(t.context,this._style,e);let n=e*(this.baseRenderedFontSize/this.baseMeasurementFontSize),r=new D({source:new pe({resource:t.canvas,resolution:n,alphaMode:`premultiply-alpha-on-upload`,autoGenerateMipmaps:this._mipmap})});this._textureStyle&&(r.source.style=this._textureStyle);let i={canvasAndContext:t,texture:r};return this.pages[this._currentPageIndex]=i,i}_setupContext(e,t,n){t.fontSize=this.baseRenderedFontSize,e.scale(n,n),e.font=qo(t),t.fontSize=this.baseMeasurementFontSize,e.textBaseline=t.textBaseline;let r=t._stroke,i=r?.width??0;if(r&&(e.lineWidth=i,e.lineJoin=r.join,e.miterLimit=r.miterLimit,e.strokeStyle=Yo(r,e)),t._fill&&(e.fillStyle=Yo(t._fill,e)),t.dropShadow){let r=t.dropShadow,i=f.shared.setValue(r.color).toArray(),a=r.blur*n,o=r.distance*n;e.shadowColor=`rgba(${i[0]*255},${i[1]*255},${i[2]*255},${r.alpha})`,e.shadowBlur=a,e.shadowOffsetX=Math.cos(r.angle)*o,e.shadowOffsetY=Math.sin(r.angle)*o}else e.shadowColor=`black`,e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0}_drawGlyph(e,t,n,r,i,a){let o=t.text,s=t.fontProperties,c=(a._stroke?.width??0)*i,l=n+c/2,u=r-c/2,d=s.descent*i,f=t.lineHeight*i,p=!1;a.stroke&&c&&(p=!0,e.strokeText(o,l,u+f-d));let{shadowBlur:m,shadowOffsetX:h,shadowOffsetY:g}=e;a._fill&&(p&&(e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0),e.fillText(o,l,u+f-d)),p&&(e.shadowBlur=m,e.shadowOffsetX=h,e.shadowOffsetY=g)}destroy(){super.destroy();for(let e=0;e<this.pages.length;e++){let{canvasAndContext:t,texture:n}=this.pages[e];E.returnCanvasAndContext(t),n.destroy(!0)}this.pages=null}};ds.defaultOptions={textureSize:512,style:new X,mipmap:!0};var fs=ds;function ps(e,t,n,r){let i={width:0,height:0,offsetY:0,scale:t.fontSize/n.baseMeasurementFontSize,lines:[{width:0,charPositions:[],spaceWidth:0,spacesIndex:[],chars:[]}]};i.offsetY=n.baseLineOffset;let a=i.lines[0],o=null,s=!0,c={spaceWord:!1,width:0,start:0,index:0,positions:[],chars:[]},l=n.baseMeasurementFontSize/t.fontSize,u=t.letterSpacing*l,d=t.wordWrapWidth*l,f=t.lineHeight?t.lineHeight*l:n.lineHeight,p=t.wordWrap&&t.breakWords,m=Mo(t.whiteSpace),h=No(t.whiteSpace);if(m||h){let t=[],n=m;for(let r=0;r<e.length;r++){let i=e[r];if(i===`\r`||i===`
|
|
125
|
+
`){if(h)i===`\r`&&e[r+1]===`
|
|
126
|
+
`&&r++,i=` `;else{m&&(n=!0),t.push(i);continue}}if(J(i)){if(m&&Ao(i)){if(n)continue;n=!0,t.push(` `)}else n=!1,t.push(i)}else n=!1,t.push(i)}e=t}let g=e=>{let t=a.width;for(let n=0;n<c.index;n++){let r=e.positions[n];a.chars.push(e.chars[n]),a.charPositions.push(r+t)}a.width+=e.width,(c.index>0||!m)&&(s=!1),c.width=0,c.index=0,c.chars.length=0},_=()=>{let e=a.chars.length-1;if(r){let t=a.chars[e];for(;Ao(t);)a.width-=n.chars[t].xAdvance,a.spacesIndex.pop(),t=a.chars[--e]}i.width=Math.max(i.width,a.width),a={width:0,charPositions:[],chars:[],spaceWidth:0,spacesIndex:[]},s=!0,i.lines.push(a),i.height+=f},v=e=>e-u>d;for(let r=0;r<e.length+1;r++){let i,l=r===e.length;l||(i=e[r]);let d=n.chars[i];if(/(?:\s)/.test(i)||i===`\r`||i===`
|
|
127
|
+
`||l){if(!s&&t.wordWrap&&v(a.width+c.width)?(_(),g(c),!l&&d&&a.charPositions.push(0)):(c.start=a.width,g(c),!l&&d&&a.charPositions.push(0)),i===`\r`||i===`
|
|
128
|
+
`)_();else if(!l&&d){let e=d.xAdvance+(d.kerning?.[o]||0)+u;a.width+=e,a.spaceWidth=e,a.spacesIndex.push(a.charPositions.length),a.chars.push(i)}}else if(d){let e=d.kerning?.[o]||0,n=d.xAdvance+e+u;p&&v(c.width+n)&&(s||_(),g(c),_()),c.positions[c.index++]=c.width+e,c.chars.push(i),c.width+=n,jo(i)&&(!s&&t.wordWrap&&v(a.width+c.width)&&_(),g(c))}o=i}return _(),t.align===`center`?ms(i):t.align===`right`?hs(i):t.align===`justify`&&gs(i),i}function ms(e){for(let t=0;t<e.lines.length;t++){let n=e.lines[t],r=e.width/2-n.width/2;for(let e=0;e<n.charPositions.length;e++)n.charPositions[e]+=r}}function hs(e){for(let t=0;t<e.lines.length;t++){let n=e.lines[t],r=e.width-n.width;for(let e=0;e<n.charPositions.length;e++)n.charPositions[e]+=r}}function gs(e){let t=e.width;for(let n=0;n<e.lines.length-2;n++){let r=e.lines[n],i=0,a=r.spacesIndex[i++],o=0,s=r.spacesIndex.length,c=(t-r.width)/s;for(let e=0;e<r.charPositions.length;e++)e===a&&(a=r.spacesIndex[i++],o+=c),r.charPositions[e]+=o}}function _s(e){if(e===``)return[];typeof e==`string`&&(e=[e]);let t=[];for(let n=0,r=e.length;n<r;n++){let r=e[n];if(Array.isArray(r)){if(r.length!==2)throw Error(`[BitmapFont]: Invalid character range length, expecting 2 got ${r.length}.`);if(r[0].length===0||r[1].length===0)throw Error(`[BitmapFont]: Invalid character delimiter.`);let e=r[0].charCodeAt(0),n=r[1].charCodeAt(0);if(n<e)throw Error(`[BitmapFont]: Invalid character range.`);for(let r=e,i=n;r<=i;r++)t.push(String.fromCharCode(r))}else t.push(...Array.from(r))}if(t.length===0)throw Error(`[BitmapFont]: Empty set when resolving characters.`);return t}var vs=0,ys=new class{constructor(){this.ALPHA=[[`a`,`z`],[`A`,`Z`],` `],this.NUMERIC=[[`0`,`9`]],this.ALPHANUMERIC=[[`a`,`z`],[`A`,`Z`],[`0`,`9`],` `],this.ASCII=[[` `,`~`]],this.defaultOptions={chars:this.ALPHANUMERIC,resolution:1,padding:4,skipKerning:!1,textureStyle:null},this.measureCache=vo(1e3)}getFont(e,t){let n=`${t.fontFamily}-bitmap`,r=!0;if(H.has(n)){let t=H.get(n);return t.ensureCharacters?.(e),t}if(t._fill.fill&&!t._stroke?(n+=t._fill.fill.styleKey,r=!1):(t._stroke||t.dropShadow)&&(n=`${t.styleKey}-bitmap`,r=!1),n+=`-${t.fontStyle}`,n+=`-${t.fontVariant}`,n+=`-${t.fontWeight}`,!H.has(n)){let e=Object.create(t);e._lineHeight=0;let i=new fs({style:e,overrideFill:r,overrideSize:!0,...this.defaultOptions});vs++,vs>50&&O(`BitmapText`,`You have dynamically created ${vs} bitmap fonts, this can be inefficient. Try pre installing your font styles using \`BitmapFont.install({name:"style1", style})\``),i.once(`destroy`,()=>{vs--,H.remove(n)}),H.set(n,i)}let i=H.get(n);return i.ensureCharacters?.(e),i}getLayout(e,t,n=!0){let r=this.getFont(e,t),i=`${e}-${t.styleKey}-${n}`;if(this.measureCache.has(i))return this.measureCache.get(i);let a=ps(Y.graphemeSegmenter(e),t,r,n);return this.measureCache.set(i,a),a}measureText(e,t,n=!0){return this.getLayout(e,t,n)}install(...e){let t=e[0];typeof t==`string`&&(t={name:t,style:e[1],chars:e[2]?.chars,resolution:e[2]?.resolution,padding:e[2]?.padding,skipKerning:e[2]?.skipKerning},c(u,`BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})`));let n=t?.name;if(!n)throw Error("[BitmapFontManager] Property `name` is required.");t={...this.defaultOptions,...t};let r=t.style,i=r instanceof X?r:new X(r),a=new fs({style:i,overrideFill:t.dynamicFill??this._canUseTintForStyle(i),skipKerning:t.skipKerning,padding:t.padding,resolution:t.resolution,overrideSize:!1,textureStyle:t.textureStyle}),o=_s(t.chars);return a.ensureCharacters(o.join(``)),H.set(`${n}-bitmap`,a),a.once(`destroy`,()=>H.remove(`${n}-bitmap`)),a}uninstall(e){let t=`${e}-bitmap`,n=H.get(t);n&&n.destroy()}_canUseTintForStyle(e){return!e._stroke&&(!e.dropShadow||e.dropShadow.color===0)&&!e._fill.fill&&e._fill.color===16777215}},bs=class extends Ia{destroy(){this.context.customShader&&this.context.customShader.destroy(),super.destroy()}},xs=class{constructor(e){this._renderer=e,this._managedBitmapTexts=new G({renderer:e,type:`renderable`,priority:-2,name:`bitmapText`})}validateRenderable(e){let t=this._getGpuBitmapText(e);return this._renderer.renderPipes.graphics.validateRenderable(t)}addRenderable(e,t){let n=this._getGpuBitmapText(e);Ss(e,n),e._didTextUpdate&&(e._didTextUpdate=!1,this._updateContext(e,n)),this._renderer.renderPipes.graphics.addRenderable(n,t),n.context.customShader&&this._updateDistanceField(e)}updateRenderable(e){let t=this._getGpuBitmapText(e);Ss(e,t),this._renderer.renderPipes.graphics.updateRenderable(t),t.context.customShader&&this._updateDistanceField(e)}_updateContext(e,t){let{context:n}=t,r=ys.getFont(e.text,e._style);if(n.clear(),r.distanceField.type!==`none`){let e=this.getSdfShader();e&&(n.customShader||=e)}let i=Y.graphemeSegmenter(e.text),a=e._style,o=r.baseLineOffset,s=ps(i,a,r,!0),c=a.padding,l=s.scale,u=s.width,d=s.height+s.offsetY;a._stroke&&(u+=a._stroke.width/l,d+=a._stroke.width/l),n.translate(-e._anchor._x*u-c,-e._anchor._y*d-c).scale(l,l);let f=r.applyFillAsTint?a._fill.color:16777215,p=r.fontMetrics.fontSize,m=r.lineHeight;a.lineHeight&&(p=a.fontSize/l,m=a.lineHeight/l);let h=(m-p)/2;h-r.baseLineOffset<0&&(h=0);for(let e=0;e<s.lines.length;e++){let t=s.lines[e];for(let e=0;e<t.charPositions.length;e++){let i=t.chars[e],a=r.chars[i];if(a?.texture){let r=a.texture;n.texture(r,f,Math.round(t.charPositions[e]+a.xOffset),Math.round(o+a.yOffset+h),r.orig.width,r.orig.height)}}o+=m}}_getGpuBitmapText(e){return e._gpuData[this._renderer.uid]||this.initGpuText(e)}initGpuText(e){let t=new bs;return e._gpuData[this._renderer.uid]=t,this._updateContext(e,t),this._managedBitmapTexts.add(e),t}_updateDistanceField(e){let t=this._getGpuBitmapText(e).context,n=e._style.fontFamily,r=H.get(`${n}-bitmap`),{a:i,b:a,c:o,d:s}=e.groupTransform,c=Math.sqrt(i*i+a*a),l=Math.sqrt(o*o+s*s),u=(Math.abs(c)+Math.abs(l))/2,d=r.baseRenderedFontSize/e._style.fontSize,f=u*r.distanceField.range*(1/d);t.customShader.resources.localUniforms.uniforms.uDistance=f}destroy(){this._managedBitmapTexts.destroy(),this._renderer=null,this._managedBitmapTexts=null}};function Ss(e,t){t.groupTransform=e.groupTransform,t.groupColorAlpha=e.groupColorAlpha,t.groupColor=e.groupColor,t.groupBlendMode=e.groupBlendMode,t.globalDisplayStatus=e.globalDisplayStatus,t.groupTransform=e.groupTransform,t.localDisplayStatus=e.localDisplayStatus,t.groupAlpha=e.groupAlpha,t._roundPixels=e._roundPixels}var Cs=class extends xs{getSdfShader(){return null}};Cs.extension={type:[i.CanvasPipes],name:`bitmapText`};var ws={name:`local-uniform-msdf-bit`,vertex:{header:`
|
|
129
|
+
struct LocalUniforms {
|
|
130
|
+
uColor:vec4<f32>,
|
|
131
|
+
uTransformMatrix:mat3x3<f32>,
|
|
132
|
+
uDistance: f32,
|
|
133
|
+
uRound:f32,
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@group(2) @binding(0) var<uniform> localUniforms : LocalUniforms;
|
|
137
|
+
`,main:`
|
|
138
|
+
vColor *= localUniforms.uColor;
|
|
139
|
+
modelMatrix *= localUniforms.uTransformMatrix;
|
|
140
|
+
`,end:`
|
|
141
|
+
if(localUniforms.uRound == 1)
|
|
142
|
+
{
|
|
143
|
+
vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
|
|
144
|
+
}
|
|
145
|
+
`},fragment:{header:`
|
|
146
|
+
struct LocalUniforms {
|
|
147
|
+
uColor:vec4<f32>,
|
|
148
|
+
uTransformMatrix:mat3x3<f32>,
|
|
149
|
+
uDistance: f32
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@group(2) @binding(0) var<uniform> localUniforms : LocalUniforms;
|
|
153
|
+
`,main:`
|
|
154
|
+
outColor = vec4<f32>(calculateMSDFAlpha(outColor, vColor, localUniforms.uDistance));
|
|
155
|
+
`}},Ts={name:`local-uniform-msdf-bit`,vertex:{header:`
|
|
156
|
+
uniform mat3 uTransformMatrix;
|
|
157
|
+
uniform vec4 uColor;
|
|
158
|
+
uniform float uRound;
|
|
159
|
+
`,main:`
|
|
160
|
+
vColor *= uColor;
|
|
161
|
+
modelMatrix *= uTransformMatrix;
|
|
162
|
+
`,end:`
|
|
163
|
+
if(uRound == 1.)
|
|
164
|
+
{
|
|
165
|
+
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
|
|
166
|
+
}
|
|
167
|
+
`},fragment:{header:`
|
|
168
|
+
uniform float uDistance;
|
|
169
|
+
`,main:`
|
|
170
|
+
outColor = vec4(calculateMSDFAlpha(outColor, vColor, uDistance));
|
|
171
|
+
`}},Es={name:`msdf-bit`,fragment:{header:`
|
|
172
|
+
fn calculateMSDFAlpha(msdfColor:vec4<f32>, shapeColor:vec4<f32>, distance:f32) -> f32 {
|
|
173
|
+
|
|
174
|
+
// MSDF
|
|
175
|
+
var median = msdfColor.r + msdfColor.g + msdfColor.b -
|
|
176
|
+
min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
|
|
177
|
+
max(msdfColor.r, max(msdfColor.g, msdfColor.b));
|
|
178
|
+
|
|
179
|
+
// SDF
|
|
180
|
+
median = min(median, msdfColor.a);
|
|
181
|
+
|
|
182
|
+
var screenPxDistance = distance * (median - 0.5);
|
|
183
|
+
var alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
|
184
|
+
if (median < 0.01) {
|
|
185
|
+
alpha = 0.0;
|
|
186
|
+
} else if (median > 0.99) {
|
|
187
|
+
alpha = 1.0;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Gamma correction for coverage-like alpha
|
|
191
|
+
var luma: f32 = dot(shapeColor.rgb, vec3<f32>(0.299, 0.587, 0.114));
|
|
192
|
+
var gamma: f32 = mix(1.0, 1.0 / 2.2, luma);
|
|
193
|
+
var coverage: f32 = pow(shapeColor.a * alpha, gamma);
|
|
194
|
+
|
|
195
|
+
return coverage;
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
`}},Ds={name:`msdf-bit`,fragment:{header:`
|
|
199
|
+
float calculateMSDFAlpha(vec4 msdfColor, vec4 shapeColor, float distance) {
|
|
200
|
+
|
|
201
|
+
// MSDF
|
|
202
|
+
float median = msdfColor.r + msdfColor.g + msdfColor.b -
|
|
203
|
+
min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
|
|
204
|
+
max(msdfColor.r, max(msdfColor.g, msdfColor.b));
|
|
205
|
+
|
|
206
|
+
// SDF
|
|
207
|
+
median = min(median, msdfColor.a);
|
|
208
|
+
|
|
209
|
+
float screenPxDistance = distance * (median - 0.5);
|
|
210
|
+
float alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
|
211
|
+
|
|
212
|
+
if (median < 0.01) {
|
|
213
|
+
alpha = 0.0;
|
|
214
|
+
} else if (median > 0.99) {
|
|
215
|
+
alpha = 1.0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Gamma correction for coverage-like alpha
|
|
219
|
+
float luma = dot(shapeColor.rgb, vec3(0.299, 0.587, 0.114));
|
|
220
|
+
float gamma = mix(1.0, 1.0 / 2.2, luma);
|
|
221
|
+
float coverage = pow(shapeColor.a * alpha, gamma);
|
|
222
|
+
|
|
223
|
+
return coverage;
|
|
224
|
+
}
|
|
225
|
+
`}},Os,ks,As=class extends g{constructor(t){let n=new C({uColor:{value:new Float32Array([1,1,1,1]),type:`vec4<f32>`},uTransformMatrix:{value:new e,type:`mat3x3<f32>`},uDistance:{value:4,type:`f32`},uRound:{value:0,type:`f32`}});Os??=ze({name:`sdf-shader`,bits:[Re,Ge(t),ws,Es,He]}),ks??=Ye({name:`sdf-shader`,bits:[Ue,Je(t),Ts,Ds,Le]}),super({glProgram:ks,gpuProgram:Os,resources:{localUniforms:n,batchSamplers:qe(t)}})}},js=class extends xs{getSdfShader(){return new As(this._renderer.limits.maxBatchableTextures)}};js.extension={type:[i.WebGLPipes,i.WebGPUPipes],name:`bitmapText`},a.add(Cs),a.add(js);var Ms=class extends co{constructor(...e){var t;let n=lo(e,`BitmapText`);n.style??=n.style||{},(t=n.style).fill??(t.fill=16777215),super(n,X),this.renderPipeId=`bitmapText`}_onTouch(e){this._gcLastUsed=e;for(let t in this._gpuData)this._gpuData[t]?._onTouch(e)}updateBounds(){let e=this._bounds,t=this._anchor,n=ys.measureText(this.text,this._style),r=n.scale,i=n.offsetY*r,a=n.width*r,o=n.height*r,s=this._style._stroke;s&&(a+=s.width,o+=s.width),e.minX=-t._x*a,e.maxX=e.minX+a,e.minY=-t._y*(o+i),e.maxY=e.minY+o}set resolution(e){e!==null&&O(`[BitmapText] dynamically updating the resolution is not supported. Resolution should be managed by the BitmapFont.`)}get resolution(){return this._resolution}};function Ns(e){let t=e._stroke,n=e._fill,r=[`div { ${[`color: ${f.shared.setValue(n.color).setAlpha(n.alpha??1).toHexa()}`,`font-size: ${e.fontSize}px`,`font-family: ${e.fontFamily}`,`font-weight: ${e.fontWeight}`,`font-style: ${e.fontStyle}`,`font-variant: ${e.fontVariant}`,`letter-spacing: ${e.letterSpacing}px`,`text-align: ${e.align}`,`padding: ${e.padding}px`,`white-space: ${e.whiteSpace===`pre`&&e.wordWrap?`pre-wrap`:e.whiteSpace}`,...e.lineHeight?[`line-height: ${e.lineHeight}px`]:[],...e.wordWrap?[`word-break: ${e.breakWords?`break-word`:`normal`}`,`max-width: ${e.wordWrapWidth}px`]:[],...t?[Fs(t)]:[],...e.dropShadow?[Ps(e.dropShadow)]:[],...e.cssOverrides].join(`;`)} }`];return Rs(e.tagStyles,r),r.join(` `)}function Ps(e){let t={...e},n=f.shared.setValue(t.color).setAlpha(t.alpha??1).toHexa(),r=`${Math.round(Math.cos(t.angle)*t.distance)}px ${Math.round(Math.sin(t.angle)*t.distance)}px`;return t.blur>0?`text-shadow: ${r} ${t.blur}px ${n}`:`text-shadow: ${r} ${n}`}function Fs(e){let t=f.shared.setValue(e.color).setAlpha(e.alpha??1).toHexa();return[`-webkit-text-stroke-width: ${e.width}px`,`-webkit-text-stroke-color: ${t}`,`text-stroke-width: ${e.width}px`,`text-stroke-color: ${t}`,`paint-order: stroke`].join(`;`)}var Is={fontSize:`font-size: {{VALUE}}px`,fontFamily:`font-family: {{VALUE}}`,fontWeight:`font-weight: {{VALUE}}`,fontStyle:`font-style: {{VALUE}}`,fontVariant:`font-variant: {{VALUE}}`,letterSpacing:`letter-spacing: {{VALUE}}px`,align:`text-align: {{VALUE}}`,padding:`padding: {{VALUE}}px`,whiteSpace:`white-space: {{VALUE}}`,lineHeight:`line-height: {{VALUE}}px`,wordWrapWidth:`max-width: {{VALUE}}px`},Ls={fill:e=>`color: ${f.shared.setValue(e).toHexa()}`,breakWords:e=>`word-break: ${e?`break-all`:`normal`}`,stroke:Fs,dropShadow:e=>e===!0?Ps(X.defaultDropShadow):e&&typeof e==`object`?Ps({...X.defaultDropShadow,...e}):``};function Rs(e,t){for(let n in e){let r=e[n],i=[];for(let e in r)Ls[e]?i.push(Ls[e](r[e])):Is[e]&&i.push(Is[e].replace(`{{VALUE}}`,r[e]));t.push(`${n} { ${i.join(`;`)} }`)}}var zs=class e extends X{constructor(e={}){super(e),this._cssOverrides=[],this.cssOverrides=e.cssOverrides??[],this.tagStyles=e.tagStyles??{}}get tagStyles(){return this._tagStyles}set tagStyles(e){this._tagStyles!==e&&(this._tagStyles=e??{},this.update())}set cssOverrides(e){this._cssOverrides=e instanceof Array?e:[e],this.update()}get cssOverrides(){return this._cssOverrides}update(){this._cssStyle=null,super.update()}clone(){return new e({align:this.align,breakWords:this.breakWords,dropShadow:this.dropShadow?{...this.dropShadow}:null,fill:this._fill,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth,cssOverrides:this.cssOverrides,tagStyles:{...this.tagStyles}})}get cssStyle(){return this._cssStyle||=Ns(this),this._cssStyle}addOverride(...e){let t=e.filter(e=>!this.cssOverrides.includes(e));t.length>0&&(this.cssOverrides.push(...t),this.update())}removeOverride(...e){let t=e.filter(e=>this.cssOverrides.includes(e));t.length>0&&(this.cssOverrides=this.cssOverrides.filter(e=>!t.includes(e)),this.update())}set fill(e){typeof e!=`string`&&typeof e!=`number`&&O(`[HTMLTextStyle] only color fill is not supported by HTMLText`),super.fill=e}set stroke(e){e&&typeof e!=`string`&&typeof e!=`number`&&O(`[HTMLTextStyle] only color stroke is not supported by HTMLText`),super.stroke=e}},Bs=`http://www.w3.org/2000/svg`,Vs=`http://www.w3.org/1999/xhtml`,Hs=class{constructor(){this.svgRoot=document.createElementNS(Bs,`svg`),this.foreignObject=document.createElementNS(Bs,`foreignObject`),this.domElement=document.createElementNS(Vs,`div`),this.styleElement=document.createElementNS(Vs,`style`);let{foreignObject:e,svgRoot:t,styleElement:n,domElement:r}=this;e.setAttribute(`width`,`10000`),e.setAttribute(`height`,`10000`),e.style.overflow=`hidden`,t.appendChild(e),e.appendChild(n),e.appendChild(r),this.image=b.get().createImage()}destroy(){this.svgRoot.remove(),this.foreignObject.remove(),this.styleElement.remove(),this.domElement.remove(),this.image.src=``,this.image.remove(),this.svgRoot=null,this.foreignObject=null,this.styleElement=null,this.domElement=null,this.image=null,this.canvasAndContext=null}},Us;function Ws(e,t,n,r){r||=Us||=new Hs;let{domElement:i,styleElement:a,svgRoot:o}=r;i.innerHTML=`<style>${t.cssStyle};</style><div style='padding:0'>${e}</div>`,i.setAttribute(`style`,`transform-origin: top left; display: inline-block`),n&&(a.textContent=n),document.body.appendChild(o);let s=i.scrollWidth,c=i.scrollHeight;if(o.remove(),t.dropShadow){let{distance:e,angle:n,blur:r}=t.dropShadow,i=Math.abs(Math.round(Math.cos(n)*e)),a=Math.abs(Math.round(Math.sin(n)*e));s+=i+r,c+=a+r}let l=t.padding*2;return{width:s-l,height:c-l}}var Gs=class extends Ee{constructor(){super(...arguments),this.generatingTexture=!1,this.currentKey=`--`}destroy(){this.texturePromise=null,this.generatingTexture=!1,this.currentKey=`--`,super.destroy()}},Ks=class{constructor(e){this._renderer=e,e.runners.resolutionChange.add(this),e.runners.contextChange.add(this),this._managedTexts=new G({renderer:e,type:`renderable`,onUnload:this.onTextUnload.bind(this),name:`htmlText`})}resolutionChange(){for(let e in this._managedTexts.items){let t=this._managedTexts.items[e];t?._autoResolution&&t.onViewUpdate()}}contextChange(){for(let e in this._managedTexts.items)this._managedTexts.items[e]?.unload()}validateRenderable(e){let t=this._getGpuText(e),n=e.styleKey;return t.currentKey!==n}addRenderable(e,t){let n=this._getGpuText(e);if(e._didTextUpdate||n.currentKey!==e.styleKey){let t=e._autoResolution?this._renderer.resolution:e.resolution;(n.currentKey!==e.styleKey||e.resolution!==t)&&this._updateGpuText(e).catch(e=>{console.error(e)}),e._didTextUpdate=!1,rs(n,e)}this._renderer.renderPipes.batch.addToBatch(n,t)}updateRenderable(e){let t=this._getGpuText(e);t._batcher.updateElement(t)}async _updateGpuText(e){e._didTextUpdate=!1;let t=this._getGpuText(e);if(t.generatingTexture)return;let n=t.texturePromise;t.texturePromise=null,t.generatingTexture=!0,e._resolution=e._autoResolution?this._renderer.resolution:e.resolution;let r=this._renderer.htmlText.getTexturePromise(e);n&&(r=r.finally(()=>{this._renderer.htmlText.decreaseReferenceCount(t.currentKey),this._renderer.htmlText.returnTexturePromise(n)})),t.texturePromise=r,t.currentKey=e.styleKey;let i=await r;if(!t.renderable)return;t.texture=i;let a=e.renderGroup||e.parentRenderGroup;a&&(a.structureDidChange=!0),t.generatingTexture=!1,rs(t,e)}_getGpuText(e){return e._gpuData[this._renderer.uid]||this.initGpuText(e)}initGpuText(e){let t=new Gs;return t.renderable=e,t.transform=e.groupTransform,t.texture=D.EMPTY,t.bounds={minX:0,maxX:1,minY:0,maxY:0},t.roundPixels=this._renderer._roundPixels|e._roundPixels,e._resolution=e._autoResolution?this._renderer.resolution:e.resolution,e._gpuData[this._renderer.uid]=t,this._managedTexts.add(e),t}onTextUnload(e){let t=e._gpuData[this._renderer.uid];if(!t?.texturePromise)return;let{htmlText:n}=this._renderer;n.getReferenceCount(t.currentKey)===null?n.returnTexturePromise(t.texturePromise):n.decreaseReferenceCount(t.currentKey)}destroy(){this._managedTexts.destroy(),this._renderer=null}};Ks.extension={type:[i.WebGLPipes,i.WebGPUPipes,i.CanvasPipes],name:`htmlText`};function qs(){let{userAgent:e}=b.get().getNavigator();return/^((?!chrome|android).)*safari/i.test(e)}function Js(e,t){let n=t.fontFamily,r=[],i={},a=e.match(/font-family:([^;"\s]+)/g);function o(e){i[e]||(r.push(e),i[e]=!0)}if(Array.isArray(n))for(let e=0;e<n.length;e++)o(n[e]);else o(n);a&&a.forEach(e=>{o(e.split(`:`)[1].trim())});for(let e in t.tagStyles){let n=t.tagStyles[e].fontFamily;o(n)}return r}async function Ys(e){let t=await(await b.get().fetch(e)).blob(),n=new FileReader;return await new Promise((e,r)=>{n.onloadend=()=>e(n.result),n.onerror=r,n.readAsDataURL(t)})}async function Xs(e,t){let n=await Ys(t);return`@font-face {
|
|
226
|
+
font-family: "${e.fontFamily}";
|
|
227
|
+
font-weight: ${e.fontWeight};
|
|
228
|
+
font-style: ${e.fontStyle};
|
|
229
|
+
src: url('${n}');
|
|
230
|
+
}`}var Zs=new Map;async function Qs(e){let t=e.filter(e=>H.has(`${e}-and-url`)).map(e=>{if(!Zs.has(e)){let{entries:t}=H.get(`${e}-and-url`),n=[];t.forEach(t=>{let r=t.url,i=t.faces.map(e=>({weight:e.weight,style:e.style}));n.push(...i.map(t=>Xs({fontWeight:t.weight,fontStyle:t.style,fontFamily:e},r)))}),Zs.set(e,Promise.all(n).then(e=>e.join(`
|
|
231
|
+
`)))}return Zs.get(e)});return(await Promise.all(t)).join(`
|
|
232
|
+
`)}function $s(e,t,n,r,i){let{domElement:a,styleElement:o,svgRoot:s}=i;a.innerHTML=`<style>${t.cssStyle}</style><div style='padding:0;'>${e}</div>`,a.setAttribute(`style`,`transform: scale(${n});transform-origin: top left; display: inline-block`),o.textContent=r;let{width:c,height:l}=i.image;return s.setAttribute(`width`,c.toString()),s.setAttribute(`height`,l.toString()),new XMLSerializer().serializeToString(s)}function ec(e,t){let n=E.getOptimalCanvasAndContext(e.width,e.height,t),{context:r}=n;return r.clearRect(0,0,e.width,e.height),r.drawImage(e,0,0),n}function tc(e,t,n){return new Promise(async r=>{n&&await new Promise(e=>setTimeout(e,100)),e.onload=()=>{r()},e.src=`data:image/svg+xml;charset=utf8,${encodeURIComponent(t)}`,e.crossOrigin=`anonymous`})}var nc=class{constructor(e){this._activeTextures={},this._renderer=e,this._createCanvas=e.type===re.WEBGPU}getTexture(e){return this.getTexturePromise(e)}getManagedTexture(e){let t=e.styleKey;if(this._activeTextures[t])return this._increaseReferenceCount(t),this._activeTextures[t].promise;let n=this._buildTexturePromise(e).then(e=>(this._activeTextures[t].texture=e,e));return this._activeTextures[t]={texture:null,promise:n,usageCount:1},n}getReferenceCount(e){return this._activeTextures[e]?.usageCount??null}_increaseReferenceCount(e){this._activeTextures[e].usageCount++}decreaseReferenceCount(e){let t=this._activeTextures[e];t&&(t.usageCount--,t.usageCount===0&&(t.texture?this._cleanUp(t.texture):t.promise.then(e=>{t.texture=e,this._cleanUp(t.texture)}).catch(()=>{O(`HTMLTextSystem: Failed to clean texture`)}),this._activeTextures[e]=null))}getTexturePromise(e){return this._buildTexturePromise(e)}async _buildTexturePromise(e){let{text:t,style:n,resolution:r,textureStyle:i,autoGenerateMipmaps:a}=e,o=k.get(Hs),s=Js(t,n),c=await Qs(s),l=Ws(t,n,c,o),u=Math.ceil(Math.ceil(Math.max(1,l.width)+n.padding*2)*r),d=Math.ceil(Math.ceil(Math.max(1,l.height)+n.padding*2)*r),f=o.image;f.width=(u|0)+2,f.height=(d|0)+2,await tc(f,$s(t,n,r,c,o),qs()&&s.length>0);let p=f,m;this._createCanvas&&(m=ec(f,r));let h=Oa(m?m.canvas:p,f.width-2,f.height-2,r,a,i?.scaleMode);return this._renderer?.texture.initSource(h.source),this._createCanvas&&E.returnCanvasAndContext(m),k.return(o),h}returnTexturePromise(e){e.then(e=>{this._cleanUp(e)}).catch(()=>{O(`HTMLTextSystem: Failed to clean texture`)})}_cleanUp(e){let t=e.source;M.returnTexture(e),t.resource=null,t.uploadMethodId=`unknown`}destroy(){this._renderer=null;for(let e in this._activeTextures)this._activeTextures[e]&&this.returnTexturePromise(this._activeTextures[e].promise);this._activeTextures=null}};nc.extension={type:[i.WebGLSystem,i.WebGPUSystem,i.CanvasSystem],name:`htmlText`},a.add(nc),a.add(Ks);var rc=class extends co{constructor(...e){let t=lo(e,`HtmlText`);super(t,zs),this.renderPipeId=`htmlText`,t.textureStyle&&(this.textureStyle=t.textureStyle instanceof l?t.textureStyle:new l(t.textureStyle),ns(this.textureStyle)),this.autoGenerateMipmaps=t.autoGenerateMipmaps??n.defaultOptions.autoGenerateMipmaps}updateBounds(){let e=this._bounds,t=this._anchor,{width:n,height:r}=Ws(this.text,this._style);e.minX=-t._x*n,e.maxX=e.minX+n,e.minY=-t._y*r,e.maxY=e.minY+r}get text(){return this._text}set text(e){let t=this._sanitiseText(e.toString());super.text=t}_sanitiseText(e){return this._removeInvalidHtmlTags(e.replace(/<br>/gi,`<br/>`).replace(/<hr>/gi,`<hr/>`).replace(/ /gi,` `))}_removeInvalidHtmlTags(e){return e.replace(/<[^>]*?(?=<|$)/g,``)}},ic=class e{static _getPatternRepeat(e,t){let n=e&&e!==`clamp-to-edge`,r=t&&t!==`clamp-to-edge`;return n&&r?`repeat`:n?`repeat-x`:r?`repeat-y`:`no-repeat`}start(e,t,n){}execute(t,n){let r=n.elements;if(!r||!r.length)return;let i=t.renderer,a=i.canvasContext,o=a.activeContext;for(let t=0;t<r.length;t++){let s=r[t];if(!s.packAsQuad)continue;let c=s,l=c.texture,u=l?B.getCanvasSource(l):null;if(!u)continue;let d=l.source.style,f=a.smoothProperty,p=d.scaleMode!==`nearest`;o[f]!==p&&(o[f]=p),a.setBlendMode(n.blendMode);let m=i.globalUniforms.globalUniformData?.worldColor??4294967295,h=c.color,g=(m>>>24&255)/255,_=(h>>>24&255)/255,v=i.filter?.alphaMultiplier??1,y=g*_*v;if(y<=0)continue;o.globalAlpha=y;let b=m&16777215,x=h&16777215,S=de(ie(x,b)),C=l.frame,ee=d.addressModeU??d.addressMode,w=d.addressModeV??d.addressMode,T=e._getPatternRepeat(ee,w),te=l.source._resolution??l.source.resolution??1,ne=c.renderable?.renderGroup?.isCachedAsTexture,re=C.x*te,E=C.y*te,D=C.width*te,O=C.height*te,k=c.bounds,oe=i.renderTarget.renderTarget.isRoot,se=k.minX,A=k.minY,j=k.maxX-k.minX,M=k.maxY-k.minY,ce=l.rotate,N=l.uvs,le=Math.min(N.x0,N.x1,N.x2,N.x3,N.y0,N.y1,N.y2,N.y3),P=Math.max(N.x0,N.x1,N.x2,N.x3,N.y0,N.y1,N.y2,N.y3),F=T!==`no-repeat`&&(le<0||P>1),ue=ce&&(!!F||S===16777215&&!ce);ue?(e._tempPatternMatrix.copyFrom(c.transform),ae.matrixAppendRotationInv(e._tempPatternMatrix,ce,se,A,j,M),a.setContextTransform(e._tempPatternMatrix,c.roundPixels===1,void 0,ne&&oe)):a.setContextTransform(c.transform,c.roundPixels===1,void 0,ne&&oe);let I=j,L=M,R=ue?0:se,z=ue?0:A;if(!ue&&c.roundPixels===1&&(R|=0,z|=0),F){let t=u,n=S!==16777215&&!ce,r=C.width<=l.source.width&&C.height<=l.source.height;n&&r&&(t=B.getTintedCanvas({texture:l},S));let i=o.createPattern(t,T);if(!i)continue;let a=I,s=L;if(a===0||s===0)continue;let c=1/a,d=1/s,f=(N.x1-N.x0)*c,p=(N.y1-N.y0)*c,m=(N.x3-N.x0)*d,h=(N.y3-N.y0)*d,g=N.x0-f*R-m*z,_=N.y0-p*R-h*z,v=l.source.pixelWidth,y=l.source.pixelHeight;e._tempPatternMatrix.set(f*v,p*y,m*v,h*y,g*v,_*y),B.applyPatternTransform(i,e._tempPatternMatrix),o.fillStyle=i,o.fillRect(R,z,I,L)}else{let e=S!==16777215||ce?B.getTintedCanvas({texture:l},S):u,t=e!==u;o.drawImage(e,t?0:re,t?0:E,t?e.width:D,t?e.height:O,R,z,I,L)}}}};ic._tempPatternMatrix=new e,ic.extension={type:[i.CanvasPipesAdaptor],name:`batch`};var ac=ic,oc=class{constructor(){this._tempState=L.for2d(),this._didUploadHash={}}init(e){e.renderer.runners.contextChange.add(this)}contextChange(){this._didUploadHash={}}start(e,t,n){let r=e.renderer,i=this._didUploadHash[n.uid];r.shader.bind(n,i),i||(this._didUploadHash[n.uid]=!0),r.shader.updateUniformGroup(r.globalUniforms.uniformGroup),r.geometry.bind(t,n.glProgram)}execute(e,t){let n=e.renderer;this._tempState.blendMode=t.blendMode,n.state.set(this._tempState);let r=t.textures.textures;for(let e=0;e<t.textures.count;e++)n.texture.bind(r[e],e);n.texture.unbindIntegerTextures(t.textures.count),n.geometry.draw(t.topology,t.size,t.start)}};oc.extension={type:[i.WebGLPipesAdaptor],name:`batch`};var sc=L.for2d(),cc=class{start(e,t,n){let r=e.renderer,i=r.encoder,a=n.gpuProgram;this._shader=n,this._geometry=t,i.setGeometry(t,a),sc.blendMode=`normal`,r.pipeline.getPipeline(t,a,sc,void 0,n._overrides);let o=r.globalUniforms.bindGroup;i.resetBindGroup(1),i.setBindGroup(0,o,a)}execute(e,t){let n=this._shader.gpuProgram,r=e.renderer,i=r.encoder;if(!t.bindGroup){let e=t.textures;t.bindGroup=Ie(e.textures,e.count,r.limits.maxBatchableTextures)}sc.blendMode=t.blendMode;let a=r.bindGroup.getBindGroup(t.bindGroup,n,1),o=r.pipeline.getPipeline(this._geometry,n,sc,t.topology,this._shader._overrides);t.bindGroup._touch(r.gc.now),i.setPipeline(o),i.renderPassEncoder.setBindGroup(1,a),i.renderPassEncoder.drawIndexed(t.size,1,t.start)}};cc.extension={type:[i.WebGPUPipesAdaptor],name:`batch`};var lc=class{constructor(e){this._colorStack=[],this._colorStackIndex=0,this._currentColor=0,this._renderer=e}buildStart(){this._colorStack[0]=15,this._colorStackIndex=1,this._currentColor=15}push(e,t,n){this._renderer.renderPipes.batch.break(n);let r=this._colorStack;r[this._colorStackIndex]=r[this._colorStackIndex-1]&e.mask;let i=this._colorStack[this._colorStackIndex];i!==this._currentColor&&(this._currentColor=i,n.add({renderPipeId:`colorMask`,colorMask:i,canBundle:!1})),this._colorStackIndex++}pop(e,t,n){this._renderer.renderPipes.batch.break(n);let r=this._colorStack;this._colorStackIndex--;let i=r[this._colorStackIndex-1];i!==this._currentColor&&(this._currentColor=i,n.add({renderPipeId:`colorMask`,colorMask:i,canBundle:!1}))}execute(e){}destroy(){this._renderer=null,this._colorStack=null}};lc.extension={type:[i.CanvasPipes],name:`colorMask`};function uc(e,t,n,r,i,a){a=Math.max(0,Math.min(a,Math.min(r,i)/2)),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n)}function dc(e,t){switch(t.type){case`rectangle`:{let n=t;e.rect(n.x,n.y,n.width,n.height);break}case`roundedRectangle`:{let n=t;uc(e,n.x,n.y,n.width,n.height,n.radius);break}case`circle`:{let n=t;e.moveTo(n.x+n.radius,n.y),e.arc(n.x,n.y,n.radius,0,Math.PI*2);break}case`ellipse`:{let n=t;e.ellipse?(e.moveTo(n.x+n.halfWidth,n.y),e.ellipse(n.x,n.y,n.halfWidth,n.halfHeight,0,0,Math.PI*2)):(e.save(),e.translate(n.x,n.y),e.scale(n.halfWidth,n.halfHeight),e.moveTo(1,0),e.arc(0,0,1,0,Math.PI*2),e.restore());break}case`triangle`:{let n=t;e.moveTo(n.x,n.y),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3),e.closePath();break}default:{let n=t,r=n.points;if(!r?.length)break;e.moveTo(r[0],r[1]);for(let t=2;t<r.length;t+=2)e.lineTo(r[t],r[t+1]);n.closePath&&e.closePath();break}}}function fc(e,t,n){let r=[],i=[],a=[];if(!Me[t.type]?.build(t,r))return!1;let o=t.closePath??!0;Ae(r,n,!1,o,i,a);for(let t=0;t<a.length;t+=3){let n=a[t]*2,r=a[t+1]*2,o=a[t+2]*2;e.moveTo(i[n],i[n+1]),e.lineTo(i[r],i[r+1]),e.lineTo(i[o],i[o+1]),e.closePath()}return!0}function pc(e,t){if(!t?.length)return!1;for(let n=0;n<t.length;n++){let r=t[n];if(!r?.shape)continue;let i=r.transform,a=i&&!i.isIdentity();a&&(e.save(),e.transform(i.a,i.b,i.c,i.d,i.tx,i.ty)),dc(e,r.shape),a&&e.restore()}return!0}var mc=class{constructor(e){this._warnedMaskTypes=new Set,this._canvasMaskStack=[],this._renderer=e}push(e,t,n){this._renderer.renderPipes.batch.break(n),n.add({renderPipeId:`stencilMask`,action:`pushMaskBegin`,mask:e,inverse:t._maskOptions.inverse,canBundle:!1})}pop(e,t,n){this._renderer.renderPipes.batch.break(n),n.add({renderPipeId:`stencilMask`,action:`popMaskEnd`,mask:e,inverse:t._maskOptions.inverse,canBundle:!1})}execute(e){if(e.action!==`pushMaskBegin`&&e.action!==`popMaskEnd`)return;let t=this._renderer,n=t.canvasContext,r=n?.activeContext;if(!r)return;if(e.action===`popMaskEnd`){this._canvasMaskStack.pop()&&r.restore();return}e.inverse&&this._warnOnce(`inverse`,`CanvasRenderer: inverse masks are not supported on Canvas2D; ignoring inverse flag.`);let i=e.mask.mask;if(!(i instanceof Ia)){this._warnOnce(`nonGraphics`,`CanvasRenderer: only Graphics masks are supported in Canvas2D; skipping mask.`),this._canvasMaskStack.push(!1);return}let a=i,o=a.context?.instructions;if(!o?.length){this._canvasMaskStack.push(!1);return}r.save(),n.setContextTransform(a.groupTransform,(t._roundPixels|a._roundPixels)===1),r.beginPath();let s=!1,c=!1;for(let e=0;e<o.length;e++){let t=o[e],n=t.action;if(n!==`fill`&&n!==`stroke`)continue;let i=t.data,a=i?.path?.shapePath;if(!a?.shapePrimitives?.length)continue;let l=n===`stroke`,u=a.shapePrimitives;for(let e=0;e<u.length;e++){let t=u[e];if(!t?.shape)continue;let n=t.transform,a=n&&!n.isIdentity();a&&(r.save(),r.transform(n.a,n.b,n.c,n.d,n.tx,n.ty)),l&&i.style?s=fc(r,t.shape,i.style)||s:(dc(r,t.shape),c=pc(r,t.holes)||c,s=!0),a&&r.restore()}}s?(c?r.clip(`evenodd`):r.clip(),this._canvasMaskStack.push(!0)):(r.restore(),this._canvasMaskStack.push(!1))}destroy(){this._renderer=null,this._warnedMaskTypes=null,this._canvasMaskStack=null}_warnOnce(e,t){this._warnedMaskTypes.has(e)||(this._warnedMaskTypes.add(e),O(t))}};mc.extension={type:[i.CanvasPipes],name:`stencilMask`};var Z=`source-over`;function hc(){let e=fe(),t=Object.create(null);return t.inherit=Z,t.none=Z,t.normal=`source-over`,t.add=`lighter`,t.multiply=e?`multiply`:Z,t.screen=e?`screen`:Z,t.overlay=e?`overlay`:Z,t.darken=e?`darken`:Z,t.lighten=e?`lighten`:Z,t[`color-dodge`]=e?`color-dodge`:Z,t[`color-burn`]=e?`color-burn`:Z,t[`hard-light`]=e?`hard-light`:Z,t[`soft-light`]=e?`soft-light`:Z,t.difference=e?`difference`:Z,t.exclusion=e?`exclusion`:Z,t.saturation=e?`saturation`:Z,t.color=e?`color`:Z,t.luminosity=e?`luminosity`:Z,t[`linear-burn`]=e?`color-burn`:Z,t[`linear-dodge`]=e?`color-dodge`:Z,t[`linear-light`]=e?`hard-light`:Z,t[`pin-light`]=e?`hard-light`:Z,t[`vivid-light`]=e?`hard-light`:Z,t[`hard-mix`]=Z,t.negation=e?`difference`:Z,t[`normal-npm`]=t.normal,t[`add-npm`]=t.add,t[`screen-npm`]=t.screen,t.erase=`destination-out`,t.subtract=Z,t.divide=Z,t.min=Z,t.max=Z,t}var gc=new e,_c=class{constructor(e){this.activeResolution=1,this.smoothProperty=`imageSmoothingEnabled`,this.blendModes=hc(),this._activeBlendMode=`normal`,this._projTransform=null,this._outerBlend=!1,this._warnedBlendModes=new Set,this._renderer=e}resolutionChange(e){this.activeResolution=e}init(){let e=this._renderer.background.alpha<1;if(this.rootContext=this._renderer.canvas.getContext(`2d`,{alpha:e}),this.activeContext=this.rootContext,this.activeResolution=this._renderer.resolution,!this.rootContext.imageSmoothingEnabled){let e=this.rootContext;e.webkitImageSmoothingEnabled?this.smoothProperty=`webkitImageSmoothingEnabled`:e.mozImageSmoothingEnabled?this.smoothProperty=`mozImageSmoothingEnabled`:e.oImageSmoothingEnabled?this.smoothProperty=`oImageSmoothingEnabled`:e.msImageSmoothingEnabled&&(this.smoothProperty=`msImageSmoothingEnabled`)}}setContextTransform(t,n,r,i){let a=i?e.IDENTITY:this._renderer.globalUniforms.globalUniformData?.worldTransformMatrix||e.IDENTITY,o=gc;o.copyFrom(a),o.append(t);let s=this._projTransform,c=this.activeResolution;if(r||=c,s){let t=e.shared;t.copyFrom(o),t.prepend(s),o=t}n?this.activeContext.setTransform(o.a*r,o.b*r,o.c*r,o.d*r,o.tx*c|0,o.ty*c|0):this.activeContext.setTransform(o.a*r,o.b*r,o.c*r,o.d*r,o.tx*c,o.ty*c)}clear(e,t){let n=this.activeContext,r=this._renderer;if(n.clearRect(0,0,r.width,r.height),e){let i=f.shared.setValue(e);n.globalAlpha=t??i.alpha,n.fillStyle=i.toHex(),n.fillRect(0,0,r.width,r.height),n.globalAlpha=1}}setBlendMode(e){if(this._activeBlendMode===e)return;this._activeBlendMode=e,this._outerBlend=!1;let t=this.blendModes[e];t?this.activeContext.globalCompositeOperation=t:(this._warnedBlendModes.has(e)||(console.warn(`CanvasRenderer: blend mode "${e}" is not supported in Canvas2D; falling back to "source-over".`),this._warnedBlendModes.add(e)),this.activeContext.globalCompositeOperation=`source-over`)}destroy(){this.rootContext=null,this.activeContext=null,this._warnedBlendModes.clear()}};_c.extension={type:[i.CanvasSystem],name:`canvasContext`};var vc=class{constructor(){this.maxTextures=16,this.maxBatchableTextures=16,this.maxUniformBindings=0}init(){}};vc.extension={type:[i.CanvasSystem],name:`limits`};var yc=`#808080`,bc=new e,xc=new e,Sc=new e,Cc=new e,wc=new e;function Tc(e,t,n){e.beginPath();for(let r=0;r<n.length;r+=3){let i=n[r]*2,a=n[r+1]*2,o=n[r+2]*2;e.moveTo(t[i],t[i+1]),e.lineTo(t[a],t[a+1]),e.lineTo(t[o],t[o+1]),e.closePath()}e.fill()}function Ec(e){return`#${(e&16777215).toString(16).padStart(6,`0`)}`}function Dc(e,t,n,r,i,a){a=Math.max(0,Math.min(a,Math.min(r,i)/2)),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n)}function Oc(e,t){switch(t.type){case`rectangle`:{let n=t;e.rect(n.x,n.y,n.width,n.height);break}case`roundedRectangle`:{let n=t;Dc(e,n.x,n.y,n.width,n.height,n.radius);break}case`circle`:{let n=t;e.arc(n.x,n.y,n.radius,0,Math.PI*2);break}case`ellipse`:{let n=t;e.ellipse?e.ellipse(n.x,n.y,n.halfWidth,n.halfHeight,0,0,Math.PI*2):(e.save(),e.translate(n.x,n.y),e.scale(n.halfWidth,n.halfHeight),e.arc(0,0,1,0,Math.PI*2),e.restore());break}case`triangle`:{let n=t;e.moveTo(n.x,n.y),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3),e.closePath();break}default:{let n=t,r=n.points;if(!r?.length)break;e.moveTo(r[0],r[1]);for(let t=2;t<r.length;t+=2)e.lineTo(r[t],r[t+1]);n.closePath&&e.closePath();break}}}function kc(e,t){if(!t?.length)return!1;for(let n=0;n<t.length;n++){let r=t[n];if(!r?.shape)continue;let i=r.transform,a=i&&!i.isIdentity();a&&(e.save(),e.transform(i.a,i.b,i.c,i.d,i.tx,i.ty)),Oc(e,r.shape),a&&e.restore()}return!0}function Ac(e,t,n,r){let i=e.fill;if(i instanceof Oe){i.buildGradient();let a=i.texture;if(a){let o=B.getTintedPattern(a,t),s=n?Cc.copyFrom(n).scale(a.source.pixelWidth,a.source.pixelHeight):Cc.copyFrom(i.transform);return r&&!e.textureSpace&&s.append(r),B.applyPatternTransform(o,s),o}}if(i instanceof ke){let e=B.getTintedPattern(i.texture,t);return B.applyPatternTransform(e,i.transform,!1),e}let a=e.texture;if(a&&a!==D.WHITE){if(!a.source.resource)return yc;let r=B.getTintedPattern(a,t),i=e.matrix;if(n){let{resolution:e}=a.source;if(i=Cc.copyFrom(n),a.rotate){let{uvs:t,orig:n}=a;i.prepend(wc.set(t.x1-t.x0,t.y1-t.y0,t.x3-t.x0,t.y3-t.y0,t.x0,t.y0).invert()).scale(n.width*e,n.height*e)}else i.scale(a.source.pixelWidth,a.source.pixelHeight).translate(-a.frame.x*e,-a.frame.y*e)}return B.applyPatternTransform(r,i),r}return Ec(t)}var jc=class{constructor(){this.shader=null}contextChange(e){}execute(e,t){let n=e.renderer,r=n.canvasContext,i=r.activeContext,a=t.groupTransform,o=n.globalUniforms.globalUniformData?.worldColor??4294967295,s=t.groupColorAlpha,c=(o>>>24&255)/255,l=(s>>>24&255)/255,u=n.filter?.alphaMultiplier??1,d=c*l*u;if(d<=0)return;let f=o&16777215,p=s&16777215,m=de(ie(p,f)),h=n._roundPixels|t._roundPixels;i.save(),r.setContextTransform(a,h===1),r.setBlendMode(t.groupBlendMode);let g=t.context.instructions;for(let e=0;e<g.length;e++){let t=g[e];if(t.action===`texture`){let e=t.data,n=e.image,o=n?B.getCanvasSource(n):null;if(!o)continue;let s=e.alpha*d;if(s<=0)continue;let c=ie(e.style,m);i.globalAlpha=s;let l=o;c!==16777215&&(l=B.getTintedCanvas({texture:n},c));let u=n.frame,f=n.source._resolution??n.source.resolution??1,p=u.x*f,g=u.y*f,_=u.width*f,v=u.height*f;l!==o&&(p=0,g=0);let y=e.transform,b=y&&!y.isIdentity(),x=n.rotate;b||x?(bc.copyFrom(a),b&&bc.append(y),x&&ae.matrixAppendRotationInv(bc,x,e.dx,e.dy,e.dw,e.dh),r.setContextTransform(bc,h===1)):r.setContextTransform(a,h===1),i.drawImage(l,p,g,l===o?_:l.width,l===o?v:l.height,x?0:e.dx,x?0:e.dy,e.dw,e.dh),(b||x)&&r.setContextTransform(a,h===1);continue}let n=t.data,o=n?.path?.shapePath;if(!o?.shapePrimitives?.length)continue;let s=n.style,c=ie(s.color,m),l=s.alpha*d;if(l<=0)continue;let u=t.action===`stroke`;if(i.globalAlpha=l,u){let e=s;i.lineWidth=e.width,i.lineCap=e.cap,i.lineJoin=e.join,i.miterLimit=e.miterLimit}let f=o.shapePrimitives;if(!u&&n.hole?.shapePath?.shapePrimitives?.length){let e=f[f.length-1];e.holes=n.hole.shapePath.shapePrimitives}for(let e=0;e<f.length;e++){let t=f[e];if(!t?.shape)continue;let n=t.transform,r=n&&!n.isIdentity(),o=s.texture&&s.texture!==D.WHITE,l=s.textureSpace===`global`?n:null,d=Ac(s,c,o?Pe(xc,s,t.shape,l):null,r?Sc.copyFrom(a).append(n):a);if(r&&(i.save(),i.transform(n.a,n.b,n.c,n.d,n.tx,n.ty)),u){let e=s;if(e.alignment!==.5&&!e.pixelLine){let n=[],r=[],a=[];if(Me[t.shape.type]?.build(t.shape,n)){let o=t.shape.closePath??!0;Ae(n,e,!1,o,r,a),i.fillStyle=d,Tc(i,r,a)}else i.strokeStyle=d,i.beginPath(),Oc(i,t.shape),i.stroke()}else i.strokeStyle=d,i.beginPath(),Oc(i,t.shape),i.stroke()}else i.fillStyle=d,i.beginPath(),Oc(i,t.shape),kc(i,t.holes)?i.fill(`evenodd`):i.fill();r&&i.restore()}}i.restore()}destroy(){this.shader=null}};jc.extension={type:[i.CanvasPipesAdaptor],name:`graphics`};var Mc=class{init(e,t){this._renderer=e,this._renderTargetSystem=t}initGpuRenderTarget(e){let t=e.colorTexture,{canvas:n,context:r}=this._ensureCanvas(t);return{canvas:n,context:r,width:n.width,height:n.height}}resizeGpuRenderTarget(e){let t=e.colorTexture,{canvas:n}=this._ensureCanvas(t);n.width=e.pixelWidth,n.height=e.pixelHeight}startRenderPass(e,t,n,r){let i=this._renderTargetSystem.getGpuRenderTarget(e);this._renderer.canvasContext.activeContext=i.context,this._renderer.canvasContext.activeResolution=e.resolution,t&&this.clear(e,t,n,r)}clear(e,t,n,r){let i=this._renderTargetSystem.getGpuRenderTarget(e).context,a=r||{x:0,y:0,width:e.pixelWidth,height:e.pixelHeight};if(i.setTransform(1,0,0,1,0,0),i.clearRect(a.x,a.y,a.width,a.height),n){let e=f.shared.setValue(n);e.alpha>0&&(i.globalAlpha=e.alpha,i.fillStyle=e.toHex(),i.fillRect(a.x,a.y,a.width,a.height),i.globalAlpha=1)}}finishRenderPass(){}copyToTexture(e,t,n,r,i){let a=this._renderTargetSystem.getGpuRenderTarget(e).canvas,o=t.source,{context:s}=this._ensureCanvas(o),c=i?.x??0,l=i?.y??0;return s.drawImage(a,n.x,n.y,r.width,r.height,c,l,r.width,r.height),o.update(),t}copyDepthTexture(e,t,n,r,i){O(`[CanvasRenderTargetAdaptor] copyDepthTexture is not supported in the canvas renderer`)}destroyGpuRenderTarget(e){}_ensureCanvas(e){let t=e.resource;t&&I.test(t)||(t=b.get().createCanvas(e.pixelWidth,e.pixelHeight),e.resource=t),(t.width!==e.pixelWidth||t.height!==e.pixelHeight)&&(t.width=e.pixelWidth,t.height=e.pixelHeight);let n=t.getContext(`2d`);return{canvas:t,context:n}}},Nc=class extends Te{constructor(e){super(e),this.adaptor=new Mc,this.adaptor.init(e,this)}};Nc.extension={type:[i.CanvasSystem],name:`renderTarget`};var Pc=class{constructor(e){}init(){}initSource(e){}generateCanvas(e){let t=b.get().createCanvas(),n=t.getContext(`2d`),r=B.getCanvasSource(e);if(!r)return t;let i=e.frame,a=e.source._resolution??e.source.resolution??1,o=i.x*a,s=i.y*a,c=i.width*a,l=i.height*a;return t.width=Math.ceil(c),t.height=Math.ceil(l),n.drawImage(r,o,s,c,l,0,0,c,l),t}getPixels(e){let t=this.generateCanvas(e);return{pixels:t.getContext(`2d`,{willReadFrequently:!0}).getImageData(0,0,t.width,t.height).data,width:t.width,height:t.height}}destroy(){}};Pc.extension={type:[i.CanvasSystem],name:`texture`};var Fc=te({CanvasRenderer:()=>Uc}),Ic=[...Ce,_c,vc,Pc,Nc],Lc=[ve,ye,me,xe,he,mc,lc,we],Rc=[ac,jc],zc=[],Bc=[],Vc=[],Hc=[];a.handleByNamedList(i.CanvasSystem,zc),a.handleByNamedList(i.CanvasPipes,Bc),a.handleByNamedList(i.CanvasPipesAdaptor,Vc),a.handleByNamedList(i.CanvasLoader,Hc),a.add(...Ic,...Lc,...Rc);var Uc=class extends Se{constructor(){let e={name:`canvas`,type:re.CANVAS,systems:zc,renderPipes:Bc,renderPipeAdaptors:Vc,loaders:Hc};super(e)}},Wc=(e=>(e[e.ELEMENT_ARRAY_BUFFER=34963]=`ELEMENT_ARRAY_BUFFER`,e[e.ARRAY_BUFFER=34962]=`ARRAY_BUFFER`,e[e.UNIFORM_BUFFER=35345]=`UNIFORM_BUFFER`,e))(Wc||{}),Gc=class{constructor(e,t){this._lastBindBaseLocation=-1,this._lastBindCallId=-1,this.buffer=e||null,this.updateID=-1,this.byteLength=-1,this.type=t}destroy(){this.buffer=null,this.updateID=-1,this.byteLength=-1,this.type=-1,this._lastBindBaseLocation=-1,this._lastBindCallId=-1}},Kc=class{constructor(e){this._boundBufferBases=Object.create(null),this._minBaseLocation=0,this._nextBindBaseIndex=this._minBaseLocation,this._bindCallId=0,this._renderer=e,this._managedBuffers=new G({renderer:e,type:`resource`,onUnload:this.onBufferUnload.bind(this),name:`glBuffer`})}destroy(){this._managedBuffers.destroy(),this._renderer=null,this._gl=null,this._boundBufferBases={}}contextChange(){this._gl=this._renderer.gl,this.destroyAll(!0),this._maxBindings=this._renderer.limits.maxUniformBindings}getGlBuffer(e){return e._gcLastUsed=this._renderer.gc.now,e._gpuData[this._renderer.uid]||this.createGLBuffer(e)}bind(e){let{_gl:t}=this,n=this.getGlBuffer(e);t.bindBuffer(n.type,n.buffer)}bindBufferBase(e,t){let{_gl:n}=this;this._boundBufferBases[t]!==e&&(this._boundBufferBases[t]=e,e._lastBindBaseLocation=t,n.bindBufferBase(n.UNIFORM_BUFFER,t,e.buffer))}nextBindBase(e){this._bindCallId++,this._minBaseLocation=0,e&&(this._boundBufferBases[0]=null,this._minBaseLocation=1,this._nextBindBaseIndex<1&&(this._nextBindBaseIndex=1))}freeLocationForBufferBase(e){let t=this.getLastBindBaseLocation(e);if(t>=this._minBaseLocation)return e._lastBindCallId=this._bindCallId,t;let n=0,r=this._nextBindBaseIndex;for(;n<2;){r>=this._maxBindings&&(r=this._minBaseLocation,n++);let e=this._boundBufferBases[r];if(e&&e._lastBindCallId===this._bindCallId)r++;else break}return t=r,this._nextBindBaseIndex=r+1,n>=2?-1:(e._lastBindCallId=this._bindCallId,this._boundBufferBases[t]=null,t)}getLastBindBaseLocation(e){let t=e._lastBindBaseLocation;return this._boundBufferBases[t]===e?t:-1}bindBufferRange(e,t,n,r){let{_gl:i}=this;n||=0,t||=0,this._boundBufferBases[t]=null,i.bindBufferRange(i.UNIFORM_BUFFER,t||0,e.buffer,n*256,r||256)}updateBuffer(e){let{_gl:t}=this,n=this.getGlBuffer(e);if(e._updateID===n.updateID)return n;n.updateID=e._updateID,t.bindBuffer(n.type,n.buffer);let r=e.data,i=e.descriptor.usage&x.STATIC?t.STATIC_DRAW:t.DYNAMIC_DRAW;return r?n.byteLength>=r.byteLength?t.bufferSubData(n.type,e._updateOffset,r,e._updateOffset/r.BYTES_PER_ELEMENT,(e._updateSize||r.byteLength)/r.BYTES_PER_ELEMENT):(n.byteLength=r.byteLength,t.bufferData(n.type,r,i)):(n.byteLength=e.descriptor.size,t.bufferData(n.type,n.byteLength,i)),n}destroyAll(e=!1){this._managedBuffers.removeAll(e)}onBufferUnload(e,t=!1){let n=e._gpuData[this._renderer.uid];n&&(t||this._gl.deleteBuffer(n.buffer))}createGLBuffer(e){let{_gl:t}=this,n=Wc.ARRAY_BUFFER;e.descriptor.usage&x.INDEX?n=Wc.ELEMENT_ARRAY_BUFFER:e.descriptor.usage&x.UNIFORM&&(n=Wc.UNIFORM_BUFFER);let r=new Gc(t.createBuffer(),n);return e._gpuData[this._renderer.uid]=r,this._managedBuffers.add(e),r}resetState(){this._boundBufferBases=Object.create(null)}};Kc.extension={type:[i.WebGLSystem],name:`buffer`};var qc=class e{constructor(e){this.supports={uint32Indices:!0,uniformBufferObject:!0,vertexArrayObject:!0,srgbTextures:!0,nonPowOf2wrapping:!0,msaa:!0,nonPowOf2mipmaps:!0},this._renderer=e,this.extensions=Object.create(null),this.handleContextLost=this.handleContextLost.bind(this),this.handleContextRestored=this.handleContextRestored.bind(this)}get isLost(){return!this.gl||this.gl.isContextLost()}contextChange(e){this.gl=e,this._renderer.gl=e}init(t){t={...e.defaultOptions,...t};let n=this.multiView=t.multiView;if(t.context&&n&&(O(`Renderer created with both a context and multiview enabled. Disabling multiView as both cannot work together.`),n=!1),this.canvas=n?b.get().createCanvas(this._renderer.canvas.width,this._renderer.canvas.height):this._renderer.view.canvas,t.context)this.initFromContext(t.context);else{let e=this._renderer.background.alpha<1,n=t.premultipliedAlpha??!0,r=t.antialias&&!this._renderer.backBuffer.useBackBuffer;this.createContext(t.preferWebGLVersion,{alpha:e,premultipliedAlpha:n,antialias:r,stencil:!0,preserveDrawingBuffer:t.preserveDrawingBuffer,powerPreference:t.powerPreference??`default`})}}ensureCanvasSize(e){if(!this.multiView){e!==this.canvas&&O(`multiView is disabled, but targetCanvas is not the main canvas`);return}let{canvas:t}=this;(t.width<e.width||t.height<e.height)&&(t.width=Math.max(e.width,e.width),t.height=Math.max(e.height,e.height))}initFromContext(e){this.gl=e,this.webGLVersion=e instanceof b.get().getWebGLRenderingContext()?1:2,this.getExtensions(),this.validateContext(e),this._renderer.runners.contextChange.emit(e);let t=this._renderer.view.canvas;t.addEventListener(`webglcontextlost`,this.handleContextLost,!1),t.addEventListener(`webglcontextrestored`,this.handleContextRestored,!1)}createContext(e,t){let n,r=this.canvas;if(e===2&&(n=r.getContext(`webgl2`,t)),!n&&(n=r.getContext(`webgl`,t),!n))throw Error(`This browser does not support WebGL. Try using the canvas renderer`);this.gl=n,this.initFromContext(this.gl)}getExtensions(){let{gl:e}=this,t={anisotropicFiltering:e.getExtension(`EXT_texture_filter_anisotropic`),floatTextureLinear:e.getExtension(`OES_texture_float_linear`),s3tc:e.getExtension(`WEBGL_compressed_texture_s3tc`),s3tc_sRGB:e.getExtension(`WEBGL_compressed_texture_s3tc_srgb`),etc:e.getExtension(`WEBGL_compressed_texture_etc`),etc1:e.getExtension(`WEBGL_compressed_texture_etc1`),pvrtc:e.getExtension(`WEBGL_compressed_texture_pvrtc`)||e.getExtension(`WEBKIT_WEBGL_compressed_texture_pvrtc`),atc:e.getExtension(`WEBGL_compressed_texture_atc`),astc:e.getExtension(`WEBGL_compressed_texture_astc`),bptc:e.getExtension(`EXT_texture_compression_bptc`),rgtc:e.getExtension(`EXT_texture_compression_rgtc`),loseContext:e.getExtension(`WEBGL_lose_context`)};if(this.webGLVersion===1)this.extensions={...t,drawBuffers:e.getExtension(`WEBGL_draw_buffers`),depthTexture:e.getExtension(`WEBGL_depth_texture`),vertexArrayObject:e.getExtension(`OES_vertex_array_object`)||e.getExtension(`MOZ_OES_vertex_array_object`)||e.getExtension(`WEBKIT_OES_vertex_array_object`),uint32ElementIndex:e.getExtension(`OES_element_index_uint`),floatTexture:e.getExtension(`OES_texture_float`),floatTextureLinear:e.getExtension(`OES_texture_float_linear`),textureHalfFloat:e.getExtension(`OES_texture_half_float`),textureHalfFloatLinear:e.getExtension(`OES_texture_half_float_linear`),vertexAttribDivisorANGLE:e.getExtension(`ANGLE_instanced_arrays`),srgb:e.getExtension(`EXT_sRGB`)};else{this.extensions={...t,colorBufferFloat:e.getExtension(`EXT_color_buffer_float`)};let n=e.getExtension(`WEBGL_provoking_vertex`);n&&n.provokingVertexWEBGL(n.FIRST_VERTEX_CONVENTION_WEBGL)}}handleContextLost(e){e.preventDefault(),this._contextLossForced&&(this._contextLossForced=!1,setTimeout(()=>{this.gl.isContextLost()&&this.extensions.loseContext?.restoreContext()},0))}handleContextRestored(){this.getExtensions(),this._renderer.runners.contextChange.emit(this.gl)}destroy(){let e=this._renderer.view.canvas;this._renderer=null,e.removeEventListener(`webglcontextlost`,this.handleContextLost),e.removeEventListener(`webglcontextrestored`,this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext?.loseContext()}forceContextLoss(){this.extensions.loseContext?.loseContext(),this._contextLossForced=!0}validateContext(e){let t=e.getContextAttributes();t&&!t.stencil&&O(`Provided WebGL context does not have a stencil buffer, masks may not render correctly`);let n=this.supports,r=this.webGLVersion===2,i=this.extensions;n.uint32Indices=r||!!i.uint32ElementIndex,n.uniformBufferObject=r,n.vertexArrayObject=r||!!i.vertexArrayObject,n.srgbTextures=r||!!i.srgb,n.nonPowOf2wrapping=r,n.nonPowOf2mipmaps=r,n.msaa=r,n.uint32Indices||O(`Provided WebGL context does not support 32 index buffer, large scenes may not render correctly`)}};qc.extension={type:[i.WebGLSystem],name:`context`},qc.defaultOptions={context:null,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:void 0,preferWebGLVersion:2,multiView:!1};var Jc=qc,Yc=(e=>(e[e.RGBA=6408]=`RGBA`,e[e.RGB=6407]=`RGB`,e[e.RG=33319]=`RG`,e[e.RED=6403]=`RED`,e[e.RGBA_INTEGER=36249]=`RGBA_INTEGER`,e[e.RGB_INTEGER=36248]=`RGB_INTEGER`,e[e.RG_INTEGER=33320]=`RG_INTEGER`,e[e.RED_INTEGER=36244]=`RED_INTEGER`,e[e.ALPHA=6406]=`ALPHA`,e[e.LUMINANCE=6409]=`LUMINANCE`,e[e.LUMINANCE_ALPHA=6410]=`LUMINANCE_ALPHA`,e[e.DEPTH_COMPONENT=6402]=`DEPTH_COMPONENT`,e[e.DEPTH_STENCIL=34041]=`DEPTH_STENCIL`,e))(Yc||{}),Xc=(e=>(e[e.TEXTURE_2D=3553]=`TEXTURE_2D`,e[e.TEXTURE_CUBE_MAP=34067]=`TEXTURE_CUBE_MAP`,e[e.TEXTURE_2D_ARRAY=35866]=`TEXTURE_2D_ARRAY`,e[e.TEXTURE_3D=32879]=`TEXTURE_3D`,e[e.TEXTURE_CUBE_MAP_POSITIVE_X=34069]=`TEXTURE_CUBE_MAP_POSITIVE_X`,e[e.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]=`TEXTURE_CUBE_MAP_NEGATIVE_X`,e[e.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]=`TEXTURE_CUBE_MAP_POSITIVE_Y`,e[e.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]=`TEXTURE_CUBE_MAP_NEGATIVE_Y`,e[e.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]=`TEXTURE_CUBE_MAP_POSITIVE_Z`,e[e.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]=`TEXTURE_CUBE_MAP_NEGATIVE_Z`,e))(Xc||{}),Q=(e=>(e[e.UNSIGNED_BYTE=5121]=`UNSIGNED_BYTE`,e[e.UNSIGNED_SHORT=5123]=`UNSIGNED_SHORT`,e[e.UNSIGNED_SHORT_5_6_5=33635]=`UNSIGNED_SHORT_5_6_5`,e[e.UNSIGNED_SHORT_4_4_4_4=32819]=`UNSIGNED_SHORT_4_4_4_4`,e[e.UNSIGNED_SHORT_5_5_5_1=32820]=`UNSIGNED_SHORT_5_5_5_1`,e[e.UNSIGNED_INT=5125]=`UNSIGNED_INT`,e[e.UNSIGNED_INT_10F_11F_11F_REV=35899]=`UNSIGNED_INT_10F_11F_11F_REV`,e[e.UNSIGNED_INT_2_10_10_10_REV=33640]=`UNSIGNED_INT_2_10_10_10_REV`,e[e.UNSIGNED_INT_24_8=34042]=`UNSIGNED_INT_24_8`,e[e.UNSIGNED_INT_5_9_9_9_REV=35902]=`UNSIGNED_INT_5_9_9_9_REV`,e[e.BYTE=5120]=`BYTE`,e[e.SHORT=5122]=`SHORT`,e[e.INT=5124]=`INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]=`FLOAT_32_UNSIGNED_INT_24_8_REV`,e[e.HALF_FLOAT=36193]=`HALF_FLOAT`,e))(Q||{}),Zc={uint8x2:Q.UNSIGNED_BYTE,uint8x4:Q.UNSIGNED_BYTE,sint8x2:Q.BYTE,sint8x4:Q.BYTE,unorm8x2:Q.UNSIGNED_BYTE,unorm8x4:Q.UNSIGNED_BYTE,snorm8x2:Q.BYTE,snorm8x4:Q.BYTE,uint16x2:Q.UNSIGNED_SHORT,uint16x4:Q.UNSIGNED_SHORT,sint16x2:Q.SHORT,sint16x4:Q.SHORT,unorm16x2:Q.UNSIGNED_SHORT,unorm16x4:Q.UNSIGNED_SHORT,snorm16x2:Q.SHORT,snorm16x4:Q.SHORT,float16x2:Q.HALF_FLOAT,float16x4:Q.HALF_FLOAT,float32:Q.FLOAT,float32x2:Q.FLOAT,float32x3:Q.FLOAT,float32x4:Q.FLOAT,uint32:Q.UNSIGNED_INT,uint32x2:Q.UNSIGNED_INT,uint32x3:Q.UNSIGNED_INT,uint32x4:Q.UNSIGNED_INT,sint32:Q.INT,sint32x2:Q.INT,sint32x3:Q.INT,sint32x4:Q.INT};function Qc(e){return Zc[e]??Zc.float32}var $c={"point-list":0,"line-list":1,"line-strip":3,"triangle-list":4,"triangle-strip":5},el=class{constructor(){this.vaoCache=Object.create(null)}destroy(){this.vaoCache=Object.create(null)}},tl=class{constructor(e){this._renderer=e,this._activeGeometry=null,this._activeVao=null,this.hasVao=!0,this.hasInstance=!0,this._managedGeometries=new G({renderer:e,type:`resource`,onUnload:this.onGeometryUnload.bind(this),name:`glGeometry`})}contextChange(){let e=this.gl=this._renderer.gl;if(!this._renderer.context.supports.vertexArrayObject)throw Error(`[PixiJS] Vertex Array Objects are not supported on this device`);this.destroyAll(!0);let t=this._renderer.context.extensions.vertexArrayObject;t&&(e.createVertexArray=()=>t.createVertexArrayOES(),e.bindVertexArray=e=>t.bindVertexArrayOES(e),e.deleteVertexArray=e=>t.deleteVertexArrayOES(e));let n=this._renderer.context.extensions.vertexAttribDivisorANGLE;n&&(e.drawArraysInstanced=(e,t,r,i)=>{n.drawArraysInstancedANGLE(e,t,r,i)},e.drawElementsInstanced=(e,t,r,i,a)=>{n.drawElementsInstancedANGLE(e,t,r,i,a)},e.vertexAttribDivisor=(e,t)=>n.vertexAttribDivisorANGLE(e,t)),this._activeGeometry=null,this._activeVao=null}bind(e,t){let n=this.gl;this._activeGeometry=e;let r=this.getVao(e,t);this._activeVao!==r&&(this._activeVao=r,n.bindVertexArray(r)),this.updateBuffers()}resetState(){this.unbind()}updateBuffers(){let e=this._activeGeometry,t=this._renderer.buffer;for(let n=0;n<e.buffers.length;n++){let r=e.buffers[n];t.updateBuffer(r)}e._gcLastUsed=this._renderer.gc.now}checkCompatibility(e,t){let n=e.attributes,r=t._attributeData;for(let e in r)if(!n[e])throw Error(`shader and geometry incompatible, geometry missing the "${e}" attribute`)}getSignature(e,t){let n=e.attributes,r=t._attributeData,i=[`g`,e.uid];for(let e in n)r[e]&&i.push(e,r[e].location);return i.join(`-`)}getVao(e,t){return e._gpuData[this._renderer.uid]?.vaoCache[t._key]||this.initGeometryVao(e,t)}initGeometryVao(e,t,n=!0){let r=this._renderer.gl,i=this._renderer.buffer;this._renderer.shader._getProgramData(t),this.checkCompatibility(e,t);let a=this.getSignature(e,t),o=e._gpuData[this._renderer.uid];o||(o=new el,e._gpuData[this._renderer.uid]=o,this._managedGeometries.add(e));let s=o.vaoCache,c=s[a];if(c)return s[t._key]=c,c;tt(e,t._attributeData);let l=e.buffers;c=r.createVertexArray(),r.bindVertexArray(c);for(let e=0;e<l.length;e++){let t=l[e];i.bind(t)}return this.activateVao(e,t),s[t._key]=c,s[a]=c,r.bindVertexArray(null),c}onGeometryUnload(e,t=!1){let n=e._gpuData[this._renderer.uid];if(!n)return;let r=n.vaoCache;if(!t)for(let e in r)this._activeVao===r[e]&&this.resetState(),this.gl.deleteVertexArray(r[e])}destroyAll(e=!1){this._managedGeometries.removeAll(e)}activateVao(e,t){let n=this._renderer.gl,r=this._renderer.buffer,i=e.attributes;e.indexBuffer&&r.bind(e.indexBuffer);let a=null;for(let e in i){let o=i[e],s=o.buffer,c=r.getGlBuffer(s),l=t._attributeData[e];if(l){a!==c&&(r.bind(s),a=c);let e=l.location;n.enableVertexAttribArray(e);let t=v(o.format),i=Qc(o.format);if(l.format?.substring(1,4)===`int`?n.vertexAttribIPointer(e,t.size,i,o.stride,o.offset):n.vertexAttribPointer(e,t.size,i,t.normalised,o.stride,o.offset),o.instance){if(this.hasInstance){let t=o.divisor??1;n.vertexAttribDivisor(e,t)}else throw Error(`geometry error, GPU Instancing is not supported on this device`)}}}}draw(e,t,n,r){let{gl:i}=this._renderer,a=this._activeGeometry,o=$c[e||a.topology];if(r??=a.instanceCount,a.indexBuffer){let e=a.indexBuffer.data.BYTES_PER_ELEMENT,s=e===2?i.UNSIGNED_SHORT:i.UNSIGNED_INT,c=t||a.indexCount||a.indexBuffer.data.length,l=(n||0)*e;r===1?i.drawElements(o,c,s,l):i.drawElementsInstanced(o,c,s,l,r)}else r===1?i.drawArrays(o,n||0,t||a.vertexCount):i.drawArraysInstanced(o,n||0,t||a.vertexCount,r);return this}unbind(){this.gl.bindVertexArray(null),this._activeVao=null,this._activeGeometry=null}destroy(){this._managedGeometries.destroy(),this._renderer=null,this.gl=null,this._activeVao=null,this._activeGeometry=null}};tl.extension={type:[i.WebGLSystem],name:`geometry`};var nl=new w({attributes:{aPosition:[-1,-1,3,-1,-1,3]}}),rl=class e{constructor(e){this.useBackBuffer=!1,this._useBackBufferThisRender=!1,this._renderer=e}init(t={}){let{useBackBuffer:n,antialias:r}={...e.defaultOptions,...t};this.useBackBuffer=n,this._antialias=r,this._renderer.context.supports.msaa||(O(`antialiasing, is not supported on when using the back buffer`),this._antialias=!1),this._state=L.for2d();let i=new y({vertex:`
|
|
233
|
+
attribute vec2 aPosition;
|
|
234
|
+
out vec2 vUv;
|
|
235
|
+
|
|
236
|
+
void main() {
|
|
237
|
+
gl_Position = vec4(aPosition, 0.0, 1.0);
|
|
238
|
+
|
|
239
|
+
vUv = (aPosition + 1.0) / 2.0;
|
|
240
|
+
|
|
241
|
+
// flip dem UVs
|
|
242
|
+
vUv.y = 1.0 - vUv.y;
|
|
243
|
+
}`,fragment:`
|
|
244
|
+
in vec2 vUv;
|
|
245
|
+
out vec4 finalColor;
|
|
246
|
+
|
|
247
|
+
uniform sampler2D uTexture;
|
|
248
|
+
|
|
249
|
+
void main() {
|
|
250
|
+
finalColor = texture(uTexture, vUv);
|
|
251
|
+
}`,name:`big-triangle`});this._bigTriangleShader=new g({glProgram:i,resources:{uTexture:D.WHITE.source}})}renderStart(e){let t=this._renderer.renderTarget.getRenderTarget(e.target);if(this._useBackBufferThisRender=this.useBackBuffer&&!!t.isRoot,this._useBackBufferThisRender){let t=this._renderer.renderTarget.getRenderTarget(e.target);this._targetTexture=t.colorTexture,e.target=this._getBackBufferTexture(t.colorTexture)}}renderEnd(){this._presentBackBuffer()}_presentBackBuffer(){let e=this._renderer;e.renderTarget.finishRenderPass(),this._useBackBufferThisRender&&(e.renderTarget.bind({target:this._targetTexture,clear:!1}),this._bigTriangleShader.resources.uTexture=this._backBufferTexture.source,e.encoder.draw({geometry:nl,shader:this._bigTriangleShader,state:this._state}))}_getBackBufferTexture(e){return this._backBufferTexture=this._backBufferTexture||new D({source:new n({width:e.width,height:e.height,resolution:e._resolution,antialias:this._antialias})}),this._backBufferTexture.source.resize(e.width,e.height,e._resolution),this._backBufferTexture}destroy(){this._backBufferTexture&&=(this._backBufferTexture.destroy(),null)}};rl.extension={type:[i.WebGLSystem],name:`backBuffer`,priority:1},rl.defaultOptions={useBackBuffer:!1};var il=rl,al=class{constructor(e){this._colorMaskCache=15,this._renderer=e}setMask(e){this._colorMaskCache!==e&&(this._colorMaskCache=e,this._renderer.gl.colorMask(!!(e&8),!!(e&4),!!(e&2),!!(e&1)))}};al.extension={type:[i.WebGLSystem],name:`colorMask`};var ol=class{constructor(e){this.commandFinished=Promise.resolve(),this._renderer=e}setGeometry(e,t){this._renderer.geometry.bind(e,t.glProgram)}finishRenderPass(){}draw(e){let t=this._renderer,{geometry:n,shader:r,state:i,skipSync:a,topology:o,size:s,start:c,instanceCount:l}=e;t.shader.bind(r,a),t.geometry.bind(n,t.shader._activeProgram),i&&t.state.set(i),t.geometry.draw(o,s,c,l??n.instanceCount)}destroy(){this._renderer=null}};ol.extension={type:[i.WebGLSystem],name:`encoder`};var sl=class{constructor(e){this._renderer=e}contextChange(){let e=this._renderer.gl;this.maxTextures=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),this.maxBatchableTextures=Be(this.maxTextures,e);let t=this._renderer.context.webGLVersion===2;this.maxUniformBindings=t?e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS):0}destroy(){}};sl.extension={type:[i.WebGLSystem],name:`limits`};var cl=class{constructor(){this.width=-1,this.height=-1,this.msaa=!1,this._attachedMipLevel=0,this._attachedLayer=0,this.msaaRenderBuffer=[],this.stencilMode=We.DISABLED,this.stencilReference=0,this.maskStackIndex=0}},ll=class{constructor(e){this._stencilCache={enabled:!1,stencilReference:0,stencilMode:We.NONE},this._renderer=e,e.renderTarget.onRenderTargetChange.add(this)}contextChange(e){this._gl=e,this._comparisonFuncMapping={always:e.ALWAYS,never:e.NEVER,equal:e.EQUAL,"not-equal":e.NOTEQUAL,less:e.LESS,"less-equal":e.LEQUAL,greater:e.GREATER,"greater-equal":e.GEQUAL},this._stencilOpsMapping={keep:e.KEEP,zero:e.ZERO,replace:e.REPLACE,invert:e.INVERT,"increment-clamp":e.INCR,"decrement-clamp":e.DECR,"increment-wrap":e.INCR_WRAP,"decrement-wrap":e.DECR_WRAP},this._activeGpuRenderTarget=null,this.resetState()}onRenderTargetChange(e){if(this._activeRenderTarget===e)return;this._activeRenderTarget=e;let t=this._renderer.renderTarget.getGpuRenderTarget(e);this._activeGpuRenderTarget=t,this.setStencilMode(t.stencilMode,t.stencilReference)}resetState(){this._stencilCache.enabled=!1,this._stencilCache.stencilMode=We.NONE,this._stencilCache.stencilReference=0}setStencilMode(e,t){let n=this._activeGpuRenderTarget??=this._renderer.renderTarget.getGpuRenderTarget(this._activeRenderTarget),r=this._gl,i=Ze[e],a=this._stencilCache;n.stencilMode=e,n.stencilReference=t,e===We.DISABLED?this._stencilCache.enabled&&(this._stencilCache.enabled=!1,r.disable(r.STENCIL_TEST)):(this._stencilCache.enabled||(this._stencilCache.enabled=!0,r.enable(r.STENCIL_TEST)),(e!==a.stencilMode||a.stencilReference!==t)&&(a.stencilMode=e,a.stencilReference=t,r.stencilFunc(this._comparisonFuncMapping[i.stencilBack.compare],t,255),r.stencilOp(r.KEEP,r.KEEP,this._stencilOpsMapping[i.stencilBack.passOp])))}destroy(){this._renderer.renderTarget.onRenderTargetChange.remove(this),this._renderer=null,this._gl=null,this._activeRenderTarget=null,this._activeGpuRenderTarget=null}};ll.extension={type:[i.WebGLSystem],name:`stencil`};var ul={f32:4,i32:4,"vec2<f32>":8,"vec3<f32>":12,"vec4<f32>":16,"vec2<i32>":8,"vec3<i32>":12,"vec4<i32>":16,u32:4,"vec2<u32>":8,"vec3<u32>":12,"vec4<u32>":16,"mat2x2<f32>":32,"mat3x3<f32>":48,"mat4x4<f32>":64};function dl(e){let t=e.map(e=>({data:e,offset:0,size:0})),n=0,r=0;for(let e=0;e<t.length;e++){let i=t[e];if(n=ul[i.data.type],!n)throw Error(`Unknown type ${i.data.type}`);i.data.size>1&&(n=Math.max(n,16)*i.data.size);let a=n===12?16:n;i.size=n;let o=r%16;o>0&&16-o<a?r+=(16-o)%16:r+=(n-o%n)%n,i.offset=r,r+=n}return r=Math.ceil(r/16)*16,{uboElements:t,size:r}}function fl(e,t){let n=Math.max(ul[e.data.type]/16,1),r=e.data.value.length/e.data.size,i=(4-r%4)%4,a=e.data.type.indexOf(`i32`)>=0?`dataInt32`:`data`;return`
|
|
252
|
+
v = uv.${e.data.name};
|
|
253
|
+
offset += ${t};
|
|
254
|
+
|
|
255
|
+
arrayOffset = offset;
|
|
256
|
+
|
|
257
|
+
t = 0;
|
|
258
|
+
|
|
259
|
+
for(var i=0; i < ${e.data.size*n}; i++)
|
|
260
|
+
{
|
|
261
|
+
for(var j = 0; j < ${r}; j++)
|
|
262
|
+
{
|
|
263
|
+
${a}[arrayOffset++] = v[t++];
|
|
264
|
+
}
|
|
265
|
+
${i===0?``:`arrayOffset += ${i};`}
|
|
266
|
+
}
|
|
267
|
+
`}function pl(e){return Xe(e,ot,fl)}var ml=class extends st{constructor(){super({createUboElements:dl,generateUboSync:pl})}};ml.extension={type:[i.WebGLSystem],name:`ubo`};var hl=class{constructor(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new d,this._boundFramebuffer=void 0}init(e,t){this._renderer=e,this._renderTargetSystem=t,e.runners.contextChange.add(this)}contextChange(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new d,this._boundFramebuffer=void 0;let e=this._renderer.gl;this._drawBuffersCache=[];for(let t=1;t<=16;t++)this._drawBuffersCache[t]=Array.from({length:t},(t,n)=>e.COLOR_ATTACHMENT0+n)}copyToTexture(e,t,n,r,i){let a=this._renderTargetSystem,o=this._renderer,s=a.getGpuRenderTarget(e),c=o.gl;return this.finishRenderPass(e),c.bindFramebuffer(c.FRAMEBUFFER,s.resolveTargetFramebuffer),this._boundFramebuffer=s.resolveTargetFramebuffer,o.texture.bind(t,0),c.copyTexSubImage2D(c.TEXTURE_2D,0,i.x,i.y,n.x,n.y,r.width,r.height),t}copyDepthTexture(e,t,n,r,i){let a=this._renderTargetSystem,o=this._renderer.gl;this.finishRenderPass(e);let s=a.getRenderTarget(t),c=a.getGpuRenderTarget(e),l=a.getGpuRenderTarget(s);o.bindFramebuffer(o.READ_FRAMEBUFFER,c.framebuffer),o.bindFramebuffer(o.DRAW_FRAMEBUFFER,l.framebuffer),this._boundFramebuffer=void 0,o.blitFramebuffer(n.x,n.y,n.x+r.width,n.y+r.height,i.x,i.y,i.x+r.width,i.y+r.height,o.DEPTH_BUFFER_BIT,o.NEAREST)}startRenderPass(e,t=!0,n,r,i=0,a=0){let o=this._renderTargetSystem.getGpuRenderTarget(e);if(a!==0&&this._renderer.context.webGLVersion<2)throw Error(`[RenderTargetSystem] Rendering to array layers requires WebGL2.`);if(i>0){if(o.msaa)throw Error(`[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.`);if(this._renderer.context.webGLVersion<2)throw Error(`[RenderTargetSystem] Rendering to mip levels requires WebGL2.`)}e.colorAttachments.forEach(e=>{this._renderer.texture.unbind(e.texture)});let s=this._renderer.gl;this.bindFramebuffer(o.framebuffer),!e.isRoot&&e.colorAttachments.length>0&&(o._attachedMipLevel!==i||o._attachedLayer!==a)&&(e.colorAttachments.forEach((e,t)=>{let n=e.texture,r=this._renderer.texture.getGlSource(n);if(r.target===s.TEXTURE_2D){if(a!==0)throw Error(`[RenderTargetSystem] layer must be 0 when rendering to 2D textures in WebGL.`);s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+t,s.TEXTURE_2D,r.texture,i)}else if(r.target===s.TEXTURE_2D_ARRAY||r.target===s.TEXTURE_3D)s.framebufferTextureLayer(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+t,r.texture,i,a);else if(r.target===s.TEXTURE_CUBE_MAP){if(a<0||a>5)throw Error(`[RenderTargetSystem] Cube map layer must be between 0 and 5.`);s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0+t,s.TEXTURE_CUBE_MAP_POSITIVE_X+a,r.texture,i)}else throw Error(`[RenderTargetSystem] Unsupported texture target for render-to-layer in WebGL.`)}),o._attachedMipLevel=i,o._attachedLayer=a),o.framebuffer&&(e.depthStencilAttachment?this._attachDepthStencilTexture(e,i,a):!o.depthStencilRenderBuffer&&(e.stencil||e.depth)&&this._initStencil(o)),e.colorAttachments.length>1&&this._setDrawBuffers(e,s);let c=r.y;e.isRoot&&(c=e.pixelHeight-r.height-r.y);let l=this._viewPortCache;(l.x!==r.x||l.y!==c||l.width!==r.width||l.height!==r.height)&&(l.x=r.x,l.y=c,l.width=r.width,l.height=r.height,s.viewport(r.x,c,r.width,r.height)),this.clear(e,t,n)}finishRenderPass(e){let t=this._renderTargetSystem.getGpuRenderTarget(e);if(!t.msaa||e.colorAttachments.length===0)return;let n=this._renderer.gl;n.bindFramebuffer(n.FRAMEBUFFER,t.resolveTargetFramebuffer),n.bindFramebuffer(n.READ_FRAMEBUFFER,t.framebuffer),n.blitFramebuffer(0,0,t.width,t.height,0,0,t.width,t.height,n.COLOR_BUFFER_BIT,n.NEAREST),n.bindFramebuffer(n.FRAMEBUFFER,t.framebuffer),this._boundFramebuffer=t.framebuffer}initGpuRenderTarget(e){let t=this._renderer.gl,n=new cl;n._attachedMipLevel=0,n._attachedLayer=0;let r=e.colorTexture;return r instanceof I?(this._renderer.context.ensureCanvasSize(r.resource),n.framebuffer=null,n):(n.width=e.pixelWidth,n.height=e.pixelHeight,e.colorAttachments.length===0?this._initDepth(e,n):this._initColor(e,n),e.depthStencilAttachment&&this._attachDepthStencilTexture(e,0,0),t.bindFramebuffer(t.FRAMEBUFFER,null),this._boundFramebuffer=null,n)}destroyGpuRenderTarget(e){let t=this._renderer.gl;e.framebuffer&&=(t.deleteFramebuffer(e.framebuffer),null),e.resolveTargetFramebuffer&&=(t.deleteFramebuffer(e.resolveTargetFramebuffer),null),e.depthStencilRenderBuffer&&=(t.deleteRenderbuffer(e.depthStencilRenderBuffer),null),e.msaaRenderBuffer.forEach(e=>{t.deleteRenderbuffer(e)}),e.msaaRenderBuffer.length=0}clear(e,t,n,r,i=0,a=0){if(!t)return;if(a!==0)throw Error(`[RenderTargetSystem] Clearing array layers is not supported in WebGL renderer.`);let o=this._renderTargetSystem;if(typeof t==`boolean`&&(t=t?U.ALL:U.NONE),e.colorAttachments.length===0&&(t&=~U.COLOR,!t))return;let s=this._renderer.gl,c=!!(t&U.DEPTH)&&!this._renderer.state.depthMaskEnabled;if(t&U.COLOR){n??=o.defaultClearColor;let e=this._clearColorCache,t=n;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],s.clearColor(t[0],t[1],t[2],t[3]))}c&&s.depthMask(!0),s.clear(t),c&&s.depthMask(!1)}resizeGpuRenderTarget(e){if(e.isRoot)return;let t=this._renderTargetSystem.getGpuRenderTarget(e);t.width=e.pixelWidth,t.height=e.pixelHeight,e.colorAttachments.length>0&&this._resizeColor(e,t),t.depthStencilRenderBuffer&&this._resizeStencil(t),this._boundFramebuffer=void 0}_initColor(e,t){let n=this._renderer,r=n.gl,i=r.createFramebuffer();if(t.resolveTargetFramebuffer=i,r.bindFramebuffer(r.FRAMEBUFFER,i),e.colorAttachments.forEach((e,i)=>{let a=e.texture;a.antialias&&(n.context.supports.msaa?t.msaa=!0:O(`[RenderTexture] Antialiasing on textures is not supported in WebGL1`)),n.texture.bindSource(a,0);let o=n.texture.getGlSource(a),s=o.texture;if(o.target===r.TEXTURE_2D)r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+i,r.TEXTURE_2D,s,0);else if(o.target===r.TEXTURE_2D_ARRAY||o.target===r.TEXTURE_3D)r.framebufferTextureLayer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+i,s,0,0);else if(o.target===r.TEXTURE_CUBE_MAP)r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+i,r.TEXTURE_CUBE_MAP_POSITIVE_X,s,0);else throw Error(`[RenderTargetSystem] Unsupported texture target for framebuffer attachment.`)}),t.msaa){let n=r.createFramebuffer();t.framebuffer=n,r.bindFramebuffer(r.FRAMEBUFFER,n),e.colorAttachments.forEach((e,n)=>{let i=r.createRenderbuffer();t.msaaRenderBuffer[n]=i})}else t.framebuffer=i;this._resizeColor(e,t)}_initDepth(e,t){let n=this._renderer;if(n.context.webGLVersion<2)throw Error(`[RenderTargetSystem] Depth-only render targets require WebGL2.`);let r=n.gl,i=r.createFramebuffer();t.resolveTargetFramebuffer=i,t.framebuffer=i,r.bindFramebuffer(r.FRAMEBUFFER,i),r.drawBuffers([r.NONE]),r.readBuffer(r.NONE)}_resizeColor(e,t){let n=e.colorAttachments[0].texture;if(t._attachedMipLevel=0,t._attachedLayer=0,e.colorAttachments.forEach((e,t)=>{t!==0&&e.texture.resize(n.width,n.height,n._resolution)}),t.msaa){let n=this._renderer,r=n.gl,i=t.framebuffer;r.bindFramebuffer(r.FRAMEBUFFER,i),e.colorAttachments.forEach((e,i)=>{let a=e.texture;n.texture.bindSource(a,0);let o=n.texture.getGlSource(a).internalFormat,s=t.msaaRenderBuffer[i];r.bindRenderbuffer(r.RENDERBUFFER,s),r.renderbufferStorageMultisample(r.RENDERBUFFER,4,o,a.pixelWidth,a.pixelHeight),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+i,r.RENDERBUFFER,s)})}}_attachDepthStencilTexture(e,t,n){let r=this._renderer,i=r.gl,a=e.depthStencilAttachment.texture,o=r.texture.getGlSource(a),s=o.texture,c=a.format,l;l=c===`depth24plus-stencil8`||c===`depth32float-stencil8`?i.DEPTH_STENCIL_ATTACHMENT:c===`stencil8`?i.STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,o.target===i.TEXTURE_2D?i.framebufferTexture2D(i.FRAMEBUFFER,l,i.TEXTURE_2D,s,t):o.target===i.TEXTURE_2D_ARRAY||o.target===i.TEXTURE_3D?i.framebufferTextureLayer(i.FRAMEBUFFER,l,s,t,n):o.target===i.TEXTURE_CUBE_MAP&&i.framebufferTexture2D(i.FRAMEBUFFER,l,i.TEXTURE_CUBE_MAP_POSITIVE_X+n,s,t)}_initStencil(e){if(e.framebuffer===null)return;let t=this._renderer.gl,n=t.createRenderbuffer();e.depthStencilRenderBuffer=n,t.bindRenderbuffer(t.RENDERBUFFER,n),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,n),this._resizeStencil(e)}_resizeStencil(e){let t=this._renderer.gl;t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilRenderBuffer),e.msaa?t.renderbufferStorageMultisample(t.RENDERBUFFER,4,t.DEPTH24_STENCIL8,e.width,e.height):t.renderbufferStorage(t.RENDERBUFFER,this._renderer.context.webGLVersion===2?t.DEPTH24_STENCIL8:t.DEPTH_STENCIL,e.width,e.height)}prerender(e){if(e.colorAttachments.length===0)return;let t=e.colorAttachments[0].texture.resource;this._renderer.context.multiView&&I.test(t)&&this._renderer.context.ensureCanvasSize(t)}postrender(e){if(!this._renderer.context.multiView||e.colorAttachments.length===0)return;let t=e.colorAttachments[0].texture;if(I.test(t.resource)){let e=this._renderer.context.canvas,n=t;n.context2D.drawImage(e,0,n.pixelHeight-e.height)}}_setDrawBuffers(e,t){let n=e.colorAttachments.length,r=this._drawBuffersCache[n];if(this._renderer.context.webGLVersion===1){let e=this._renderer.context.extensions.drawBuffers;e?e.drawBuffersWEBGL(r):O(`[RenderTexture] This WebGL1 context does not support rendering to multiple targets`)}else t.drawBuffers(r)}resetState(){this._boundFramebuffer=void 0,this._viewPortCache=new d,this._clearColorCache=[0,0,0,0]}bindFramebuffer(e){this._boundFramebuffer!==e&&(this._boundFramebuffer=e,this._renderer.gl.bindFramebuffer(this._renderer.gl.FRAMEBUFFER,e))}},gl=class extends Te{constructor(e){super(e),this.adaptor=new hl,this.adaptor.init(e,this)}resetState(){this.adaptor.resetState()}};gl.extension={type:[i.WebGLSystem],name:`renderTarget`};var _l=class extends m{constructor(e,t){super(),this._resourceType=`textureView`,this._resourceId=o(`resource`),this.source=e,this.viewDescriptor=t,this._onChange=this._onChange.bind(this),this._onDestroy=this._onDestroy.bind(this),this.source.on(`change`,this._onChange),this.source.on(`destroy`,this._onDestroy)}_onChange(){this.emit(`change`,this)}_onDestroy(){this.destroy()}get destroyed(){return this.source.destroyed}destroy(){this.source&&(this.source.off(`change`,this._onChange),this.source.off(`destroy`,this._onDestroy)),this.emit(`destroy`,this),this.removeAllListeners()}};function vl(e,t){let r=[],i=[`
|
|
268
|
+
var g = s.groups;
|
|
269
|
+
var sS = r.shader;
|
|
270
|
+
var p = s.glProgram;
|
|
271
|
+
var ugS = r.uniformGroup;
|
|
272
|
+
var resources;
|
|
273
|
+
`],a=!1,o=0,s=t._getProgramData(e.glProgram);for(let c in e.groups){let l=e.groups[c];r.push(`
|
|
274
|
+
resources = g[${c}].resources;
|
|
275
|
+
`);for(let u in l.resources){let d=l.resources[u];if(d instanceof C){if(d.ubo){let t=e._uniformBindMap[c][Number(u)];r.push(`
|
|
276
|
+
sS.bindUniformBlock(
|
|
277
|
+
resources[${u}],
|
|
278
|
+
'${t}',
|
|
279
|
+
${e.glProgram._uniformBlockData[t].index}
|
|
280
|
+
);
|
|
281
|
+
`)}else r.push(`
|
|
282
|
+
ugS.updateUniformGroup(resources[${u}], p, sD);
|
|
283
|
+
`)}else if(d instanceof rt){let t=e._uniformBindMap[c][Number(u)];r.push(`
|
|
284
|
+
sS.bindUniformBlock(
|
|
285
|
+
resources[${u}],
|
|
286
|
+
'${t}',
|
|
287
|
+
${e.glProgram._uniformBlockData[t].index}
|
|
288
|
+
);
|
|
289
|
+
`)}else if(d instanceof n||d instanceof _l){let n=e._uniformBindMap[c][u],l=s.uniformData[n];l&&(a||(a=!0,i.push(`
|
|
290
|
+
var tS = r.texture;
|
|
291
|
+
`)),t._gl.uniform1i(l.location,o),r.push(`
|
|
292
|
+
tS.bind(resources[${u}], ${o});
|
|
293
|
+
`),o++)}}}let c=[...i,...r].join(`
|
|
294
|
+
`);return Function(`r`,`s`,`sD`,c)}var yl=class{constructor(e,t){this.program=e,this.uniformData=t,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBlockBindings={}}destroy(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBlockBindings=null,this.program=null}};function bl(e,t,n){let r=e.createShader(t);return e.shaderSource(r,n),e.compileShader(r),r}function xl(e){let t=Array(e);for(let e=0;e<t.length;e++)t[e]=!1;return t}function Sl(e,t){switch(e){case`float`:return 0;case`vec2`:return new Float32Array(2*t);case`vec3`:return new Float32Array(3*t);case`vec4`:return new Float32Array(4*t);case`int`:case`uint`:case`sampler2D`:case`sampler2DArray`:case`sampler3D`:return 0;case`ivec2`:return new Int32Array(2*t);case`ivec3`:return new Int32Array(3*t);case`ivec4`:return new Int32Array(4*t);case`uvec2`:return new Uint32Array(2*t);case`uvec3`:return new Uint32Array(3*t);case`uvec4`:return new Uint32Array(4*t);case`bool`:return!1;case`bvec2`:return xl(2*t);case`bvec3`:return xl(3*t);case`bvec4`:return xl(4*t);case`mat2`:return new Float32Array([1,0,0,1]);case`mat3`:return new Float32Array([1,0,0,0,1,0,0,0,1]);case`mat4`:return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}var Cl=null,wl={FLOAT:`float`,FLOAT_VEC2:`vec2`,FLOAT_VEC3:`vec3`,FLOAT_VEC4:`vec4`,INT:`int`,INT_VEC2:`ivec2`,INT_VEC3:`ivec3`,INT_VEC4:`ivec4`,UNSIGNED_INT:`uint`,UNSIGNED_INT_VEC2:`uvec2`,UNSIGNED_INT_VEC3:`uvec3`,UNSIGNED_INT_VEC4:`uvec4`,BOOL:`bool`,BOOL_VEC2:`bvec2`,BOOL_VEC3:`bvec3`,BOOL_VEC4:`bvec4`,FLOAT_MAT2:`mat2`,FLOAT_MAT3:`mat3`,FLOAT_MAT4:`mat4`,SAMPLER_2D:`sampler2D`,INT_SAMPLER_2D:`sampler2D`,UNSIGNED_INT_SAMPLER_2D:`sampler2D`,SAMPLER_2D_SHADOW:`sampler2DShadow`,SAMPLER_CUBE:`samplerCube`,INT_SAMPLER_CUBE:`samplerCube`,UNSIGNED_INT_SAMPLER_CUBE:`samplerCube`,SAMPLER_CUBE_SHADOW:`samplerCubeShadow`,SAMPLER_2D_ARRAY:`sampler2DArray`,INT_SAMPLER_2D_ARRAY:`sampler2DArray`,UNSIGNED_INT_SAMPLER_2D_ARRAY:`sampler2DArray`,SAMPLER_2D_ARRAY_SHADOW:`sampler2DArrayShadow`,SAMPLER_3D:`sampler3D`,INT_SAMPLER_3D:`sampler3D`,UNSIGNED_INT_SAMPLER_3D:`sampler3D`},Tl={float:`float32`,vec2:`float32x2`,vec3:`float32x3`,vec4:`float32x4`,int:`sint32`,ivec2:`sint32x2`,ivec3:`sint32x3`,ivec4:`sint32x4`,uint:`uint32`,uvec2:`uint32x2`,uvec3:`uint32x3`,uvec4:`uint32x4`,bool:`uint32`,bvec2:`uint32x2`,bvec3:`uint32x3`,bvec4:`uint32x4`};function El(e,t){if(!Cl){let t=Object.keys(wl);Cl={};for(let n=0;n<t.length;++n){let r=t[n];Cl[e[r]]=wl[r]}}return Cl[t]}function Dl(e,t){return Tl[El(e,t)]||`float32`}function Ol(e,t,n=!1){let r={},i=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let n=0;n<i;n++){let i=t.getActiveAttrib(e,n);if(i.name.startsWith(`gl_`))continue;let a=Dl(t,i.type);r[i.name]={location:0,format:a,stride:v(a).stride,offset:0,instance:!1,start:0}}let a=Object.keys(r);if(n){a.sort((e,t)=>e>t?1:-1);for(let n=0;n<a.length;n++)r[a[n]].location=n,t.bindAttribLocation(e,n,a[n]);t.linkProgram(e)}else for(let n=0;n<a.length;n++)r[a[n]].location=t.getAttribLocation(e,a[n]);return r}function kl(e,t){if(!t.ACTIVE_UNIFORM_BLOCKS)return{};let n={},r=t.getProgramParameter(e,t.ACTIVE_UNIFORM_BLOCKS);for(let i=0;i<r;i++){let r=t.getActiveUniformBlockName(e,i);n[r]={name:r,index:t.getUniformBlockIndex(e,r),size:t.getActiveUniformBlockParameter(e,i,t.UNIFORM_BLOCK_DATA_SIZE)}}return n}function Al(e,t){let n={},r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let i=0;i<r;i++){let r=t.getActiveUniform(e,i),a=r.name.replace(/\[.*?\]$/,``),o=!!r.name.match(/\[.*?\]$/),s=El(t,r.type);n[a]={name:a,index:i,type:s,size:r.size,isArray:o,value:Sl(s,r.size)}}return n}function jl(e,t){let n=e.getShaderSource(t);if(n===null){console.error(`PixiJS Error: Could not retrieve shader source (WebGL context may be lost).`);return}let r=n.split(`
|
|
295
|
+
`).map((e,t)=>`${t}: ${e}`),i=e.getShaderInfoLog(t)??``,a=i.split(`
|
|
296
|
+
`),o={},s=a.map(e=>parseFloat(e.replace(/^ERROR\: 0\:([\d]+)\:.*$/,`$1`))).filter(e=>e&&!o[e]?(o[e]=!0,!0):!1),c=[``];s.forEach(e=>{r[e-1]=`%c${r[e-1]}%c`,c.push(`background: #FF0000; color:#FFFFFF; font-size: 10px`,`font-size: 10px`)}),c[0]=r.join(`
|
|
297
|
+
`),console.error(i),console.groupCollapsed(`click to view full shader code`),console.warn(...c),console.groupEnd()}function Ml(e,t,n,r){e.getProgramParameter(t,e.LINK_STATUS)||(e.getShaderParameter(n,e.COMPILE_STATUS)||jl(e,n),e.getShaderParameter(r,e.COMPILE_STATUS)||jl(e,r),console.error(`PixiJS Error: Could not initialize shader.`),e.getProgramInfoLog(t)!==``&&console.warn(`PixiJS Warning: gl.getProgramInfoLog()`,e.getProgramInfoLog(t)))}function Nl(e,t){let n=bl(e,e.VERTEX_SHADER,t.vertex),r=bl(e,e.FRAGMENT_SHADER,t.fragment),i=e.createProgram();e.attachShader(i,n),e.attachShader(i,r);let a=t.transformFeedbackVaryings;a&&(typeof e.transformFeedbackVaryings==`function`?e.transformFeedbackVaryings(i,a.names,a.bufferMode===`separate`?e.SEPARATE_ATTRIBS:e.INTERLEAVED_ATTRIBS):O(`TransformFeedback is not supported but TransformFeedbackVaryings are given.`)),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)||Ml(e,i,n,r),t._attributeData=Ol(i,e,!/^[ \t]*#[ \t]*version[ \t]+300[ \t]+es[ \t]*$/m.test(t.vertex)),t._uniformData=Al(i,e),t._uniformBlockData=kl(i,e),e.deleteShader(n),e.deleteShader(r);let o={};for(let n in t._uniformData){let r=t._uniformData[n];o[n]={location:e.getUniformLocation(i,n),value:Sl(r.type,r.size)}}return new yl(i,o)}var Pl={textureCount:0,blockIndex:0},Fl=class{constructor(e){this._activeProgram=null,this._programDataHash=Object.create(null),this._shaderSyncFunctions=Object.create(null),this._renderer=e}contextChange(e){this._gl=e,this._programDataHash=Object.create(null),this._shaderSyncFunctions=Object.create(null),this._activeProgram=null}bind(e,t){if(this._setProgram(e.glProgram),t)return;Pl.textureCount=0,Pl.blockIndex=0;let n=this._shaderSyncFunctions[e.glProgram._key];n||=this._shaderSyncFunctions[e.glProgram._key]=this._generateShaderSync(e,this),this._renderer.buffer.nextBindBase(!!e.glProgram.transformFeedbackVaryings),n(this._renderer,e,Pl)}updateUniformGroup(e){this._renderer.uniformGroup.updateUniformGroup(e,this._activeProgram,Pl)}bindUniformBlock(e,t,n=0){let r=this._renderer.buffer,i=this._getProgramData(this._activeProgram),a=e._bufferResource;a||this._renderer.ubo.updateUniformGroup(e);let o=e.buffer,s=r.updateBuffer(o),c=r.freeLocationForBufferBase(s);if(a){let{offset:t,size:n}=e;t===0&&n===o.data.byteLength?r.bindBufferBase(s,c):r.bindBufferRange(s,c,t)}else r.getLastBindBaseLocation(s)!==c&&r.bindBufferBase(s,c);let l=this._activeProgram._uniformBlockData[t].index;i.uniformBlockBindings[n]!==c&&(i.uniformBlockBindings[n]=c,this._renderer.gl.uniformBlockBinding(i.program,l,c))}_setProgram(e){if(this._activeProgram===e)return;this._activeProgram=e;let t=this._getProgramData(e);this._gl.useProgram(t.program)}_getProgramData(e){return this._programDataHash[e._key]||this._createProgramData(e)}_createProgramData(e){let t=e._key;return this._programDataHash[t]=Nl(this._gl,e),this._programDataHash[t]}destroy(){for(let e of Object.keys(this._programDataHash))this._programDataHash[e].destroy();this._programDataHash=null,this._shaderSyncFunctions=null,this._activeProgram=null,this._renderer=null,this._gl=null}_generateShaderSync(e,t){return vl(e,t)}resetState(){this._activeProgram=null}};Fl.extension={type:[i.WebGLSystem],name:`shader`};var Il={f32:`if (cv !== v) {
|
|
298
|
+
cu.value = v;
|
|
299
|
+
gl.uniform1f(location, v);
|
|
300
|
+
}`,"vec2<f32>":`if (cv[0] !== v[0] || cv[1] !== v[1]) {
|
|
301
|
+
cv[0] = v[0];
|
|
302
|
+
cv[1] = v[1];
|
|
303
|
+
gl.uniform2f(location, v[0], v[1]);
|
|
304
|
+
}`,"vec3<f32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
|
|
305
|
+
cv[0] = v[0];
|
|
306
|
+
cv[1] = v[1];
|
|
307
|
+
cv[2] = v[2];
|
|
308
|
+
gl.uniform3f(location, v[0], v[1], v[2]);
|
|
309
|
+
}`,"vec4<f32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
|
|
310
|
+
cv[0] = v[0];
|
|
311
|
+
cv[1] = v[1];
|
|
312
|
+
cv[2] = v[2];
|
|
313
|
+
cv[3] = v[3];
|
|
314
|
+
gl.uniform4f(location, v[0], v[1], v[2], v[3]);
|
|
315
|
+
}`,i32:`if (cv !== v) {
|
|
316
|
+
cu.value = v;
|
|
317
|
+
gl.uniform1i(location, v);
|
|
318
|
+
}`,"vec2<i32>":`if (cv[0] !== v[0] || cv[1] !== v[1]) {
|
|
319
|
+
cv[0] = v[0];
|
|
320
|
+
cv[1] = v[1];
|
|
321
|
+
gl.uniform2i(location, v[0], v[1]);
|
|
322
|
+
}`,"vec3<i32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
|
|
323
|
+
cv[0] = v[0];
|
|
324
|
+
cv[1] = v[1];
|
|
325
|
+
cv[2] = v[2];
|
|
326
|
+
gl.uniform3i(location, v[0], v[1], v[2]);
|
|
327
|
+
}`,"vec4<i32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
|
|
328
|
+
cv[0] = v[0];
|
|
329
|
+
cv[1] = v[1];
|
|
330
|
+
cv[2] = v[2];
|
|
331
|
+
cv[3] = v[3];
|
|
332
|
+
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
|
|
333
|
+
}`,u32:`if (cv !== v) {
|
|
334
|
+
cu.value = v;
|
|
335
|
+
gl.uniform1ui(location, v);
|
|
336
|
+
}`,"vec2<u32>":`if (cv[0] !== v[0] || cv[1] !== v[1]) {
|
|
337
|
+
cv[0] = v[0];
|
|
338
|
+
cv[1] = v[1];
|
|
339
|
+
gl.uniform2ui(location, v[0], v[1]);
|
|
340
|
+
}`,"vec3<u32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
|
|
341
|
+
cv[0] = v[0];
|
|
342
|
+
cv[1] = v[1];
|
|
343
|
+
cv[2] = v[2];
|
|
344
|
+
gl.uniform3ui(location, v[0], v[1], v[2]);
|
|
345
|
+
}`,"vec4<u32>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
|
|
346
|
+
cv[0] = v[0];
|
|
347
|
+
cv[1] = v[1];
|
|
348
|
+
cv[2] = v[2];
|
|
349
|
+
cv[3] = v[3];
|
|
350
|
+
gl.uniform4ui(location, v[0], v[1], v[2], v[3]);
|
|
351
|
+
}`,bool:`if (cv !== v) {
|
|
352
|
+
cu.value = v;
|
|
353
|
+
gl.uniform1i(location, v);
|
|
354
|
+
}`,"vec2<bool>":`if (cv[0] !== v[0] || cv[1] !== v[1]) {
|
|
355
|
+
cv[0] = v[0];
|
|
356
|
+
cv[1] = v[1];
|
|
357
|
+
gl.uniform2i(location, v[0], v[1]);
|
|
358
|
+
}`,"vec3<bool>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
|
|
359
|
+
cv[0] = v[0];
|
|
360
|
+
cv[1] = v[1];
|
|
361
|
+
cv[2] = v[2];
|
|
362
|
+
gl.uniform3i(location, v[0], v[1], v[2]);
|
|
363
|
+
}`,"vec4<bool>":`if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
|
|
364
|
+
cv[0] = v[0];
|
|
365
|
+
cv[1] = v[1];
|
|
366
|
+
cv[2] = v[2];
|
|
367
|
+
cv[3] = v[3];
|
|
368
|
+
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
|
|
369
|
+
}`,"mat2x2<f32>":`gl.uniformMatrix2fv(location, false, v);`,"mat3x3<f32>":`gl.uniformMatrix3fv(location, false, v);`,"mat4x4<f32>":`gl.uniformMatrix4fv(location, false, v);`},Ll={f32:`gl.uniform1fv(location, v);`,"vec2<f32>":`gl.uniform2fv(location, v);`,"vec3<f32>":`gl.uniform3fv(location, v);`,"vec4<f32>":`gl.uniform4fv(location, v);`,"mat2x2<f32>":`gl.uniformMatrix2fv(location, false, v);`,"mat3x3<f32>":`gl.uniformMatrix3fv(location, false, v);`,"mat4x4<f32>":`gl.uniformMatrix4fv(location, false, v);`,i32:`gl.uniform1iv(location, v);`,"vec2<i32>":`gl.uniform2iv(location, v);`,"vec3<i32>":`gl.uniform3iv(location, v);`,"vec4<i32>":`gl.uniform4iv(location, v);`,u32:`gl.uniform1iv(location, v);`,"vec2<u32>":`gl.uniform2iv(location, v);`,"vec3<u32>":`gl.uniform3iv(location, v);`,"vec4<u32>":`gl.uniform4iv(location, v);`,bool:`gl.uniform1iv(location, v);`,"vec2<bool>":`gl.uniform2iv(location, v);`,"vec3<bool>":`gl.uniform3iv(location, v);`,"vec4<bool>":`gl.uniform4iv(location, v);`};function Rl(e,t){let n=[`
|
|
370
|
+
var v = null;
|
|
371
|
+
var cv = null;
|
|
372
|
+
var cu = null;
|
|
373
|
+
var t = 0;
|
|
374
|
+
var gl = renderer.gl;
|
|
375
|
+
var name = null;
|
|
376
|
+
`];for(let r in e.uniforms){if(!t[r]){e.uniforms[r]instanceof C?e.uniforms[r].ubo?n.push(`
|
|
377
|
+
renderer.shader.bindUniformBlock(uv.${r}, "${r}");
|
|
378
|
+
`):n.push(`
|
|
379
|
+
renderer.shader.updateUniformGroup(uv.${r});
|
|
380
|
+
`):e.uniforms[r]instanceof rt&&n.push(`
|
|
381
|
+
renderer.shader.bindBufferResource(uv.${r}, "${r}");
|
|
382
|
+
`);continue}let i=e.uniformStructures[r],a=!1;for(let e=0;e<it.length;e++){let t=it[e];if(i.type===t.type&&t.test(i)){n.push(`name = "${r}";`,it[e].uniform),a=!0;break}}if(!a){let e=(i.size===1?Il:Ll)[i.type].replace(`location`,`ud["${r}"].location`);n.push(`
|
|
383
|
+
cu = ud["${r}"];
|
|
384
|
+
cv = cu.value;
|
|
385
|
+
v = uv["${r}"];
|
|
386
|
+
${e};`)}}return Function(`ud`,`uv`,`renderer`,`syncData`,n.join(`
|
|
387
|
+
`))}var zl=class{constructor(e){this._cache={},this._uniformGroupSyncHash={},this._renderer=e,this.gl=null,this._cache={}}contextChange(e){this.gl=e}updateUniformGroup(e,t,n){let r=this._renderer.shader._getProgramData(t);e.isStatic&&e._dirtyId===r.uniformDirtyGroups[e.uid]||(r.uniformDirtyGroups[e.uid]=e._dirtyId,this._getUniformSyncFunction(e,t)(r.uniformData,e.uniforms,this._renderer,n))}_getUniformSyncFunction(e,t){return this._uniformGroupSyncHash[e._signature]?.[t._key]||this._createUniformSyncFunction(e,t)}_createUniformSyncFunction(e,t){let n=this._uniformGroupSyncHash[e._signature]||(this._uniformGroupSyncHash[e._signature]={}),r=this._getSignature(e,t._uniformData,`u`);return this._cache[r]||(this._cache[r]=this._generateUniformsSync(e,t._uniformData)),n[t._key]=this._cache[r],n[t._key]}_generateUniformsSync(e,t){return Rl(e,t)}_getSignature(e,t,n){let r=e.uniforms,i=[`${n}-`];for(let e in r)i.push(e),t[e]&&i.push(t[e].type);return i.join(`-`)}destroy(){this._renderer=null,this._cache=null}};zl.extension={type:[i.WebGLSystem],name:`uniformGroup`};function Bl(e){let t={};if(t.normal=[e.ONE,e.ONE_MINUS_SRC_ALPHA],t.add=[e.ONE,e.ONE],t.multiply=[e.DST_COLOR,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA],t.screen=[e.ONE,e.ONE_MINUS_SRC_COLOR,e.ONE,e.ONE_MINUS_SRC_ALPHA],t.none=[0,0],t[`normal-npm`]=[e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA],t[`add-npm`]=[e.SRC_ALPHA,e.ONE,e.ONE,e.ONE],t[`screen-npm`]=[e.SRC_ALPHA,e.ONE_MINUS_SRC_COLOR,e.ONE,e.ONE_MINUS_SRC_ALPHA],t.erase=[e.ZERO,e.ONE_MINUS_SRC_ALPHA],!(e instanceof b.get().getWebGLRenderingContext()))t.min=[e.ONE,e.ONE,e.ONE,e.ONE,e.MIN,e.MIN],t.max=[e.ONE,e.ONE,e.ONE,e.ONE,e.MAX,e.MAX];else{let n=e.getExtension(`EXT_blend_minmax`);n&&(t.min=[e.ONE,e.ONE,e.ONE,e.ONE,n.MIN_EXT,n.MIN_EXT],t.max=[e.ONE,e.ONE,e.ONE,e.ONE,n.MAX_EXT,n.MAX_EXT])}return t}var{BLEND:Vl,OFFSET:Hl,CULLING:Ul,DEPTH_TEST:Wl,WINDING:Gl,DEPTH_MASK:Kl}=ue,ql=class e{constructor(e){this._invertFrontFace=!1,this._renderer=e,this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode=`none`,this._blendEq=!1,this.map=[],this.map[Vl]=this.setBlend,this.map[Hl]=this.setOffset,this.map[Ul]=this.setCullFace,this.map[Wl]=this.setDepthTest,this.map[Gl]=this.setFrontFace,this.map[Kl]=this.setDepthMask,this.checks=[],this.defaultState=L.for2d(),e.renderTarget.onRenderTargetChange.add(this)}onRenderTargetChange(e){this._invertFrontFace=this._renderer.renderTarget.isFrontFaceInverted(e,e.flipY),this._cullFace?this.setFrontFace(this._frontFace):this._frontFaceDirty=!0}contextChange(e){this.gl=e,this.blendModesMap=Bl(e),this.resetState()}set(e){if(e||=this.defaultState,this.stateId!==e.data){let t=this.stateId^e.data,n=0;for(;t;)t&1&&this.map[n].call(this,!!(e.data&1<<n)),t>>=1,n++;this.stateId=e.data}for(let t=0;t<this.checks.length;t++)this.checks[t](this,e)}forceState(e){e||=this.defaultState;for(let t=0;t<this.map.length;t++)this.map[t].call(this,!!(e.data&1<<t));for(let t=0;t<this.checks.length;t++)this.checks[t](this,e);this.stateId=e.data}setBlend(t){this._updateCheck(e._checkBlendMode,t),this.gl[t?`enable`:`disable`](this.gl.BLEND)}setOffset(t){this._updateCheck(e._checkPolygonOffset,t),this.gl[t?`enable`:`disable`](this.gl.POLYGON_OFFSET_FILL)}setDepthTest(e){this.gl[e?`enable`:`disable`](this.gl.DEPTH_TEST)}setDepthMask(e){this.gl.depthMask(e)}get depthMaskEnabled(){return!!(this.stateId&1<<Kl)}setCullFace(e){this._cullFace=e,this.gl[e?`enable`:`disable`](this.gl.CULL_FACE),this._cullFace&&this._frontFaceDirty&&this.setFrontFace(this._frontFace)}setFrontFace(e){this._frontFace=e,this._frontFaceDirty=!1;let t=this._invertFrontFace?!e:e;this._glFrontFace!==t&&(this._glFrontFace=t,this.gl.frontFace(this.gl[t?`CW`:`CCW`]))}setBlendMode(e){if(this.blendModesMap[e]||(e=`normal`),e===this.blendMode)return;this.blendMode=e;let t=this.blendModesMap[e],n=this.gl;t.length===2?n.blendFunc(t[0],t[1]):n.blendFuncSeparate(t[0],t[1],t[2],t[3]),t.length===6?(this._blendEq=!0,n.blendEquationSeparate(t[4],t[5])):this._blendEq&&(this._blendEq=!1,n.blendEquationSeparate(n.FUNC_ADD,n.FUNC_ADD))}setPolygonOffset(e,t){this.gl.polygonOffset(e,t)}resetState(){this._glFrontFace=!1,this._frontFace=!1,this._cullFace=!1,this._frontFaceDirty=!1,this._invertFrontFace=!1,this.gl.frontFace(this.gl.CCW),this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!1),this.forceState(this.defaultState),this._blendEq=!0,this.blendMode=``,this.setBlendMode(`normal`)}_updateCheck(e,t){let n=this.checks.indexOf(e);t&&n===-1?this.checks.push(e):!t&&n!==-1&&this.checks.splice(n,1)}static _checkBlendMode(e,t){e.setBlendMode(t.blendMode)}static _checkPolygonOffset(e,t){e.setPolygonOffset(1,t.polygonOffset)}destroy(){this.gl=null,this.checks.length=0,this._renderer=null}};ql.extension={type:[i.WebGLSystem],name:`state`};var Jl=ql,Yl=class{constructor(e){this.target=Xc.TEXTURE_2D,this._layerInitMask=0,this.texture=e,this.width=-1,this.height=-1,this.type=Q.UNSIGNED_BYTE,this.internalFormat=Yc.RGBA,this.format=Yc.RGBA,this.samplerType=0}destroy(){}},Xl=[new d,new d,new d],Zl={id:`buffer`,upload(e,t,n,r,i,a=!1){let o=i||t.target,s=e.resource;if(o===Xc.TEXTURE_3D||o===Xc.TEXTURE_2D_ARRAY){a||t.width!==e.width||t.height!==e.height?n.texImage3D(o,0,t.internalFormat,e.width,e.height,e.depthOrArrayLayers,0,t.format,t.type,s):n.texSubImage3D(o,0,0,0,0,e.width,e.height,e.depthOrArrayLayers,t.format,t.type,s),t.width=e.width,t.height=e.height;return}let c=e.width*e.height,l=a||t.width!==e.width||t.height!==e.height,u=e._updateStart>0||e._updateEnd<c;if(l)n.texImage2D(o,0,t.internalFormat,e.width,e.height,0,t.format,t.type,s);else if(u){let r=s.length/c,i=ct(e._updateStart,e._updateEnd,e.width,e.height,Xl);for(let a=0;a<i;a++){let i=Xl[a],c=(i.y*e.width+i.x)*r;n.texSubImage2D(o,0,i.x,i.y,i.width,i.height,t.format,t.type,s.subarray(c,c+i.width*i.height*r))}}else n.texSubImage2D(o,0,0,0,e.width,e.height,t.format,t.type,s);t.width=e.width,t.height=e.height}},Ql={"bc1-rgba-unorm":!0,"bc1-rgba-unorm-srgb":!0,"bc2-rgba-unorm":!0,"bc2-rgba-unorm-srgb":!0,"bc3-rgba-unorm":!0,"bc3-rgba-unorm-srgb":!0,"bc4-r-unorm":!0,"bc4-r-snorm":!0,"bc5-rg-unorm":!0,"bc5-rg-snorm":!0,"bc6h-rgb-ufloat":!0,"bc6h-rgb-float":!0,"bc7-rgba-unorm":!0,"bc7-rgba-unorm-srgb":!0,"etc2-rgb8unorm":!0,"etc2-rgb8unorm-srgb":!0,"etc2-rgb8a1unorm":!0,"etc2-rgb8a1unorm-srgb":!0,"etc2-rgba8unorm":!0,"etc2-rgba8unorm-srgb":!0,"eac-r11unorm":!0,"eac-r11snorm":!0,"eac-rg11unorm":!0,"eac-rg11snorm":!0,"astc-4x4-unorm":!0,"astc-4x4-unorm-srgb":!0,"astc-5x4-unorm":!0,"astc-5x4-unorm-srgb":!0,"astc-5x5-unorm":!0,"astc-5x5-unorm-srgb":!0,"astc-6x5-unorm":!0,"astc-6x5-unorm-srgb":!0,"astc-6x6-unorm":!0,"astc-6x6-unorm-srgb":!0,"astc-8x5-unorm":!0,"astc-8x5-unorm-srgb":!0,"astc-8x6-unorm":!0,"astc-8x6-unorm-srgb":!0,"astc-8x8-unorm":!0,"astc-8x8-unorm-srgb":!0,"astc-10x5-unorm":!0,"astc-10x5-unorm-srgb":!0,"astc-10x6-unorm":!0,"astc-10x6-unorm-srgb":!0,"astc-10x8-unorm":!0,"astc-10x8-unorm-srgb":!0,"astc-10x10-unorm":!0,"astc-10x10-unorm-srgb":!0,"astc-12x10-unorm":!0,"astc-12x10-unorm-srgb":!0,"astc-12x12-unorm":!0,"astc-12x12-unorm-srgb":!0},$l={id:`compressed`,upload(e,t,n,r,i,a){let o=i??t.target;n.pixelStorei(n.UNPACK_ALIGNMENT,4);let s=e.pixelWidth,c=e.pixelHeight,l=!!Ql[e.format];for(let r=0;r<e.resource.length;r++){let i=e.resource[r];l?n.compressedTexImage2D(o,r,t.internalFormat,s,c,0,i):n.texImage2D(o,r,t.internalFormat,s,c,0,t.format,t.type,i),s=Math.max(s>>1,1),c=Math.max(c>>1,1)}}},eu=[`right`,`left`,`top`,`bottom`,`front`,`back`];function tu(e){return{id:`cube`,upload(t,n,r,i){let a=t.faces;for(let t=0;t<eu.length;t++){let o=a[eu[t]];o.resource&&((e[o.uploadMethodId]||e.image).upload(o,n,r,i,Xc.TEXTURE_CUBE_MAP_POSITIVE_X+t,!(n._layerInitMask&1<<t)),n._layerInitMask|=1<<t)}n.width=t.pixelWidth,n.height=t.pixelHeight}}}var nu={id:`image`,upload(e,t,n,r,i,a=!1){let o=i||t.target,s=e.pixelWidth,c=e.pixelHeight,l=e.resourceWidth,u=e.resourceHeight,d=r===2,f=a||t.width!==s||t.height!==c,p=l>=s&&u>=c,m=e.resource;(d?ru:iu)(n,o,t,s,c,l,u,m,f,p),t.width=s,t.height=c}};function ru(e,t,n,r,i,a,o,s,c,l){l?c?e.texImage2D(t,0,n.internalFormat,r,i,0,n.format,n.type,s):e.texSubImage2D(t,0,0,0,n.format,n.type,s):(c&&e.texImage2D(t,0,n.internalFormat,r,i,0,n.format,n.type,null),e.texSubImage2D(t,0,0,0,a,o,n.format,n.type,s))}function iu(e,t,n,r,i,a,o,s,c,l){l?c?e.texImage2D(t,0,n.internalFormat,n.format,n.type,s):e.texSubImage2D(t,0,0,0,n.format,n.type,s):(c&&e.texImage2D(t,0,n.internalFormat,r,i,0,n.format,n.type,null),e.texSubImage2D(t,0,0,0,n.format,n.type,s))}var au=qs(),ou={id:`video`,upload(e,t,n,r,i,a=au){if(e.isValid)nu.upload(e,t,n,r,i,a);else{let e=i??t.target;n.texImage2D(e,0,t.internalFormat,1,1,0,t.format,t.type,null)}}},su={linear:9729,nearest:9728},cu={linear:{linear:9987,nearest:9985},nearest:{linear:9986,nearest:9984}},lu={"clamp-to-edge":33071,repeat:10497,"mirror-repeat":33648},uu={never:512,less:513,equal:514,"less-equal":515,greater:516,"not-equal":517,"greater-equal":518,always:519};function du(e,t,n,r,i,a,o,s){let c=a;if(!s||e.addressModeU!==`repeat`||e.addressModeV!==`repeat`||e.addressModeW!==`repeat`){let n=lu[o?`clamp-to-edge`:e.addressModeU],r=lu[o?`clamp-to-edge`:e.addressModeV],a=lu[o?`clamp-to-edge`:e.addressModeW];t[i](c,t.TEXTURE_WRAP_S,n),t[i](c,t.TEXTURE_WRAP_T,r),t.TEXTURE_WRAP_R&&t[i](c,t.TEXTURE_WRAP_R,a)}if(s&&e.magFilter===`linear`||t[i](c,t.TEXTURE_MAG_FILTER,su[e.magFilter]),n){if(!s||e.mipmapFilter!==`linear`){let n=cu[e.minFilter][e.mipmapFilter];t[i](c,t.TEXTURE_MIN_FILTER,n)}}else t[i](c,t.TEXTURE_MIN_FILTER,su[e.minFilter]);if(r&&e.maxAnisotropy>1){let n=Math.min(e.maxAnisotropy,t.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT));t[i](c,r.TEXTURE_MAX_ANISOTROPY_EXT,n)}e.compare?(t[i](c,t.TEXTURE_COMPARE_FUNC,uu[e.compare]),t[i](c,t.TEXTURE_COMPARE_MODE,t.COMPARE_REF_TO_TEXTURE)):s||t[i](c,t.TEXTURE_COMPARE_MODE,t.NONE)}function fu(e){return{r8unorm:e.RED,r8snorm:e.RED,r8uint:e.RED_INTEGER,r8sint:e.RED_INTEGER,r16uint:e.RED_INTEGER,r16sint:e.RED_INTEGER,r16float:e.RED,rg8unorm:e.RG,rg8snorm:e.RG,rg8uint:e.RG_INTEGER,rg8sint:e.RG_INTEGER,r32uint:e.RED_INTEGER,r32sint:e.RED_INTEGER,r32float:e.RED,rg16uint:e.RG_INTEGER,rg16sint:e.RG_INTEGER,rg16float:e.RG,rgba8unorm:e.RGBA,"rgba8unorm-srgb":e.RGBA,rgba8snorm:e.RGBA,rgba8uint:e.RGBA_INTEGER,rgba8sint:e.RGBA_INTEGER,bgra8unorm:e.RGBA,"bgra8unorm-srgb":e.RGBA,rgb9e5ufloat:e.RGB,rgb10a2unorm:e.RGBA,rg11b10ufloat:e.RGB,rg32uint:e.RG_INTEGER,rg32sint:e.RG_INTEGER,rg32float:e.RG,rgba16uint:e.RGBA_INTEGER,rgba16sint:e.RGBA_INTEGER,rgba16float:e.RGBA,rgba32uint:e.RGBA_INTEGER,rgba32sint:e.RGBA_INTEGER,rgba32float:e.RGBA,stencil8:e.STENCIL_INDEX8,depth16unorm:e.DEPTH_COMPONENT,depth24plus:e.DEPTH_COMPONENT,"depth24plus-stencil8":e.DEPTH_STENCIL,depth32float:e.DEPTH_COMPONENT,"depth32float-stencil8":e.DEPTH_STENCIL}}function pu(e,t){let n={},r=e.RGBA;return e instanceof b.get().getWebGLRenderingContext()?t.srgb&&(n={"rgba8unorm-srgb":t.srgb.SRGB8_ALPHA8_EXT,"bgra8unorm-srgb":t.srgb.SRGB8_ALPHA8_EXT}):(n={"rgba8unorm-srgb":e.SRGB8_ALPHA8,"bgra8unorm-srgb":e.SRGB8_ALPHA8},r=e.RGBA8),{r8unorm:e.R8,r8snorm:e.R8_SNORM,r8uint:e.R8UI,r8sint:e.R8I,r16uint:e.R16UI,r16sint:e.R16I,r16float:e.R16F,rg8unorm:e.RG8,rg8snorm:e.RG8_SNORM,rg8uint:e.RG8UI,rg8sint:e.RG8I,r32uint:e.R32UI,r32sint:e.R32I,r32float:e.R32F,rg16uint:e.RG16UI,rg16sint:e.RG16I,rg16float:e.RG16F,rgba8unorm:e.RGBA,...n,rgba8snorm:e.RGBA8_SNORM,rgba8uint:e.RGBA8UI,rgba8sint:e.RGBA8I,bgra8unorm:r,rgb9e5ufloat:e.RGB9_E5,rgb10a2unorm:e.RGB10_A2,rg11b10ufloat:e.R11F_G11F_B10F,rg32uint:e.RG32UI,rg32sint:e.RG32I,rg32float:e.RG32F,rgba16uint:e.RGBA16UI,rgba16sint:e.RGBA16I,rgba16float:e.RGBA16F,rgba32uint:e.RGBA32UI,rgba32sint:e.RGBA32I,rgba32float:e.RGBA32F,stencil8:e.STENCIL_INDEX8,depth16unorm:e.DEPTH_COMPONENT16,depth24plus:e.DEPTH_COMPONENT24,"depth24plus-stencil8":e.DEPTH24_STENCIL8,depth32float:e.DEPTH_COMPONENT32F,"depth32float-stencil8":e.DEPTH32F_STENCIL8,...t.s3tc?{"bc1-rgba-unorm":t.s3tc.COMPRESSED_RGBA_S3TC_DXT1_EXT,"bc2-rgba-unorm":t.s3tc.COMPRESSED_RGBA_S3TC_DXT3_EXT,"bc3-rgba-unorm":t.s3tc.COMPRESSED_RGBA_S3TC_DXT5_EXT}:{},...t.s3tc_sRGB?{"bc1-rgba-unorm-srgb":t.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,"bc2-rgba-unorm-srgb":t.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,"bc3-rgba-unorm-srgb":t.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}:{},...t.rgtc?{"bc4-r-unorm":t.rgtc.COMPRESSED_RED_RGTC1_EXT,"bc4-r-snorm":t.rgtc.COMPRESSED_SIGNED_RED_RGTC1_EXT,"bc5-rg-unorm":t.rgtc.COMPRESSED_RED_GREEN_RGTC2_EXT,"bc5-rg-snorm":t.rgtc.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}:{},...t.bptc?{"bc6h-rgb-float":t.bptc.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,"bc6h-rgb-ufloat":t.bptc.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,"bc7-rgba-unorm":t.bptc.COMPRESSED_RGBA_BPTC_UNORM_EXT,"bc7-rgba-unorm-srgb":t.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT}:{},...t.etc?{"etc2-rgb8unorm":t.etc.COMPRESSED_RGB8_ETC2,"etc2-rgb8unorm-srgb":t.etc.COMPRESSED_SRGB8_ETC2,"etc2-rgb8a1unorm":t.etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgb8a1unorm-srgb":t.etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgba8unorm":t.etc.COMPRESSED_RGBA8_ETC2_EAC,"etc2-rgba8unorm-srgb":t.etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,"eac-r11unorm":t.etc.COMPRESSED_R11_EAC,"eac-rg11unorm":t.etc.COMPRESSED_SIGNED_RG11_EAC}:{},...t.astc?{"astc-4x4-unorm":t.astc.COMPRESSED_RGBA_ASTC_4x4_KHR,"astc-4x4-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,"astc-5x4-unorm":t.astc.COMPRESSED_RGBA_ASTC_5x4_KHR,"astc-5x4-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,"astc-5x5-unorm":t.astc.COMPRESSED_RGBA_ASTC_5x5_KHR,"astc-5x5-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,"astc-6x5-unorm":t.astc.COMPRESSED_RGBA_ASTC_6x5_KHR,"astc-6x5-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,"astc-6x6-unorm":t.astc.COMPRESSED_RGBA_ASTC_6x6_KHR,"astc-6x6-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,"astc-8x5-unorm":t.astc.COMPRESSED_RGBA_ASTC_8x5_KHR,"astc-8x5-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,"astc-8x6-unorm":t.astc.COMPRESSED_RGBA_ASTC_8x6_KHR,"astc-8x6-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,"astc-8x8-unorm":t.astc.COMPRESSED_RGBA_ASTC_8x8_KHR,"astc-8x8-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,"astc-10x5-unorm":t.astc.COMPRESSED_RGBA_ASTC_10x5_KHR,"astc-10x5-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,"astc-10x6-unorm":t.astc.COMPRESSED_RGBA_ASTC_10x6_KHR,"astc-10x6-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,"astc-10x8-unorm":t.astc.COMPRESSED_RGBA_ASTC_10x8_KHR,"astc-10x8-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,"astc-10x10-unorm":t.astc.COMPRESSED_RGBA_ASTC_10x10_KHR,"astc-10x10-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,"astc-12x10-unorm":t.astc.COMPRESSED_RGBA_ASTC_12x10_KHR,"astc-12x10-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,"astc-12x12-unorm":t.astc.COMPRESSED_RGBA_ASTC_12x12_KHR,"astc-12x12-unorm-srgb":t.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}:{}}}function mu(e){return{r8unorm:e.UNSIGNED_BYTE,r8snorm:e.BYTE,r8uint:e.UNSIGNED_BYTE,r8sint:e.BYTE,r16uint:e.UNSIGNED_SHORT,r16sint:e.SHORT,r16float:e.HALF_FLOAT,rg8unorm:e.UNSIGNED_BYTE,rg8snorm:e.BYTE,rg8uint:e.UNSIGNED_BYTE,rg8sint:e.BYTE,r32uint:e.UNSIGNED_INT,r32sint:e.INT,r32float:e.FLOAT,rg16uint:e.UNSIGNED_SHORT,rg16sint:e.SHORT,rg16float:e.HALF_FLOAT,rgba8unorm:e.UNSIGNED_BYTE,"rgba8unorm-srgb":e.UNSIGNED_BYTE,rgba8snorm:e.BYTE,rgba8uint:e.UNSIGNED_BYTE,rgba8sint:e.BYTE,bgra8unorm:e.UNSIGNED_BYTE,"bgra8unorm-srgb":e.UNSIGNED_BYTE,rgb9e5ufloat:e.UNSIGNED_INT_5_9_9_9_REV,rgb10a2unorm:e.UNSIGNED_INT_2_10_10_10_REV,rg11b10ufloat:e.UNSIGNED_INT_10F_11F_11F_REV,rg32uint:e.UNSIGNED_INT,rg32sint:e.INT,rg32float:e.FLOAT,rgba16uint:e.UNSIGNED_SHORT,rgba16sint:e.SHORT,rgba16float:e.HALF_FLOAT,rgba32uint:e.UNSIGNED_INT,rgba32sint:e.INT,rgba32float:e.FLOAT,stencil8:e.UNSIGNED_BYTE,depth16unorm:e.UNSIGNED_SHORT,depth24plus:e.UNSIGNED_INT,"depth24plus-stencil8":e.UNSIGNED_INT_24_8,depth32float:e.FLOAT,"depth32float-stencil8":e.FLOAT_32_UNSIGNED_INT_24_8_REV}}function hu(e){return{"2d":e.TEXTURE_2D,cube:e.TEXTURE_CUBE_MAP,"1d":null,"3d":e?.TEXTURE_3D||null,"2d-array":e?.TEXTURE_2D_ARRAY||null,"cube-array":e?.TEXTURE_CUBE_MAP_ARRAY||null}}var gu=4,_u=class e{constructor(t){this._glSamplers=Object.create(null),this._boundTextures=[],this._integerUnits=0,this._activeTextureLocation=-1,this._boundSamplers=Object.create(null),this._premultiplyAlpha=!1,this._useSeparateSamplers=!1,this._renderer=t,this._managedTextures=new G({renderer:t,type:`resource`,onUnload:this.onSourceUnload.bind(this),name:`glTexture`});let n={image:nu,buffer:Zl,video:ou,compressed:$l,...e.uploadExtensions};this._uploads={...n,cube:tu(n)}}get managedTextures(){return Object.values(this._managedTextures.items)}contextChange(e){this._gl=e,this._mapFormatToInternalFormat||(this._mapFormatToInternalFormat=pu(e,this._renderer.context.extensions),this._mapFormatToType=mu(e),this._mapFormatToFormat=fu(e),this._mapViewDimensionToGlTarget=hu(e)),this._managedTextures.removeAll(!0),this._glSamplers=Object.create(null),this._boundSamplers=Object.create(null),this._premultiplyAlpha=!1;for(let e=0;e<16;e++)this.bind(D.EMPTY,e)}initSource(e){this.bind(e)}bind(e,t=0){let n=e.source;e?(this.bindSource(n,t),this._useSeparateSamplers&&this._bindSampler(n.style,t)):(this.bindSource(null,t),this._useSeparateSamplers&&this._bindSampler(null,t))}bindSource(e,t=0){let n=this._gl;if(e._gcLastUsed=this._renderer.gc.now,this._boundTextures[t]!==e){this._setBoundTexture(t,e),this._activateLocation(t),e||=D.EMPTY.source;let r=this.getGlSource(e);n.bindTexture(r.target,r.texture)}}unbindIntegerTextures(e){if(e>=32)return;let t=this._integerUnits>>>e<<e;for(;t;){let e=31-Math.clz32(t);t&=~(1<<e),this.bind(D.EMPTY,e)}}_setBoundTexture(e,t){this._boundTextures[e]=t,e<0||e>31||t&&t.viewDimension===`2d`&&(s(t.format)?this._integerUnits|=1<<e:this._integerUnits&=~(1<<e))}_bindSampler(e,t=0){let n=this._gl;if(!e){this._boundSamplers[t]=null,n.bindSampler(t,null);return}let r=this._getGlSampler(e);this._boundSamplers[t]!==r&&(this._boundSamplers[t]=r,n.bindSampler(t,r))}unbind(e){let t=e.source,n=this._boundTextures,r=this._gl;for(let e=0;e<n.length;e++)if(n[e]===t){this._activateLocation(e);let n=this.getGlSource(t);r.bindTexture(n.target,null),this._setBoundTexture(e,null)}}_activateLocation(e){this._activeTextureLocation!==e&&(this._activeTextureLocation=e,this._gl.activeTexture(this._gl.TEXTURE0+e))}_initSource(e){let t=this._gl,n=new Yl(t.createTexture());if(n.type=this._mapFormatToType[e.format],n.internalFormat=this._mapFormatToInternalFormat[e.format],n.format=this._mapFormatToFormat[e.format],n.target=this._mapViewDimensionToGlTarget[e.viewDimension],n.target===null)throw Error(`Unsupported view dimension: ${e.viewDimension} with this webgl version: ${this._renderer.context.webGLVersion}`);if(e.autoGenerateMipmaps&&(this._renderer.context.supports.nonPowOf2mipmaps||e.isPowerOfTwo)){let t=Math.max(e.width,e.height,e.depth);e.mipLevelCount=Math.floor(Math.log2(t))+1}return e._gpuData[this._renderer.uid]=n,this._managedTextures.add(e)&&(e.on(`update`,this.onSourceUpdate,this),e.on(`resize`,this.onSourceUpdate,this),e.on(`styleChange`,this.onStyleChange,this),e.on(`updateMipmaps`,this.onUpdateMipmaps,this)),this.onSourceUpdate(e),this.updateStyle(e,!1),n}onStyleChange(e){this.updateStyle(e,!1)}updateStyle(e,t){let n=this._gl,r=this.getGlSource(e);n.bindTexture(r.target,r.texture),this._setBoundTexture(this._activeTextureLocation,e),du(e.style,n,e.mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,`texParameteri`,r.target,!this._renderer.context.supports.nonPowOf2wrapping&&!e.isPowerOfTwo,t)}onSourceUnload(e,t=!1){let n=e._gpuData[this._renderer.uid];n&&(t||(this.unbind(e),this._gl.deleteTexture(n.texture)),e.off(`update`,this.onSourceUpdate,this),e.off(`resize`,this.onSourceUpdate,this),e.off(`styleChange`,this.onStyleChange,this),e.off(`updateMipmaps`,this.onUpdateMipmaps,this))}onSourceUpdate(e){let t=this._gl,n=this.getGlSource(e);t.bindTexture(n.target,n.texture),this._setBoundTexture(this._activeTextureLocation,e);let r=e.alphaMode===`premultiply-alpha-on-upload`&&!s(e.format)&&n.target!==t.TEXTURE_3D&&n.target!==t.TEXTURE_2D_ARRAY;if(this._premultiplyAlpha!==r&&(this._premultiplyAlpha=r,t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r)),this._uploads[e.uploadMethodId])this._uploads[e.uploadMethodId].upload(e,n,t,this._renderer.context.webGLVersion);else if(n.target===t.TEXTURE_2D)this._initEmptyTexture2D(n,e);else if(n.target===t.TEXTURE_2D_ARRAY||n.target===t.TEXTURE_3D)this._initEmptyTexture3D(n,e);else if(n.target===t.TEXTURE_CUBE_MAP)this._initEmptyTextureCube(n,e);else throw Error(`[GlTextureSystem] Unsupported texture target for empty allocation.`);this._applyMipRange(n,e),e.autoGenerateMipmaps&&e.mipLevelCount>1&&this.onUpdateMipmaps(e,!1)}onUpdateMipmaps(e,t=!0){t&&this.bindSource(e,0);let n=this.getGlSource(e);this._gl.generateMipmap(n.target)}_initEmptyTexture2D(e,t){let n=this._gl;n.texImage2D(n.TEXTURE_2D,0,e.internalFormat,t.pixelWidth,t.pixelHeight,0,e.format,e.type,null);let r=Math.max(t.pixelWidth>>1,1),i=Math.max(t.pixelHeight>>1,1);for(let a=1;a<t.mipLevelCount;a++)n.texImage2D(n.TEXTURE_2D,a,e.internalFormat,r,i,0,e.format,e.type,null),r=Math.max(r>>1,1),i=Math.max(i>>1,1)}_initEmptyTexture3D(e,t){let n=this._gl,r=e.target===n.TEXTURE_3D,i=t.pixelWidth,a=t.pixelHeight,o=t.depthOrArrayLayers;for(let s=0;s<t.mipLevelCount;s++)n.texImage3D(e.target,s,e.internalFormat,i,a,o,0,e.format,e.type,null),i=Math.max(i>>1,1),a=Math.max(a>>1,1),r&&(o=Math.max(o>>1,1))}_initEmptyTextureCube(e,t){let n=this._gl;for(let r=0;r<6;r++)n.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+r,0,e.internalFormat,t.pixelWidth,t.pixelHeight,0,e.format,e.type,null);let r=Math.max(t.pixelWidth>>1,1),i=Math.max(t.pixelHeight>>1,1);for(let a=1;a<t.mipLevelCount;a++){for(let t=0;t<6;t++)n.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+t,a,e.internalFormat,r,i,0,e.format,e.type,null);r=Math.max(r>>1,1),i=Math.max(i>>1,1)}}_applyMipRange(e,t){if(this._renderer.context.webGLVersion!==2||t.mipLevelCount<=1)return;let n=this._gl,r=Math.max((t.mipLevelCount|0)-1,0);n.texParameteri(e.target,n.TEXTURE_BASE_LEVEL,0),n.texParameteri(e.target,n.TEXTURE_MAX_LEVEL,r)}_initSampler(e){let t=this._gl,n=this._gl.createSampler();return this._glSamplers[e._resourceId]=n,du(e,t,this._boundTextures[this._activeTextureLocation].mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,`samplerParameteri`,n,!1,!0),this._glSamplers[e._resourceId]}_getGlSampler(e){return this._glSamplers[e._resourceId]||this._initSampler(e)}getGlSource(e){return e._gcLastUsed=this._renderer.gc.now,e._gpuData[this._renderer.uid]||this._initSource(e)}generateCanvas(e){let{pixels:t,width:n,height:r}=this.getPixels(e),i=b.get().createCanvas();i.width=n,i.height=r;let a=i.getContext(`2d`);if(a){let e=a.createImageData(n,r);e.data.set(t),a.putImageData(e,0,0)}return i}getPixels(e){let t=e.source.resolution,n=e.frame,r=Math.max(Math.round(n.width*t),1),i=Math.max(Math.round(n.height*t),1),a=new Uint8Array(gu*r*i),o=this._renderer,s=o.renderTarget.getRenderTarget(e),c=o.renderTarget.getGpuRenderTarget(s),l=o.gl;return o.renderTarget.adaptor.bindFramebuffer(c.resolveTargetFramebuffer),l.readPixels(Math.round(n.x*t),Math.round(n.y*t),r,i,l.RGBA,l.UNSIGNED_BYTE,a),{pixels:new Uint8ClampedArray(a.buffer),width:r,height:i}}destroy(){this._managedTextures.destroy(),this._glSamplers=null,this._boundTextures=null,this._boundSamplers=null,this._mapFormatToInternalFormat=null,this._mapFormatToType=null,this._mapFormatToFormat=null,this._uploads=null,this._renderer=null}resetState(){let e=this._renderer.limits.maxTextures;this._activeTextureLocation=-1,this._boundTextures.fill(null),this._integerUnits=e>=32?-1:(1<<e)-1,this._boundSamplers=Object.create(null);let t=this._gl;this._premultiplyAlpha=!1,t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this._premultiplyAlpha)}};_u.extension={type:[i.WebGLSystem],name:`texture`},_u.uploadExtensions=Object.create(null);var vu=_u;a.handleByMap(i.TextureUploaderWebGL,vu.uploadExtensions);var yu=class{contextChange(t){let n=new C({uColor:{value:new Float32Array([1,1,1,1]),type:`vec4<f32>`},uTransformMatrix:{value:new e,type:`mat3x3<f32>`},uRound:{value:0,type:`f32`}}),r=t.limits.maxBatchableTextures,i=Ye({name:`graphics`,bits:[Ue,Je(r),at,Le]});this.shader=new g({glProgram:i,resources:{localUniforms:n,batchSamplers:qe(r)}})}execute(e,t){let n=t.context,r=n.customShader||this.shader,i=e.renderer,{batcher:a,instructions:o}=i.graphicsContext.getContextRenderData(n);r.groups[0]=i.globalUniforms.bindGroup,i.state.set(e.state),i.shader.bind(r),i.geometry.bind(a.geometry,r.glProgram);let s=o.instructions;for(let e=0;e<o.instructionSize;e++){let t=s[e];if(t.size){for(let e=0;e<t.textures.count;e++)i.texture.bind(t.textures.textures[e],e);i.texture.unbindIntegerTextures(t.textures.count),i.geometry.draw(t.topology,t.size,t.start)}}}destroy(){this.shader.destroy(!0),this.shader=null}};yu.extension={type:[i.WebGLPipesAdaptor],name:`graphics`};var bu=class{init(){let t=Ye({name:`mesh`,bits:[at,Qe,Le]});this._shader=new g({glProgram:t,resources:{uTexture:D.EMPTY.source,textureUniforms:{uTextureMatrix:{type:`mat3x3<f32>`,value:new e}}}})}execute(e,t){let n=e.renderer,r=t._shader;if(!r){r=this._shader;let e=t.texture,n=e.source;r.resources.uTexture=n,r.resources.uSampler=n.style,r.resources.textureUniforms.uniforms.uTextureMatrix=e.textureMatrix.mapCoord}else if(!r.glProgram){O(`Mesh shader has no glProgram`,t.shader);return}r.groups[100]=n.globalUniforms.bindGroup,r.groups[101]=e.localUniformsBindGroup,n.encoder.draw({geometry:t._geometry,shader:r,state:t.state})}destroy(){this._shader.destroy(!0),this._shader=null}};bu.extension={type:[i.WebGLPipesAdaptor],name:`mesh`};var xu=te({WebGLRenderer:()=>ku}),Su=[...Ce,ml,il,Jc,sl,Kc,vu,gl,tl,zl,Fl,ol,Jl,ll,al],Cu=[...be],wu=[oc,bu,yu],Tu=[],Eu=[],Du=[],Ou=[];a.handleByNamedList(i.WebGLSystem,Tu),a.handleByNamedList(i.WebGLPipes,Eu),a.handleByNamedList(i.WebGLPipesAdaptor,Du),a.handleByNamedList(i.WebGLLoader,Ou),a.add(...Su,...Cu,...wu);var ku=class extends Se{constructor(){let e={name:`webgl`,type:re.WEBGL,systems:Tu,renderPipes:Eu,renderPipeAdaptors:Du,loaders:Ou};super(e)}},Au=class{constructor(e,t){this.autoGarbageCollect=!0,this._gpuData=null,this.gpuBindGroup=e,this._gcLastUsed=t}unload(){this.gpuBindGroup=null}},ju=class{constructor(e){this._hash=Object.create(null),this._renderer=e,e.gc.addResourceHash(this,`_hash`,`resource`),e.gc.addCollection(this,`_hash`,`hash`)}contextChange(e){this._gpu=e,this._hash=Object.create(null)}getBindGroup(e,t,n){let r=`${e._key}:${t._layoutKey<<4|n}`,i=this._hash[r];return i?(i._gcLastUsed=this._renderer.gc.now,i.gpuBindGroup):this._createBindGroup(r,e,t,n)}_createBindGroup(e,t,n,r){let i=this._gpu.device,a=n.layout[r],o=[],s=this._renderer;for(let e in a){let n=t.resources[e]??t.resources[a[e]];if(!n||n.destroyed)throw Error(`[BindGroup] the resource bound as '${e}' was destroyed while a shader still uses it. Remove it from the shader before destroying it.`);let r;if(n._resourceType===`uniformGroup`){let e=n;s.ubo.updateUniformGroup(e);let t=e.buffer;r={buffer:s.buffer.getGPUBuffer(t),offset:0,size:t.descriptor.size}}else if(n._resourceType===`buffer`){let e=n;r={buffer:s.buffer.getGPUBuffer(e),offset:0,size:e.descriptor.size}}else if(n._resourceType===`bufferResource`){let e=n;r={buffer:s.buffer.getGPUBuffer(e.buffer),offset:e.offset,size:e.size??e.buffer.descriptor.size}}else if(n._resourceType===`textureSampler`){let e=n;r=s.texture.getGpuSampler(e)}else if(n._resourceType===`textureSource`){let e=n;r=s.texture.getTextureView(e)}else if(n._resourceType===`textureView`){let e=n;r=s.texture.getTextureView(e.source,e.viewDescriptor)}o.push({binding:a[e],resource:r})}let c=s.shader.getProgramData(n).bindGroups[r],l=i.createBindGroup({layout:c,entries:o});return this._hash[e]=new Au(l,s.gc.now),l}destroy(){this._hash=null,this._renderer=null}};ju.extension={type:[i.WebGPUSystem],name:`bindGroup`};var Mu=class{constructor(e){this.gpuBuffer=e}destroy(){this.gpuBuffer.destroy(),this.gpuBuffer=null}},Nu=class{constructor(e){this._renderer=e,this._managedBuffers=new G({renderer:e,type:`resource`,onUnload:this.onBufferUnload.bind(this),name:`gpuBuffer`})}contextChange(e){this._gpu=e,this.destroyAll()}getGPUBuffer(e){return e._gcLastUsed=this._renderer.gc.now,e._gpuData[this._renderer.uid]?.gpuBuffer||this.createGPUBuffer(e)}updateBuffer(e){let t=this.getGPUBuffer(e),n=e.data;return e._updateID&&n&&(e._updateID=0,this._gpu.device.queue.writeBuffer(t,e._updateOffset,n.buffer,n.byteOffset+e._updateOffset,(e._updateSize||n.byteLength)+3&-4)),t}destroyAll(){this._managedBuffers.removeAll()}onBufferUnload(e){e.off(`update`,this.updateBuffer,this),e.off(`change`,this.onBufferChange,this)}createGPUBuffer(e){let t=this._gpu.device.createBuffer(e.descriptor);return e._updateID=0,e.data&&(Ve(e.data.buffer,t.getMappedRange(),e.data.byteOffset,e.data.byteLength),t.unmap()),e._gpuData[this._renderer.uid]=new Mu(t),this._managedBuffers.add(e)&&(e.on(`update`,this.updateBuffer,this),e.on(`change`,this.onBufferChange,this)),t}onBufferChange(e){this._managedBuffers.remove(e),e._updateID=0,this.createGPUBuffer(e)}destroy(){this._managedBuffers.destroy(),this._renderer=null,this._gpu=null}};Nu.extension={type:[i.WebGPUSystem],name:`buffer`};var Pu=class{constructor({minUniformOffsetAlignment:e}){this._minUniformOffsetAlignment=256,this.byteIndex=0,this._minUniformOffsetAlignment=e,this.data=new Float32Array(65535)}clear(){this.byteIndex=0}addEmptyGroup(e){if(e>this._minUniformOffsetAlignment/4)throw Error(`UniformBufferBatch: array is too large: ${e*4}`);let t=this.byteIndex,n=t+e*4;if(n=Math.ceil(n/this._minUniformOffsetAlignment)*this._minUniformOffsetAlignment,n>this.data.length*4)throw Error(`UniformBufferBatch: ubo batch got too big`);return this.byteIndex=n,t}addGroup(e){let t=this.addEmptyGroup(e.length);for(let n=0;n<e.length;n++)this.data[t/4+n]=e[n];return t}destroy(){this.data=null}},Fu=class{constructor(e){this._colorMaskCache=15,this._renderer=e}setMask(e){this._colorMaskCache!==e&&(this._colorMaskCache=e,this._renderer.pipeline.setColorMask(e))}destroy(){this._renderer=null,this._colorMaskCache=null}};Fu.extension={type:[i.WebGPUSystem],name:`colorMask`};var Iu=new Set([`apple`,`arm`,`qualcomm`,`img-tec`]),Lu=class{constructor(e){this._renderer=e}async init(e){return this._initPromise||=(this._options=e,(e.gpu?Promise.resolve(e.gpu):this._createDeviceAndAdaptor(e)).then(e=>this._setGpu(e))),this._initPromise}_setGpu(e){this.gpu=e,this.extensions={transientAttachment:typeof GPUTextureUsage.TRANSIENT_ATTACHMENT==`number`,tileBased:Iu.has(e.adapter?.info?.vendor)},this._options.gpu||e.device.lost.then(()=>this._restoreDevice()).catch(e=>O(`WebGPU device was lost and could not be restored`,e)),this._renderer.runners.contextChange.emit(this.gpu)}async _restoreDevice(){if(!this._renderer)return;let e=await this._createDeviceAndAdaptor(this._options);this._renderer?this._setGpu(e):e.device.destroy()}contextChange(e){this._renderer.gpu=e}async _createDeviceAndAdaptor(e){let t=await b.get().getNavigator().gpu.requestAdapter({powerPreference:e.powerPreference,forceFallbackAdapter:e.forceFallbackAdapter});if(!t)throw Error(`WebGPU not supported. No GPU adapter was returned by navigator.gpu.requestAdapter().`);let n=[`texture-compression-bc`,`texture-compression-astc`,`texture-compression-etc2`,`indirect-first-instance`,`bgra8unorm-storage`,`texture-formats-tier1`].filter(e=>t.features.has(e));return{adapter:t,device:await t.requestDevice({requiredFeatures:n,requiredLimits:{maxSampledTexturesPerShaderStage:t.limits.maxSampledTexturesPerShaderStage,maxSamplersPerShaderStage:t.limits.maxSamplersPerShaderStage}})}}destroy(){this._options?.gpu||this.gpu?.device.destroy(),this.gpu=null,this.extensions=null,this._renderer=null}};Lu.extension={type:[i.WebGPUSystem],name:`device`},Lu.defaultOptions={powerPreference:void 0,forceFallbackAdapter:!1};var Ru=class{constructor(e,t,n,r){this.gpuBundle=e,this.stateKey=t,this.device=n,this.label=r}},zu=class{constructor(e){this._boundBindGroup=Object.create(null),this._boundVertexBuffer=Object.create(null),this._renderer=e;for(let e=0;e<16;e++)this._boundBindGroup[e]={bindGroup:null,program:null,key:null}}renderStart(){this.commandFinished=new Promise(e=>{this._resolveCommandFinished=e}),this.commandEncoder=this._renderer.gpu.device.createCommandEncoder()}beginRenderPass(e){return this.endRenderPass(),this._clearCache(),this._passEncoder=this.commandEncoder.beginRenderPass(e.descriptor),this.renderPassEncoder=this._passEncoder,this._passEncoder}endRenderPass(){this._passEncoder&&this._passEncoder.end(),this.renderPassEncoder=null,this._passEncoder=null}beginBundle(e){if(this._passEncoder!==this.renderPassEncoder)throw Error(`Cannot begin a new render bundle while one is already being recorded.`);this._clearCache();let t=this._renderer.pipeline,n=t.getBundleDescriptor();n.label=e,this._bundleStateKey=t.bundleStateKey,this._bundleLabel=e,this.renderPassEncoder=this._gpu.device.createRenderBundleEncoder(n)}endBundle(){let e=this.renderPassEncoder;if(!e||!(`finish`in e))throw Error(`endBundle called without an active render bundle.`);let t=e.finish({label:this._bundleLabel});return this.renderPassEncoder=this._passEncoder,this._clearCache(),new Ru(t,this._bundleStateKey,this._gpu.device,this._bundleLabel)}isBundleValid(e){return e?.stateKey===this._renderer.pipeline.bundleStateKey&&e.device===this._gpu.device}executeBundle(e){let t=[];if(Array.isArray(e))for(let n=0;n<e.length;n++)t[n]=this._getGpuBundle(e[n]);else t[0]=this._getGpuBundle(e);this._clearCache(),this._passEncoder.executeBundles(t)}_getGpuBundle(e){return this.isBundleValid(e)||O(`Render bundle ${e?.label??`(unlabeled)`} was recorded against a different render target state or on a lost device. Re-record it \u2014 replaying it will either be rejected by WebGPU or draw with the wrong winding. Check encoder.isBundleValid(bundle) before executing.`),e.gpuBundle}setViewport(e){this._passEncoder.setViewport(e.x,e.y,e.width,e.height,0,1)}setStencilReference(e){this._passEncoder.setStencilReference(e)}setPipelineFromGeometryProgramAndState(e,t,n,r,i){let a=this._renderer.pipeline.getPipeline(e,t,n,r,i);this.setPipeline(a)}setPipeline(e){this._boundPipeline!==e&&(this._boundPipeline=e,this.renderPassEncoder.setPipeline(e))}_setVertexBuffer(e,t){this._boundVertexBuffer[e]!==t&&(this._boundVertexBuffer[e]=t,this.renderPassEncoder.setVertexBuffer(e,this._renderer.buffer.updateBuffer(t)))}_setIndexBuffer(e){if(this._boundIndexBuffer===e)return;this._boundIndexBuffer=e;let t=e.data.BYTES_PER_ELEMENT===2?`uint16`:`uint32`;this.renderPassEncoder.setIndexBuffer(this._renderer.buffer.updateBuffer(e),t)}resetBindGroup(e){let t=this._boundBindGroup[e];t.bindGroup=null,t.program=null,t.key=null}setBindGroup(e,t,n){let r=this._boundBindGroup[e];if(r.bindGroup===t&&r.program===n&&r.key===t._key)return;r.bindGroup=t,r.program=n,r.key=t._key,t._touch(this._renderer.gc.now);let i=this._renderer.bindGroup.getBindGroup(t,n,e);this.renderPassEncoder.setBindGroup(e,i)}setGeometry(e,t){let n=this._renderer.pipeline.getBufferNamesToBind(e,t);for(let t=0;t<n.length;t++)this._setVertexBuffer(t,e.attributes[n[t]].buffer);e.indexBuffer&&this._setIndexBuffer(e.indexBuffer)}_setShaderBindGroups(e,t){let n=e.gpuProgram,r=n.layout;for(let i=0;i<r.length;i++){let a=e.groups[i];r[i]&&a&&(t||this._syncBindGroup(a),this.setBindGroup(i,a,n))}}_syncBindGroup(e){let t=e.resources,n=e._resourceKeys;for(let e=0;e<n.length;e++){let r=t[n[e]];r&&r.isUniformGroup&&this._renderer.ubo.updateUniformGroup(r)}}draw(e){let{geometry:t,shader:n,state:r,topology:i,size:a,start:o,baseVertex:s,instanceCount:c,skipSync:l,firstInstance:u}=e;this.setPipelineFromGeometryProgramAndState(t,n.gpuProgram,r,i,n._overrides),this.setGeometry(t,n.gpuProgram),this._setShaderBindGroups(n,l),t.indexBuffer?this.renderPassEncoder.drawIndexed(a||t.indexCount||t.indexBuffer.data.length,c??t.instanceCount,o||0,s||0,u||0):this.renderPassEncoder.draw(a||t.vertexCount,c??t.instanceCount,o||0,u||0)}drawIndirect(e){let{geometry:t,shader:n,state:r,topology:i,skipSync:a,indirectBuffer:o,indirectOffset:s}=e;this.setPipelineFromGeometryProgramAndState(t,n.gpuProgram,r,i,n._overrides),this.setGeometry(t,n.gpuProgram),this._setShaderBindGroups(n,a),t.indexBuffer?this.renderPassEncoder.drawIndexedIndirect(o,s):this.renderPassEncoder.drawIndirect(o,s)}finishRenderPass(){this._passEncoder&&=(this._passEncoder.end(),this.renderPassEncoder=null,null)}postrender(){this.finishRenderPass(),this._gpu.device.queue.submit([this.commandEncoder.finish()]),this._resolveCommandFinished(),this.commandEncoder=null}_clearCache(){for(let e=0;e<16;e++){let t=this._boundBindGroup[e];t.bindGroup=null,t.program=null,t.key=null,this._boundVertexBuffer[e]=null}this._boundIndexBuffer=null,this._boundPipeline=null}destroy(){this._renderer=null,this._gpu=null,this._boundBindGroup=null,this._boundVertexBuffer=null,this._boundIndexBuffer=null,this._boundPipeline=null,this.renderPassEncoder=null,this._passEncoder=null}contextChange(e){this._gpu=e}};zu.extension={type:[i.WebGPUSystem],name:`encoder`,priority:1};var Bu=class{constructor(e){this.supportsOverrideConstants=!1,this._renderer=e}contextChange(){let e=this._renderer.device.gpu.device;this.maxTextures=Math.min(e.limits.maxSampledTexturesPerShaderStage,e.limits.maxSamplersPerShaderStage),this.maxBatchableTextures=this.maxTextures,this._detectOverrideConstantsSupport(e)}_detectOverrideConstantsSupport(e){e.pushErrorScope(`validation`);let t=e.createShaderModule({code:`override TEST_VALUE: f32 = 0.0;
|
|
388
|
+
@compute @workgroup_size(1) fn main() {}`});e.createComputePipeline({layout:`auto`,compute:{module:t,entryPoint:`main`,constants:{TEST_VALUE:1}}}),e.popErrorScope().then(e=>{this.supportsOverrideConstants=!e})}destroy(){}};Bu.extension={type:[i.WebGPUSystem],name:`limits`};var Vu=class{constructor(e){this._renderer=e,e.renderTarget.onRenderTargetChange.add(this)}contextChange(){this._activeGpuRenderTarget=null}onRenderTargetChange(e){let t=this._renderer.renderTarget.getGpuRenderTarget(e);this._activeRenderTarget=e,this._activeGpuRenderTarget=t,this.setStencilMode(t.stencilMode,t.stencilReference)}setStencilMode(e,t){let n=this._activeGpuRenderTarget??=this._renderer.renderTarget.getGpuRenderTarget(this._activeRenderTarget);n.stencilMode=e,n.stencilReference=t;let r=this._renderer;r.pipeline.setStencilMode(e),r.encoder.setStencilReference(t)}destroy(){this._renderer.renderTarget.onRenderTargetChange.remove(this),this._renderer=null,this._activeRenderTarget=null,this._activeGpuRenderTarget=null}};Vu.extension={type:[i.WebGPUSystem],name:`stencil`};var Hu={i32:{align:4,size:4},u32:{align:4,size:4},f32:{align:4,size:4},f16:{align:2,size:2},"vec2<i32>":{align:8,size:8},"vec2<u32>":{align:8,size:8},"vec2<f32>":{align:8,size:8},"vec2<f16>":{align:4,size:4},"vec3<i32>":{align:16,size:12},"vec3<u32>":{align:16,size:12},"vec3<f32>":{align:16,size:12},"vec3<f16>":{align:8,size:6},"vec4<i32>":{align:16,size:16},"vec4<u32>":{align:16,size:16},"vec4<f32>":{align:16,size:16},"vec4<f16>":{align:8,size:8},"mat2x2<f32>":{align:8,size:16},"mat2x2<f16>":{align:4,size:8},"mat3x2<f32>":{align:8,size:24},"mat3x2<f16>":{align:4,size:12},"mat4x2<f32>":{align:8,size:32},"mat4x2<f16>":{align:4,size:16},"mat2x3<f32>":{align:16,size:32},"mat2x3<f16>":{align:8,size:16},"mat3x3<f32>":{align:16,size:48},"mat3x3<f16>":{align:8,size:24},"mat4x3<f32>":{align:16,size:64},"mat4x3<f16>":{align:8,size:32},"mat2x4<f32>":{align:16,size:32},"mat2x4<f16>":{align:8,size:16},"mat3x4<f32>":{align:16,size:48},"mat3x4<f16>":{align:8,size:24},"mat4x4<f32>":{align:16,size:64},"mat4x4<f16>":{align:8,size:32}};function Uu(e){let t=e.map(e=>({data:e,offset:0,size:0})),n=0;for(let e=0;e<t.length;e++){let r=t[e],i=Hu[r.data.type].size,a=Hu[r.data.type].align;if(!Hu[r.data.type])throw Error(`[Pixi.js] WebGPU UniformBuffer: Unknown type ${r.data.type}`);r.data.size>1&&(i=Math.max(i,a)*r.data.size),n=Math.ceil(n/a)*a,r.size=i,r.offset=n,n+=i}return n=Math.ceil(n/16)*16,{uboElements:t,size:n}}function Wu(e,t){let{size:n,align:r}=Hu[e.data.type],i=(Math.max(n,r)-n)/4,a=e.data.type.indexOf(`i32`)>=0?`dataInt32`:`data`;return`
|
|
389
|
+
v = uv.${e.data.name};
|
|
390
|
+
${t===0?``:`offset += ${t};`}
|
|
391
|
+
|
|
392
|
+
arrayOffset = offset;
|
|
393
|
+
|
|
394
|
+
t = 0;
|
|
395
|
+
|
|
396
|
+
for(var i=0; i < ${e.data.size}; i++)
|
|
397
|
+
{
|
|
398
|
+
for(var j = 0; j < ${n/4}; j++)
|
|
399
|
+
{
|
|
400
|
+
${a}[arrayOffset++] = v[t++];
|
|
401
|
+
}
|
|
402
|
+
${i===0?``:`arrayOffset += ${i};`}
|
|
403
|
+
}
|
|
404
|
+
`}function Gu(e){return Xe(e,et,Wu)}var Ku=class extends st{constructor(){super({createUboElements:Uu,generateUboSync:Gu})}};Ku.extension={type:[i.WebGPUSystem],name:`ubo`};var qu=128,Ju=class{constructor(e){this._bindGroupHash=Object.create(null),this._buffers=[],this._bindGroups=[],this._bufferResources=[],this._renderer=e,this._batchBuffer=new Pu({minUniformOffsetAlignment:qu});let t=256/qu;for(let e=0;e<t;e++){let t=x.UNIFORM|x.COPY_DST;e===0&&(t|=x.COPY_SRC),this._buffers.push(new ne({data:this._batchBuffer.data,usage:t}))}}renderEnd(){this._uploadBindGroups(),this._resetBindGroups()}_resetBindGroups(){this._bindGroupHash=Object.create(null),this._batchBuffer.clear()}getUniformBindGroup(e,t){if(!t&&this._bindGroupHash[e.uid])return this._bindGroupHash[e.uid];this._renderer.ubo.ensureUniformGroup(e);let n=e.buffer.data,r=this._batchBuffer.addEmptyGroup(n.length);return this._renderer.ubo.syncUniformGroup(e,this._batchBuffer.data,r/4),this._bindGroupHash[e.uid]=this._getBindGroup(r/qu),this._bindGroupHash[e.uid]}getUboResource(e){this._renderer.ubo.updateUniformGroup(e);let t=e.buffer.data,n=this._batchBuffer.addGroup(t);return this._getBufferResource(n/qu)}getArrayBindGroup(e){let t=this._batchBuffer.addGroup(e);return this._getBindGroup(t/qu)}getArrayBufferResource(e){let t=this._batchBuffer.addGroup(e)/qu;return this._getBufferResource(t)}_getBufferResource(e){if(!this._bufferResources[e]){let t=this._buffers[e%2];this._bufferResources[e]=new rt({buffer:t,offset:(e/2|0)*256,size:qu})}return this._bufferResources[e]}_getBindGroup(e){if(!this._bindGroups[e]){let t=new _({0:this._getBufferResource(e)});this._bindGroups[e]=t}return this._bindGroups[e]}_uploadBindGroups(){let e=this._renderer.buffer,t=this._buffers[0];t.update(this._batchBuffer.byteIndex),e.updateBuffer(t);let n=this._renderer.gpu.device.createCommandEncoder();for(let r=1;r<this._buffers.length;r++){let i=this._buffers[r];n.copyBufferToBuffer(e.getGPUBuffer(t),qu,e.getGPUBuffer(i),0,this._batchBuffer.byteIndex)}this._renderer.gpu.device.queue.submit([n.finish()])}destroy(){for(let e=0;e<this._bindGroups.length;e++)this._bindGroups[e]?.destroy();this._bindGroups=null,this._bindGroupHash=null;for(let e=0;e<this._buffers.length;e++)this._buffers[e].destroy();this._buffers=null;for(let e=0;e<this._bufferResources.length;e++)this._bufferResources[e].destroy();this._bufferResources=null,this._batchBuffer.destroy(),this._renderer=null}};Ju.extension={type:[i.WebGPUPipes],name:`uniformBatch`};var Yu={"point-list":0,"line-list":1,"line-strip":2,"triangle-list":3,"triangle-strip":4},Xu=new T({}),Zu={"depth24plus-stencil8":{depth:!0,stencil:!0,index:1},depth24plus:{depth:!0,stencil:!1,index:2},depth32float:{depth:!0,stencil:!1,index:3},"depth32float-stencil8":{depth:!0,stencil:!0,index:4},depth16unorm:{depth:!0,stencil:!1,index:5},stencil8:{depth:!1,stencil:!0,index:6}},Qu={depth:!1,stencil:!1,index:0};function $u(e,t){for(let[n,r]of Object.entries(t)){let t=RegExp(`override\\s+${n}\\s*:\\s*(\\w+)\\s*(?:=[^;]*)?;`);e=e.replace(t,(e,t)=>{let i;return i=t===`u32`?`${Math.trunc(r)}u`:t===`i32`?`${Math.trunc(r)}`:Number.isInteger(r)?`${r}.0`:`${r}`,`const ${n}: ${t} = ${i};`})}return e}function ed(e,t,n,r,i,a){return e*35184372088832+t*536870912+a*16384+(n<<8)+(r<<3)+i}var td=Object.create(null),nd=0;function rd(e){let t=td[e];return t===void 0&&(t=td[e]=nd++),t}function id(e,t,n,r,i,a,o,s){return s<<20|a<<16|i<<13|n<<9|e<<6|o<<5|r<<1|t}function ad(e,t,n,r,i,a,o){return o<<11|a<<10|i<<9|r<<8|n<<5|t<<1|e}var od=class{constructor(e){this._moduleCache=Object.create(null),this._bufferLayoutsCache=Object.create(null),this._bindingNamesCache=Object.create(null),this._pipeCache=new Map,this._pipeStateCaches=Object.create(null),this._colorMask=15,this._multisampleCount=1,this._colorTargetCount=1,this._colorFormat=`bgra8unorm`,this._colorFormatId=rd(`bgra8unorm`),this._depthStencilFormat=`depth24plus-stencil8`,this._depthStencilFormatData=Qu,this._depthReadOnly=!1,this._stencilReadOnly=!1,this._invertFrontFace=!1,this._renderer=e}contextChange(e){this._gpu=e,this._moduleCache=Object.create(null),this._pipeStateCaches=Object.create(null),this.setStencilMode(We.DISABLED),this._updatePipeHash()}setMultisampleCount(e){this._multisampleCount!==e&&(this._multisampleCount=e,this._updatePipeHash())}setRenderTarget(e){let t=e.colorAttachments[0]?.texture;this._multisampleCount=t?.source.antialias?4:1,this._colorTargetCount=e.colorAttachments.length,this._colorFormat=t?.format??`bgra8unorm`,this._colorFormatId=rd(this._colorFormat),this._depthStencilFormat=e.depthStencilAttachment?.texture.format,this._depthStencilFormatData=Zu[this._depthStencilFormat]||Qu,this._depthReadOnly=e.depthStencilAttachment?.depthReadOnly??!1,this._stencilReadOnly=e.depthStencilAttachment?.stencilReadOnly??this._depthReadOnly,this._invertFrontFace=this._renderer.renderTarget.isFrontFaceInverted(e,e.flipY),this._updatePipeHash()}setColorMask(e){this._colorMask!==e&&(this._colorMask=e,this._updatePipeHash())}setStencilMode(e){this._stencilMode!==e&&(this._stencilMode=e,this._stencilState=Ze[e],this._updatePipeHash())}get bundleStateKey(){let e=this._depthStencilFormatData;return ad(this._multisampleCount===1?0:1,this._colorTargetCount,e.index,e.depth&&this._depthReadOnly?1:0,e.stencil&&this._stencilReadOnly?1:0,+!!this._invertFrontFace,this._colorFormatId)}getBundleDescriptor(){let e=[];for(let t=0;t<this._colorTargetCount;t++)e.push(this._colorFormat);let t={colorFormats:e,sampleCount:this._multisampleCount},n=this._depthStencilFormatData;return(n.depth||n.stencil)&&(t.depthStencilFormat=this._depthStencilFormat,n.depth&&this._depthReadOnly&&(t.depthReadOnly=!0),n.stencil&&this._stencilReadOnly&&(t.stencilReadOnly=!0)),t}setPipeline(e,t,n,r){let i=this.getPipeline(e,t,n);r.setPipeline(i)}getPipelineKey(e,t,n,r,i){return e._layoutKey||(tt(e,t.attributeData),this._generateBufferKey(e)),ed(e._layoutKey,t._layoutKey,n.data,n._blendModeId,Yu[r],i.id)}getPipeline(e,t,n,r,i){e._layoutKey||(tt(e,t.attributeData),this._generateBufferKey(e)),r||=e.topology,i||=Xu;let a=ed(e._layoutKey,t._layoutKey,n.data,n._blendModeId,Yu[r],i.id),o=this._pipeCache.get(a);return o||(o=this._createPipeline(e,t,n,r,i),this._pipeCache.set(a,o)),o}_createPipeline(e,t,n,r,i){let a=this._gpu.device,o=this._createVertexBufferLayouts(e,t),s=this._renderer.state.getColorTargets(n,this._colorTargetCount,this._colorFormat),c=this._stencilMode===We.RENDERING_MASK_ADD?0:this._colorMask;for(let e=0;e<s.length;e++)s[e].writeMask=c;let l=this._renderer.shader.getProgramData(t).pipeline,u=Object.keys(i.data).length>0,d=t.vertex.source,f=t.fragment.source,p;u&&(this._renderer.limits.supportsOverrideConstants?p=i.data:(d=$u(d,i.data),f=$u(f,i.data)));let m={vertex:{module:this._getModule(d),entryPoint:t.vertex.entryPoint,constants:p,buffers:o},fragment:{module:this._getModule(f),entryPoint:t.fragment.entryPoint,targets:s,constants:p},primitive:{topology:r,cullMode:n.culling?`back`:`none`,frontFace:n.clockwiseFrontFace===this._invertFrontFace?`ccw`:`cw`},layout:l,multisample:{count:this._multisampleCount},label:t.name?`PIXI Pipeline (${t.name})`:`PIXI Pipeline`};if(this._depthStencilFormatData.depth||this._depthStencilFormatData.stencil){let e=this._depthStencilFormatData;m.depthStencil={...this._stencilState,format:this._depthStencilFormat,depthWriteEnabled:e.depth?n.depthMask&&!this._depthReadOnly:!1,depthCompare:e.depth&&n.depthTest?`less`:`always`}}return a.createRenderPipeline(m)}_getModule(e){return this._moduleCache[e]||this._createModule(e)}_createModule(e){let t=this._gpu.device;return this._moduleCache[e]=t.createShaderModule({code:e}),this._moduleCache[e]}_generateBufferKey(e){let t=[],n=0,r=Object.keys(e.attributes).sort();for(let i=0;i<r.length;i++){let a=e.attributes[r[i]];t[n++]=a.offset,t[n++]=a.format,t[n++]=a.stride,t[n++]=a.instance}let i=t.join(`|`);return e._layoutKey=ee(i,`geometry`),e._layoutKey}_generateAttributeLocationsKey(e){let t=[],n=0,r=Object.keys(e.attributeData).sort();for(let i=0;i<r.length;i++){let a=e.attributeData[r[i]];t[n++]=a.location}let i=t.join(`|`);return e._attributeLocationsKey=ee(i,`programAttributes`),e._attributeLocationsKey}getBufferNamesToBind(e,t){let n=e._layoutKey<<16|t._attributeLocationsKey;if(this._bindingNamesCache[n])return this._bindingNamesCache[n];let r=this._createVertexBufferLayouts(e,t),i=[],a=t.attributeData;for(let e=0;e<r.length;e++){let t=Object.values(r[e].attributes)[0].shaderLocation;for(let n in a)if(a[n].location===t){i[e]=n;break}}return this._bindingNamesCache[n]=i,i}_createVertexBufferLayouts(e,t){t._attributeLocationsKey||this._generateAttributeLocationsKey(t);let n=e._layoutKey<<16|t._attributeLocationsKey;if(this._bufferLayoutsCache[n])return this._bufferLayoutsCache[n];let r=[];return e.buffers.forEach(n=>{let i={arrayStride:0,stepMode:`vertex`,attributes:[]},a=i.attributes;for(let r in t.attributeData){let o=e.attributes[r];(o.divisor??1)!==1&&O(`Attribute ${r} has an invalid divisor value of '${o.divisor}'. WebGPU only supports a divisor value of 1`),o.buffer===n&&(i.arrayStride=o.stride,i.stepMode=o.instance?`instance`:`vertex`,a.push({shaderLocation:t.attributeData[r].location,offset:o.offset,format:o.format}))}a.length&&r.push(i)}),this._bufferLayoutsCache[n]=r,r}_updatePipeHash(){var e;let t=id(this._stencilMode,this._multisampleCount===1?0:1,this._colorMask,this._colorTargetCount,this._depthStencilFormatData.index,this._colorFormatId,+!!this._depthReadOnly,+!!this._invertFrontFace);this._pipeCache=(e=this._pipeStateCaches)[t]??(e[t]=new Map)}destroy(){this._bufferLayoutsCache=null,this._pipeCache=null,this._gpu=null,this._renderer=null,this._bindingNamesCache=null,this._pipeStateCaches=null,this._moduleCache=null}};od.extension={type:[i.WebGPUSystem],name:`pipeline`};var sd=class{constructor(e){this._pipelines=Object.create(null),this._modules=Object.create(null),this._bindGroups=new WeakMap,this._renderer=e,this._device=e.gpu.device,this._layout=this._device.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:`unfilterable-float`}}]}),this._pipelineLayout=this._device.createPipelineLayout({bindGroupLayouts:[this._layout]})}copy(e,t,r,i){var a;let o=this._renderer.renderTarget.getGpuRenderTarget(t),s=t.colorAttachments[r].texture;(a=o.msaaBackTextures)[r]??(a[r]=new n({label:`msaa-back-texture`,width:s.width,height:s.height,resolution:s._resolution,format:o.msaaTextures[r].format,autoGenerateMipmaps:!1,autoGarbageCollect:!0}));let c=this._renderer.texture.getGpuSource(o.msaaBackTextures[r]);e.copyTextureToTexture({texture:i},{texture:c},{width:Math.min(i.width,c.width),height:Math.min(i.height,c.height)})}draw(e,t,n){var r;let i=this._renderer.renderTarget.getGpuRenderTarget(t),a=this._renderer.texture.getGpuSource(i.msaaBackTextures[n]),o=t.depthStencilAttachment?.texture.format??``;for(let e of t.colorAttachments)o+=`|${e.texture.format}`;let s=(r=this._pipelines)[o]??(r[o]=[]),c=this._bindGroups.get(a);c||(c=this._device.createBindGroup({layout:this._layout,entries:[{binding:0,resource:a.createView()}]}),this._bindGroups.set(a,c)),e.setPipeline(s[n]??(s[n]=this._createPipeline(t,n))),e.setBindGroup(0,c),e.draw(3)}_getModule(e){var t;return(t=this._modules)[e]??(t[e]=this._device.createShaderModule({label:`msaa-restore`,code:`
|
|
405
|
+
@group(0) @binding(0) var resolved: texture_2d<f32>;
|
|
406
|
+
|
|
407
|
+
@vertex
|
|
408
|
+
fn vertexMain(@builtin(vertex_index) i: u32) -> @builtin(position) vec4<f32> {
|
|
409
|
+
let pos = array<vec2<f32>, 3>(vec2<f32>(-1.0, -1.0), vec2<f32>(3.0, -1.0), vec2<f32>(-1.0, 3.0));
|
|
410
|
+
|
|
411
|
+
return vec4<f32>(pos[i], 0.0, 1.0);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
@fragment
|
|
415
|
+
fn fragmentMain(@builtin(position) position: vec4<f32>) -> @location(${e}) vec4<f32> {
|
|
416
|
+
return textureLoad(resolved, vec2<i32>(position.xy), 0);
|
|
417
|
+
}
|
|
418
|
+
`})),this._modules[e]}_createPipeline(e,t){let n=e.depthStencilAttachment?.texture.format,r;n&&(r={format:n},n.includes(`depth`)&&(r.depthWriteEnabled=!1,r.depthCompare=`always`));let i=this._getModule(t);return this._device.createRenderPipeline({label:`msaa-restore`,layout:this._pipelineLayout,vertex:{module:i,entryPoint:`vertexMain`},fragment:{module:i,entryPoint:`fragmentMain`,targets:e.colorAttachments.map((e,n)=>({format:e.texture.format,writeMask:n===t?GPUColorWrite.ALL:0}))},depthStencil:r,multisample:{count:4}})}},cd=class{constructor(){this.contexts=[],this.canvasTextures=[],this.msaaTextures=[],this.transient=!1,this.msaaSamples=1,this.msaaBackTextures=[],this.stencilMode=We.DISABLED,this.stencilReference=0,this.maskStackIndex=0}},ld={bgra8unorm:!0,rgba8unorm:!0,rgba16float:!0};function ud(e){if(ld[e])return e;let t=navigator.gpu.getPreferredCanvasFormat();return O(`[WebGPU] CanvasSource format '${e}' is not a valid GPUCanvasContext format. Falling back to '${t}'. Allowed formats are: bgra8unorm, rgba8unorm, rgba16float.`),t}var dd=class{constructor(){this._activePass=null}init(e,t){this._renderer=e,this._renderTargetSystem=t,e.runners.contextChange.add(this),e.runners.destroy.add(this)}contextChange(){this._msaaRestore=null}destroy(){this._msaaRestore=null}copyToTexture(e,t,n,r,i){let a=this._renderer;this.finishRenderPass();let o=this._getGpuColorTexture(e),s=a.texture.getGpuSource(t.source);return a.encoder.commandEncoder.copyTextureToTexture({texture:o,origin:n},{texture:s,origin:i},r),t}copyDepthTexture(e,t,n,r,i){let a=this._renderer;this.finishRenderPass();let o=e.depthStencilAttachment.texture,s=a.texture.getGpuSource(o),c=a.texture.getGpuSource(t.source),l=a.encoder.commandEncoder===null,u=l?a.gpu.device.createCommandEncoder():a.encoder.commandEncoder;u.copyTextureToTexture({texture:s,origin:n},{texture:c,origin:i},{width:r.width,height:r.height}),l&&a.gpu.device.queue.submit([u.finish()])}startRenderPass(e,t=!0,n,r,i=0,a=0){let o=this._renderTargetSystem.getGpuRenderTarget(e);if(a!==0&&o.msaaTextures?.length)throw Error(`[RenderTargetSystem] Rendering to array layers is not supported with MSAA render targets.`);if(i>0&&o.msaaTextures?.length)throw Error(`[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.`);let s=t;typeof s==`boolean`&&(s=s?U.ALL:U.NONE),(e.stencil||e.depth)&&!e.depthStencilAttachment&&e.ensureDepthStencilTexture();let c=!!e.depthStencilAttachment,l=this._activePass,u=l!==null&&l.renderTarget===e&&l.mipLevel===i&&l.layer===a&&l.depthStencil===c&&this._renderer.encoder.renderPassEncoder!==null&&s===U.NONE;if(this._renderer.pipeline.setRenderTarget(e),u){this._renderer.encoder.setViewport(r);return}let{descriptor:d,restore:f}=this._buildDescriptor(e,t,n,i,a);o.descriptor=d;let p=this._renderer.encoder;f?(p.endRenderPass(),this._beginRestoredPass(e,f,p.commandEncoder,()=>p.beginRenderPass(o))):p.beginRenderPass(o),p.setViewport(r),this._activePass={renderTarget:e,mipLevel:i,layer:a,depthStencil:c}}finishRenderPass(){this._renderer.encoder.endRenderPass(),this._activePass=null}_beginRestoredPass(e,t,n,r){let i=this._msaaRestore??=new sd(this._renderer);for(let r of t)i.copy(n,e,r,this._getGpuColorTexture(e,r));let a=r();for(let n of t)i.draw(a,e,n);return a}_getGpuColorTexture(e,t=0){if(e.colorAttachments.length===0)throw Error(`[GpuRenderTargetAdaptor] cannot get gpu color texture from a depth-only render target`);let n=e.colorAttachments[t].texture;return n instanceof I&&n._gpuContext?n._gpuContext.getCurrentTexture():this._renderer.texture.getGpuSource(n)}getDescriptor(e,t,n,r=0,i=0){return this._buildDescriptor(e,t,n,r,i).descriptor}_buildDescriptor(e,t,n,r=0,i=0){let a=null;typeof t==`boolean`&&(t=t?U.ALL:U.NONE);let o=this._renderTargetSystem,s=o.getGpuRenderTarget(e),c=e.colorAttachments.map((e,c)=>{let l=e.texture,u=l instanceof I?l._gpuContext:null,d,f,p=!1;if(u){if(i!==0)throw Error(`[RenderTargetSystem] Rendering to array layers is not supported for canvas targets.`);let t=u.getCurrentTexture();p=s.canvasTextures[c]!==t,s.canvasTextures[c]=t,d=t.createView(e.viewDescriptor)}else d=this._renderer.texture.getTextureRenderTargetView(e.texture,r,i,e.viewDescriptor);let m=s.msaaTextures[c];m&&(f=d,d=this._renderer.texture.getTextureView(m));let h=e.loadOp;t!==void 0&&(h=t&U.COLOR?`clear`:`load`),n??=o.defaultClearColor;let g=!!m?.transient,_=g&&h!==`clear`,v=_&&!p;_&&(h=`clear`,v&&(a??=[]).push(c));let y={view:d,resolveTarget:f,storeOp:g?`discard`:e.storeOp??`store`,loadOp:h};l.dimension===`3d`&&(y.depthSlice=i),_?y.clearValue=[0,0,0,0]:h===`clear`&&(n??=e.clearValue??o.defaultClearColor,y.clearValue=n);for(let t in e)t!==`texture`&&t!==`viewDescriptor`&&t!==`clearValue`&&t!==`loadOp`&&t!==`storeOp`&&(y[t]=e[t]);return y}),l;if(e.depthStencilAttachment){this._prepareDepthStencil(e,s);let n=e.depthStencilAttachment,a=n.texture.format.includes(`stencil`),o=n.texture.format.includes(`depth`),c=s.transient?`discard`:`store`,u=s.transient?`clear`:`load`;l={view:this._renderer.texture.getTextureRenderTargetView(n.texture,r,i,n.viewDescriptor)};let d=n.depthReadOnly??!1,f=n.stencilReadOnly??d;a&&!f?(l.stencilLoadOp=t&U.STENCIL?`clear`:n.stencilLoadOp??u,l.stencilStoreOp=n.stencilStoreOp??c,l.stencilLoadOp===`clear`&&(l.stencilClearValue=n.stencilClearValue??0)):a&&f&&(l.stencilReadOnly=!0),o&&!d?(l.depthLoadOp=t&U.DEPTH?`clear`:n.depthLoadOp??u,l.depthStoreOp=n.depthStoreOp??c,l.depthLoadOp===`clear`&&(l.depthClearValue=n.depthClearValue??1)):o&&d&&(l.depthReadOnly=!0);for(let e in n)e!==`texture`&&e!==`viewDescriptor`&&e!==`stencilLoadOp`&&e!==`stencilStoreOp`&&e!==`stencilClearValue`&&e!==`stencilReadOnly`&&e!==`depthLoadOp`&&e!==`depthStoreOp`&&e!==`depthClearValue`&&e!==`depthReadOnly`&&(l[e]=n[e])}return{descriptor:{colorAttachments:c,depthStencilAttachment:l,label:e.label},restore:a}}clear(e,t=!0,n,r,i=0,a=0){if(!t)return;let{gpu:o,encoder:s}=this._renderer,c=o.device;if(s.commandEncoder===null){let o=c.createCommandEncoder(),{descriptor:s,restore:l}=this._buildDescriptor(e,t,n,i,a),u=()=>o.beginRenderPass(s),d=l?this._beginRestoredPass(e,l,o,u):u();d.setViewport(r.x,r.y,r.width,r.height,0,1),d.end();let f=o.finish();c.queue.submit([f])}else this.startRenderPass(e,t,n,r,i,a)}initGpuRenderTarget(e){e.isRoot=!0;let t=new cd;return t.transient=!!e.colorTexture?.antialias&&!!e.colorTexture.transient,e.colorAttachments.forEach((e,r)=>{let i=e.texture;if(i instanceof I){let e=i._gpuContext??=i.resource.getContext(`webgpu`),n=i.transparent?`premultiplied`:`opaque`,a=ud(i.format);try{e.configure({device:this._renderer.gpu.device,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,format:a,alphaMode:n,...a===`rgba16float`?{toneMapping:{mode:`extended`}}:{}})}catch(e){console.error(e)}t.contexts[r]=e}if(t.msaa=i.source.antialias,i.antialias){let e=new n({width:0,height:0,sampleCount:4,autoGenerateMipmaps:!1,transient:this._renderer.device.extensions.tileBased||t.transient,arrayLayerCount:i.arrayLayerCount,format:i.format});t.msaaTextures[r]=e}}),t.msaa&&(t.msaaSamples=4),t}_prepareDepthStencil(e,t){let n=e.depthStencilAttachment?.texture;n&&t.msaa&&(n.sampleCount=4,n.transient=t.transient)}destroyGpuRenderTarget(e){e.contexts.forEach(e=>{e.unconfigure()}),e.msaaTextures.forEach(e=>{e.destroy()}),e.msaaBackTextures.forEach(e=>{e?.destroy()}),e.msaaTextures.length=0,e.msaaBackTextures.length=0,e.contexts.length=0}ensureDepthStencilTexture(e){this._prepareDepthStencil(e,this._renderTargetSystem.getGpuRenderTarget(e))}resizeGpuRenderTarget(e){let t=this._renderTargetSystem.getGpuRenderTarget(e);t.width=e.width,t.height=e.height,t.msaa&&e.colorAttachments.forEach((e,n)=>{let r=e.texture;t.msaaTextures[n]?.resize(r.width,r.height,r._resolution),t.msaaBackTextures[n]?.resize(r.width,r.height,r._resolution)})}},fd=class extends Te{constructor(e){super(e),this.adaptor=new dd,this.adaptor.init(e,this)}};fd.extension={type:[i.WebGPUSystem],name:`renderTarget`};var pd=class{constructor(){this._gpuProgramData=Object.create(null)}contextChange(e){this._gpu=e,this._gpuProgramData=Object.create(null)}getProgramData(e){return this._gpuProgramData[e._layoutKey]||this._createGPUProgramData(e)}_createGPUProgramData(e){let t=this._gpu.device,n=e.gpuLayout.map(e=>t.createBindGroupLayout({entries:e})),r={bindGroupLayouts:n};return this._gpuProgramData[e._layoutKey]={bindGroups:n,pipeline:t.createPipelineLayout(r)},this._gpuProgramData[e._layoutKey]}destroy(){this._gpu=null,this._gpuProgramData=null}};pd.extension={type:[i.WebGPUSystem],name:`shader`};var $={};$.normal={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`}},$.add={alpha:{srcFactor:`src-alpha`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`one`,dstFactor:`one`,operation:`add`}},$.multiply={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`dst`,dstFactor:`one-minus-src-alpha`,operation:`add`}},$.screen={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`one`,dstFactor:`one-minus-src`,operation:`add`}},$.overlay={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`one`,dstFactor:`one-minus-src`,operation:`add`}},$.none={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`zero`,dstFactor:`zero`,operation:`add`}},$[`normal-npm`]={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`src-alpha`,dstFactor:`one-minus-src-alpha`,operation:`add`}},$[`add-npm`]={alpha:{srcFactor:`one`,dstFactor:`one`,operation:`add`},color:{srcFactor:`src-alpha`,dstFactor:`one`,operation:`add`}},$[`screen-npm`]={alpha:{srcFactor:`one`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`src-alpha`,dstFactor:`one-minus-src`,operation:`add`}},$.erase={alpha:{srcFactor:`zero`,dstFactor:`one-minus-src-alpha`,operation:`add`},color:{srcFactor:`zero`,dstFactor:`one-minus-src`,operation:`add`}},$.min={alpha:{srcFactor:`one`,dstFactor:`one`,operation:`min`},color:{srcFactor:`one`,dstFactor:`one`,operation:`min`}},$.max={alpha:{srcFactor:`one`,dstFactor:`one`,operation:`max`},color:{srcFactor:`one`,dstFactor:`one`,operation:`max`}};var md=class{constructor(){this.defaultState=new L,this.defaultState.blend=!0}contextChange(e){this.gpu=e}getColorTargets(e,t,n){let r=e.blend?$[e.blendMode]||$.normal:void 0,i=[];for(let e=0;e<t;e++)i[e]={format:n,writeMask:0,blend:r};return i}destroy(){this.gpu=null}};md.extension={type:[i.WebGPUSystem],name:`state`};var hd=[new d,new d,new d],gd={type:`image`,upload(e,t,n,r=0){let i=e.resource,a=e.pixelWidth|0,o=e.pixelHeight|0,s=e.depthOrArrayLayers,c=i.byteLength/(a*o*s);if(s>1){n.device.queue.writeTexture({texture:t,origin:{x:0,y:0,z:r}},i,{offset:0,rowsPerImage:o,bytesPerRow:a*c},{width:a,height:o,depthOrArrayLayers:s});return}let l=ct(e._updateStart,e._updateEnd,a,o,hd);for(let e=0;e<l;e++){let o=hd[e];n.device.queue.writeTexture({texture:t,origin:{x:o.x,y:o.y,z:r}},i,{offset:(o.y*a+o.x)*c,rowsPerImage:o.height,bytesPerRow:a*c},{width:o.width,height:o.height,depthOrArrayLayers:1})}}},_d={"bc1-rgba-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"bc2-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc3-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc7-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"etc1-rgb-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"etc2-rgba8unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"astc-4x4-unorm":{blockBytes:16,blockWidth:4,blockHeight:4}},vd={blockBytes:4,blockWidth:1,blockHeight:1},yd={type:`compressed`,upload(e,t,n,r=0){let i=e.pixelWidth,a=e.pixelHeight,o=_d[e.format]||vd;for(let s=0;s<e.resource.length;s++){let c=e.resource[s],l=Math.ceil(i/o.blockWidth)*o.blockBytes;n.device.queue.writeTexture({texture:t,mipLevel:s,origin:{x:0,y:0,z:r}},c,{offset:0,bytesPerRow:l},{width:Math.ceil(i/o.blockWidth)*o.blockWidth,height:Math.ceil(a/o.blockHeight)*o.blockHeight,depthOrArrayLayers:1}),i=Math.max(i>>1,1),a=Math.max(a>>1,1)}}},bd=[`right`,`left`,`top`,`bottom`,`front`,`back`];function xd(e){return{type:`cube`,upload(t,n,r){let i=t.faces;for(let t=0;t<bd.length;t++){let a=i[bd[t]];(e[a.uploadMethodId]||e.image).upload(a,n,r,t)}}}}var Sd={type:`image`,upload(e,t,n,r=0){let i=e.resource;if(!i)return;if(globalThis.HTMLImageElement&&i instanceof HTMLImageElement){let t=b.get().createCanvas(i.width,i.height);t.getContext(`2d`).drawImage(i,0,0,i.width,i.height),e.resource=t,O(`ImageSource: Image element passed, converting to canvas and replacing resource.`)}let a=Math.min(t.width,e.resourceWidth||e.pixelWidth),o=Math.min(t.height,e.resourceHeight||e.pixelHeight),s=e.alphaMode===`premultiply-alpha-on-upload`;n.device.queue.copyExternalImageToTexture({source:i},{texture:t,origin:{x:0,y:0,z:r},premultipliedAlpha:s},{width:a,height:o})}},Cd={type:`video`,upload(e,t,n,r){Sd.upload(e,t,n,r)}},wd=[`rgba8unorm`,`rgba16float`],Td=4;function Ed(e,t){if(!t)throw Error(`[Gpu3dMipmapGenerator] generating mipmaps for a 3D texture needs storage: true.`);if(!wd.includes(e))throw Error(`[Gpu3dMipmapGenerator] format '${e}' can't be downsampled. Use ${wd.join(`, `)}.`)}var Dd=class{constructor(e){this._pipelines={},this._device=e,this._sampler=e.createSampler({magFilter:`linear`,minFilter:`linear`})}_getMipmapPipeline(e){var t;return(t=this._pipelines)[e]??(t[e]=this._device.createComputePipeline({layout:`auto`,compute:{module:this._device.createShaderModule({code:`
|
|
419
|
+
@group(0) @binding(0) var srcSampler : sampler;
|
|
420
|
+
@group(0) @binding(1) var src : texture_3d<f32>;
|
|
421
|
+
@group(0) @binding(2) var dst : texture_storage_3d<${e}, write>;
|
|
422
|
+
|
|
423
|
+
@compute @workgroup_size(${Td}, ${Td}, ${Td})
|
|
424
|
+
fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
|
|
425
|
+
let dstSize = textureDimensions(dst);
|
|
426
|
+
|
|
427
|
+
if (gid.x >= dstSize.x || gid.y >= dstSize.y || gid.z >= dstSize.z) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// centre of the 2x2x2 footprint in the previous mip. When a dimension is
|
|
432
|
+
// odd its last texel, row or slice is never sampled, as in the 2D generator
|
|
433
|
+
let uv = (vec3<f32>(gid) * 2.0 + 1.0) / vec3<f32>(textureDimensions(src));
|
|
434
|
+
|
|
435
|
+
textureStore(dst, gid, textureSampleLevel(src, srcSampler, uv, 0.0));
|
|
436
|
+
}
|
|
437
|
+
`}),entryPoint:`main`}})),this._pipelines[e]}generateMipmap(e){if(e.dimension!==`3d`)throw Error(`[Gpu3dMipmapGenerator] generateMipmap expects a 3D texture.`);if(e.mipLevelCount<2)return;Ed(e.format,(e.usage&GPUTextureUsage.STORAGE_BINDING)!==0);let t=this._getMipmapPipeline(e.format),n=t.getBindGroupLayout(0),r=this._device.createCommandEncoder({label:`Gpu3dMipmapGenerator`}),i=r.beginComputePass();i.setPipeline(t);let a=e.width,o=e.height,s=e.depthOrArrayLayers,c=e.createView({dimension:`3d`,baseMipLevel:0,mipLevelCount:1});for(let t=1;t<e.mipLevelCount;t++){a=Math.max(1,a>>1),o=Math.max(1,o>>1),s=Math.max(1,s>>1);let r=e.createView({dimension:`3d`,baseMipLevel:t,mipLevelCount:1});i.setBindGroup(0,this._device.createBindGroup({layout:n,entries:[{binding:0,resource:this._sampler},{binding:1,resource:c},{binding:2,resource:r}]})),i.dispatchWorkgroups(Math.ceil(a/Td),Math.ceil(o/Td),Math.ceil(s/Td)),c=r}i.end(),this._device.queue.submit([r.finish()])}},Od=class{constructor(e){this._pipelines={},this._device=e,this._sampler=e.createSampler({minFilter:`linear`})}_getMipmapPipeline(e){let t=this._pipelines[e];return t||(this._mipmapShaderModule||=this._device.createShaderModule({code:`
|
|
438
|
+
var<private> pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
|
|
439
|
+
vec2<f32>(-1.0, -1.0), vec2<f32>(-1.0, 3.0), vec2<f32>(3.0, -1.0));
|
|
440
|
+
|
|
441
|
+
struct VertexOutput {
|
|
442
|
+
@builtin(position) position : vec4<f32>,
|
|
443
|
+
@location(0) texCoord : vec2<f32>,
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
@vertex
|
|
447
|
+
fn vertexMain(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {
|
|
448
|
+
var output : VertexOutput;
|
|
449
|
+
output.texCoord = pos[vertexIndex] * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5);
|
|
450
|
+
output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);
|
|
451
|
+
return output;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
@group(0) @binding(0) var imgSampler : sampler;
|
|
455
|
+
@group(0) @binding(1) var img : texture_2d<f32>;
|
|
456
|
+
|
|
457
|
+
@fragment
|
|
458
|
+
fn fragmentMain(@location(0) texCoord : vec2<f32>) -> @location(0) vec4<f32> {
|
|
459
|
+
return textureSample(img, imgSampler, texCoord);
|
|
460
|
+
}
|
|
461
|
+
`}),t=this._device.createRenderPipeline({layout:`auto`,vertex:{module:this._mipmapShaderModule,entryPoint:`vertexMain`},fragment:{module:this._mipmapShaderModule,entryPoint:`fragmentMain`,targets:[{format:e}]}}),this._pipelines[e]=t),t}generateMipmap(e){if(e.dimension===`3d`)throw Error(`[GpuMipmapGenerator] a 3D texture uses Gpu3dMipmapGenerator.`);if(e.dimension===`1d`)throw Error(`Generating mipmaps for 1d textures is currently unsupported!`);let t=this._getMipmapPipeline(e.format),n=e,r=e.depthOrArrayLayers||1,i=e.usage&GPUTextureUsage.RENDER_ATTACHMENT;if(!i){let t={size:{width:Math.ceil(e.width/2),height:Math.ceil(e.height/2),depthOrArrayLayers:r},format:e.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT,mipLevelCount:e.mipLevelCount-1};n=this._device.createTexture(t)}let a=this._device.createCommandEncoder({}),o=t.getBindGroupLayout(0);for(let s=0;s<r;++s){let r=e.createView({baseMipLevel:0,mipLevelCount:1,dimension:`2d`,baseArrayLayer:s,arrayLayerCount:1}),c=+!!i;for(let i=1;i<e.mipLevelCount;++i){let e=n.createView({baseMipLevel:c++,mipLevelCount:1,dimension:`2d`,baseArrayLayer:s,arrayLayerCount:1}),i=a.beginRenderPass({colorAttachments:[{view:e,storeOp:`store`,loadOp:`clear`,clearValue:{r:0,g:0,b:0,a:0}}]}),l=this._device.createBindGroup({layout:o,entries:[{binding:0,resource:this._sampler},{binding:1,resource:r}]});i.setPipeline(t),i.setBindGroup(0,l),i.draw(3,1,0,0),i.end(),r=e}}if(!i){let t={width:Math.ceil(e.width/2),height:Math.ceil(e.height/2),depthOrArrayLayers:r};for(let r=1;r<e.mipLevelCount;++r)a.copyTextureToTexture({texture:n,mipLevel:r-1},{texture:e,mipLevel:r},t),t.width=Math.ceil(t.width/2),t.height=Math.ceil(t.height/2)}return this._device.queue.submit([a.finish()]),i||n.destroy(),e}},kd=class{constructor(e){this.textureView=null,this.textureViews=Object.create(null),this.gpuTexture=e}destroy(){this.gpuTexture.destroy(),this.textureView=null,this.textureViews=null,this.gpuTexture=null}},Ad=/^(rgba8|bgra8|bc[1237]-rgba-|etc2-rgb8|etc2-rgb8a1|etc2-rgba8|astc-\d+x\d+-)unorm$/;function jd(e){return Ad.test(e)?[`${e}-srgb`]:void 0}function Md(e){return`${e.format||``}.${e.dimension||``}.${e.aspect||``}.${e.baseMipLevel||0}.${e.mipLevelCount||``}.${e.baseArrayLayer||0}.${e.arrayLayerCount||``}`}var Nd=class e{constructor(t){this._gpuSamplers=Object.create(null),this._bindGroupHash=Object.create(null),this._renderer=t,t.gc.addCollection(this,`_bindGroupHash`,`hash`),this._managedTextures=new G({renderer:t,type:`resource`,onUnload:this.onSourceUnload.bind(this),name:`gpuTextureSource`});let n={image:Sd,buffer:gd,video:Cd,compressed:yd,...e.uploadExtensions};this._uploads={...n,cube:xd(n)}}get managedTextures(){return Object.values(this._managedTextures.items)}contextChange(e){this._gpu=e,this._managedTextures.removeAll(),this._gpuSamplers=Object.create(null),this._mipmapGenerator=null,this._mipmap3dGenerator=null}initSource(e){return e._gpuData[this._renderer.uid]?.gpuTexture||this._initSource(e)}_initSource(e){if(e.autoGenerateMipmaps){e.dimension===`3d`&&Ed(e.format,e.storage);let t=Math.max(e.pixelWidth,e.pixelHeight,e.depth);e.mipLevelCount=Math.floor(Math.log2(t))+1}let t,n;e.sampleCount>1?(t=GPUTextureUsage.RENDER_ATTACHMENT,e.transient&&this._renderer.device.extensions.transientAttachment&&(t|=GPUTextureUsage.TRANSIENT_ATTACHMENT)):(t=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,e.uploadMethodId!==`compressed`&&(t|=GPUTextureUsage.RENDER_ATTACHMENT,t|=GPUTextureUsage.COPY_SRC),e.storage&&(t|=GPUTextureUsage.STORAGE_BINDING),n=jd(e.format));let r=_d[e.format]||{blockBytes:4,blockWidth:1,blockHeight:1},i=Math.ceil(e.pixelWidth/r.blockWidth)*r.blockWidth,a=Math.ceil(e.pixelHeight/r.blockHeight)*r.blockHeight,o={label:e.label,size:{width:i,height:a,depthOrArrayLayers:e.depthOrArrayLayers},format:e.format,viewFormats:n,sampleCount:e.sampleCount,mipLevelCount:e.mipLevelCount,dimension:e.dimension,usage:t},s=this._gpu.device.createTexture(o);return e._gpuData[this._renderer.uid]=new kd(s),this._managedTextures.add(e)&&(e.on(`update`,this.onSourceUpdate,this),e.on(`resize`,this.onSourceResize,this),e.on(`updateMipmaps`,this.onUpdateMipmaps,this)),this.onSourceUpdate(e),s}onSourceUpdate(e){let t=this.getGpuSource(e);t&&(this._uploads[e.uploadMethodId]&&this._uploads[e.uploadMethodId].upload(e,t,this._gpu),e.autoGenerateMipmaps&&e.mipLevelCount>1&&this.onUpdateMipmaps(e))}onUpdateMipmaps(e){let t=this.getGpuSource(e);e.dimension===`3d`?(this._mipmap3dGenerator??=new Dd(this._gpu.device),this._mipmap3dGenerator.generateMipmap(t)):(this._mipmapGenerator??=new Od(this._gpu.device),this._mipmapGenerator.generateMipmap(t))}onSourceUnload(e){e.off(`update`,this.onSourceUpdate,this),e.off(`resize`,this.onSourceResize,this),e.off(`updateMipmaps`,this.onUpdateMipmaps,this)}onSourceResize(e){e._gcLastUsed=this._renderer.gc.now;let t=e._gpuData[this._renderer.uid],n=t?.gpuTexture;n?(n.width!==e.pixelWidth||n.height!==e.pixelHeight)&&(t.destroy(),this._bindGroupHash[e.uid]=null,e._gpuData[this._renderer.uid]=null,this.initSource(e)):this.initSource(e)}_initSampler(e){return this._gpuSamplers[e._resourceId]=this._gpu.device.createSampler(e),this._gpuSamplers[e._resourceId]}getGpuSampler(e){return this._gpuSamplers[e._resourceId]||this._initSampler(e)}getGpuSource(e){return e._gcLastUsed=this._renderer.gc.now,e._gpuData[this._renderer.uid]?.gpuTexture||this.initSource(e)}getTextureBindGroup(e){return this._bindGroupHash[e.uid]||this._createTextureBindGroup(e)}_createTextureBindGroup(e){let t=e.source;return this._bindGroupHash[e.uid]=new _({0:t,1:t.style,2:new C({uTextureMatrix:{type:`mat3x3<f32>`,value:e.textureMatrix.mapCoord}})}),this._bindGroupHash[e.uid]}getTextureView(e,t){var n;let r=e.source;r._gcLastUsed=this._renderer.gc.now;let i=r._gpuData[this._renderer.uid];i||=(this.initSource(r),r._gpuData[this._renderer.uid]);let a=t?Md(t):0;return(n=i.textureViews)[a]||(n[a]=i.gpuTexture.createView({dimension:r.viewDimension,...t})),i.textureViews[a]}getTextureRenderTargetView(e,t=0,n=0,r){var i;let a=e.source;a._gcLastUsed=this._renderer.gc.now;let o=a._gpuData[this._renderer.uid];o||=(this.initSource(a),a._gpuData[this._renderer.uid]);let s=a.dimension===`3d`;s&&(n=0);let c=n*(a.mipLevelCount||1)+t+1;return r&&(c=`${c}.${Md(r)}`),(i=o.textureViews)[c]||(i[c]=o.gpuTexture.createView({dimension:s?`3d`:`2d`,baseMipLevel:t,mipLevelCount:1,baseArrayLayer:n,arrayLayerCount:1,...r})),o.textureViews[c]}generateCanvas(e){let t=this._renderer,n=t.gpu.device.createCommandEncoder(),r=b.get().createCanvas();r.width=e.source.pixelWidth,r.height=e.source.pixelHeight;let i=r.getContext(`webgpu`);return i.configure({device:t.gpu.device,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC,format:b.get().getNavigator().gpu.getPreferredCanvasFormat(),alphaMode:`premultiplied`}),n.copyTextureToTexture({texture:t.texture.getGpuSource(e.source),origin:{x:0,y:0}},{texture:i.getCurrentTexture()},{width:r.width,height:r.height}),t.gpu.device.queue.submit([n.finish()]),r}getPixels(e){let t=this.generateCanvas(e),n=E.getOptimalCanvasAndContext(t.width,t.height),r=n.context;r.drawImage(t,0,0);let{width:i,height:a}=t,o=r.getImageData(0,0,i,a),s=new Uint8ClampedArray(o.data.buffer);return E.returnCanvasAndContext(n),{pixels:s,width:i,height:a}}destroy(){this._managedTextures.destroy();for(let e of Object.keys(this._bindGroupHash)){let t=Number(e);this._bindGroupHash[t]?.destroy()}this._renderer=null,this._gpu=null,this._mipmapGenerator=null,this._mipmap3dGenerator=null,this._gpuSamplers=null,this._bindGroupHash=null}};Nd.extension={type:[i.WebGPUSystem],name:`texture`},Nd.uploadExtensions=Object.create(null);var Pd=Nd;a.handleByMap(i.TextureUploaderWebGPU,Pd.uploadExtensions);var Fd=class{constructor(){this._maxTextures=0}contextChange(t){let n=new C({uTransformMatrix:{value:new e,type:`mat3x3<f32>`},uColor:{value:new Float32Array([1,1,1,1]),type:`vec4<f32>`},uRound:{value:0,type:`f32`}});this._maxTextures=t.limits.maxBatchableTextures;let r=ze({name:`graphics`,bits:[Re,Ge(this._maxTextures),nt,He]});this.shader=new g({gpuProgram:r,resources:{localUniforms:n}})}execute(e,t){let n=t.context,r=n.customShader||this.shader,i=e.renderer,{batcher:a,instructions:o}=i.graphicsContext.getContextRenderData(n),s=i.encoder;s.setGeometry(a.geometry,r.gpuProgram);let c=i.globalUniforms.bindGroup;s.setBindGroup(0,c,r.gpuProgram);let l=i.renderPipes.uniformBatch.getUniformBindGroup(r.resources.localUniforms,!0);s.setBindGroup(2,l,r.gpuProgram);let u=o.instructions,d=null;for(let t=0;t<o.instructionSize;t++){let n=u[t];if(n.topology!==d&&(d=n.topology,s.setPipelineFromGeometryProgramAndState(a.geometry,r.gpuProgram,e.state,n.topology,r._overrides)),r.groups[1]=n.bindGroup,!n.gpuBindGroup){let e=n.textures;n.bindGroup=Ie(e.textures,e.count,this._maxTextures),n.gpuBindGroup=i.bindGroup.getBindGroup(n.bindGroup,r.gpuProgram,1)}s.setBindGroup(1,n.bindGroup,r.gpuProgram),s.renderPassEncoder.drawIndexed(n.size,1,n.start)}}destroy(){this.shader.destroy(),this.shader=null}};Fd.extension={type:[i.WebGPUPipesAdaptor],name:`graphics`};var Id=class{init(){let t=ze({name:`mesh`,bits:[$e,lt,He]});this._shader=new g({gpuProgram:t,resources:{uTexture:D.EMPTY._source,uSampler:D.EMPTY._source.style,textureUniforms:{uTextureMatrix:{type:`mat3x3<f32>`,value:new e}}}})}execute(e,t){let n=e.renderer,r=t._shader;if(!r)r=this._shader,r.groups[2]=n.texture.getTextureBindGroup(t.texture);else if(!r.gpuProgram){O(`Mesh shader has no gpuProgram`,t.shader);return}let i=r.gpuProgram;if(i.autoAssignGlobalUniforms&&(r.groups[0]=n.globalUniforms.bindGroup),i.autoAssignLocalUniforms){let t=e.localUniforms;r.groups[1]=n.renderPipes.uniformBatch.getUniformBindGroup(t,!0)}n.encoder.draw({geometry:t._geometry,shader:r,state:t.state})}destroy(){this._shader.destroy(),this._shader=null}};Id.extension={type:[i.WebGPUPipesAdaptor],name:`mesh`};var Ld=te({WebGPURenderer:()=>Gd}),Rd=[...Ce,Ku,zu,Lu,Bu,Nu,Pd,fd,pd,md,od,Fu,Vu,ju],zd=[...be,Ju],Bd=[cc,Id,Fd],Vd=[],Hd=[],Ud=[],Wd=[];a.handleByNamedList(i.WebGPUSystem,Vd),a.handleByNamedList(i.WebGPUPipes,Hd),a.handleByNamedList(i.WebGPUPipesAdaptor,Ud),a.handleByNamedList(i.WebGPULoader,Wd),a.add(...Rd,...zd,...Bd);var Gd=class extends Se{constructor(){let e={name:`webgpu`,type:re.WEBGPU,systems:Vd,renderPipes:Hd,renderPipeAdaptors:Ud,loaders:Wd};super(e)}},Kd=class e extends Ra{constructor(...e){super({});let t=e[0]??{};typeof t==`number`&&(c(u,`PlaneGeometry constructor changed please use { width, height, verticesX, verticesY } instead`),t={width:t,height:e[1],verticesX:e[2],verticesY:e[3]}),this.build(t)}build(t){t={...e.defaultOptions,...t},this.verticesX=this.verticesX??t.verticesX,this.verticesY=this.verticesY??t.verticesY,this.width=this.width??t.width,this.height=this.height??t.height;let n=this.verticesX*this.verticesY,r=[],i=[],a=[],o=this.verticesX-1,s=this.verticesY-1,c=this.width/o,l=this.height/s;for(let e=0;e<n;e++){let t=e%this.verticesX,n=e/this.verticesX|0;r.push(t*c,n*l),i.push(t/o,n/s)}let u=o*s;for(let e=0;e<u;e++){let t=e%o,n=e/o|0,r=n*this.verticesX+t,i=n*this.verticesX+t+1,s=(n+1)*this.verticesX+t,c=(n+1)*this.verticesX+t+1;a.push(r,i,s,i,c,s)}this.buffers[0].data=new Float32Array(r),this.buffers[1].data=new Float32Array(i),this.indexBuffer.data=new Uint32Array(a),this.buffers[0].update(),this.buffers[1].update(),this.indexBuffer.update()}};Kd.defaultOptions={width:100,height:100,verticesX:10,verticesY:10};var qd=Kd,Jd=[[0,0],[0,0],[0,0]],Yd=[[0,0],[0,0],[0,0]],Xd=[[0,0],[0,0],[0,0]],Zd=[[0,0],[0,0],[0,0]];function Qd(e,t,n,r,i,a,o){e[0][0]=t,e[0][1]=n,e[1][0]=r,e[1][1]=i,e[2][0]=a,e[2][1]=o}var $d=class{constructor(e){this._renderer=e}validateRenderable(e){return!1}addRenderable(e,t){this._renderer.renderPipes.batch.break(t),t.add(e)}updateRenderable(e){}execute(e){let t=this._renderer,n=t.canvasContext,r=n.activeContext;r.save();let i=e.groupTransform,a=t._roundPixels|e._roundPixels;n.setContextTransform(i,a===1),n.setBlendMode(e.groupBlendMode);let o=t.globalUniforms.globalUniformData?.worldColor??4294967295,s=e.groupColorAlpha,c=(o>>>24&255)/255,l=(s>>>24&255)/255,u=t.filter?.alphaMultiplier??1,d=c*l*u;if(d<=0){r.restore();return}r.globalAlpha=d;let f=o&16777215,p=s&16777215,m=de(ie(p,f)),h=e.texture,g=B.getCanvasSource(h);if(!g){r.restore();return}let _=n.smoothProperty,v=h.source.style.scaleMode!==`nearest`;r[_]!==v&&(r[_]=v);let y=m!==16777215||h.rotate!==0,b=y?B.getTintedCanvas({texture:h},m):g,{leftWidth:x,topHeight:S,rightWidth:C,bottomHeight:ee,width:w,height:T}=e,te=x+C,ne=S+ee,re=Math.min(te>w?w/te:1,ne>T?T/ne:1,1),E=x*re,D=C*re,O=S*re,k=ee*re,ae=Math.max(0,w-E-D),oe=Math.max(0,T-O-k),se=e.anchor,A=h.source._resolution??h.source.resolution??1,j=h.frame.x*A,M=h.frame.y*A,ce=-se.x*w,N=-se.y*T,le=x*A,P=S*A,F=C*A,ue=ee*A,I=h.frame.width*A,L=h.frame.height*A;y&&(j=0,M=0,I=b.width,L=b.height);let R=I-le-F,z=L-P-ue,fe=R>0?j+le:Math.max(j,Math.min(j+le,j+I-1)),pe=R>0?R:1,V=z>0?M+P:Math.max(M,Math.min(M+P,M+L-1)),H=z>0?z:1;Qd(Jd,j,le,fe,pe,j+I-F,F),Qd(Yd,M,P,V,H,M+L-ue,ue),Qd(Xd,ce,E,ce+E,ae,ce+w-D,D),Qd(Zd,N,O,N+O,oe,N+T-k,k);for(let e=0;e<3;e++){let t=Xd[e][1];if(t<=0)continue;let n=Jd[e][0],i=Jd[e][1],a=Xd[e][0];for(let e=0;e<3;e++){let o=Zd[e][1];o<=0||r.drawImage(b,n,Yd[e][0],i,Yd[e][1],a,Zd[e][0],t,o)}}r.restore()}destroy(){this._renderer=null}};$d.extension={type:[i.CanvasPipes],name:`nineSliceSprite`};var ef=class e extends qd{constructor(t={}){t={...e.defaultOptions,...t},super({width:t.width,height:t.height,verticesX:4,verticesY:4}),this._trimX=0,this._trimY=0,this._trimWidth=t.originalWidth??e.defaultOptions.originalWidth,this._trimHeight=t.originalHeight??e.defaultOptions.originalHeight,this.update(t)}update(e){this.width=e.width??this.width,this.height=e.height??this.height,this._originalWidth=e.originalWidth??this._originalWidth,this._originalHeight=e.originalHeight??this._originalHeight,this._leftWidth=e.leftWidth??this._leftWidth,this._rightWidth=e.rightWidth??this._rightWidth,this._topHeight=e.topHeight??this._topHeight,this._bottomHeight=e.bottomHeight??this._bottomHeight,this._anchorX=e.anchor?.x,this._anchorY=e.anchor?.y,e.trim===void 0?(this._trimWidth=this._originalWidth,this._trimHeight=this._originalHeight):(this._trimX=e.trim?.x??0,this._trimY=e.trim?.y??0,this._trimWidth=e.trim?.width??this._originalWidth,this._trimHeight=e.trim?.height??this._originalHeight),this.updateUvs(),this.updatePositions()}updatePositions(){let e=this.positions,{width:t,height:n,_leftWidth:r,_rightWidth:i,_topHeight:a,_bottomHeight:o,_anchorX:s,_anchorY:c}=this,l=r+i,u=t>l?1:t/l,d=a+o,f=n>d?1:n/d,p=Math.min(u,f),m=s*t,h=c*n;e[0]=e[8]=e[16]=e[24]=-m,e[2]=e[10]=e[18]=e[26]=r*p-m,e[4]=e[12]=e[20]=e[28]=t-i*p-m,e[6]=e[14]=e[22]=e[30]=t-m,e[1]=e[3]=e[5]=e[7]=-h,e[9]=e[11]=e[13]=e[15]=a*p-h,e[17]=e[19]=e[21]=e[23]=n-o*p-h,e[25]=e[27]=e[29]=e[31]=n-h,this.getBuffer(`aPosition`).update()}updateUvs(){let e=this.uvs,t=this._originalWidth,n=this._originalHeight,r=this._trimX/t,i=this._trimY/n,a=(this._trimX+this._trimWidth)/t,o=(this._trimY+this._trimHeight)/n;e[0]=e[8]=e[16]=e[24]=r,e[1]=e[3]=e[5]=e[7]=i,e[6]=e[14]=e[22]=e[30]=a,e[25]=e[27]=e[29]=e[31]=o;let s=1/t,c=1/n;e[2]=e[10]=e[18]=e[26]=r+s*this._leftWidth,e[9]=e[11]=e[13]=e[15]=i+c*this._topHeight,e[4]=e[12]=e[20]=e[28]=a-s*this._rightWidth,e[17]=e[19]=e[21]=e[23]=o-c*this._bottomHeight,this.getBuffer(`aUV`).update()}};ef.defaultOptions={width:100,height:100,leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10,originalWidth:100,originalHeight:100};var tf=ef,nf=class extends za{constructor(){super(),this.geometry=new tf}destroy(){this.geometry.destroy()}},rf=class{constructor(e){this._renderer=e,this._managedSprites=new G({renderer:e,type:`renderable`,name:`nineSliceSprite`})}addRenderable(e,t){let n=this._getGpuSprite(e);e.didViewUpdate&&this._updateBatchableSprite(e,n),this._renderer.renderPipes.batch.addToBatch(n,t)}updateRenderable(e){let t=this._getGpuSprite(e);e.didViewUpdate&&this._updateBatchableSprite(e,t),t._batcher.updateElement(t)}validateRenderable(e){let t=this._getGpuSprite(e);return!t._batcher.checkAndUpdateTexture(t,e._texture)}_updateBatchableSprite(e,t){t.geometry.update(e),t.setTexture(e._texture)}_getGpuSprite(e){return e._gpuData[this._renderer.uid]||this._initGPUSprite(e)}_initGPUSprite(e){let t=e._gpuData[this._renderer.uid]=new nf,n=t;return n.renderable=e,n.transform=e.groupTransform,n.texture=e._texture,n.roundPixels=this._renderer._roundPixels|e._roundPixels,this._managedSprites.add(e),e.didViewUpdate||this._updateBatchableSprite(e,n),t}destroy(){this._managedSprites.destroy(),this._renderer=null}};rf.extension={type:[i.WebGLPipes,i.WebGPUPipes],name:`nineSliceSprite`},a.add($d),a.add(rf);var af=class e extends j{constructor(t){t instanceof D&&(t={texture:t});let{width:n,height:r,anchor:i,leftWidth:a,rightWidth:o,topHeight:s,bottomHeight:c,texture:l,roundPixels:u,...d}=t;super({label:`NineSliceSprite`,...d}),this.renderPipeId=`nineSliceSprite`,this.batched=!0,this._leftWidth=a??l?.defaultBorders?.left??tf.defaultOptions.leftWidth,this._topHeight=s??l?.defaultBorders?.top??tf.defaultOptions.topHeight,this._rightWidth=o??l?.defaultBorders?.right??tf.defaultOptions.rightWidth,this._bottomHeight=c??l?.defaultBorders?.bottom??tf.defaultOptions.bottomHeight,this._width=n??l.width??tf.defaultOptions.width,this._height=r??l.height??tf.defaultOptions.height,this.allowChildren=!1,this.texture=l??e.defaultOptions.texture,this.roundPixels=u??!1,this._anchor=new z({_onUpdate:()=>{this.onViewUpdate()}}),i?this.anchor=i:this.texture.defaultAnchor&&(this.anchor=this.texture.defaultAnchor)}get anchor(){return this._anchor}set anchor(e){typeof e==`number`?this._anchor.set(e):this._anchor.copyFrom(e)}get width(){return this._width}set width(e){this._width=e,this.onViewUpdate()}get height(){return this._height}set height(e){this._height=e,this.onViewUpdate()}setSize(e,t){typeof e==`object`&&(t=e.height??e.width,e=e.width),this._width=e,this._height=t??e,this.onViewUpdate()}getSize(e){return e||={},e.width=this._width,e.height=this._height,e}get leftWidth(){return this._leftWidth}set leftWidth(e){this._leftWidth=e,this.onViewUpdate()}get topHeight(){return this._topHeight}set topHeight(e){this._topHeight=e,this.onViewUpdate()}get rightWidth(){return this._rightWidth}set rightWidth(e){this._rightWidth=e,this.onViewUpdate()}get bottomHeight(){return this._bottomHeight}set bottomHeight(e){this._bottomHeight=e,this.onViewUpdate()}get texture(){return this._texture}set texture(e){e||=D.EMPTY;let t=this._texture;t!==e&&(t&&t.dynamic&&t.off(`update`,this.onViewUpdate,this),e.dynamic&&e.on(`update`,this.onViewUpdate,this),this._texture=e,this.onViewUpdate())}get originalWidth(){return this._texture.width}get originalHeight(){return this._texture.height}get trim(){return this._texture.trim??null}destroy(e){if(super.destroy(e),typeof e==`boolean`?e:e?.texture){let t=typeof e==`boolean`?e:e?.textureSource;this._texture.destroy(t)}this._texture=null}updateBounds(){let e=this._bounds,t=this._anchor,n=this._width,r=this._height;e.minX=-t._x*n,e.maxX=e.minX+n,e.minY=-t._y*r,e.maxY=e.minY+r}};af.defaultOptions={texture:D.EMPTY};var of=af,sf=te({BitmapFont:()=>cf}),cf=class extends us{constructor(e,t){super();let{textures:n,data:r}=e;Object.keys(r.pages).forEach(e=>{let t=r.pages[parseInt(e,10)],i=n[t.id];this.pages.push({texture:i})}),Object.keys(r.chars).forEach(e=>{let t=r.chars[e],{frame:i,source:a,rotate:o}=n[t.page],s=ae.transformRectCoords(t,i,o,new d),c=new D({frame:s,orig:new d(0,0,t.width,t.height),source:a,rotate:o});this.chars[e]={id:e.codePointAt(0),xOffset:t.xOffset,yOffset:t.yOffset,xAdvance:t.xAdvance,kerning:t.kerning??{},texture:c}}),this.baseRenderedFontSize=r.fontSize,this.baseMeasurementFontSize=r.fontSize,this.fontMetrics={ascent:0,descent:0,fontSize:r.fontSize},this.baseLineOffset=r.baseLineOffset,this.lineHeight=r.lineHeight,this.fontFamily=r.fontFamily,this.distanceField=r.distanceField??{type:`none`,range:0},this.url=t}destroy(){super.destroy();for(let e=0;e<this.pages.length;e++){let{texture:t}=this.pages[e];t.destroy(!0)}this.pages=null}static install(e){ys.install(e)}static uninstall(e){ys.uninstall(e)}};a.add(Cr,wr);var lf=[`left`,`right`,`top`,`bottom`,`horizontal`,`vertical`],uf=new WeakMap;function df(e){return uf.get(e)??{}}function ff(e,t){let n={...df(e)};for(let e of lf){if(!(e in t))continue;let r=t[e];r===void 0?delete n[e]:n[e]=r}Object.keys(n).length===0?uf.delete(e):uf.set(e,n),mf(e.parent)}function pf(e){for(let t of e.children)hf(e,t)}function mf(e){let t=e;for(;t;){if(typeof t.layout==`function`){t.layout();return}t=t.parent}}function hf(e,t){let n=uf.get(t);if(!n)return;let r=_f({start:n.left,end:n.right,center:n.horizontal,parentSize:e.width,childSize:t.width}),i=_f({start:n.top,end:n.bottom,center:n.vertical,parentSize:e.height,childSize:t.height});(r.position!==void 0||i.position!==void 0)&&t.position.set(r.position??t.x,i.position??t.y),(r.size!==void 0||i.size!==void 0)&&gf(t,r.size??t.width,i.size??t.height),t.layout?.()}function gf(e,t,n){let r=e;r.setSize?r.setSize(t,n):(e.width=t,e.height=n)}function _f(e){return e.start!==void 0&&e.end!==void 0?{position:e.start,size:Math.max(0,e.parentSize-e.start-e.end)}:e.start===void 0?e.end===void 0?e.center===void 0?{position:void 0,size:void 0}:{position:(e.parentSize-e.childSize)/2+e.center,size:void 0}:{position:e.parentSize-e.end-e.childSize,size:void 0}:{position:e.start,size:void 0}}var vf=class extends F{#e=0;#t=0;constructor(e={}){let{width:t,height:n,...r}=e;super(r),this.on(`childAdded`,this.#r,this),this.on(`childRemoved`,this.#r,this),(t!==void 0||n!==void 0)&&this.#n(t??0,n??0)}get width(){return this.#e}set width(e){this.#n(e,this.#t),this.layout()}get height(){return this.#t}set height(e){this.#n(this.#e,e),this.layout()}getSize(e={width:0,height:0}){return e.width=this.#e,e.height=this.#t,e}setSize(e,t){typeof e==`number`?this.#n(e,t??e):this.#n(e.width,e.height??e.width),this.layout()}layout(){this.#i()}setBoxSize(e,t){this.#n(e,t)}#n(e,t){this.#e=e,this.#t=t,this.#a()}#r(){this.layout()}#i(){pf(this)}#a(){let e=new d(0,0,this.#e,this.#t);this.hitArea=e,this.boundsArea=e}},yf=class extends vf{constructor(e={}){super(e)}get left(){return this.#e(`left`)}set left(e){this.#t(`left`,e)}get right(){return this.#e(`right`)}set right(e){this.#t(`right`,e)}get top(){return this.#e(`top`)}set top(e){this.#t(`top`,e)}get bottom(){return this.#e(`bottom`)}set bottom(e){this.#t(`bottom`,e)}get horizontal(){return this.#e(`horizontal`)}set horizontal(e){this.#t(`horizontal`,e)}get vertical(){return this.#e(`vertical`)}set vertical(e){this.#t(`vertical`,e)}#e(e){return df(this)[e]}#t(e,t){ff(this,{[e]:t})}},bf=class extends yf{#e;#t=new Ia;#n=`Arial`;#r=16;#i=400;#a=1120295;#o=0;#s=0;#c=!1;#l=`start`;#u=`start`;#d=`visible`;constructor(e,t){let{text:n=`Text`,width:r=120,height:i=28,fontFamily:a=`Arial`,fontSize:o=16,fontWeight:s=400,fill:c=1120295,lineHeight:l=0,letterSpacing:u=0,wordWrap:d=!1,alignX:f=`start`,alignY:p=`start`,overflow:m=`visible`,...h}=e;super({...h,width:r,height:i}),this.#n=a,this.#r=o,this.#i=s,this.#a=c,this.#o=l,this.#s=u,this.#c=d,this.#l=f,this.#u=p,this.#d=m,this.#e=t({text:n,style:{fontFamily:a,fontSize:o,fontWeight:String(s),fill:c,lineHeight:l,letterSpacing:u,wordWrap:d,wordWrapWidth:r,align:xf(f)}}),super.addChild(this.#e,this.#t),this.layout()}get text(){return this.#e.text}set text(e){this.#e.text=e,this.layout()}get fontFamily(){return this.#n}set fontFamily(e){this.#n=e,this.#e.style.fontFamily=e,this.layout()}get fontSize(){return this.#r}set fontSize(e){this.#r=e,this.#e.style.fontSize=e,this.layout()}get fontWeight(){return this.#i}set fontWeight(e){this.#i=e,this.#e.style.fontWeight=String(e),this.layout()}get fill(){return this.#a}set fill(e){this.#a=e,this.#e.style.fill=e,this.layout()}get lineHeight(){return this.#o}set lineHeight(e){this.#o=e,this.#e.style.lineHeight=e,this.layout()}get letterSpacing(){return this.#s}set letterSpacing(e){this.#s=e,this.#e.style.letterSpacing=e,this.layout()}get wordWrap(){return this.#c}set wordWrap(e){this.#c=e,this.#e.style.wordWrap=e,this.layout()}get alignX(){return this.#l}set alignX(e){this.#l=e,this.#e.style.align=xf(e),this.layout()}get alignY(){return this.#u}set alignY(e){this.#u=e,this.layout()}get overflow(){return this.#d}set overflow(e){this.#d=e,this.layout()}layout(){if(super.layout(),!this.#e)return;this.#e.style.wordWrapWidth=this.width,this.#e.anchor.set(Sf(this.#l),Sf(this.#u)),this.#e.position.set(this.width*Sf(this.#l),this.height*Sf(this.#u)),this.#t.clear().rect(0,0,this.width,this.height).fill(16777215);let e=this.#d===`clip`;this.#t.visible=e,this.#e.mask=e?this.#t:null}};function xf(e){return e===`center`?`center`:e===`end`?`right`:`left`}function Sf(e){return e===`center`?.5:+(e===`end`)}var Cf=class extends bf{constructor(e={}){super(e,e=>new ls(e))}},wf=class extends bf{constructor(e={}){super(e,e=>new Ms(e))}},Tf=class extends Ia{#e=100;#t=60;#n=16777215;#r=1;#i=0;#a=1;#o=0;#s=0;constructor(e={}){let{width:t,height:n,fillColor:r,fillAlpha:i,strokeColor:a,strokeAlpha:o,strokeWidth:s,radius:c,...l}=e;super(l),this.#e=t??this.#e,this.#t=n??this.#t,this.#n=r??this.#n,this.#r=i??this.#r,this.#i=a??this.#i,this.#a=o??this.#a,this.#o=s??this.#o,this.#s=c??this.#s,this.#d(),this.#f()}get width(){return this.#e}set width(e){this.#u(e,this.#t)}get height(){return this.#t}set height(e){this.#u(this.#e,e)}getSize(e={width:0,height:0}){return e.width=this.#e,e.height=this.#t,e}setSize(e,t){typeof e==`number`?this.#u(e,t??e):this.#u(e.width,e.height??e.width)}get fillColor(){return this.#n}set fillColor(e){this.#n=e,this.#f()}get fillAlpha(){return this.#r}set fillAlpha(e){this.#r=e,this.#f()}get strokeColor(){return this.#i}set strokeColor(e){this.#i=e,this.#f()}get strokeAlpha(){return this.#a}set strokeAlpha(e){this.#a=e,this.#f()}get strokeWidth(){return this.#o}set strokeWidth(e){this.#o=e,this.#f()}get radius(){return this.#s}set radius(e){this.#s=e,this.#f()}get left(){return this.#c(`left`)}set left(e){this.#l(`left`,e)}get right(){return this.#c(`right`)}set right(e){this.#l(`right`,e)}get top(){return this.#c(`top`)}set top(e){this.#l(`top`,e)}get bottom(){return this.#c(`bottom`)}set bottom(e){this.#l(`bottom`,e)}get horizontal(){return this.#c(`horizontal`)}set horizontal(e){this.#l(`horizontal`,e)}get vertical(){return this.#c(`vertical`)}set vertical(e){this.#l(`vertical`,e)}#c(e){return df(this)[e]}#l(e,t){ff(this,{[e]:t})}#u(e,t){this.#e=e,this.#t=t,this.#d(),this.#f()}#d(){let e=new d(0,0,this.#e,this.#t);this.hitArea=e,this.boundsArea=e}#f(){this.clear();let e=Math.max(0,Math.min(this.#s,this.#e/2,this.#t/2)),t=e>0?this.roundRect(0,0,this.#e,this.#t,e):this.rect(0,0,this.#e,this.#t);t.fill({color:this.#n,alpha:this.#r}),this.#o>0&&t.stroke({width:this.#o,color:this.#i,alpha:this.#a,alignment:1})}};function Ef(e,t){return df(e)[t]}function Df(e,t,n){ff(e,{[t]:n})}var Of=new Uint32Array([0,1,2,0,2,3]),kf=new WeakSet,Af=class extends Ha{#e=96;#t=96;#n=`stretch`;#r=new z({_onUpdate:()=>this.#c()});constructor(e={}){let{texture:t,width:n,height:r,fit:i,anchorX:a,anchorY:o,...s}=e;super({...s,texture:t??D.EMPTY,geometry:new Ra({positions:new Float32Array(8),uvs:new Float32Array(8),indices:Of})}),kf.add(this),this.texture.on(`update`,this.#c,this),this.#e=n??this.#e,this.#t=r??this.#t,this.#n=i??this.#n,this.#r.set(a??0,o??0),this.#s(),this.#c()}get width(){return this.#e}set width(e){this.#o(e,this.#t)}get height(){return this.#t}set height(e){this.#o(this.#e,e)}getSize(e={width:0,height:0}){return e.width=this.#e,e.height=this.#t,e}setSize(e,t){typeof e==`number`?this.#o(e,t??e):this.#o(e.width,e.height??e.width)}get texture(){return super.texture}set texture(e){kf.has(this)?(super.texture?.off(`update`,this.#c,this),super.texture=e,e.on(`update`,this.#c,this),this.#c()):super.texture=e}get fit(){return this.#n}set fit(e){this.#n=e,this.#c()}get anchor(){return this.#r}set anchor(e){typeof e==`number`?this.#r.set(e):this.#r.set(e.x,e.y)}get left(){return this.#i(`left`)}set left(e){this.#a(`left`,e)}get right(){return this.#i(`right`)}set right(e){this.#a(`right`,e)}get top(){return this.#i(`top`)}set top(e){this.#a(`top`,e)}get bottom(){return this.#i(`bottom`)}set bottom(e){this.#a(`bottom`,e)}get horizontal(){return this.#i(`horizontal`)}set horizontal(e){this.#a(`horizontal`,e)}get vertical(){return this.#i(`vertical`)}set vertical(e){this.#a(`vertical`,e)}#i(e){return Ef(this,e)}#a(e,t){Df(this,e,t)}#o(e,t){this.#e=e,this.#t=t,this.#s(),this.#c()}#s(){let e=this.#p();this.hitArea=e,this.boundsArea=e}#c(){this.#l(),this.#u(),this.geometry.positions=this.geometry.positions,this.geometry.uvs=this.geometry.uvs}#l(){let e=this.geometry.positions,t=this.#d();e[0]=t.x,e[1]=t.y,e[2]=t.x+t.width,e[3]=t.y,e[4]=t.x+t.width,e[5]=t.y+t.height,e[6]=t.x,e[7]=t.y+t.height}#u(){let e=this.geometry.uvs,t=this.#f();e[0]=t.u0,e[1]=t.v0,e[2]=t.u1,e[3]=t.v0,e[4]=t.u1,e[5]=t.v1,e[6]=t.u0,e[7]=t.v1}#d(){let e=this.#p();if(this.#n===`contain`){let t=jf(this.texture.width,this.texture.height,this.#e,this.#t);return Nf(t.width,t.height,e.x,e.y,e.width,e.height)}return this.#n===`none`?new d(e.x,e.y,this.texture.width,this.texture.height):e}#f(){return this.#n===`cover`?Mf(this.texture.width,this.texture.height,this.#e,this.#t):{u0:0,v0:0,u1:1,v1:1}}#p(){return new d(-this.#r.x*this.#e,-this.#r.y*this.#t,this.#e,this.#t)}};function jf(e,t,n,r){if(e<=0||t<=0||n<=0||r<=0)return{width:0,height:0};let i=Math.min(n/e,r/t);return{width:e*i,height:t*i}}function Mf(e,t,n,r){if(e<=0||t<=0||n<=0||r<=0)return{u0:0,v0:0,u1:1,v1:1};let i=e/t,a=n/r;if(i>a){let e=(1-a/i)/2;return{u0:e,v0:0,u1:1-e,v1:1}}let o=(1-i/a)/2;return{u0:0,v0:o,u1:1,v1:1-o}}function Nf(e,t,n,r,i,a){return new d(n+(i-e)/2,r+(a-t)/2,e,t)}var Pf=class extends of{constructor(e={}){let{texture:t,anchorX:n,anchorY:r,...i}=e;super({texture:t??D.EMPTY,...i}),this.anchor.set(n??0,r??0)}get left(){return this.#e(`left`)}set left(e){this.#t(`left`,e)}get right(){return this.#e(`right`)}set right(e){this.#t(`right`,e)}get top(){return this.#e(`top`)}set top(e){this.#t(`top`,e)}get bottom(){return this.#e(`bottom`)}set bottom(e){this.#t(`bottom`,e)}get horizontal(){return this.#e(`horizontal`)}set horizontal(e){this.#t(`horizontal`,e)}get vertical(){return this.#e(`vertical`)}set vertical(e){this.#t(`vertical`,e)}#e(e){return Ef(this,e)}#t(e,t){Df(this,e,t)}},Ff=class extends so{constructor(e={}){let{texture:t,tilePositionX:n,tilePositionY:r,tileScaleX:i,tileScaleY:a,tileRotation:o,anchorX:s,anchorY:c,...l}=e;super({texture:t??D.EMPTY,...l}),this.tilePosition.set(n??0,r??0),this.tileScale.set(i??1,a??1),this.tileRotation=o??0,this.anchor.set(s??0,c??0)}get left(){return this.#e(`left`)}set left(e){this.#t(`left`,e)}get right(){return this.#e(`right`)}set right(e){this.#t(`right`,e)}get top(){return this.#e(`top`)}set top(e){this.#t(`top`,e)}get bottom(){return this.#e(`bottom`)}set bottom(e){this.#t(`bottom`,e)}get horizontal(){return this.#e(`horizontal`)}set horizontal(e){this.#t(`horizontal`,e)}get vertical(){return this.#e(`vertical`)}set vertical(e){this.#t(`vertical`,e)}#e(e){return Ef(this,e)}#t(e,t){Df(this,e,t)}};function If(e,t){return Number.isFinite(e)?e:t}function Lf(e){return e===`center`||e===`end`?e:`start`}function Rf(e){return e===`center`||e===`end`||e===`space-between`?e:`start`}function zf(e,t){return e===`center`?t/2:e===`end`?t:0}function Bf(e,t){return e===`center`?t/2:e===`end`?t:0}function Vf(e){return{width:e.width,height:e.height}}function Hf(e,t,n){if(t.length===0)return{width:0,height:0};let r=n*Math.max(0,t.length-1),i=t.map(Vf);return e===`horizontal`?{width:i.reduce((e,t)=>e+t.width,0)+r,height:i.reduce((e,t)=>Math.max(e,t.height),0)}:{width:i.reduce((e,t)=>Math.max(e,t.width),0),height:i.reduce((e,t)=>e+t.height,0)+r}}function Uf(e){e.layout?.()}var Wf=class extends yf{#e=1;#t=0;#n=0;#r=`start`;#i=`start`;#a=!1;#o=!1;constructor(e={}){super(e),this.#a=e.width!==void 0,this.#o=e.height!==void 0}get width(){return super.width}set width(e){this.#a=!0,super.width=e}get height(){return super.height}set height(e){this.#o=!0,super.height=e}setSize(e,t){this.#a=!0,this.#o=!0,super.setSize(e,t)}get columns(){return this.#e}set columns(e){this.#e=Math.max(1,Math.floor(If(e,1))),this.layout()}get gapX(){return this.#t}set gapX(e){this.#t=Math.max(0,If(e,0)),this.layout()}get gapY(){return this.#n}set gapY(e){this.#n=Math.max(0,If(e,0)),this.layout()}get alignX(){return this.#r}set alignX(e){this.#r=Lf(e),this.layout()}get alignY(){return this.#i}set alignY(e){this.#i=Lf(e),this.layout()}layout(){let e=this.children,t=Gf(e,this.#e,this.#t,this.#n),n=this.#a?this.width:t.width,r=this.#o?this.height:t.height;(n!==this.width||r!==this.height)&&this.setBoxSize(n,r);let i=0;for(let n=0;n<t.rowHeights.length;n++){let r=0;for(let a=0;a<t.columnWidths.length;a++){let o=e[n*this.#e+a];if(o){let e=Vf(o);o.position.set(r+zf(this.#r,Math.max(0,t.columnWidths[a]-e.width)),i+zf(this.#i,Math.max(0,t.rowHeights[n]-e.height))),Uf(o)}r+=t.columnWidths[a]+this.#t}i+=t.rowHeights[n]+this.#n}}};function Gf(e,t,n,r){if(e.length===0)return{width:0,height:0,columnWidths:[],rowHeights:[]};let i=Math.min(t,e.length),a=Math.ceil(e.length/t),o=Array.from({length:i},()=>0),s=Array.from({length:a},()=>0);for(let n=0;n<e.length;n++){let r=e[n],i=n%t,a=Math.floor(n/t);o[i]=Math.max(o[i],r.width),s[a]=Math.max(s[a],r.height)}return{width:o.reduce((e,t)=>e+t,0)+n*Math.max(0,o.length-1),height:s.reduce((e,t)=>e+t,0)+r*Math.max(0,s.length-1),columnWidths:o,rowHeights:s}}var Kf=class extends yf{#e=0;#t=`start`;#n=`start`;#r=!1;#i=!1;constructor(e={}){super(e),this.#r=e.width!==void 0,this.#i=e.height!==void 0}get width(){return super.width}set width(e){this.#r=!0,super.width=e}get height(){return super.height}set height(e){this.#i=!0,super.height=e}setSize(e,t){this.#r=!0,this.#i=!0,super.setSize(e,t)}get gap(){return this.#e}set gap(e){this.#e=Math.max(0,If(e,0)),this.layout()}get alignY(){return this.#t}set alignY(e){this.#t=Lf(e),this.layout()}get justify(){return this.#n}set justify(e){this.#n=Rf(e),this.layout()}layout(){let e=this.children,t=Hf(`horizontal`,e,this.#e),n=this.#r?this.width:t.width,r=this.#i?this.height:t.height;(n!==this.width||r!==this.height)&&this.setBoxSize(n,r);let i=Math.max(0,n-t.width),a=this.#n===`space-between`&&e.length>1?this.#e+i/(e.length-1):this.#e,o=Bf(this.#n,i);for(let t of e){let e=Vf(t);t.position.set(o,zf(this.#t,Math.max(0,r-e.height))),Uf(t),o+=e.width+a}}},qf=Symbol(`pixifact.runtimeBehavior`),Jf=.5,Yf=.92,Xf=.18,Zf=.72,Qf=.05,$f=.05,ep=class extends yf{contentLayer=new F;#e=new Ia;#t=`vertical`;#n=0;#r=0;#i=0;#a=0;#o=0;#s=0;#c=!1;#l=new Set;#u=!1;#d;constructor(e={}){let{direction:t,scrollX:n,scrollY:r,...i}=e;super(i),this.#t=t??this.#t,this.#n=n??this.#n,this.#r=r??this.#r,this.contentLayer.mask=this.#e,this.contentLayer.on(`childAdded`,this.#f,this),this.contentLayer.on(`childRemoved`,this.#p,this),super.addChild(this.contentLayer),super.addChild(this.#e),this.layout()}[qf](){this.eventMode=`static`,this.on(`wheel`,this.#v,this),this.on(`pointerdown`,this.#y,this),this.on(`globalpointermove`,this.#b,this),this.on(`pointerup`,this.#x,this),this.on(`pointerupoutside`,this.#x,this),this.on(`pointercancel`,this.#x,this)}get direction(){return this.#t}set direction(e){this.#O(),this.#t=e,this.#C()}get scrollX(){return this.#i}set scrollX(e){this.#O(),this.#n=e,this.#C()}get scrollY(){return this.#a}set scrollY(e){this.#O(),this.#r=e,this.#C()}addChild(...e){let t=this.contentLayer.addChild(...e);return this.layout(),t}addChildAt(e,t){let n=this.contentLayer.addChildAt(e,t);return this.layout(),n}removeChild(...e){let t=e.every(e=>e.parent===this.contentLayer)?this.contentLayer.removeChild(...e):super.removeChild(...e);return this.layout(),t}setChildIndex(e,t){e.parent===this.contentLayer?this.contentLayer.setChildIndex(e,t):super.setChildIndex(e,t),this.layout()}getChildIndex(e){return e.parent===this.contentLayer?this.contentLayer.getChildIndex(e):super.getChildIndex(e)}swapChildren(e,t){e.parent===this.contentLayer&&t.parent===this.contentLayer?this.contentLayer.swapChildren(e,t):super.swapChildren(e,t),this.layout()}layout(){this.#u||this.destroyed||(super.layout(),this.#S(),this.#C())}destroy(e){this.#u=!0,this.#O(),this.#d=void 0,this.off(`wheel`,this.#v,this),this.off(`pointerdown`,this.#y,this),this.off(`globalpointermove`,this.#b,this),this.off(`pointerup`,this.#x,this),this.off(`pointerupoutside`,this.#x,this),this.off(`pointercancel`,this.#x,this),this.contentLayer.off(`childAdded`,this.#f,this),this.contentLayer.off(`childRemoved`,this.#p,this);for(let e of this.#l)e.off(`childAdded`,this.#m,this),e.off(`childRemoved`,this.#h,this);this.#l.clear(),super.destroy(e)}#f(e){this.#g(e),this.layout()}#p(e){this.#_(e),this.layout()}#m(e){this.#g(e),this.layout()}#h(e){this.#_(e),this.layout()}#g(e){if(!this.#l.has(e)){this.#l.add(e),e.on(`childAdded`,this.#m,this),e.on(`childRemoved`,this.#h,this);for(let t of e.children)this.#g(t)}}#_(e){if(this.#l.delete(e)){e.off(`childAdded`,this.#m,this),e.off(`childRemoved`,this.#h,this);for(let t of e.children)this.#_(t)}}#v(e){this.#O();let t=this.#i,n=this.#a;this.#t!==`vertical`&&(this.#n=this.#i+e.deltaX),this.#t!==`horizontal`&&(this.#r=this.#a+e.deltaY),this.#C(),(t!==this.#i||n!==this.#a)&&(e.preventDefault(),e.stopPropagation())}#y(e){this.#O(),this.#o=0,this.#s=0,this.#d={pointerId:e.pointerId,globalX:e.global.x,globalY:e.global.y,scrollX:this.#i,scrollY:this.#a}}#b(e){if(!this.#d||e.pointerId!==this.#d.pointerId)return;let t=e.global.x-this.#d.globalX,n=e.global.y-this.#d.globalY,r=this.#i,i=this.#a;this.#t!==`vertical`&&(this.#d.scrollX-=t,this.#n=this.#d.scrollX),this.#t!==`horizontal`&&(this.#d.scrollY-=n,this.#r=this.#d.scrollY),this.#w(),this.#o=this.#i-r,this.#s=this.#a-i,this.#d.globalX=e.global.x,this.#d.globalY=e.global.y}#x(e){this.#d&&e.pointerId===this.#d.pointerId&&(this.#d=void 0,this.#D())}#S(){this.#e.clear(),this.#e.rect(0,0,this.width,this.height).fill(16777215)}#C(){let e=this.#E();this.#T(tp(this.#t===`vertical`?0:this.#n,0,e.x),tp(this.#t===`horizontal`?0:this.#r,0,e.y))}#w(){let e=this.#E();this.#T(this.#t===`vertical`?0:np(this.#n,0,e.x),this.#t===`horizontal`?0:np(this.#r,0,e.y))}#T(e,t){this.#i=e,this.#a=t,this.contentLayer.position.set(-this.#i,-this.#a)}#E(){let e=this.#j();return{x:Math.max(0,e.width-this.width),y:Math.max(0,e.height-this.height)}}#D(){this.#c||!this.#A()||(this.#c=!0,P.shared.add(this.#k,this))}#O(){this.#c&&=(P.shared.remove(this.#k,this),!1)}#k(e){if(this.#u||this.destroyed||this.#d){this.#O();return}let t=Math.min(e.deltaTime,4),n=this.#E(),r=this.#t===`vertical`?{value:0,velocity:0}:rp(this.#i,this.#o,0,n.x,t),i=this.#t===`horizontal`?{value:0,velocity:0}:rp(this.#a,this.#s,0,n.y,t);this.#o=r.velocity,this.#s=i.velocity,this.#T(r.value,i.value),this.#n=this.#i,this.#r=this.#a,this.#A()||this.#O()}#A(){let e=this.#E();return this.#t!==`vertical`&&ip(this.#i,this.#o,0,e.x)||this.#t!==`horizontal`&&ip(this.#a,this.#s,0,e.y)}#j(){let e=0,t=0;for(let n of this.contentLayer.children){let r=op(n);e=Math.max(e,r.right),t=Math.max(t,r.bottom)}return{width:e,height:t}}};function tp(e,t,n){return Math.min(n,Math.max(t,e))}function np(e,t,n){return e<t?t+(e-t)*Jf:e>n?n+(e-n)*Jf:e}function rp(e,t,n,r,i){let a=t,o=ap(e,n,r);o===void 0?a*=Yf**+i:(a+=(o-e)*Xf*i,a*=Zf**+i);let s=e+a*i,c=ap(s,n,r);return o!==void 0&&c===void 0?{value:o,velocity:0}:(c!==void 0&&Math.abs(s-c)<=Qf&&Math.abs(a)<=$f&&(s=c,a=0),{value:s,velocity:a})}function ip(e,t,n,r){return Math.abs(t)>$f||ap(e,n,r)!==void 0}function ap(e,t,n){if(e<t)return t;if(e>n)return n}function op(e){e.updateLocalTransform();let t=e.getLocalBounds();if(!t.isValid)return{right:0,bottom:0};let n=e.localTransform,r=n.a*t.minX+n.c*t.minY+n.tx,i=n.b*t.minX+n.d*t.minY+n.ty,a=n.a*t.maxX+n.c*t.minY+n.tx,o=n.b*t.maxX+n.d*t.minY+n.ty,s=n.a*t.maxX+n.c*t.maxY+n.tx,c=n.b*t.maxX+n.d*t.maxY+n.ty,l=n.a*t.minX+n.c*t.maxY+n.tx,u=n.b*t.minX+n.d*t.maxY+n.ty;return{right:Math.max(0,r,a,s,l),bottom:Math.max(0,i,o,c,u)}}var sp=class extends yf{#e=0;#t=`start`;#n=`start`;#r=!1;#i=!1;constructor(e={}){super(e),this.#r=e.width!==void 0,this.#i=e.height!==void 0}get width(){return super.width}set width(e){this.#r=!0,super.width=e}get height(){return super.height}set height(e){this.#i=!0,super.height=e}setSize(e,t){this.#r=!0,this.#i=!0,super.setSize(e,t)}get gap(){return this.#e}set gap(e){this.#e=Math.max(0,If(e,0)),this.layout()}get alignX(){return this.#t}set alignX(e){this.#t=Lf(e),this.layout()}get justify(){return this.#n}set justify(e){this.#n=Rf(e),this.layout()}layout(){let e=this.children,t=Hf(`vertical`,e,this.#e),n=this.#r?this.width:t.width,r=this.#i?this.height:t.height;(n!==this.width||r!==this.height)&&this.setBoxSize(n,r);let i=Math.max(0,r-t.height),a=this.#n===`space-between`&&e.length>1?this.#e+i/(e.length-1):this.#e,o=Bf(this.#n,i);for(let t of e){let e=Vf(t);t.position.set(zf(this.#t,Math.max(0,n-e.width)),o),Uf(t),o+=e.height+a}}},cp=new WeakMap,lp=new Set([`left`,`right`,`top`,`bottom`,`horizontal`,`vertical`]),up=new Set([`fontSize`,`fontFamily`,`fontWeight`,`fill`]),dp=new Set([`fill`,`fillColor`,`strokeColor`,`tint`]);function fp(e,t,n={},r={}){let i={definitions:Object.fromEntries(t),subscribers:new Map,values:{}};cp.set(e,i);for(let[t,a]of Object.entries(i.definitions)){let o=Object.hasOwn(r,t)?r[t]:a.default,s=n[t];i.values[t]=Object.hasOwn(n,t)?s&&o&&typeof s==`object`&&typeof o==`object`?Object.assign(o,s):s:o,Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:()=>i.values[t],set:n=>mp(e,t,n)})}}function pp(e,t,n={},r={}){fp(e,new Map(Object.entries(t.props).map(([e,t])=>[e,{...`default`in t?{default:t.default}:{},...t.type===`variant`?{variants:t.variants}:{}}])),n,r)}function mp(e,t,n){let r=yp(e);if(!Object.is(r.values[t],n)){r.values[t]=n;for(let e of r.subscribers.get(t)??[])e()}}function hp(e,t){let n=yp(e),[r,i]=t.path,a=n.values[r];if(!i)return a;let o=String(a);return n.definitions[r]?.variants?.[o]?.[i]}function gp(e,t,n,r){let i=yp(e),a=()=>_p(n,r,hp(e,t)),o=i.subscribers.get(t.path[0])??new Set;o.add(a),i.subscribers.set(t.path[0],o),a()}function _p(e,t,n){if(t===`text`){e.text=String(n??``);return}let r=vp(t,n);if(lp.has(t)){ff(e,{[t]:r});return}let i=e;if(up.has(t)&&`text`in i&&i.style)i.style[t]=r;else if(t===`scaleX`||t===`scaleY`){let e=i.scale;e[t===`scaleX`?`x`:`y`]=r}else if(t===`pivotX`||t===`pivotY`){let e=i.pivot;e[t===`pivotX`?`x`:`y`]=r}else if(t===`skewX`||t===`skewY`){let e=i.skew;e[t===`skewX`?`x`:`y`]=r}else if(t===`anchorX`||t===`anchorY`){let e=i.anchor;e[t===`anchorX`?`x`:`y`]=r}else if(t===`tilePositionX`||t===`tilePositionY`){let e=i.tilePosition;e[t===`tilePositionX`?`x`:`y`]=r}else if(t===`tileScaleX`||t===`tileScaleY`){let e=i.tileScale;e[t===`tileScaleX`?`x`:`y`]=r}else i[t]=r}function vp(e,t){return dp.has(e)&&typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?Number.parseInt(t.slice(1),16):t}function yp(e){let t=cp.get(e);if(!t)throw Error(`Scene props must be initialized before bindings are mounted.`);return t}function bp(e,t){if(e.path===t)return e;for(let n of e.children??[]){let e=bp(n,t);if(e)return e}}function xp(e,t){return t.path===e.path?``:t.path.slice(e.path.length+1)}async function Sp(e,t){return(await dr(xp(e,t))).text()}function Cp(e,t){return t?(t.throwIfAborted(),new Promise((n,r)=>{let i=()=>{t.removeEventListener(`abort`,i),r(t.reason)};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})})):e}var wp=class{#e=new Map;#t;readDescriptors(){if(!this.#t){let e=cr().catch(t=>{throw this.#t===e&&(this.#t=void 0),t});this.#t=e}return this.#t}invalidate(e){for(let t of e){for(let e of this.#e.keys())(e===t||e.startsWith(`${t}/`))&&this.#e.delete(e);/\.[cm]?[jt]sx?$/.test(t)&&this.invalidateDescriptors()}}invalidateDescriptors(){this.#t=void 0}clear(){this.#e.clear(),this.#t=void 0}readTemplate(e,t){t=Tn(t);let n=this.#e.get(t);return n||(n=Sp(e,bp(e,`${e.path}/${t}`)).then(An).catch(e=>{throw this.#e.get(t)===n&&this.#e.delete(t),e}),this.#e.set(t,n)),n}async readIndex(e,t,n,r){r?.throwIfAborted(),t=Tn(t);let i=await Cp(this.readDescriptors(),r),a={},o=[t];for(;o.length>0;){let s=await Cp(Promise.all(o.map(async r=>({scenePath:r,template:r===t&&n?n:await this.readTemplate(e,r)}))),r);o=[];for(let t of s){let n=bp(e,`${e.path}/${t.scenePath}`),r=bp(e,`${e.path}/${Dn(t.scenePath)}`);if(!r)throw Error(`找不到 Scene 脚本 ${Dn(t.scenePath)}。`);let o=i[t.scenePath];if(!o)throw Error(`No @scene decorator found.`);if(o.className!==t.template.name)throw Error(`Scene ${n.name} 的 name "${t.template.name}" 必须等于脚本 @scene 类名 "${o.className}"。`);a[t.scenePath]={scenePath:t.scenePath,file:n,scriptFile:r,template:{...t.template,interface:o.interface},descriptor:o,className:o.className,interface:o.interface}}for(let e of s)for(let t of Tp(e.template.children,new Set,e.scenePath))!a[t]&&!o.includes(t)&&o.push(t)}return a}};function Tp(e,t=new Set,n){for(let r of e)if(r.kind===`pixi`)Tp(r.children,t,n);else if(r.kind===`sceneInstance`){t.add(n?On(n,r.scene):r.scene);for(let e of Object.values(r.slots))Tp(e,t,n)}return t}var Ep={".jpg":`texture`,".jpeg":`texture`,".png":`texture`,".svg":`svg`,".webp":`texture`},Dp=new Set([`shape`,`radius`,`fill`,`fillAlpha`,`strokeColor`,`strokeWidth`,`strokeAlpha`]);function Op(e,t){return typeof e==`number`?e:t}function kp(e,t){let n=e.props.width!==void 0||e.props.height!==void 0;return{width:Op(e.props.width,n?960:t?.width??960),height:Op(e.props.height,n?540:t?.height??540)}}function Ap(e,t){return`${e.path}/${t}`}function jp(e){let t=e.split(/[?#]/)[0].split(`/`).at(-1)??``,n=t.lastIndexOf(`.`);return n>=0?t.slice(n).toLowerCase():``}function Mp(e,t){return e.interfaces[t]??{props:{},events:{},slots:{}}}function Np(e,t){return Object.fromEntries(Object.entries(t.props).flatMap(([t,n])=>{let r=e.propDefaults?.[t];return n.type===`struct`?[[t,{...Object.fromEntries(Object.entries(n.fields).map(([e,t])=>[e,t.default])),...r&&typeof r==`object`?r:{}}]]:r===void 0?[]:[[t,r]]}))}function Pp(e,t,n){let r=kp(t,n);e.setSize(r.width,r.height);for(let[n,r]of Object.entries(t.props))n!==`width`&&n!==`height`&&!zt(r)&&_p(e,n,r);Object.keys(t.events??{}).length>0&&t.props.eventMode===void 0&&(e.eventMode=`static`)}function Fp(e,t){let n=typeof t.props.texture==`string`?e.textures.get(t.props.texture)??D.EMPTY:D.EMPTY,r=zt(t.props.text)?``:String(t.props.text??``),i=Object.fromEntries([`fontSize`,`fontFamily`,`fontWeight`,`fill`].flatMap(e=>{let n=t.props[e];return n===void 0||zt(n)?[]:[[e,n]]}));switch(t.type){case`Group`:return new vf;case`GridContainer`:return new Wf;case`HBoxContainer`:return new Kf;case`ScrollContainer`:return new ep;case`VBoxContainer`:return new sp;case`Rect`:return new Tf;case`Image`:return new Af({texture:n});case`NineImage`:return new Pf({texture:n});case`TileImage`:return new Ff({texture:n});case`Label`:return new Cf;case`BitmapLabel`:return new wf;case`Container`:return new F;case`Sprite`:return new R({texture:n});case`Text`:return new ls({text:r,style:i});case`BitmapText`:return new Ms({text:r,style:i});case`HTMLText`:return new rc({text:r,style:i});case`Graphics`:return new Ia;case`NineSliceSprite`:return new of({texture:n});case`TilingSprite`:return new so({texture:n});default:return Ip(t.type)}}function Ip(e){return new F}function Lp(e,t,n){t.id&&(n.label=t.id);for(let[r,i]of Object.entries(t.props))zt(i)?gp(e.bindingRoot,i,n,r):r===`texture`||t.type===`Graphics`&&Dp.has(r)||_p(n,r,i);Object.keys(t.events??{}).length>0&&t.props.eventMode===void 0&&(n.eventMode=`static`),t.type===`Graphics`&&n instanceof Ia&&Rp(n,t.props)}function Rp(e,t){let n=Number(t.width??0),r=Number(t.height??0),i=Number(t.radius??0);if(e.clear(),t.shape===`rect`)e.rect(0,0,n,r);else if(t.shape===`roundRect`)e.roundRect(0,0,n,r,i);else return;e.fill({color:Number(t.fill??16777215),alpha:Number(t.fillAlpha??1)}),Number(t.strokeWidth??0)>0&&e.stroke({width:Number(t.strokeWidth),color:Number(t.strokeColor??0),alpha:Number(t.strokeAlpha??1)})}function zp(e,t,n){return Object.fromEntries(Object.entries(t.props).flatMap(([t,r])=>n.props[t]?[[t,zt(r)?hp(e.bindingRoot,r):r]]:[]))}function Bp(e,t,n,r){for(let[i,a]of Object.entries(t.props))r.props[i]?zt(a)&&gp(e.bindingRoot,a,n,i):zt(a)?gp(e.bindingRoot,a,n,i):_p(n,i,a)}function Vp(e,t,n,r,i=``){for(let[a,o]of r.entries()){if(o.kind===`slotOutlet`){t.slots.set(o.name,n);continue}let r=Vt(o,i?`${i}/${a}`:String(a));if(o.kind===`pixi`){let i=Fp(e,o);Lp(t,o,i),o.props.zIndex!==void 0&&(n.sortableChildren=!0),n.addChild(i),t.collectNodes&&e.nodes.set(r,i),Vp(e,t,i,o.children,r)}else Hp(e,t,n,o,r)}}function Hp(e,t,n,r,i){let a=On(t.scenePath,r.scene),o=e.templates.get(a);if(!o)throw Error(`找不到 Scene:${a}`);let s=Mp(e,a),c=new vf;pp(c,s,zp(t,r,s),Np(o,s)),Pp(c,o);let l={bindingRoot:c,collectNodes:!1,scenePath:a,slots:new Map};Vp(e,l,c,o.children),Bp(t,r,c,s),r.id&&!s.props.label&&(c.label=r.id),r.props.zIndex!==void 0&&(n.sortableChildren=!0),n.addChild(c),t.collectNodes&&e.nodes.set(i,c);for(let[n,a]of Object.entries(r.slots)){let r=l.slots.get(n);r&&Vp(e,t,r,a,`${i}/slot:${n}`)}pf(c)}function Up(e,t){function n(e){for(let r of e)if(r.kind!==`slotOutlet`){if(typeof r.props.texture==`string`&&t.add(r.props.texture),r.kind===`pixi`)n(r.children);else for(let e of Object.values(r.slots))n(e)}}n(e.children)}var Wp=0,Gp=class{unusedTextureBudget;bindings=new wp;#e=++Wp;#t=0;#n=new Map;#r=new Set;#i=new Map;#a=0;#o=new Set;constructor(e=67108864){this.unusedTextureBudget=e}invalidate(e){this.bindings.invalidate(e);for(let[t,n]of this.#n)e.some(e=>t===e||t.startsWith(`${e}/`))&&this.#l(n)}async clear(){this.bindings.clear();let e=[...this.#r];for(let t of e)this.#l(t);await Promise.allSettled(e.map(e=>e.promise)),await Promise.all(this.#o)}acquire(e,t){let n=this.#n.get(t);if(!n){let r=bp(e,Ap(e,t)),i=`${this.#e}-${++this.#t}`,a=r?ur(t,i):`${t}${t.includes(`#`)?`&`:`#`}pixifact-preview=${i}`;n={source:t,url:a,promise:void 0,references:0,bytes:0,stale:!1};let o=n;this.#r.add(o),o.promise=wa.load({src:a,parser:Ep[jp(t)]}).then(e=>(o.texture=e,o.bytes=e.source.pixelWidth*e.source.pixelHeight*4,o.references===0&&this.#c(o),e),e=>{throw this.#n.get(t)===o&&this.#n.delete(t),this.#r.delete(o),wa.resolver.removeAlias(o.url),e}),this.#n.set(t,o)}this.#s(n),n.references+=1;let r=!1;return{ready:n.promise,release:()=>{r||(r=!0,--n.references,n.references===0&&n.texture&&this.#c(n))}}}#s(e){let t=this.#i.get(e);t!==void 0&&(this.#a-=t,this.#i.delete(e))}#c(e){if(e.stale)this.#u(e);else for(this.#i.set(e,e.bytes),this.#a+=e.bytes;this.#a>this.unusedTextureBudget;)this.#l(this.#i.keys().next().value)}#l(e){e.stale=!0,this.#n.get(e.source)===e&&this.#n.delete(e.source),this.#s(e),e.references===0&&e.texture&&this.#u(e)}#u(e){e.texture=void 0;let t=wa.unload(e.url).then(()=>wa.resolver.removeAlias(e.url)).finally(()=>{this.#r.delete(e),this.#o.delete(t)});this.#o.add(t)}};async function Kp(e){let{cache:t,signal:n}=e;n?.throwIfAborted();let r=await t.bindings.readIndex(e.projectTree,e.scenePath,e.document.template,n),i=Tn(e.scenePath),a=r[i];if(!a)throw Error(`找不到 Scene 绑定:${i}`);let o=new Map(Object.values(r).map(e=>[e.scenePath,e.template]));o.set(i,e.document.template);let s={...Object.fromEntries(Object.values(r).map(e=>[e.scenePath,e.interface])),...e.document.sceneInterfaces},c={interfaces:s,nodes:new Map,projectResolution:e.projectResolution,projectTree:e.projectTree,templates:o,textures:new Map},l=new Set;for(let e of o.values())Up(e,l);let u=[...l].map(n=>({reference:n,...t.acquire(e.projectTree,n)})),d;try{await Cp(Promise.all(u.map(async e=>{c.textures.set(e.reference,await e.ready)})),n),n?.throwIfAborted(),d=new vf;let t=s[i]??a.interface;pp(d,t,{},Np(e.document.template,t)),Pp(d,e.document.template,c.projectResolution),Vp(c,{bindingRoot:d,collectNodes:!0,scenePath:i,slots:new Map},d,e.document.template.children),pf(d);let r=kp(e.document.template,c.projectResolution),o=!1;return{root:d,nodes:c.nodes,width:r.width,height:r.height,dispose:()=>{if(!o){o=!0,d.destroy({children:!0});for(let e of u)e.release()}}}}catch(e){d?.destroy({children:!0});for(let e of u)e.release();throw e}}function qp(e){e?.dispose()}function Jp(e,t){let n=t.root.position.clone(),r=t.root.scale.clone(),i;try{t.root.position.set(0,0),t.root.scale.set(1),i=e.renderer.extract.base64({target:t.root,frame:new d(0,0,t.width,t.height),resolution:1,format:`png`,antialias:!0})}finally{t.root.position.copyFrom(n),t.root.scale.copyFrom(r)}return i}export{At as A,On as C,zt as D,Vt as E,Pt as F,It as I,ut as L,Lt as M,dt as N,Rt as O,Ft as P,Dn as S,pn as T,sr as _,df as a,Gn as b,Ia as c,pr as d,hr as f,dr as g,ir as h,qp as i,ft as j,Nt as k,Oa as l,fr as m,Gp as n,mf as o,gr as p,Kp as r,ff as s,Jp as t,di as u,ar as v,En as w,An as x,or as y};
|