UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.92 kB
import{throwIfAborted as t}from"../../../../../core/promiseUtils.js";import{areStreamlinesCompatible as e,setUniforms as a}from"../utils.js";import{BufferObject as s}from"../../../../webgl/BufferObject.js";import{DataType as r,BlendFactor as i,PrimitiveType as o,Usage as n}from"../../../../webgl/enums.js";import{VertexArrayObject as m}from"../../../../webgl/VertexArrayObject.js";import{VertexElementDescriptor as p}from"../../../../webgl/VertexElementDescriptor.js";class _{constructor(t){this._params=t}get animated(){return this._params.flowSpeed>0}isCompatible(t){return t instanceof _&&e(this._params,t._params)}async load(e,a){const{extent:s,size:r}=e;t(a);const i=await this._params.loadImagery(s,r[0],r[1],this._params.timeExtent,a),{vertexData:o,indexData:n}=await this._params.createFlowMesh("Particles",this._params.simulationSettings,i,a);return new c(o,n,{color:this._params.color,opacity:this._params.opacity,size:this._params.size})}render(t,e,s){const{context:n}=t,{program:m}=s;n.setFaceCullingEnabled(!1),n.setBlendingEnabled(!0),n.setBlendFunction(i.ONE,i.ONE_MINUS_SRC_ALPHA),n.useProgram(m),m.setUniform1f("u_time",e.time),m.setUniform1f("u_trailLength",this._params.trailLength),m.setUniform1f("u_flowSpeed",this._params.flowSpeed),m.setUniform1f("u_featheringSize",this._params.featheringSize),m.setUniform1f("u_featheringOffset",this._params.featheringOffset),m.setUniform1f("u_introFade",this._params.introFade?1:0),m.setUniform1f("u_fadeToZero",this._params.fadeToZero?1:0),m.setUniform1f("u_decayRate",this._params.decayRate),m.setUniformMatrix3fv("u_dvsMat3",e.dvsMat3),m.setUniformMatrix3fv("u_displayViewMat3",e.displayViewMat3),a(m,"color","vec4",this._params.color),a(m,"opacity","float",this._params.opacity),a(m,"size","float",this._params.size),n.bindVAO(s.vertexArray),n.drawElements(o.TRIANGLES,s.indexCount,r.UNSIGNED_INT,0)}}const l=new Map;l.set("a_xyts0",0),l.set("a_xyts1",1),l.set("a_typeIdDurationSeed",2),l.set("a_extrudeInfo",3);const h={geometry:[new p("a_xyts0",4,r.FLOAT,0,64),new p("a_xyts1",4,r.FLOAT,16,64),new p("a_typeIdDurationSeed",4,r.FLOAT,32,64),new p("a_extrudeInfo",4,r.FLOAT,48,64)]},f={vsPath:"raster/flow/particles",fsPath:"raster/flow/particles",attributes:l};class c{constructor(t,e,a){this._vertexData=t,this._indexData=e,this._values=a}attach(t){const{context:e}=t,a=s.createVertex(e,n.STATIC_DRAW,this._vertexData),r=s.createIndex(e,n.STATIC_DRAW,this._indexData),i=new m(e,l,h,{geometry:a},r),o=[];"ramp"===this._values.color.kind&&o.push("vvColor"),"ramp"===this._values.opacity.kind&&o.push("vvOpacity"),"ramp"===this._values.size.kind&&o.push("vvSize");const p=t.painter.materialManager.getProgram(f,o);this.vertexArray=i,this.program=p,this.indexCount=this._indexData.length,this._vertexData=null,this._indexData=null}detach(){this.vertexArray.dispose()}get ready(){return this.program.compiled}}export{_ as Particles,c as ParticlesResources};