UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 2.01 kB
import{UNIFORM_BUFFER_DEFAULT_SLOT_NAME as t}from"./constants.js";let e=0;class r{constructor(r,s,i){this.renderVersionUpdated=-1,this.uniformBuffers=void 0,this.uniformBufferOffsets=[],this.id=e++,this.device=r,this.format=s,this.dirty=!0,this.impl=r.createBindGroupImpl(this),this.textures=[],this.storageTextures=[],this.storageBuffers=[],this.uniformBuffers=[],this.defaultUniformBuffer=i,i&&this.setUniformBuffer(t,i)}destroy(){this.impl.destroy(),this.impl=null,this.format=null,this.defaultUniformBuffer=null}setUniformBuffer(t,e){const r=this.format.bufferFormatsMap.get(t);this.uniformBuffers[r]!==e&&(this.uniformBuffers[r]=e,this.dirty=!0)}setStorageBuffer(t,e){const r=this.format.storageBufferFormatsMap.get(t);this.storageBuffers[r]!==e&&(this.storageBuffers[r]=e,this.dirty=!0)}setTexture(t,e){const r=this.format.textureFormatsMap.get(t);this.textures[r]!==e?(this.textures[r]=e,this.dirty=!0):this.renderVersionUpdated<e.renderVersionDirty&&(this.dirty=!0)}setStorageTexture(t,e){const r=this.format.storageTextureFormatsMap.get(t);this.storageTextures[r]!==e?(this.storageTextures[r]=e,this.dirty=!0):this.renderVersionUpdated<e.renderVersionDirty&&(this.dirty=!0)}updateUniformBuffers(){for(let t=0;t<this.uniformBuffers.length;t++)this.uniformBuffers[t].update()}update(){const{textureFormats:t,storageTextureFormats:e,storageBufferFormats:r}=this.format;for(let e=0;e<t.length;e++){const r=t[e],s=r.scopeId.value;this.setTexture(r.name,s)}for(let t=0;t<e.length;t++){const r=e[t],s=r.scopeId.value;this.setStorageTexture(r.name,s)}for(let t=0;t<r.length;t++){const e=r[t],s=e.scopeId.value;this.setStorageBuffer(e.name,s)}this.uniformBufferOffsets.length=this.uniformBuffers.length;for(let t=0;t<this.uniformBuffers.length;t++){const e=this.uniformBuffers[t];this.uniformBufferOffsets[t]=e.offset,this.renderVersionUpdated<e.renderVersionDirty&&(this.dirty=!0)}this.dirty&&(this.dirty=!1,this.renderVersionUpdated=this.device.renderVersion,this.impl.update(this))}}export{r as BindGroup};