@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.68 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{nextPowerOfTwo as t}from"../../../../../core/mathUtils.js";import{create as e}from"../../../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{fromValues as r}from"../../../../../core/libs/gl-matrix-2/factories/vec4f32.js";import{vtlTextureBindingUnitSprites as o,vtlHighResCutoff as i}from"../definitions.js";import s from"./WGLBrush.js";import{BufferObject as a}from"../../../../webgl/BufferObject.js";import{TextureSamplingMode as n,CompareFunction as c,PrimitiveType as l,Usage as f}from"../../../../webgl/enums.js";import{VertexArrayObject as m}from"../../../../webgl/VertexArrayObject.js";class u extends s{constructor(){super(...arguments),this._color=r(1,0,0,1),this._patternMatrix=e(),this._programOptions={id:!1,pattern:!1}}dispose(){this._vao&&(this._vao.dispose(),this._vao=null)}drawMany(e,r){const{context:s,painter:a,requestRender:f,allowDelayedRender:m}=e;this._loadWGLResources(e);const u=e.displayLevel,p=e.styleLayer,_=p.backgroundMaterial,d=a.vectorTilesMaterialManager,g=p.getPaintValue("background-color",u),h=p.getPaintValue("background-opacity",u),x=p.getPaintValue("background-pattern",u),M=void 0!==x,b=1|window.devicePixelRatio,v=e.spriteMosaic;let y,w;const j=b>i?2:1,A=this._programOptions;A.pattern=M;const L=d.getMaterialProgram(s,_,A);if(!m||null==f||L.compiled){if(s.bindVAO(this._vao),s.useProgram(L),M){const t=v.getMosaicItemPosition(x,!0);if(null!=t){const{tl:e,br:r,page:i}=t;y=r[0]-e[0],w=r[1]-e[1];const a=v.getPageSize(i);null!=a&&(v.bind(s,n.LINEAR,i,o),L.setUniform4f("u_tlbr",e[0],e[1],r[0],r[1]),L.setUniform2fv("u_mosaicSize",a),L.setUniform1i("u_texture",o))}L.setUniform1f("u_opacity",h)}else{const t=g[3]*h;this._color[0]=t*g[0],this._color[1]=t*g[1],this._color[2]=t*g[2],this._color[3]=t,L.setUniform4fv("u_color",this._color)}L.setUniform1f("u_depth",p.z||0);for(const e of r){if(L.setUniform1f("u_coord_range",e.rangeX),L.setUniformMatrix3fv("u_dvsMat3",e.transforms.displayViewScreenMat3),M){const r=Math.max(2**(Math.round(u)-e.key.level),1),o=j*e.width*r,i=o/t(y),s=o/t(w);this._patternMatrix[0]=i,this._patternMatrix[4]=s,L.setUniformMatrix3fv("u_pattern_matrix",this._patternMatrix)}s.setStencilFunction(c.EQUAL,0,255),s.drawArrays(l.TRIANGLE_STRIP,0,4)}}else f()}_loadWGLResources(t){if(this._vao)return;const{context:e,styleLayer:r}=t,o=r.backgroundMaterial,i=new Int8Array([0,0,1,0,0,1,1,1]),s=a.createVertex(e,f.STATIC_DRAW,i),n=new m(e,o.getAttributeLocations(),o.getLayoutInfo(),new Map([["geometry",s]]));this._vao=n}}export{u as WGLBrushVTLBackground};