UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 5.38 kB
import{isNone as e,isSome as t}from"../../../../core/maybe.js";import a from"../webgl/brushes/WGLBrush.js";import{BlendFactor as r,StencilOperation as o,CompareFunction as s,PrimitiveType as n,DataType as i}from"../../../webgl/enums.js";const l=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]),c={beaufort_ft:l,beaufort_m:l,beaufort_km:l,beaufort_mi:l,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]),single_arrow:new Float32Array([0,92/255,230/255,1]),wind_speed:new Float32Array([0,0,0,1])},d=[0,20];class m extends a{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(r.ONE,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),e.setColorMask(!0,!0,!0,!0),e.setStencilWriteMask(0),e.setStencilTestEnabled(!0),e.setStencilOp(o.KEEP,o.KEEP,o.REPLACE)}draw(t,a){if(e(a.source)||0===a.source.validPixelCount)return;const{context:r,timeline:o}=t;if(o.begin(this.name),r.setStencilFunction(s.EQUAL,a.stencilRef,255),a.updateVectorFieldVAO(t),"scalar"===t.renderPass){const e=a.vaoData.scalar;e&&this._drawScalars(t,a,e.vao,e.elementCount)}else{const e=a.vaoData.magdir;e&&this._drawTriangles(t,a,e.vao,e.elementCount)}o.end(this.name)}_drawTriangles(e,a,r,o){const{context:s,painter:l,requestRender:m,allowDelayedRender:f}=e,{symbolizerParameters:u}=a,_=u.dataRange?["dataRange"]:[];"geographic"===u.rotationType&&_.push("rotationGeographic");const g=l.materialManager.getProgram(this._desc.magdir,_);if(f&&t(m)&&!g.compiled)return void m();s.useProgram(g);const{coordScale:p,opacity:y,transforms:v}=a;g.setUniform2fv("u_coordScale",p),g.setUniform1f("u_opacity",y),g.setUniformMatrix3fv("u_dvsMat3",v.dvs);const{style:b,dataRange:S,rotation:h,symbolPercentRange:w}=u;g.setUniform4fv("u_colors",c[b]||c.single_arrow),g.setUniform2fv("u_dataRange",S||d),g.setUniform1f("u_rotation",h),g.setUniform2fv("u_symbolPercentRange",w);const P=this._getSymbolSize(e,a);g.setUniform2fv("u_symbolSize",P),s.bindVAO(r),s.drawElements(n.TRIANGLES,o,i.UNSIGNED_INT,0)}_drawScalars(e,a,r,o){const{context:s,painter:l,requestRender:c,allowDelayedRender:m}=e,{symbolizerParameters:f}=a,u=[];"wind_speed"===f.style?u.push("innerCircle"):f.dataRange&&u.push("dataRange"),"geographic"===f.rotationType&&u.push("rotationGeographic");const _=l.materialManager.getProgram(this._desc.scalar,u);if(m&&t(c)&&!_.compiled)return void c();s.useProgram(_);const{coordScale:g,opacity:p,transforms:y}=a;_.setUniform2fv("u_coordScale",g),_.setUniform1f("u_opacity",p),_.setUniformMatrix3fv("u_dvsMat3",y.dvs);const{dataRange:v,symbolPercentRange:b}=f;_.setUniform2fv("u_dataRange",v||d),_.setUniform2fv("u_symbolPercentRange",b);const S=this._getSymbolSize(e,a);_.setUniform2fv("u_symbolSize",S),s.bindVAO(r),s.drawElements(n.TRIANGLES,o,i.UNSIGNED_INT,0)}_getSymbolSize(e,t){const a=t.key?2**(e.displayLevel-t.key.level):t.resolution/e.state.resolution,{symbolTileSize:r}=t.symbolizerParameters;return[r/(Math.round((t.width-t.offset[0])/r)*r)/a,r/(Math.round((t.height-t.offset[1])/r)*r)/a]}}export{m as default};