UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.35 kB
import{ShaderProgramType as e}from"../enums.js";import{text as r,outline as t,line as a,icon as s,fill as n,circle as c,background as i}from"./Programs.js";class o{constructor(){this._programByKey=new Map}dispose(){this._programByKey.forEach((e=>e.dispose())),this._programByKey.clear()}getMaterialProgram(e,r,t){const a=r.key<<3|this._getMaterialOptionsValue(r.type,t);if(this._programByKey.has(a))return this._programByKey.get(a);const s=this._getProgramTemplate(r.type),{shaders:n}=s,{vertexShader:c,fragmentShader:i}=n(t),o=r.getShaderHeader(),u=r.getShaderMain(),p=c.replace("#pragma header",o).replace("#pragma main",u),g=e.programCache.acquire(p,i,r.getAttributeLocations());return this._programByKey.set(a,g),g}_getMaterialOptionsValue(r,t){switch(r){case e.BACKGROUND:{const e=t;return(e.pattern?1:0)<<1|(e.id?1:0)}case e.FILL:{const e=t;return(e.pattern?1:0)<<1|(e.id?1:0)}case e.OUTLINE:return t.id?1:0;case e.LINE:{const e=t;return(e.sdf?1:0)<<2|(e.pattern?1:0)<<1|(e.id?1:0)}case e.ICON:{const e=t;return(e.sdf?1:0)<<1|(e.id?1:0)}case e.CIRCLE:return t.id?1:0;case e.TEXT:return t.id?1:0;default:return 0}}_getProgramTemplate(o){switch(o){case e.BACKGROUND:return i;case e.CIRCLE:return c;case e.FILL:return n;case e.ICON:return s;case e.LINE:return a;case e.OUTLINE:return t;case e.TEXT:return r;default:return null}}}export{o as default};