UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.19 kB
import{disposeMaybe as e}from"../../../../core/maybe.js";import{vtlBrushes as t}from"../vtlBrushes.js";import r from"./shaders/VTLMaterialManager.js";import{Visibility as s,StyleLayerType as a}from"./style/StyleDefinition.js";import{CompareFunction as i,BlendFactor as n}from"../../../webgl/enums.js";const l=1e-6;class o{constructor(e,t){this.spriteMosaic=e,this.glyphMosaic=t,this._brushCache=new Map,this._vtlMaterialManager=new r}dispose(){this._brushCache&&(this._brushCache.forEach((e=>e.dispose())),this._brushCache=null),this._vtlMaterialManager=e(this._vtlMaterialManager),this.spriteMosaic.dispose(),this.glyphMosaic.dispose()}get vectorTilesMaterialManager(){return this._vtlMaterialManager}drawTile(e,t,r){const{context:s}=e,a=r.layers;r.backgroundBucketIds.length>0&&(e.renderPass="background",r.backgroundBucketIds.forEach((s=>this._renderStyleLayer(r.getLayerById(s),e,t,!0)))),s.setBlendingEnabled(!1),s.setDepthTestEnabled(!0),s.setDepthWriteEnabled(!0),s.setDepthFunction(i.LEQUAL),e.renderPass="opaque";for(let i=a.length-1;i>=0;i--)this._renderStyleLayer(a[i],e,t,!1);s.setDepthWriteEnabled(!1),s.setBlendingEnabled(!0),s.setBlendFunctionSeparate(n.ONE,n.ONE_MINUS_SRC_ALPHA,n.ONE,n.ONE_MINUS_SRC_ALPHA),e.renderPass="translucent";for(let i=0;i<a.length;i++)this._renderStyleLayer(a[i],e,t,!1);s.setDepthTestEnabled(!1),s.bindVAO()}_renderStyleLayer(e,t,r,i=!1){if(!(i||e&&r.layerData.has(e.uid)))return;const n=e.getLayoutProperty("visibility");if(n&&n.getValue()===s.NONE)return;const{renderPass:o}=t;let h;switch(e.type){case a.BACKGROUND:if("background"!==o)return;h="vtlBackground";break;case a.FILL:if("opaque"!==o&&"translucent"!==t.renderPass)return;h="vtlFill";break;case a.LINE:if("translucent"!==o)return;h="vtlLine";break;case a.CIRCLE:if("translucent"!==o)return;h="vtlCircle";break;case a.SYMBOL:if("translucent"!==o)return;h="vtlSymbol"}const c=t.displayLevel;void 0!==e.minzoom&&e.minzoom>c+l||void 0!==e.maxzoom&&e.maxzoom<=c-l||(t.styleLayerUID=e.uid,t.styleLayer=e,this._drawWithBrush(t,r,h))}_drawWithBrush(e,r,s){if(!this._brushCache.has(s)){const e=t[s];this._brushCache.set(s,new e)}this._brushCache.get(s).drawMany(e,[r])}}export{o as default};