UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.08 kB
class r{constructor(){this.bindGroup=void 0}update(r){this.destroy();const e=r.device,t=this.createDescriptor(e,r);this.bindGroup=e.wgpu.createBindGroup(t)}destroy(){this.bindGroup=null}createDescriptor(r,e){const t=[],o=e.format,s=e.format.uniformBufferFormats;e.uniformBuffers.forEach(((r,e)=>{const o=s[e].slot,u=r.persistent?r.impl.buffer:r.allocation.gpuBuffer.buffer;t.push({binding:o,resource:{buffer:u,offset:0,size:r.format.byteSize}})}));const u=e.format.textureFormats;e.textures.forEach(((e,s)=>{const i=e.impl,f=o.textureFormats[s],a=u[s].slot,n=i.getView(r);if(t.push({binding:a,resource:n}),f.hasSampler){const e=i.getSampler(r,f.sampleType);t.push({binding:a+1,resource:e})}}));const i=e.format.storageTextureFormats;e.storageTextures.forEach(((e,o)=>{const s=e.impl,u=i[o].slot,f=s.getView(r);t.push({binding:u,resource:f})}));const f=e.format.storageBufferFormats;e.storageBuffers.forEach(((r,e)=>{const o=r.impl.buffer,s=f[e].slot;t.push({binding:s,resource:{buffer:o}})}));return{layout:e.format.impl.bindGroupLayout,entries:t}}}export{r as WebgpuBindGroup};