UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 3.83 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{disposeMaybe as e}from"../../../../core/maybe.js";import{vtlBrushes as t}from"../vtlBrushes.js";import l from"./shaders/VTLMaterialManager.js";import{StyleLayerType as s,Visibility as r}from"./style/StyleDefinition.js";import{CompareFunction as a,BlendFactor as n}from"../../../webgl/enums.js";const i=1e-6;class o{constructor(e,t){this.spriteMosaic=e,this.glyphMosaic=t,this._brushCache={vtlBackground:null,vtlFill:null,vtlLine:null,vtlCircle:null,vtlSymbol:null},this._vtlMaterialManager=new l}dispose(){this._brushCache.vtlBackground?.dispose(),this._brushCache.vtlFill?.dispose(),this._brushCache.vtlLine?.dispose(),this._brushCache.vtlCircle?.dispose(),this._brushCache.vtlSymbol?.dispose(),this._brushCache=null,this._vtlMaterialManager=e(this._vtlMaterialManager),this.spriteMosaic.dispose(),this.glyphMosaic.dispose()}get vectorTilesMaterialManager(){return this._vtlMaterialManager}drawSymbols(e,l,a){const n=a.layers;e.renderPass="translucent";let o=this._brushCache.vtlSymbol;null==o&&(o=new t.vtlSymbol,this._brushCache.vtlSymbol=o),u[0]=l;for(let t=0;t<n.length;t++){const l=n[t];if(l.type!==s.SYMBOL)continue;const a=l.getLayoutProperty("visibility");if(a&&a.getValue()===r.NONE)continue;const h=e.displayLevel;void 0!==l.minzoom&&l.minzoom>h+i||void 0!==l.maxzoom&&l.maxzoom<=h-i||(e.styleLayerUID=l.uid,e.styleLayer=l,o.drawMany(e,u))}u[0]=null}drawBackground(e,l,a){if(0===a.backgroundBucketIds.length)return;const{context:n,displayLevel:o,requiredLevel:h}=e;l.key.level=h,n.setBlendingEnabled(!0),n.setDepthTestEnabled(!1),n.setStencilTestEnabled(!1),e.renderPass="background";let c=this._brushCache.vtlBackground;null==c&&(c=new t.vtlBackground,this._brushCache.vtlBackground=c),u[0]=l,a.backgroundBucketIds.forEach((t=>{const l=a.getLayerById(t);if(l.type!==s.BACKGROUND)return;const n=l.getLayoutProperty("visibility");n&&n.getValue()===r.NONE||void 0!==l.minzoom&&l.minzoom>o+i||void 0!==l.maxzoom&&l.maxzoom<=o-i||(e.styleLayerUID=l.uid,e.styleLayer=l,c.drawMany(e,u))})),u[0]=null}drawTile(e,t,l,s){const{context:i}=e,o=l.layers;i.setBlendingEnabled(!1),i.setDepthTestEnabled(!0),i.setDepthWriteEnabled(!0),i.setDepthFunction(a.LEQUAL);const u=o.filter((e=>{if(null!=s&&s!==e.type||!t.layerData.has(e.uid))return!1;const l=e.getLayoutProperty("visibility");return l?.getValue()!==r.NONE}));e.renderPass="opaque";for(let r=u.length-1;r>=0;--r)this._renderStyleLayer(u[r],e,t);i.setDepthWriteEnabled(!1),i.setBlendingEnabled(!0),i.setBlendFunctionSeparate(n.ONE,n.ONE_MINUS_SRC_ALPHA,n.ONE,n.ONE_MINUS_SRC_ALPHA),e.renderPass="translucent",u.forEach((l=>this._renderStyleLayer(l,e,t))),i.setDepthTestEnabled(!1),i.bindVAO()}_renderStyleLayer(e,l,r){const{renderPass:a}=l;let n;switch(e.type){case s.BACKGROUND:if("background"!==a)return;n=this._brushCache.vtlBackground,n||(n=new t.vtlBackground,this._brushCache.vtlBackground=n);break;case s.FILL:if("opaque"!==a&&"translucent"!==l.renderPass)return;n=this._brushCache.vtlFill,null==n&&(n=new t.vtlFill,this._brushCache.vtlFill=n);break;case s.LINE:if("translucent"!==a)return;n=this._brushCache.vtlLine,null==n&&(n=new t.vtlLine,this._brushCache.vtlLine=n);break;case s.CIRCLE:if("translucent"!==a)return;n=this._brushCache.vtlCircle,null==n&&(n=new t.vtlCircle,this._brushCache.vtlCircle=n);break;case s.SYMBOL:if("translucent"!==a)return;n=this._brushCache.vtlSymbol,null==n&&(n=new t.vtlSymbol,this._brushCache.vtlSymbol=n)}const{displayLevel:o}=l,{minzoom:h,maxzoom:c}=e;if(void 0!==h&&h>o+i||void 0!==c&&c<=o-i)return;const{context:d}=l;d.setStencilTestEnabled(!1),d.setStencilWriteMask(0),l.styleLayerUID=e.uid,l.styleLayer=e,u[0]=r,n.drawMany(l,u),u[0]=null}}const u=[null];export{o as default};