@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.67 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{TranslateAnchor as e}from"../../vectorTiles/style/StyleDefinition.js";import{vtlTextureBindingUnitSprites as t}from"../definitions.js";import i from"./WGLBrush.js";import{TextureSamplingMode as n,CompareFunction as a,PrimitiveType as r,DataType as o}from"../../../../webgl/enums.js";class s extends i{constructor(){super(...arguments),this._programOptions={id:!1,pattern:!1,sdf:!1}}dispose(){}drawMany(i,s){const{context:l,displayLevel:f,state:u,painter:c,pixelRatio:d,spriteMosaic:m,styleLayerUID:p,requestRender:g,allowDelayedRender:y}=i;if(!s.some((e=>e.layerData.get(p)?.lineIndexCount??!1)))return;const M=i.styleLayer,E=M.lineMaterial,_=c.vectorTilesMaterialManager,v=M.getPaintValue("line-translate",f),U=M.getPaintValue("line-translate-anchor",f),I=M.getPaintProperty("line-pattern"),P=void 0!==I,x=P&&I.isDataDriven;let D,S;if(P&&!x){const e=I.getValue(f);D=m.getMosaicItemPosition(e)}let L=!1;if(!P){const e=M.getPaintProperty("line-dasharray");if(S=void 0!==e,L=S&&e.isDataDriven,S&&!L){const t=e.getValue(f),i=M.getDashKey(t,M.getLayoutValue("line-cap",f));D=m.getMosaicItemPosition(i)}}const N=1/d,R=this._programOptions;R.pattern=P,R.sdf=S;const T=_.getMaterialProgram(l,E,R);if(y&&null!=g&&!T.compiled)return void g();if(l.useProgram(T),T.setUniformMatrix3fv("u_displayViewMat3",u.displayViewMat3),T.setUniformMatrix3fv("u_displayMat3",U===e.VIEWPORT?u.displayMat3:u.displayViewMat3),T.setUniform2fv("u_lineTranslation",v),T.setUniform1f("u_depth",M.z),T.setUniform1f("u_antialiasing",N),D&&null!=D){const{page:e}=D,i=m.getPageSize(e);null!=i&&(m.bind(l,n.LINEAR,e,t),T.setUniform2fv("u_mosaicSize",i),T.setUniform1i("u_texture",t))}let V=-1;for(const e of s){if(!e.layerData.has(p))continue;e.key.level!==V&&(V=e.key.level,E.setDataUniforms(T,f,M,V,m));const i=2**(f-V)/d;T.setUniform1f("u_zoomFactor",i);const s=e.layerData.get(p);if(!s.lineIndexCount)continue;s.prepareForRendering(l);const u=s.vao;if(null!=u){if(l.bindVAO(u),T.setUniformMatrix3fv("u_dvsMat3",e.transforms.displayViewScreenMat3),l.setStencilFunction(a.EQUAL,e.stencilRef,255),x||L){const e=s.patternMap;if(!e)continue;for(const[i,a]of e){const e=m.getPageSize(i);null!=e&&(m.bind(l,n.LINEAR,i,t),T.setUniform2fv("u_mosaicSize",e),T.setUniform1i("u_texture",t),l.drawElements(r.TRIANGLES,a[1],o.UNSIGNED_INT,Uint32Array.BYTES_PER_ELEMENT*a[0]))}}else l.drawElements(r.TRIANGLES,s.lineIndexCount,o.UNSIGNED_INT,Uint32Array.BYTES_PER_ELEMENT*s.lineIndexStart);e.triangleCount+=s.lineIndexCount/3}}}}export{s as WGLBrushVTLLine};