UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 5.51 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import e from"../webgl/brushes/WGLBrush.js";import{BlendFactor as a,StencilOperation as t,CompareFunction as r,PrimitiveType as s,DataType as o}from"../../../webgl/enums.js";const n=new Float32Array([.27058823529411763,.4588235294117647,.7098039215686275,1,.396078431372549,.5372549019607843,.7215686274509804,1,.5176470588235295,.6196078431372549,.7294117647058823,1,.6352941176470588,.7058823529411765,.7411764705882353,1,.7529411764705882,.8,.7450980392156863,1,.8705882352941177,.8901960784313725,.7490196078431373,1,1,1,.7490196078431373,1,1,.8627450980392157,.6313725490196078,1,.9803921568627451,.7254901960784313,.5176470588235295,1,.9607843137254902,.596078431372549,.4117647058823529,1,.9294117647058824,.4588235294117647,.3176470588235294,1,.9098039215686274,.08235294117647059,.08235294117647059,1]),i=new Float32Array([0,92/255,230/255,1]),l={beaufort_ft:n,beaufort_m:n,beaufort_km:n,beaufort_mi:n,beaufort_kn:new Float32Array([.1568627450980392,.5725490196078431,.7803921568627451,1,.34901960784313724,.6352941176470588,.7294117647058823,1,.5058823529411764,.7019607843137254,.6705882352941176,1,.6274509803921569,.7607843137254902,.6078431372549019,1,.7490196078431373,.8313725490196079,.5411764705882353,1,.8549019607843137,.9019607843137255,.4666666666666667,1,.9803921568627451,.9803921568627451,.39215686274509803,1,.9882352941176471,.8352941176470589,.3254901960784314,1,.9882352941176471,.7019607843137254,.4,1,.9803921568627451,.5529411764705883,.20392156862745098,1,.9686274509803922,.43137254901960786,.16470588235294117,1,.9411764705882353,.2784313725490196,.11372549019607843,1]),classified_arrow:new Float32Array([.2196078431372549,.6588235294117647,0,1,.5450980392156862,1.2117647058823529,0,1,1,1,0,1,1,.5019607843137255,0,1,1,0,0,1]),ocean_current_m:new Float32Array([.3058823529411765,.10196078431372549,.6,1,.7019607843137254,.10588235294117647,.10196078431372549,1,.792156862745098,.5019607843137255,.10196078431372549,1,.6941176470588235,.6941176470588235,.6941176470588235,1]),ocean_current_kn:new Float32Array([0,0,0,1,0,.1450980392156863,.39215686274509803,1,.3058823529411765,.10196078431372549,.6,1,.592156862745098,0,.39215686274509803,1,.7019607843137254,.10588235294117647,.10196078431372549,1,.6941176470588235,.3058823529411765,.10196078431372549,1,.792156862745098,.5019607843137255,.10196078431372549,1,.6941176470588235,.7019607843137254,.20392156862745098,1,.6941176470588235,.6941176470588235,.6941176470588235,1]),simple_scalar:i,single_arrow:i,wind_speed:new Float32Array([0,0,0,1])},c=[0,20];class d extends e{constructor(){super(...arguments),this._desc={magdir:{vsPath:"raster/magdir",fsPath:"raster/magdir",attributes:new Map([["a_pos",0],["a_offset",1],["a_vv",2]])},scalar:{vsPath:"raster/scalar",fsPath:"raster/scalar",attributes:new Map([["a_pos",0],["a_offset",1],["a_vv",2]])}}}dispose(){}prepareState({context:e}){e.setBlendingEnabled(!0),e.setBlendFunctionSeparate(a.ONE,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA),e.setColorMask(!0,!0,!0,!0),e.setStencilWriteMask(0),e.setStencilTestEnabled(!0),e.setStencilOp(t.KEEP,t.KEEP,t.REPLACE)}draw(e,a){if(null==a.source||0===a.source.validPixelCount)return;const{context:t,timeline:s}=e;if(s.begin(this.name),t.setStencilFunction(r.EQUAL,a.stencilRef,255),a.updateVectorFieldVAO(e),"scalar"===e.renderPass){const t=a.vaoData.scalar;t&&this._drawScalars(e,a,t.vao,t.elementCount)}else{const t=a.vaoData.magdir;t&&this._drawTriangles(e,a,t.vao,t.elementCount)}s.end(this.name)}_drawTriangles(e,a,t,r){const{context:n,painter:i,requestRender:d,allowDelayedRender:m}=e,{symbolizerParameters:u}=a,f=u.dataRange?["dataRange"]:[];"geographic"===u.rotationType&&f.push("rotationGeographic");const _=i.materialManager.getProgram(this._desc.magdir,f);if(m&&null!=d&&!_.compiled)return void d();n.useProgram(_);const{coordScale:g,opacity:p,transforms:y}=a;_.setUniform2fv("u_coordScale",g),_.setUniform1f("u_opacity",p),_.setUniformMatrix3fv("u_dvsMat3",y.displayViewScreenMat3);const{style:S,dataRange:b,rotation:h,symbolPercentRange:v}=u;_.setUniform4fv("u_colors",l[S]),_.setUniform2fv("u_dataRange",b||c),_.setUniform1f("u_rotation",h),_.setUniform2fv("u_symbolPercentRange",v);const w=this._getSymbolSize(e,a);_.setUniform2fv("u_symbolSize",w),n.bindVAO(t),n.drawElements(s.TRIANGLES,r,o.UNSIGNED_INT,0)}_drawScalars(e,a,t,r){const{context:n,painter:i,requestRender:l,allowDelayedRender:d}=e,{symbolizerParameters:m}=a,u=[];"wind_speed"===m.style?u.push("innerCircle"):m.dataRange&&u.push("dataRange"),"geographic"===m.rotationType&&u.push("rotationGeographic");const f=i.materialManager.getProgram(this._desc.scalar,u);if(d&&null!=l&&!f.compiled)return void l();n.useProgram(f);const{coordScale:_,opacity:g,transforms:p}=a;f.setUniform2fv("u_coordScale",_),f.setUniform1f("u_opacity",g),f.setUniformMatrix3fv("u_dvsMat3",p.displayViewScreenMat3);const{dataRange:y,symbolPercentRange:S}=m;f.setUniform2fv("u_dataRange",y||c),f.setUniform2fv("u_symbolPercentRange",S);const b=this._getSymbolSize(e,a);f.setUniform2fv("u_symbolSize",b),n.bindVAO(t),n.drawElements(s.TRIANGLES,r,o.UNSIGNED_INT,0)}_getSymbolSize(e,a){const t=a.key?2**(e.displayLevel-a.key.level):a.resolution/e.state.resolution,{symbolTileSize:r}=a.symbolizerParameters;return[r/(Math.round((a.width-a.offset[0])/r)*r)/t,r/(Math.round((a.height-a.offset[1])/r)*r)/t]}}export{d as default};