@rel-packages/osu-beatmap-preview 0.11.3 → 0.11.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/default_skin_archive.d.ts +2 -0
- package/dist/assets/default_skin_archive.d.ts.map +1 -0
- package/dist/assets/default_skin_embedded.d.ts.map +1 -1
- package/dist/chunk-0e4ebmdy.js +2 -0
- package/dist/chunk-1sw3e1ar.js +23 -0
- package/dist/chunk-21p7cseg.js +1 -0
- package/dist/chunk-525kvqgh.js +1 -0
- package/dist/chunk-5evxnj3k.js +9 -0
- package/dist/chunk-5v6x1wpn.js +84 -0
- package/dist/chunk-7qazncxz.js +15 -0
- package/dist/chunk-a7wf9wxx.js +173 -0
- package/dist/chunk-ay0z741j.js +1 -0
- package/dist/chunk-dvctxyxp.js +2 -0
- package/dist/chunk-eb5gmq04.js +186 -0
- package/dist/chunk-edbhr7zr.js +156 -0
- package/dist/chunk-ef1ghrsq.js +1 -0
- package/dist/chunk-f3y92gm3.js +1 -0
- package/dist/chunk-fsbv6vcn.js +2 -0
- package/dist/chunk-h72ajp0p.js +1 -0
- package/dist/chunk-kkmq6cvb.js +2 -0
- package/dist/chunk-kmf5rpya.js +1 -0
- package/dist/chunk-kt3t4zv0.js +2 -0
- package/dist/chunk-pn7re3na.js +2 -0
- package/dist/chunk-rp8z1jh7.js +2 -0
- package/dist/chunk-shb5s568.js +1 -0
- package/dist/chunk-sngkm5ds.js +218 -0
- package/dist/chunk-tb8nqrjk.js +1 -0
- package/dist/chunk-zc79wdxj.js +41 -0
- package/dist/index.js +1 -1146
- package/dist/player/audio_controller.d.ts +4 -0
- package/dist/player/audio_controller.d.ts.map +1 -1
- package/dist/player/player.d.ts +2 -0
- package/dist/player/player.d.ts.map +1 -1
- package/dist/renderer/backend/pixi_backend.d.ts +1 -1
- package/dist/renderer/backend/pixi_backend.d.ts.map +1 -1
- package/dist/renderer/backend/render_backend.d.ts +1 -1
- package/dist/renderer/backend/render_backend.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/index.js.map +0 -357
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import{i as VJ,j as ZJ,l as _J,n as DJ,p as jJ,r as wJ,s as AJ,t as UJ,u as MJ}from"./chunk-eb5gmq04.js";import{I as yJ,J as lJ,K as vJ,y as k,z as xJ}from"./chunk-a7wf9wxx.js";import{ba as RJ,ca as T}from"./chunk-kt3t4zv0.js";import{ha as FJ}from"./chunk-fsbv6vcn.js";import{ta as E}from"./chunk-0e4ebmdy.js";import{Ba as h,Da as OJ,Ea as P,Ia as l,va as B,xa as KJ,za as NJ}from"./chunk-sngkm5ds.js";import{Ja as N,Ka as U,Qa as L,Ra as zJ,Va as w,db as LJ,hb as JJ,ib as j,jb as XJ,ob as n,pb as TJ,qb as R,rb as v,sb as p,tb as PJ}from"./chunk-1sw3e1ar.js";class S{constructor(){this._maxTextures=0}contextChange(J){let Q=new R({uTransformMatrix:{value:new L,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}});this._maxTextures=J.limits.maxBatchableTextures;let X=B({name:"graphics",bits:[KJ,NJ(this._maxTextures),ZJ,h]});this.shader=new v({gpuProgram:X,resources:{localUniforms:Q}})}execute(J,Q){let X=Q.context,Y=X.customShader||this.shader,$=J.renderer,q=$.graphicsContext,{batcher:H,instructions:F}=q.getContextRenderData(X),K=$.encoder;K.setGeometry(H.geometry,Y.gpuProgram);let z=$.globalUniforms.bindGroup;K.setBindGroup(0,z,Y.gpuProgram);let V=$.renderPipes.uniformBatch.getUniformBindGroup(Y.resources.localUniforms,!0);K.setBindGroup(2,V,Y.gpuProgram);let _=F.instructions,Z=null;for(let O=0;O<F.instructionSize;O++){let W=_[O];if(W.topology!==Z)Z=W.topology,K.setPipelineFromGeometryProgramAndState(H.geometry,Y.gpuProgram,J.state,W.topology);if(Y.groups[1]=W.bindGroup,!W.gpuBindGroup){let M=W.textures;W.bindGroup=E(M.textures,M.count,this._maxTextures),W.gpuBindGroup=$.bindGroup.getBindGroup(W.bindGroup,Y.gpuProgram,1)}K.setBindGroup(1,W.bindGroup,Y.gpuProgram),K.renderPassEncoder.drawIndexed(W.size,1,W.start)}}destroy(){this.shader.destroy(!0),this.shader=null}}S.extension={type:[N.WebGPUPipesAdaptor],name:"graphics"};class G{init(){let J=B({name:"mesh",bits:[VJ,_J,h]});this._shader=new v({gpuProgram:J,resources:{uTexture:JJ.EMPTY._source,uSampler:JJ.EMPTY._source.style,textureUniforms:{uTextureMatrix:{type:"mat3x3<f32>",value:new L}}}})}execute(J,Q){let X=J.renderer,Y=Q._shader;if(!Y)Y=this._shader,Y.groups[2]=X.texture.getTextureBindGroup(Q.texture);else if(!Y.gpuProgram){w("Mesh shader has no gpuProgram",Q.shader);return}let $=Y.gpuProgram;if($.autoAssignGlobalUniforms)Y.groups[0]=X.globalUniforms.bindGroup;if($.autoAssignLocalUniforms){let q=J.localUniforms;Y.groups[1]=X.renderPipes.uniformBatch.getUniformBindGroup(q,!0)}X.encoder.draw({geometry:Q._geometry,shader:Y,state:Q.state})}destroy(){this._shader.destroy(!0),this._shader=null}}G.extension={type:[N.WebGPUPipesAdaptor],name:"mesh"};var b=T.for2d();class x{start(J,Q,X){let Y=J.renderer,$=Y.encoder,q=X.gpuProgram;this._shader=X,this._geometry=Q,$.setGeometry(Q,q),b.blendMode="normal",Y.pipeline.getPipeline(Q,q,b);let H=Y.globalUniforms.bindGroup;$.resetBindGroup(1),$.setBindGroup(0,H,q)}execute(J,Q){let X=this._shader.gpuProgram,Y=J.renderer,$=Y.encoder;if(!Q.bindGroup){let F=Q.textures;Q.bindGroup=E(F.textures,F.count,Y.limits.maxBatchableTextures)}b.blendMode=Q.blendMode;let q=Y.bindGroup.getBindGroup(Q.bindGroup,X,1),H=Y.pipeline.getPipeline(this._geometry,X,b,Q.topology);Q.bindGroup._touch(Y.gc.now,Y.tick),$.setPipeline(H),$.renderPassEncoder.setBindGroup(1,q),$.renderPassEncoder.drawIndexed(Q.size,1,Q.start)}}x.extension={type:[N.WebGPUPipesAdaptor],name:"batch"};class y{constructor(J){this._hash=Object.create(null),this._renderer=J}contextChange(J){this._gpu=J}getBindGroup(J,Q,X){return J._updateKey(),this._hash[J._key]||this._createBindGroup(J,Q,X)}_createBindGroup(J,Q,X){let Y=this._gpu.device,$=Q.layout[X],q=[],H=this._renderer;for(let z in $){let V=J.resources[z]??J.resources[$[z]],_;if(V._resourceType==="uniformGroup"){let Z=V;H.ubo.updateUniformGroup(Z);let O=Z.buffer;_={buffer:H.buffer.getGPUBuffer(O),offset:0,size:O.descriptor.size}}else if(V._resourceType==="buffer"){let Z=V;_={buffer:H.buffer.getGPUBuffer(Z),offset:0,size:Z.descriptor.size}}else if(V._resourceType==="bufferResource"){let Z=V;_={buffer:H.buffer.getGPUBuffer(Z.buffer),offset:Z.offset,size:Z.size}}else if(V._resourceType==="textureSampler"){let Z=V;_=H.texture.getGpuSampler(Z)}else if(V._resourceType==="textureSource"){let Z=V;_=H.texture.getTextureView(Z)}q.push({binding:$[z],resource:_})}let F=H.shader.getProgramData(Q).bindGroups[X],K=Y.createBindGroup({layout:F,entries:q});return this._hash[J._key]=K,K}destroy(){this._hash=null,this._renderer=null}}y.extension={type:[N.WebGPUSystem],name:"bindGroup"};class WJ{constructor(J){this.gpuBuffer=J}destroy(){this.gpuBuffer.destroy(),this.gpuBuffer=null}}class f{constructor(J){this._renderer=J,this._managedBuffers=new l({renderer:J,type:"resource",onUnload:this.onBufferUnload.bind(this),name:"gpuBuffer"})}contextChange(J){this._gpu=J}getGPUBuffer(J){return J._gcLastUsed=this._renderer.gc.now,J._gpuData[this._renderer.uid]?.gpuBuffer||this.createGPUBuffer(J)}updateBuffer(J){let Q=this.getGPUBuffer(J),X=J.data;if(J._updateID&&X)J._updateID=0,this._gpu.device.queue.writeBuffer(Q,0,X.buffer,0,(J._updateSize||X.byteLength)+3&-4);return Q}destroyAll(){this._managedBuffers.removeAll()}onBufferUnload(J){J.off("update",this.updateBuffer,this),J.off("change",this.onBufferChange,this)}createGPUBuffer(J){let Q=this._gpu.device.createBuffer(J.descriptor);if(J._updateID=0,J._resourceId=zJ("resource"),J.data)OJ(J.data.buffer,Q.getMappedRange(),J.data.byteOffset,J.data.byteLength),Q.unmap();if(J._gpuData[this._renderer.uid]=new WJ(Q),this._managedBuffers.add(J))J.on("update",this.updateBuffer,this),J.on("change",this.onBufferChange,this);return Q}onBufferChange(J){this._managedBuffers.remove(J),J._updateID=0,this.createGPUBuffer(J)}destroy(){this._managedBuffers.destroy(),this._renderer=null,this._gpu=null}}f.extension={type:[N.WebGPUSystem],name:"buffer"};class m{constructor(J){this._colorMaskCache=15,this._renderer=J}setMask(J){if(this._colorMaskCache===J)return;this._colorMaskCache=J,this._renderer.pipeline.setColorMask(J)}destroy(){this._renderer=null,this._colorMaskCache=null}}m.extension={type:[N.WebGPUSystem],name:"colorMask"};class D{constructor(J){this._renderer=J}async init(J){if(this._initPromise)return this._initPromise;return this._initPromise=(J.gpu?Promise.resolve(J.gpu):this._createDeviceAndAdaptor(J)).then((Q)=>{this.gpu=Q,this._renderer.runners.contextChange.emit(this.gpu)}),this._initPromise}contextChange(J){this._renderer.gpu=J}async _createDeviceAndAdaptor(J){let Q=await j.get().getNavigator().gpu.requestAdapter({powerPreference:J.powerPreference,forceFallbackAdapter:J.forceFallbackAdapter}),X=["texture-compression-bc","texture-compression-astc","texture-compression-etc2"].filter(($)=>Q.features.has($)),Y=await Q.requestDevice({requiredFeatures:X});return{adapter:Q,device:Y}}destroy(){this.gpu=null,this._renderer=null}}D.extension={type:[N.WebGPUSystem],name:"device"};D.defaultOptions={powerPreference:void 0,forceFallbackAdapter:!1};class g{constructor(J){this._boundBindGroup=Object.create(null),this._boundVertexBuffer=Object.create(null),this._renderer=J}renderStart(){this.commandFinished=new Promise((J)=>{this._resolveCommandFinished=J}),this.commandEncoder=this._renderer.gpu.device.createCommandEncoder()}beginRenderPass(J){this.endRenderPass(),this._clearCache(),this.renderPassEncoder=this.commandEncoder.beginRenderPass(J.descriptor)}endRenderPass(){if(this.renderPassEncoder)this.renderPassEncoder.end();this.renderPassEncoder=null}setViewport(J){this.renderPassEncoder.setViewport(J.x,J.y,J.width,J.height,0,1)}setPipelineFromGeometryProgramAndState(J,Q,X,Y){let $=this._renderer.pipeline.getPipeline(J,Q,X,Y);this.setPipeline($)}setPipeline(J){if(this._boundPipeline===J)return;this._boundPipeline=J,this.renderPassEncoder.setPipeline(J)}_setVertexBuffer(J,Q){if(this._boundVertexBuffer[J]===Q)return;this._boundVertexBuffer[J]=Q,this.renderPassEncoder.setVertexBuffer(J,this._renderer.buffer.updateBuffer(Q))}_setIndexBuffer(J){if(this._boundIndexBuffer===J)return;this._boundIndexBuffer=J;let Q=J.data.BYTES_PER_ELEMENT===2?"uint16":"uint32";this.renderPassEncoder.setIndexBuffer(this._renderer.buffer.updateBuffer(J),Q)}resetBindGroup(J){this._boundBindGroup[J]=null}setBindGroup(J,Q,X){if(this._boundBindGroup[J]===Q)return;this._boundBindGroup[J]=Q,Q._touch(this._renderer.gc.now,this._renderer.tick);let Y=this._renderer.bindGroup.getBindGroup(Q,X,J);this.renderPassEncoder.setBindGroup(J,Y)}setGeometry(J,Q){let X=this._renderer.pipeline.getBufferNamesToBind(J,Q);for(let Y in X)this._setVertexBuffer(parseInt(Y,10),J.attributes[X[Y]].buffer);if(J.indexBuffer)this._setIndexBuffer(J.indexBuffer)}_setShaderBindGroups(J,Q){for(let X in J.groups){let Y=J.groups[X];if(!Q)this._syncBindGroup(Y);this.setBindGroup(X,Y,J.gpuProgram)}}_syncBindGroup(J){for(let Q in J.resources){let X=J.resources[Q];if(X.isUniformGroup)this._renderer.ubo.updateUniformGroup(X)}}draw(J){let{geometry:Q,shader:X,state:Y,topology:$,size:q,start:H,instanceCount:F,skipSync:K}=J;if(this.setPipelineFromGeometryProgramAndState(Q,X.gpuProgram,Y,$),this.setGeometry(Q,X.gpuProgram),this._setShaderBindGroups(X,K),Q.indexBuffer)this.renderPassEncoder.drawIndexed(q||Q.indexBuffer.data.length,F??Q.instanceCount,H||0);else this.renderPassEncoder.draw(q||Q.getSize(),F??Q.instanceCount,H||0)}finishRenderPass(){if(this.renderPassEncoder)this.renderPassEncoder.end(),this.renderPassEncoder=null}postrender(){this.finishRenderPass(),this._gpu.device.queue.submit([this.commandEncoder.finish()]),this._resolveCommandFinished(),this.commandEncoder=null}restoreRenderPass(){let J=this._renderer.renderTarget.adaptor.getDescriptor(this._renderer.renderTarget.renderTarget,!1,[0,0,0,1],this._renderer.renderTarget.mipLevel,this._renderer.renderTarget.layer);this.renderPassEncoder=this.commandEncoder.beginRenderPass(J);let Q=this._boundPipeline,X={...this._boundVertexBuffer},Y=this._boundIndexBuffer,$={...this._boundBindGroup};this._clearCache();let q=this._renderer.renderTarget.viewport;this.renderPassEncoder.setViewport(q.x,q.y,q.width,q.height,0,1),this.setPipeline(Q);for(let H in X)this._setVertexBuffer(H,X[H]);for(let H in $)this.setBindGroup(H,$[H],null);this._setIndexBuffer(Y)}_clearCache(){for(let J=0;J<16;J++)this._boundBindGroup[J]=null,this._boundVertexBuffer[J]=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}contextChange(J){this._gpu=J}}g.extension={type:[N.WebGPUSystem],name:"encoder",priority:1};class c{constructor(J){this._renderer=J}contextChange(){this.maxTextures=this._renderer.device.gpu.device.limits.maxSampledTexturesPerShaderStage,this.maxBatchableTextures=this.maxTextures}destroy(){}}c.extension={type:[N.WebGPUSystem],name:"limits"};class d{constructor(J){this._renderTargetStencilState=Object.create(null),this._renderer=J,J.renderTarget.onRenderTargetChange.add(this)}onRenderTargetChange(J){let Q=this._renderTargetStencilState[J.uid];if(!Q)Q=this._renderTargetStencilState[J.uid]={stencilMode:P.DISABLED,stencilReference:0};this._activeRenderTarget=J,this.setStencilMode(Q.stencilMode,Q.stencilReference)}setStencilMode(J,Q){let X=this._renderTargetStencilState[this._activeRenderTarget.uid];X.stencilMode=J,X.stencilReference=Q;let Y=this._renderer;Y.pipeline.setStencilMode(J),Y.encoder.renderPassEncoder.setStencilReference(Q)}destroy(){this._renderer.renderTarget.onRenderTargetChange.remove(this),this._renderer=null,this._activeRenderTarget=null,this._renderTargetStencilState=null}}d.extension={type:[N.WebGPUSystem],name:"stencil"};var A={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 IJ(J){let Q=J.map((Y)=>({data:Y,offset:0,size:0})),X=0;for(let Y=0;Y<Q.length;Y++){let $=Q[Y],q=A[$.data.type].size,H=A[$.data.type].align;if(!A[$.data.type])throw Error(`[Pixi.js] WebGPU UniformBuffer: Unknown type ${$.data.type}`);if($.data.size>1)q=Math.max(q,H)*$.data.size;X=Math.ceil(X/H)*H,$.size=q,$.offset=X,X+=q}return X=Math.ceil(X/16)*16,{uboElements:Q,size:X}}function CJ(J,Q){let{size:X,align:Y}=A[J.data.type],$=(Y-X)/4,q=J.data.type.indexOf("i32")>=0?"dataInt32":"data";return`
|
|
2
|
+
v = uv.${J.data.name};
|
|
3
|
+
${Q!==0?`offset += ${Q};`:""}
|
|
4
|
+
|
|
5
|
+
arrayOffset = offset;
|
|
6
|
+
|
|
7
|
+
t = 0;
|
|
8
|
+
|
|
9
|
+
for(var i=0; i < ${J.data.size*(X/4)}; i++)
|
|
10
|
+
{
|
|
11
|
+
for(var j = 0; j < ${X/4}; j++)
|
|
12
|
+
{
|
|
13
|
+
${q}[arrayOffset++] = v[t++];
|
|
14
|
+
}
|
|
15
|
+
${$!==0?`arrayOffset += ${$};`:""}
|
|
16
|
+
}
|
|
17
|
+
`}function kJ(J){return jJ(J,"uboWgsl",CJ,wJ)}class i extends DJ{constructor(){super({createUboElements:IJ,generateUboSync:kJ})}}i.extension={type:[N.WebGPUSystem],name:"ubo"};class QJ{constructor({minUniformOffsetAlignment:J}){this._minUniformOffsetAlignment=256,this.byteIndex=0,this._minUniformOffsetAlignment=J,this.data=new Float32Array(65535)}clear(){this.byteIndex=0}addEmptyGroup(J){if(J>this._minUniformOffsetAlignment/4)throw Error(`UniformBufferBatch: array is too large: ${J*4}`);let Q=this.byteIndex,X=Q+J*4;if(X=Math.ceil(X/this._minUniformOffsetAlignment)*this._minUniformOffsetAlignment,X>this.data.length*4)throw Error("UniformBufferBatch: ubo batch got too big");return this.byteIndex=X,Q}addGroup(J){let Q=this.addEmptyGroup(J.length);for(let X=0;X<J.length;X++)this.data[Q/4+X]=J[X];return Q}destroy(){this.data=null}}var C=128;class s{constructor(J){this._bindGroupHash=Object.create(null),this._buffers=[],this._bindGroups=[],this._bufferResources=[],this._renderer=J,this._batchBuffer=new QJ({minUniformOffsetAlignment:C});let Q=256/C;for(let X=0;X<Q;X++){let Y=p.UNIFORM|p.COPY_DST;if(X===0)Y|=p.COPY_SRC;this._buffers.push(new PJ({data:this._batchBuffer.data,usage:Y}))}}renderEnd(){this._uploadBindGroups(),this._resetBindGroups()}_resetBindGroups(){this._bindGroupHash=Object.create(null),this._batchBuffer.clear()}getUniformBindGroup(J,Q){if(!Q&&this._bindGroupHash[J.uid])return this._bindGroupHash[J.uid];this._renderer.ubo.ensureUniformGroup(J);let X=J.buffer.data,Y=this._batchBuffer.addEmptyGroup(X.length);return this._renderer.ubo.syncUniformGroup(J,this._batchBuffer.data,Y/4),this._bindGroupHash[J.uid]=this._getBindGroup(Y/C),this._bindGroupHash[J.uid]}getUboResource(J){this._renderer.ubo.updateUniformGroup(J);let Q=J.buffer.data,X=this._batchBuffer.addGroup(Q);return this._getBufferResource(X/C)}getArrayBindGroup(J){let Q=this._batchBuffer.addGroup(J);return this._getBindGroup(Q/C)}getArrayBufferResource(J){let X=this._batchBuffer.addGroup(J)/C;return this._getBufferResource(X)}_getBufferResource(J){if(!this._bufferResources[J]){let Q=this._buffers[J%2];this._bufferResources[J]=new AJ({buffer:Q,offset:(J/2|0)*256,size:C})}return this._bufferResources[J]}_getBindGroup(J){if(!this._bindGroups[J]){let Q=new n({0:this._getBufferResource(J)});this._bindGroups[J]=Q}return this._bindGroups[J]}_uploadBindGroups(){let J=this._renderer.buffer,Q=this._buffers[0];Q.update(this._batchBuffer.byteIndex),J.updateBuffer(Q);let X=this._renderer.gpu.device.createCommandEncoder();for(let Y=1;Y<this._buffers.length;Y++){let $=this._buffers[Y];X.copyBufferToBuffer(J.getGPUBuffer(Q),C,J.getGPUBuffer($),0,this._batchBuffer.byteIndex)}this._renderer.gpu.device.queue.submit([X.finish()])}destroy(){for(let J=0;J<this._bindGroups.length;J++)this._bindGroups[J]?.destroy();this._bindGroups=null,this._bindGroupHash=null;for(let J=0;J<this._buffers.length;J++)this._buffers[J].destroy();this._buffers=null;for(let J=0;J<this._bufferResources.length;J++)this._bufferResources[J].destroy();this._bufferResources=null,this._batchBuffer.destroy(),this._renderer=null}}s.extension={type:[N.WebGPUPipes],name:"uniformBatch"};var cJ={"point-list":0,"line-list":1,"line-strip":2,"triangle-list":3,"triangle-strip":4};function dJ(J,Q,X,Y,$){return J<<24|Q<<16|X<<10|Y<<5|$}function iJ(J,Q,X,Y,$){return X<<8|J<<5|Y<<3|$<<1|Q}class a{constructor(J){this._moduleCache=Object.create(null),this._bufferLayoutsCache=Object.create(null),this._bindingNamesCache=Object.create(null),this._pipeCache=Object.create(null),this._pipeStateCaches=Object.create(null),this._colorMask=15,this._multisampleCount=1,this._colorTargetCount=1,this._renderer=J}contextChange(J){this._gpu=J,this.setStencilMode(P.DISABLED),this._updatePipeHash()}setMultisampleCount(J){if(this._multisampleCount===J)return;this._multisampleCount=J,this._updatePipeHash()}setRenderTarget(J){this._multisampleCount=J.msaaSamples,this._depthStencilAttachment=J.descriptor.depthStencilAttachment?1:0,this._colorTargetCount=J.colorTargetCount,this._updatePipeHash()}setColorMask(J){if(this._colorMask===J)return;this._colorMask=J,this._updatePipeHash()}setStencilMode(J){if(this._stencilMode===J)return;this._stencilMode=J,this._stencilState=MJ[J],this._updatePipeHash()}setPipeline(J,Q,X,Y){let $=this.getPipeline(J,Q,X);Y.setPipeline($)}getPipeline(J,Q,X,Y){if(!J._layoutKey)UJ(J,Q.attributeData),this._generateBufferKey(J);Y||(Y=J.topology);let $=dJ(J._layoutKey,Q._layoutKey,X.data,X._blendModeId,cJ[Y]);if(this._pipeCache[$])return this._pipeCache[$];return this._pipeCache[$]=this._createPipeline(J,Q,X,Y),this._pipeCache[$]}_createPipeline(J,Q,X,Y){let $=this._gpu.device,q=this._createVertexBufferLayouts(J,Q),H=this._renderer.state.getColorTargets(X,this._colorTargetCount),F=this._stencilMode===P.RENDERING_MASK_ADD?0:this._colorMask;for(let _=0;_<H.length;_++)H[_].writeMask=F;let K=this._renderer.shader.getProgramData(Q).pipeline,z={vertex:{module:this._getModule(Q.vertex.source),entryPoint:Q.vertex.entryPoint,buffers:q},fragment:{module:this._getModule(Q.fragment.source),entryPoint:Q.fragment.entryPoint,targets:H},primitive:{topology:Y,cullMode:X.cullMode},layout:K,multisample:{count:this._multisampleCount},label:"PIXI Pipeline"};if(this._depthStencilAttachment)z.depthStencil={...this._stencilState,format:"depth24plus-stencil8",depthWriteEnabled:X.depthTest,depthCompare:X.depthTest?"less":"always"};return $.createRenderPipeline(z)}_getModule(J){return this._moduleCache[J]||this._createModule(J)}_createModule(J){let Q=this._gpu.device;return this._moduleCache[J]=Q.createShaderModule({code:J}),this._moduleCache[J]}_generateBufferKey(J){let Q=[],X=0,Y=Object.keys(J.attributes).sort();for(let q=0;q<Y.length;q++){let H=J.attributes[Y[q]];Q[X++]=H.offset,Q[X++]=H.format,Q[X++]=H.stride,Q[X++]=H.instance}let $=Q.join("|");return J._layoutKey=XJ($,"geometry"),J._layoutKey}_generateAttributeLocationsKey(J){let Q=[],X=0,Y=Object.keys(J.attributeData).sort();for(let q=0;q<Y.length;q++){let H=J.attributeData[Y[q]];Q[X++]=H.location}let $=Q.join("|");return J._attributeLocationsKey=XJ($,"programAttributes"),J._attributeLocationsKey}getBufferNamesToBind(J,Q){let X=J._layoutKey<<16|Q._attributeLocationsKey;if(this._bindingNamesCache[X])return this._bindingNamesCache[X];let Y=this._createVertexBufferLayouts(J,Q),$=Object.create(null),q=Q.attributeData;for(let H=0;H<Y.length;H++){let K=Object.values(Y[H].attributes)[0].shaderLocation;for(let z in q)if(q[z].location===K){$[H]=z;break}}return this._bindingNamesCache[X]=$,$}_createVertexBufferLayouts(J,Q){if(!Q._attributeLocationsKey)this._generateAttributeLocationsKey(Q);let X=J._layoutKey<<16|Q._attributeLocationsKey;if(this._bufferLayoutsCache[X])return this._bufferLayoutsCache[X];let Y=[];return J.buffers.forEach(($)=>{let q={arrayStride:0,stepMode:"vertex",attributes:[]},H=q.attributes;for(let F in Q.attributeData){let K=J.attributes[F];if((K.divisor??1)!==1)w(`Attribute ${F} has an invalid divisor value of '${K.divisor}'. WebGPU only supports a divisor value of 1`);if(K.buffer===$)q.arrayStride=K.stride,q.stepMode=K.instance?"instance":"vertex",H.push({shaderLocation:Q.attributeData[F].location,offset:K.offset,format:K.format})}if(H.length)Y.push(q)}),this._bufferLayoutsCache[X]=Y,Y}_updatePipeHash(){let J=iJ(this._stencilMode,this._multisampleCount,this._colorMask,this._depthStencilAttachment,this._colorTargetCount);if(!this._pipeStateCaches[J])this._pipeStateCaches[J]=Object.create(null);this._pipeCache=this._pipeStateCaches[J]}destroy(){this._renderer=null,this._bufferLayoutsCache=null}}a.extension={type:[N.WebGPUSystem],name:"pipeline"};class YJ{constructor(){this.contexts=[],this.msaaTextures=[],this.msaaSamples=1}}class $J{init(J,Q){this._renderer=J,this._renderTargetSystem=Q}copyToTexture(J,Q,X,Y,$){let q=this._renderer,H=this._getGpuColorTexture(J),F=q.texture.getGpuSource(Q.source);return q.encoder.commandEncoder.copyTextureToTexture({texture:H,origin:X},{texture:F,origin:$},Y),Q}startRenderPass(J,Q=!0,X,Y,$=0,q=0){let F=this._renderTargetSystem.getGpuRenderTarget(J);if(q!==0&&F.msaaTextures?.length)throw Error("[RenderTargetSystem] Rendering to array layers is not supported with MSAA render targets.");if($>0&&F.msaaTextures?.length)throw Error("[RenderTargetSystem] Rendering to mip levels is not supported with MSAA render targets.");let K=this.getDescriptor(J,Q,X,$,q);F.descriptor=K,this._renderer.pipeline.setRenderTarget(F),this._renderer.encoder.beginRenderPass(F),this._renderer.encoder.setViewport(Y)}finishRenderPass(){this._renderer.encoder.endRenderPass()}_getGpuColorTexture(J){let Q=this._renderTargetSystem.getGpuRenderTarget(J);if(Q.contexts[0])return Q.contexts[0].getCurrentTexture();return this._renderer.texture.getGpuSource(J.colorTextures[0].source)}getDescriptor(J,Q,X,Y=0,$=0){if(typeof Q==="boolean")Q=Q?k.ALL:k.NONE;let q=this._renderTargetSystem,H=q.getGpuRenderTarget(J),F=J.colorTextures.map((V,_)=>{let Z=H.contexts[_],O,W;if(Z){if($!==0)throw Error("[RenderTargetSystem] Rendering to array layers is not supported for canvas targets.");O=Z.getCurrentTexture().createView()}else O=this._renderer.texture.getGpuSource(V).createView({dimension:"2d",baseMipLevel:Y,mipLevelCount:1,baseArrayLayer:$,arrayLayerCount:1});if(H.msaaTextures[_])W=O,O=this._renderer.texture.getTextureView(H.msaaTextures[_]);let M=Q&k.COLOR?"clear":"load";return X??(X=q.defaultClearColor),{view:O,resolveTarget:W,clearValue:X,storeOp:"store",loadOp:M}}),K;if((J.stencil||J.depth)&&!J.depthStencilTexture)J.ensureDepthStencilTexture(),J.depthStencilTexture.source.sampleCount=H.msaa?4:1;if(J.depthStencilTexture){let V=Q&k.STENCIL?"clear":"load",_=Q&k.DEPTH?"clear":"load";K={view:this._renderer.texture.getGpuSource(J.depthStencilTexture.source).createView({dimension:"2d",baseMipLevel:Y,mipLevelCount:1,baseArrayLayer:$,arrayLayerCount:1}),stencilStoreOp:"store",stencilLoadOp:V,depthClearValue:1,depthLoadOp:_,depthStoreOp:"store"}}return{colorAttachments:F,depthStencilAttachment:K}}clear(J,Q=!0,X,Y,$=0,q=0){if(!Q)return;let{gpu:H,encoder:F}=this._renderer,K=H.device;if(F.commandEncoder===null){let V=K.createCommandEncoder(),_=this.getDescriptor(J,Q,X,$,q),Z=V.beginRenderPass(_);Z.setViewport(Y.x,Y.y,Y.width,Y.height,0,1),Z.end();let O=V.finish();K.queue.submit([O])}else this.startRenderPass(J,Q,X,Y,$,q)}initGpuRenderTarget(J){J.isRoot=!0;let Q=new YJ;if(Q.colorTargetCount=J.colorTextures.length,J.colorTextures.forEach((X,Y)=>{if(X instanceof RJ){let $=X.resource.getContext("webgpu"),q=X.transparent?"premultiplied":"opaque";try{$.configure({device:this._renderer.gpu.device,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,format:"bgra8unorm",alphaMode:q})}catch(H){console.error(H)}Q.contexts[Y]=$}if(Q.msaa=X.source.antialias,X.source.antialias){let $=new LJ({width:0,height:0,sampleCount:4,arrayLayerCount:X.source.arrayLayerCount});Q.msaaTextures[Y]=$}}),Q.msaa){if(Q.msaaSamples=4,J.depthStencilTexture)J.depthStencilTexture.source.sampleCount=4}return Q}destroyGpuRenderTarget(J){J.contexts.forEach((Q)=>{Q.unconfigure()}),J.msaaTextures.forEach((Q)=>{Q.destroy()}),J.msaaTextures.length=0,J.contexts.length=0}ensureDepthStencilTexture(J){let Q=this._renderTargetSystem.getGpuRenderTarget(J);if(J.depthStencilTexture&&Q.msaa)J.depthStencilTexture.source.sampleCount=4}resizeGpuRenderTarget(J){let Q=this._renderTargetSystem.getGpuRenderTarget(J);if(Q.width=J.width,Q.height=J.height,Q.msaa)J.colorTextures.forEach((X,Y)=>{Q.msaaTextures[Y]?.resize(X.source.width,X.source.height,X.source._resolution)})}}class u extends vJ{constructor(J){super(J);this.adaptor=new $J,this.adaptor.init(J,this)}}u.extension={type:[N.WebGPUSystem],name:"renderTarget"};class o{constructor(){this._gpuProgramData=Object.create(null)}contextChange(J){this._gpu=J}getProgramData(J){return this._gpuProgramData[J._layoutKey]||this._createGPUProgramData(J)}_createGPUProgramData(J){let Q=this._gpu.device,X=J.gpuLayout.map(($)=>Q.createBindGroupLayout({entries:$})),Y={bindGroupLayouts:X};return this._gpuProgramData[J._layoutKey]={bindGroups:X,pipeline:Q.createPipelineLayout(Y)},this._gpuProgramData[J._layoutKey]}destroy(){this._gpu=null,this._gpuProgramData=null}}o.extension={type:[N.WebGPUSystem],name:"shader"};var I={};I.normal={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};I.add={alpha:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one",operation:"add"}};I.multiply={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"dst",dstFactor:"one-minus-src-alpha",operation:"add"}};I.screen={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}};I.overlay={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}};I.none={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"zero",operation:"add"}};I["normal-npm"]={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"}};I["add-npm"]={alpha:{srcFactor:"one",dstFactor:"one",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one",operation:"add"}};I["screen-npm"]={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src",operation:"add"}};I.erase={alpha:{srcFactor:"zero",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"one-minus-src",operation:"add"}};I.min={alpha:{srcFactor:"one",dstFactor:"one",operation:"min"},color:{srcFactor:"one",dstFactor:"one",operation:"min"}};I.max={alpha:{srcFactor:"one",dstFactor:"one",operation:"max"},color:{srcFactor:"one",dstFactor:"one",operation:"max"}};class t{constructor(){this.defaultState=new T,this.defaultState.blend=!0}contextChange(J){this.gpu=J}getColorTargets(J,Q){let X=I[J.blendMode]||I.normal,Y=[],$={format:"bgra8unorm",writeMask:0,blend:X};for(let q=0;q<Q;q++)Y[q]=$;return Y}destroy(){this.gpu=null}}t.extension={type:[N.WebGPUSystem],name:"state"};var EJ={type:"image",upload(J,Q,X,Y=0){let $=J.resource,q=(J.pixelWidth|0)*(J.pixelHeight|0),H=$.byteLength/q;X.device.queue.writeTexture({texture:Q,origin:{x:0,y:0,z:Y}},$,{offset:0,rowsPerImage:J.pixelHeight,bytesPerRow:J.pixelWidth*H},{width:J.pixelWidth,height:J.pixelHeight,depthOrArrayLayers:1})}};var qJ={"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}},pJ={blockBytes:4,blockWidth:1,blockHeight:1},BJ={type:"compressed",upload(J,Q,X,Y=0){let{pixelWidth:$,pixelHeight:q}=J,H=qJ[J.format]||pJ;for(let F=0;F<J.resource.length;F++){let K=J.resource[F],z=Math.ceil($/H.blockWidth)*H.blockBytes;X.device.queue.writeTexture({texture:Q,mipLevel:F,origin:{x:0,y:0,z:Y}},K,{offset:0,bytesPerRow:z},{width:Math.ceil($/H.blockWidth)*H.blockWidth,height:Math.ceil(q/H.blockHeight)*H.blockHeight,depthOrArrayLayers:1}),$=Math.max($>>1,1),q=Math.max(q>>1,1)}}};var hJ=["right","left","top","bottom","front","back"];function SJ(J){return{type:"cube",upload(Q,X,Y){let $=Q.faces;for(let q=0;q<hJ.length;q++){let H=hJ[q],F=$[H];(J[F.uploadMethodId]||J.image).upload(F,X,Y,q)}}}}var r={type:"image",upload(J,Q,X,Y=0){let $=J.resource;if(!$)return;if(globalThis.HTMLImageElement&&$ instanceof HTMLImageElement){let K=j.get().createCanvas($.width,$.height);K.getContext("2d").drawImage($,0,0,$.width,$.height),J.resource=K,w("ImageSource: Image element passed, converting to canvas and replacing resource.")}let q=Math.min(Q.width,J.resourceWidth||J.pixelWidth),H=Math.min(Q.height,J.resourceHeight||J.pixelHeight),F=J.alphaMode==="premultiply-alpha-on-upload";X.device.queue.copyExternalImageToTexture({source:$},{texture:Q,origin:{x:0,y:0,z:Y},premultipliedAlpha:F},{width:q,height:H})}};var GJ={type:"video",upload(J,Q,X,Y){r.upload(J,Q,X,Y)}};class HJ{constructor(J){this.device=J,this.sampler=J.createSampler({minFilter:"linear"}),this.pipelines={}}_getMipmapPipeline(J){let Q=this.pipelines[J];if(!Q){if(!this.mipmapShaderModule)this.mipmapShaderModule=this.device.createShaderModule({code:`
|
|
18
|
+
var<private> pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
|
|
19
|
+
vec2<f32>(-1.0, -1.0), vec2<f32>(-1.0, 3.0), vec2<f32>(3.0, -1.0));
|
|
20
|
+
|
|
21
|
+
struct VertexOutput {
|
|
22
|
+
@builtin(position) position : vec4<f32>,
|
|
23
|
+
@location(0) texCoord : vec2<f32>,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
@vertex
|
|
27
|
+
fn vertexMain(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {
|
|
28
|
+
var output : VertexOutput;
|
|
29
|
+
output.texCoord = pos[vertexIndex] * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5);
|
|
30
|
+
output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);
|
|
31
|
+
return output;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@group(0) @binding(0) var imgSampler : sampler;
|
|
35
|
+
@group(0) @binding(1) var img : texture_2d<f32>;
|
|
36
|
+
|
|
37
|
+
@fragment
|
|
38
|
+
fn fragmentMain(@location(0) texCoord : vec2<f32>) -> @location(0) vec4<f32> {
|
|
39
|
+
return textureSample(img, imgSampler, texCoord);
|
|
40
|
+
}
|
|
41
|
+
`});Q=this.device.createRenderPipeline({layout:"auto",vertex:{module:this.mipmapShaderModule,entryPoint:"vertexMain"},fragment:{module:this.mipmapShaderModule,entryPoint:"fragmentMain",targets:[{format:J}]}}),this.pipelines[J]=Q}return Q}generateMipmap(J){let Q=this._getMipmapPipeline(J.format);if(J.dimension==="3d"||J.dimension==="1d")throw Error("Generating mipmaps for non-2d textures is currently unsupported!");let X=J,Y=J.depthOrArrayLayers||1,$=J.usage&GPUTextureUsage.RENDER_ATTACHMENT;if(!$){let F={size:{width:Math.ceil(J.width/2),height:Math.ceil(J.height/2),depthOrArrayLayers:Y},format:J.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT,mipLevelCount:J.mipLevelCount-1};X=this.device.createTexture(F)}let q=this.device.createCommandEncoder({}),H=Q.getBindGroupLayout(0);for(let F=0;F<Y;++F){let K=J.createView({baseMipLevel:0,mipLevelCount:1,dimension:"2d",baseArrayLayer:F,arrayLayerCount:1}),z=$?1:0;for(let V=1;V<J.mipLevelCount;++V){let _=X.createView({baseMipLevel:z++,mipLevelCount:1,dimension:"2d",baseArrayLayer:F,arrayLayerCount:1}),Z=q.beginRenderPass({colorAttachments:[{view:_,storeOp:"store",loadOp:"clear",clearValue:{r:0,g:0,b:0,a:0}}]}),O=this.device.createBindGroup({layout:H,entries:[{binding:0,resource:this.sampler},{binding:1,resource:K}]});Z.setPipeline(Q),Z.setBindGroup(0,O),Z.draw(3,1,0,0),Z.end(),K=_}}if(!$){let F={width:Math.ceil(J.width/2),height:Math.ceil(J.height/2),depthOrArrayLayers:Y};for(let K=1;K<J.mipLevelCount;++K)q.copyTextureToTexture({texture:X,mipLevel:K-1},{texture:J,mipLevel:K},F),F.width=Math.ceil(F.width/2),F.height=Math.ceil(F.height/2)}if(this.device.queue.submit([q.finish()]),!$)X.destroy();return J}}class bJ{constructor(J){this.textureView=null,this.gpuTexture=J}destroy(){this.gpuTexture.destroy(),this.textureView=null,this.gpuTexture=null}}class e{constructor(J){this._gpuSamplers=Object.create(null),this._bindGroupHash=Object.create(null),this._renderer=J,J.gc.addCollection(this,"_bindGroupHash","hash"),this._managedTextures=new l({renderer:J,type:"resource",onUnload:this.onSourceUnload.bind(this),name:"gpuTextureSource"});let Q={image:r,buffer:EJ,video:GJ,compressed:BJ};this._uploads={...Q,cube:SJ(Q)}}get managedTextures(){return Object.values(this._managedTextures.items)}contextChange(J){this._gpu=J}initSource(J){return J._gpuData[this._renderer.uid]?.gpuTexture||this._initSource(J)}_initSource(J){if(J.autoGenerateMipmaps){let K=Math.max(J.pixelWidth,J.pixelHeight);J.mipLevelCount=Math.floor(Math.log2(K))+1}let Q=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST;if(J.uploadMethodId!=="compressed")Q|=GPUTextureUsage.RENDER_ATTACHMENT,Q|=GPUTextureUsage.COPY_SRC;let X=qJ[J.format]||{blockBytes:4,blockWidth:1,blockHeight:1},Y=Math.ceil(J.pixelWidth/X.blockWidth)*X.blockWidth,$=Math.ceil(J.pixelHeight/X.blockHeight)*X.blockHeight,q={label:J.label,size:{width:Y,height:$,depthOrArrayLayers:J.arrayLayerCount},format:J.format,sampleCount:J.sampleCount,mipLevelCount:J.mipLevelCount,dimension:J.dimension,usage:Q},H=this._gpu.device.createTexture(q);if(J._gpuData[this._renderer.uid]=new bJ(H),this._managedTextures.add(J))J.on("update",this.onSourceUpdate,this),J.on("resize",this.onSourceResize,this),J.on("updateMipmaps",this.onUpdateMipmaps,this);return this.onSourceUpdate(J),H}onSourceUpdate(J){let Q=this.getGpuSource(J);if(!Q)return;if(this._uploads[J.uploadMethodId])this._uploads[J.uploadMethodId].upload(J,Q,this._gpu);if(J.autoGenerateMipmaps&&J.mipLevelCount>1)this.onUpdateMipmaps(J)}onUpdateMipmaps(J){if(!this._mipmapGenerator)this._mipmapGenerator=new HJ(this._gpu.device);let Q=this.getGpuSource(J);this._mipmapGenerator.generateMipmap(Q)}onSourceUnload(J){J.off("update",this.onSourceUpdate,this),J.off("resize",this.onSourceResize,this),J.off("updateMipmaps",this.onUpdateMipmaps,this)}onSourceResize(J){J._gcLastUsed=this._renderer.gc.now;let Q=J._gpuData[this._renderer.uid],X=Q?.gpuTexture;if(!X)this.initSource(J);else if(X.width!==J.pixelWidth||X.height!==J.pixelHeight)Q.destroy(),this._bindGroupHash[J.uid]=null,J._gpuData[this._renderer.uid]=null,this.initSource(J)}_initSampler(J){return this._gpuSamplers[J._resourceId]=this._gpu.device.createSampler(J),this._gpuSamplers[J._resourceId]}getGpuSampler(J){return this._gpuSamplers[J._resourceId]||this._initSampler(J)}getGpuSource(J){return J._gcLastUsed=this._renderer.gc.now,J._gpuData[this._renderer.uid]?.gpuTexture||this.initSource(J)}getTextureBindGroup(J){return this._bindGroupHash[J.uid]||this._createTextureBindGroup(J)}_createTextureBindGroup(J){let Q=J.source;return this._bindGroupHash[J.uid]=new n({0:Q,1:Q.style,2:new R({uTextureMatrix:{type:"mat3x3<f32>",value:J.textureMatrix.mapCoord}})}),this._bindGroupHash[J.uid]}getTextureView(J){let Q=J.source;Q._gcLastUsed=this._renderer.gc.now;let X=Q._gpuData[this._renderer.uid];if(!X)this.initSource(Q),X=Q._gpuData[this._renderer.uid];return X.textureView||(X.textureView=X.gpuTexture.createView({dimension:Q.viewDimension})),X.textureView}generateCanvas(J){let Q=this._renderer,X=Q.gpu.device.createCommandEncoder(),Y=j.get().createCanvas();Y.width=J.source.pixelWidth,Y.height=J.source.pixelHeight;let $=Y.getContext("webgpu");return $.configure({device:Q.gpu.device,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC,format:j.get().getNavigator().gpu.getPreferredCanvasFormat(),alphaMode:"premultiplied"}),X.copyTextureToTexture({texture:Q.texture.getGpuSource(J.source),origin:{x:0,y:0}},{texture:$.getCurrentTexture()},{width:Y.width,height:Y.height}),Q.gpu.device.queue.submit([X.finish()]),Y}getPixels(J){let Q=this.generateCanvas(J),X=FJ.getOptimalCanvasAndContext(Q.width,Q.height),Y=X.context;Y.drawImage(Q,0,0);let{width:$,height:q}=Q,H=Y.getImageData(0,0,$,q),F=new Uint8ClampedArray(H.data.buffer);return FJ.returnCanvasAndContext(X),{pixels:F,width:$,height:q}}destroy(){this._managedTextures.destroy();for(let J of Object.keys(this._bindGroupHash)){let Q=Number(J);this._bindGroupHash[Q]?.destroy()}this._renderer=null,this._gpu=null,this._mipmapGenerator=null,this._gpuSamplers=null,this._bindGroupHash=null}}e.extension={type:[N.WebGPUSystem],name:"texture"};var nJ=[...yJ,i,g,D,c,f,e,u,o,t,a,m,d,y],sJ=[...lJ,s],aJ=[x,G,S],fJ=[],mJ=[],gJ=[];U.handleByNamedList(N.WebGPUSystem,fJ);U.handleByNamedList(N.WebGPUPipes,mJ);U.handleByNamedList(N.WebGPUPipesAdaptor,gJ);U.add(...nJ,...sJ,...aJ);class uJ extends xJ{constructor(){let J={name:"webgpu",type:TJ.WEBGPU,systems:fJ,renderPipes:mJ,renderPipeAdaptors:gJ};super(J)}}export{uJ as g};
|