@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.74 kB
JavaScript
import{isSome as e,isNone as t}from"../../../../../core/maybe.js";import{TranslateAnchor as i}from"../../vectorTiles/style/StyleDefinition.js";import{VTL_TEXTURE_BINDING_UNIT_SPRITES as n}from"../definitions.js";import{WGLDrawPhase as r}from"../enums.js";import{u32to4Xu8 as a}from"../number.js";import o from"./WGLBrush.js";import{TextureSamplingMode as s,CompareFunction as l,PrimitiveType as f,DataType as m}from"../../../../webgl/enums.js";class c extends o{constructor(){super(...arguments),this._programOptions={id:!1,pattern:!1,sdf:!1}}dispose(){}drawMany(o,c){const{context:u,displayLevel:d,state:p,drawPhase:y,painter:g,pixelRatio:E,spriteMosaic:M,styleLayerUID:_,requestRender:v,allowDelayedRender:U}=o;if(!c.some((e=>e.layerData.get(_)?.lineIndexCount??!1)))return;const I=o.styleLayer,P=I.lineMaterial,x=g.vectorTilesMaterialManager,T=I.getPaintValue("line-translate",d),D=I.getPaintValue("line-translate-anchor",d),S=I.getPaintProperty("line-pattern"),L=void 0!==S,N=L&&S.isDataDriven;let R,V;if(L&&!N){const e=S.getValue(d);R=M.getMosaicItemPosition(e)}let h=!1;if(!L){const e=I.getPaintProperty("line-dasharray");if(V=void 0!==e,h=V&&e.isDataDriven,V&&!h){const t=e.getValue(d),i=I.getDashKey(t,I.getLayoutValue("line-cap",d));R=M.getMosaicItemPosition(i)}}const w=1/E,A=y===r.HITTEST,j=this._programOptions;j.id=A,j.pattern=L,j.sdf=V;const b=x.getMaterialProgram(u,P,j);if(U&&e(v)&&!b.compiled)return void v();if(u.useProgram(b),b.setUniformMatrix3fv("u_displayViewMat3",p.displayViewMat3),b.setUniformMatrix3fv("u_displayMat3",D===i.VIEWPORT?p.displayMat3:p.displayViewMat3),b.setUniform2fv("u_lineTranslation",T),b.setUniform1f("u_depth",I.z),b.setUniform1f("u_antialiasing",w),A){const e=a(_+1);b.setUniform4fv("u_id",e)}if(R&&e(R)){const{page:t}=R,i=M.getPageSize(t);e(i)&&(M.bind(u,s.LINEAR,t,n),b.setUniform2fv("u_mosaicSize",i),b.setUniform1i("u_texture",n))}let z=-1;for(const i of c){if(!i.layerData.has(_))continue;i.key.level!==z&&(z=i.key.level,P.setDataUniforms(b,d,I,z,M));const r=2**(d-z)/E;b.setUniform1f("u_zoomFactor",r);const a=i.layerData.get(_);if(!a.lineIndexCount)continue;a.prepareForRendering(u);const o=a.lineVertexArrayObject;if(!t(o)){if(u.bindVAO(o),b.setUniformMatrix3fv("u_dvsMat3",i.transforms.dvs),u.setStencilFunction(l.EQUAL,i.stencilRef,255),N||h){const t=a.patternMap;if(!t)continue;for(const[i,r]of t){const t=M.getPageSize(i);e(t)&&(M.bind(u,s.LINEAR,i,n),b.setUniform2fv("u_mosaicSize",t),b.setUniform1i("u_texture",n),u.drawElements(f.TRIANGLES,r[1],m.UNSIGNED_INT,Uint32Array.BYTES_PER_ELEMENT*r[0]))}}else u.drawElements(f.TRIANGLES,a.lineIndexCount,m.UNSIGNED_INT,Uint32Array.BYTES_PER_ELEMENT*a.lineIndexStart);i.triangleCount+=a.lineIndexCount/3}}}}export{c as WGLBrushVTLLine};