UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.09 kB
import{releaseMaybe as t,isSome as e,isNone as s}from"../../../../core/maybe.js";import{isPromiseLike as i}from"../../../../core/promiseUtils.js";import{NoParameters as r}from"../core/shaderModules/interfaces.js";import{ResourceState as u}from"./basicInterfaces.js";import l from"./GLMaterial.js";class h extends l{constructor(t){super(t),this._numLoading=0,this._disposed=!1,this._textureRepository=t.textureRep,this._textureId=t.textureId,this._acquire(t.textureId,(t=>this._texture=t)),this._acquire(t.normalTextureId,(t=>this._textureNormal=t)),this._acquire(t.emissiveTextureId,(t=>this._textureEmissive=t)),this._acquire(t.occlusionTextureId,(t=>this._textureOcclusion=t)),this._acquire(t.metallicRoughnessTextureId,(t=>this._textureMetallicRoughness=t))}dispose(){this._texture=t(this._texture),this._textureNormal=t(this._textureNormal),this._textureEmissive=t(this._textureEmissive),this._textureOcclusion=t(this._textureOcclusion),this._textureMetallicRoughness=t(this._textureMetallicRoughness),this._disposed=!0}ensureResources(t){return 0===this._numLoading?u.LOADED:u.LOADING}get textureBindParameters(){return new o(e(this._texture)?this._texture.glTexture:null,e(this._textureNormal)?this._textureNormal.glTexture:null,e(this._textureEmissive)?this._textureEmissive.glTexture:null,e(this._textureOcclusion)?this._textureOcclusion.glTexture:null,e(this._textureMetallicRoughness)?this._textureMetallicRoughness.glTexture:null)}updateTexture(e){(s(this._texture)||e!==this._texture.id)&&(this._texture=t(this._texture),this._textureId=e,this._acquire(this._textureId,(t=>this._texture=t)))}_acquire(e,r){if(s(e))return void r(null);const u=this._textureRepository.acquire(e);if(i(u))return++this._numLoading,void u.then((e=>{if(this._disposed)return t(e),void r(null);r(e)})).finally((()=>--this._numLoading));r(u)}}class o extends r{constructor(t=null,e=null,s=null,i=null,r=null){super(),this.texture=t,this.textureNormal=e,this.textureEmissive=s,this.textureOcclusion=i,this.textureMetallicRoughness=r}}export{h as GLTextureMaterial,o as GLTextureMaterialBindParameters};