{"version":3,"file":"particlesComputing.mjs","sources":["../../../../../../packages/components/overlays/wind/particlesComputing.ts"],"sourcesContent":["import * as Util from './util'\nimport calculateSpeedFrag from './glsl/calculateSpeed.frag'\nimport updatePositionFrag from './glsl/updatePosition.frag'\nimport postProcessingPositionFrag from './glsl/postProcessingPosition.frag'\nimport CustomPrimitive from './customPrimitive'\n\nclass ParticlesComputing {\n  windTextures: any\n  particlesTextures: any\n  primitives: any\n  data: any\n\n  constructor(context, data, particleSystemOptions, viewerParameters) {\n    this.data = data\n    this.createWindTextures(context, data)\n    this.createParticlesTextures(context, particleSystemOptions, viewerParameters)\n    this.createComputingPrimitives(data, particleSystemOptions, viewerParameters, context)\n  }\n\n  createWindTextures(context, data) {\n    const windTextureOptions = {\n      context: context,\n      width: data.dimensions.lon,\n      height: data.dimensions.lat * data.dimensions.lev,\n      pixelFormat: !context?.webgl2 ? Cesium.PixelFormat.LUMINANCE : Cesium.PixelFormat.RED,\n      pixelDatatype: Cesium.PixelDatatype.FLOAT,\n      flipY: false,\n      sampler: new Cesium.Sampler({\n        // the values of texture will not be interpolated\n        minificationFilter: Cesium.TextureMinificationFilter.NEAREST,\n        magnificationFilter: Cesium.TextureMagnificationFilter.NEAREST\n      })\n    }\n\n    this.windTextures = {\n      U: Util.createTexture(windTextureOptions, data.U.array),\n      V: Util.createTexture(windTextureOptions, data.V.array)\n    }\n  }\n\n  createParticlesTextures(context, particleSystemOptions, viewerParameters) {\n    const particlesTextureOptions = {\n      context: context,\n      width: particleSystemOptions.particlesTextureSize,\n      height: particleSystemOptions.particlesTextureSize,\n      pixelFormat: Cesium.PixelFormat.RGBA,\n      pixelDatatype: Cesium.PixelDatatype.FLOAT,\n      flipY: false,\n      sampler: new Cesium.Sampler({\n        // the values of texture will not be interpolated\n        minificationFilter: Cesium.TextureMinificationFilter.NEAREST,\n        magnificationFilter: Cesium.TextureMagnificationFilter.NEAREST\n      })\n    }\n\n    const particlesArray = this.randomizeParticles(particleSystemOptions.maxParticles, viewerParameters)\n    const zeroArray = new Float32Array(4 * particleSystemOptions.maxParticles).fill(0)\n\n    this.particlesTextures = {\n      previousParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n      currentParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n      nextParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n      postProcessingPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n\n      particlesSpeed: Util.createTexture(particlesTextureOptions, zeroArray)\n    }\n  }\n\n  randomizeParticles(maxParticles, viewerParameters) {\n    const array = new Float32Array(4 * maxParticles)\n    for (let i = 0; i < maxParticles; i++) {\n      array[4 * i] = Cesium.Math.randomBetween(viewerParameters.lonRange.x, viewerParameters.lonRange.y)\n      array[4 * i + 1] = Cesium.Math.randomBetween(viewerParameters.latRange.x, viewerParameters.latRange.y)\n      array[4 * i + 2] = Cesium.Math.randomBetween(this.data.lev.min, this.data.lev.max)\n      array[4 * i + 3] = 0.0\n    }\n    return array\n  }\n\n  destroyParticlesTextures() {\n    Object.keys(this.particlesTextures).forEach(key => {\n      this.particlesTextures[key].destroy()\n    })\n  }\n\n  createComputingPrimitives(data, particleSystemOptions, viewerParameters, context) {\n    const webgl2 = context?.webgl2\n\n    let calculateSpeedFragText = calculateSpeedFrag\n    if (!webgl2) {\n      calculateSpeedFragText = calculateSpeedFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n      calculateSpeedFragText = calculateSpeedFragText.replace(/texture\\(/g, 'texture2D(')\n      calculateSpeedFragText = calculateSpeedFragText.replace(/out_FragColor/g, 'gl_FragColor')\n    }\n\n    let updatePositionFragText = updatePositionFrag\n    if (!webgl2) {\n      updatePositionFragText = updatePositionFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n      updatePositionFragText = updatePositionFragText.replace(/texture\\(/g, 'texture2D(')\n      updatePositionFragText = updatePositionFragText.replace(/out_FragColor/g, 'gl_FragColor')\n    }\n\n    let postProcessingPositionFragText = postProcessingPositionFrag\n    if (!webgl2) {\n      postProcessingPositionFragText = postProcessingPositionFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n      postProcessingPositionFragText = postProcessingPositionFragText.replace(/texture\\(/g, 'texture2D(')\n      postProcessingPositionFragText = postProcessingPositionFragText.replace(/out_FragColor/g, 'gl_FragColor')\n    }\n\n    const dimension = new Cesium.Cartesian3(data.dimensions.lon, data.dimensions.lat, data.dimensions.lev)\n    const minimum = new Cesium.Cartesian3(data.lon.min, data.lat.min, data.lev.min)\n    const maximum = new Cesium.Cartesian3(data.lon.max, data.lat.max, data.lev.max)\n    const interval = new Cesium.Cartesian3(\n      (maximum.x - minimum.x) / (dimension.x - 1),\n      (maximum.y - minimum.y) / (dimension.y - 1),\n      dimension.z > 1 ? (maximum.z - minimum.z) / (dimension.z - 1) : 1.0\n    )\n    const uSpeedRange = new Cesium.Cartesian2(data.U.min, data.U.max)\n    const vSpeedRange = new Cesium.Cartesian2(data.V.min, data.V.max)\n\n    const that = this\n\n    this.primitives = {\n      calculateSpeed: new CustomPrimitive({\n        commandType: 'Compute',\n        uniformMap: {\n          U: function () {\n            return that.windTextures.U\n          },\n          V: function () {\n            return that.windTextures.V\n          },\n          currentParticlesPosition: function () {\n            return that.particlesTextures.currentParticlesPosition\n          },\n          dimension: function () {\n            return dimension\n          },\n          minimum: function () {\n            return minimum\n          },\n          maximum: function () {\n            return maximum\n          },\n          interval: function () {\n            return interval\n          },\n          uSpeedRange: function () {\n            return uSpeedRange\n          },\n          vSpeedRange: function () {\n            return vSpeedRange\n          },\n          pixelSize: function () {\n            return viewerParameters.pixelSize\n          },\n          speedFactor: function () {\n            return particleSystemOptions.speedFactor\n          }\n        },\n        fragmentShaderSource: new Cesium.ShaderSource({\n          sources: [calculateSpeedFragText]\n        }),\n        outputTexture: this.particlesTextures.particlesSpeed,\n        preExecute: function () {\n          // swap textures before binding\n          const temp = that.particlesTextures.previousParticlesPosition\n          that.particlesTextures.previousParticlesPosition = that.particlesTextures.currentParticlesPosition\n          that.particlesTextures.currentParticlesPosition = that.particlesTextures.postProcessingPosition\n          that.particlesTextures.postProcessingPosition = temp\n\n          // keep the outputTexture up to date\n          that.primitives.calculateSpeed.commandToExecute.outputTexture = that.particlesTextures.particlesSpeed\n        }\n      }),\n\n      updatePosition: new CustomPrimitive({\n        commandType: 'Compute',\n        uniformMap: {\n          currentParticlesPosition: function () {\n            return that.particlesTextures.currentParticlesPosition\n          },\n          particlesSpeed: function () {\n            return that.particlesTextures.particlesSpeed\n          }\n        },\n        fragmentShaderSource: new Cesium.ShaderSource({\n          sources: [updatePositionFragText]\n        }),\n        outputTexture: this.particlesTextures.nextParticlesPosition,\n        preExecute: function () {\n          // keep the outputTexture up to date\n          that.primitives.updatePosition.commandToExecute.outputTexture = that.particlesTextures.nextParticlesPosition\n        }\n      }),\n\n      postProcessingPosition: new CustomPrimitive({\n        commandType: 'Compute',\n        uniformMap: {\n          nextParticlesPosition: function () {\n            return that.particlesTextures.nextParticlesPosition\n          },\n          particlesSpeed: function () {\n            return that.particlesTextures.particlesSpeed\n          },\n          lonRange: function () {\n            return viewerParameters.lonRange\n          },\n          latRange: function () {\n            return viewerParameters.latRange\n          },\n          randomCoefficient: function () {\n            const randomCoefficient = Math.random()\n            return randomCoefficient\n          },\n          dropRate: function () {\n            return particleSystemOptions.dropRate\n          },\n          dropRateBump: function () {\n            return particleSystemOptions.dropRateBump\n          }\n        },\n        fragmentShaderSource: new Cesium.ShaderSource({\n          sources: [postProcessingPositionFragText]\n        }),\n        outputTexture: this.particlesTextures.postProcessingPosition,\n        preExecute: function () {\n          // keep the outputTexture up to date\n          that.primitives.postProcessingPosition.commandToExecute.outputTexture = that.particlesTextures.postProcessingPosition\n        }\n      })\n    }\n  }\n}\nexport default ParticlesComputing\n"],"names":["Util.createTexture","updatePositionFrag","postProcessingPositionFrag"],"mappings":"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"}