@antv/l7-layers 2.9.17-alpha.0 → 2.9.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/es/core/BaseLayer.js +10 -6
  2. package/es/core/BaseLayer.js.map +1 -1
  3. package/es/core/interface.d.ts +13 -0
  4. package/es/core/interface.js.map +1 -1
  5. package/es/core/triangulation.d.ts +0 -1
  6. package/es/core/triangulation.js +9 -36
  7. package/es/core/triangulation.js.map +1 -1
  8. package/es/image/index.d.ts +1 -1
  9. package/es/image/index.js +14 -2
  10. package/es/image/index.js.map +1 -1
  11. package/es/image/models/dataImage.d.ts +22 -0
  12. package/es/image/models/dataImage.js +235 -0
  13. package/es/image/models/dataImage.js.map +1 -0
  14. package/es/image/models/image.d.ts +1 -0
  15. package/es/image/models/image.js +8 -1
  16. package/es/image/models/image.js.map +1 -1
  17. package/es/image/models/index.d.ts +1 -1
  18. package/es/image/models/index.js +3 -1
  19. package/es/image/models/index.js.map +1 -1
  20. package/es/line/models/arc.js +2 -2
  21. package/es/line/models/arc.js.map +1 -1
  22. package/es/line/models/great_circle.js +2 -2
  23. package/es/line/models/line.js +1 -1
  24. package/es/line/models/simpleLine.d.ts +0 -1
  25. package/es/line/models/simpleLine.js +10 -53
  26. package/es/line/models/simpleLine.js.map +1 -1
  27. package/es/plugins/LayerModelPlugin.js +2 -0
  28. package/es/plugins/LayerModelPlugin.js.map +1 -1
  29. package/es/point/index.js +11 -7
  30. package/es/point/index.js.map +1 -1
  31. package/es/point/models/text.js +2 -0
  32. package/es/point/models/text.js.map +1 -1
  33. package/es/tile/manager/tileLayerManager.js +22 -2
  34. package/es/tile/manager/tileLayerManager.js.map +1 -1
  35. package/es/utils/extrude_polyline.d.ts +0 -15
  36. package/es/utils/extrude_polyline.js +6 -138
  37. package/es/utils/extrude_polyline.js.map +1 -1
  38. package/es/utils/simpleLine.d.ts +23 -0
  39. package/es/utils/simpleLine.js +105 -0
  40. package/es/utils/simpleLine.js.map +1 -0
  41. package/es/wind/models/wind.d.ts +2 -0
  42. package/es/wind/models/wind.js +62 -33
  43. package/es/wind/models/wind.js.map +1 -1
  44. package/es/wind/models/windRender.js +1 -1
  45. package/es/wind/models/windRender.js.map +1 -1
  46. package/lib/core/BaseLayer.js +10 -6
  47. package/lib/core/BaseLayer.js.map +1 -1
  48. package/lib/core/interface.js.map +1 -1
  49. package/lib/core/triangulation.js +10 -36
  50. package/lib/core/triangulation.js.map +1 -1
  51. package/lib/image/index.js +14 -2
  52. package/lib/image/index.js.map +1 -1
  53. package/lib/image/models/dataImage.js +250 -0
  54. package/lib/image/models/dataImage.js.map +1 -0
  55. package/lib/image/models/image.js +8 -1
  56. package/lib/image/models/image.js.map +1 -1
  57. package/lib/image/models/index.js +4 -1
  58. package/lib/image/models/index.js.map +1 -1
  59. package/lib/line/models/arc.js +2 -2
  60. package/lib/line/models/arc.js.map +1 -1
  61. package/lib/line/models/great_circle.js +2 -2
  62. package/lib/line/models/line.js +1 -1
  63. package/lib/line/models/simpleLine.js +10 -53
  64. package/lib/line/models/simpleLine.js.map +1 -1
  65. package/lib/plugins/LayerModelPlugin.js +2 -0
  66. package/lib/plugins/LayerModelPlugin.js.map +1 -1
  67. package/lib/point/index.js +11 -7
  68. package/lib/point/index.js.map +1 -1
  69. package/lib/point/models/text.js +2 -0
  70. package/lib/point/models/text.js.map +1 -1
  71. package/lib/tile/manager/tileLayerManager.js +22 -2
  72. package/lib/tile/manager/tileLayerManager.js.map +1 -1
  73. package/lib/utils/extrude_polyline.js +6 -140
  74. package/lib/utils/extrude_polyline.js.map +1 -1
  75. package/lib/utils/simpleLine.js +117 -0
  76. package/lib/utils/simpleLine.js.map +1 -0
  77. package/lib/wind/models/wind.js +61 -33
  78. package/lib/wind/models/wind.js.map +1 -1
  79. package/lib/wind/models/windRender.js +1 -1
  80. package/lib/wind/models/windRender.js.map +1 -1
  81. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","glUtils","createProgram","drawVert","drawFrag","fullScreenProgram","fullScreenVert","fullScreenFrag","updateProgram","updateVert","updateFrag","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","drawFullTexture","drawParticles","disable","BLEND","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AASA,SAASA,YAAT,CAAsBC,MAAtB,EAAyD;AACvD,MAAIC,MAAM,GAAGC,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb;AACA,MAAMC,GAAG,GAAGH,MAAM,CAACI,UAAP,CAAkB,IAAlB,CAAZ;AAEAJ,EAAAA,MAAM,CAACK,KAAP,GAAe,GAAf;AACAL,EAAAA,MAAM,CAACM,MAAP,GAAgB,CAAhB;AAEA,MAAMC,QAAQ,GAAGJ,GAAG,CAACK,oBAAJ,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,GAA/B,EAAoC,CAApC,CAAjB;;AACA,kCAAmBC,MAAM,CAACC,IAAP,CAAYX,MAAZ,CAAnB,kCAAwC;AAAnC,QAAMY,IAAI,mBAAV;AACHJ,IAAAA,QAAQ,CAACK,YAAT,CAAsB,CAACD,IAAvB,EAA6BZ,MAAM,CAAC,CAACY,IAAF,CAAnC;AACD;;AAEDR,EAAAA,GAAG,CAACU,SAAJ,GAAgBN,QAAhB;AACAJ,EAAAA,GAAG,CAACW,QAAJ,CAAa,CAAb,EAAgB,CAAhB,EAAmB,GAAnB,EAAwB,CAAxB;AAGAd,EAAAA,MAAM,GAAG,IAAT;AAEA,SAAO,IAAIe,UAAJ,CAAeZ,GAAG,CAACa,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,GAAvB,EAA4B,CAA5B,EAA+BC,IAA9C,CAAP;AACD;;AAED,SAASC,aAAT,CACEC,EADF,EAEEC,MAFF,EAGEC,SAHF,EAIEC,aAJF,EAKE;AACAH,EAAAA,EAAE,CAACI,UAAH,CAAcJ,EAAE,CAACK,YAAjB,EAA+BJ,MAA/B;AACAD,EAAAA,EAAE,CAACM,uBAAH,CAA2BJ,SAA3B;AACAF,EAAAA,EAAE,CAACO,mBAAH,CAAuBL,SAAvB,EAAkCC,aAAlC,EAAiDH,EAAE,CAACQ,KAApD,EAA2D,KAA3D,EAAkE,CAAlE,EAAqE,CAArE;AACD;;AAED,SAASC,eAAT,CACET,EADF,EAEEU,WAFF,EAGEC,OAHF,EAIE;AACAX,EAAAA,EAAE,CAACS,eAAH,CAAmBT,EAAE,CAACY,WAAtB,EAAmCF,WAAnC;;AACA,MAAIC,OAAJ,EAAa;AACXX,IAAAA,EAAE,CAACa,oBAAH,CACEb,EAAE,CAACY,WADL,EAEEZ,EAAE,CAACc,iBAFL,EAGEd,EAAE,CAACe,UAHL,EAIEJ,OAJF,EAKE,CALF;AAOD;AACF;;IA6CYK,I;AAmCX,gBAAYC,OAAZ,EAAiC;AAAA;AAAA,iDAlCV,GAkCU;AAAA,kDAjCT,GAiCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wDAlBF,KAkBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC/B,SAAKjB,EAAL,GAAUiB,OAAO,CAACC,SAAlB;AACA,SAAKhC,KAAL,GAAa+B,OAAO,CAACE,UAArB;AACA,SAAKhC,MAAL,GAAc8B,OAAO,CAACG,WAAtB;AACA,SAAKC,WAAL,GAAmBJ,OAAO,CAACI,WAA3B;AACA,SAAKC,WAAL,GAAmBL,OAAO,CAACK,WAA3B;AACA,SAAKC,QAAL,GAAgBN,OAAO,CAACM,QAAxB;AACA,SAAKC,YAAL,GAAoBP,OAAO,CAACO,YAA5B;AAEA,SAAKC,UAAL,GAAkBR,OAAO,CAACQ,UAA1B;AACA,SAAKC,IAAL;AACD;;;;WAED,gBAAc;AACZ,UAAM1B,EAAE,GAAG,KAAKA,EAAhB;AAEA,WAAKqB,WAAL,GAAmB,KAAnB;AACA,WAAKC,WAAL,GAAmB,IAAnB;AACA,WAAKC,QAAL,GAAgB,KAAhB;AACA,WAAKC,YAAL,GAAoB,IAApB;AAEA,WAAKG,WAAL,GAAmBC,OAAO,CAACC,aAAR,CACjB7B,EADiB,EAEjB8B,oBAFiB,EAGjBC,oBAHiB,CAAnB;AAKA,WAAKC,iBAAL,GAAyBJ,OAAO,CAACC,aAAR,CACvB7B,EADuB,EAEvBiC,0BAFuB,EAGvBC,0BAHuB,CAAzB;AAKA,WAAKC,aAAL,GAAqBP,OAAO,CAACC,aAAR,CACnB7B,EADmB,EAEnBoC,sBAFmB,EAGnBC,sBAHmB,CAArB;AAMA,WAAKC,UAAL,GAAkBV,OAAO,CAACW,YAAR,CAChBvC,EADgB,EAEhB,IAAIwC,YAAJ,CAAiB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,CAAjB,CAFgB,CAAlB;AAKA,WAAK9B,WAAL,GAAmBV,EAAE,CAACyC,iBAAH,EAAnB;AAEA,WAAKC,gBAAL,GAAwBd,OAAO,CAACe,aAAR,CACtB,KAAK3C,EADiB,EAEtB,KAAKA,EAAL,CAAQ4C,MAFc,EAGtBjE,YAAY,CAAC,KAAK8C,UAAN,CAHU,EAItB,EAJsB,EAKtB,EALsB,CAAxB;AAQA,UAAMoB,WAAW,GAAG,IAAIjD,UAAJ,CAAe,KAAKV,KAAL,GAAa,KAAKC,MAAlB,GAA2B,CAA1C,CAApB;AAIA,WAAK2D,iBAAL,GAAyBlB,OAAO,CAACe,aAAR,CACvB3C,EADuB,EAEvBA,EAAE,CAAC+C,OAFoB,EAGvBF,WAHuB,EAIvB,KAAK3D,KAJkB,EAKvB,KAAKC,MALkB,CAAzB;AAOA,WAAK6D,aAAL,GAAqBpB,OAAO,CAACe,aAAR,CACnB3C,EADmB,EAEnBA,EAAE,CAAC+C,OAFgB,EAGnBF,WAHmB,EAInB,KAAK3D,KAJc,EAKnB,KAAKC,MALc,CAArB;AASA,UAAM8D,WAAW,GAAI,KAAKC,uBAAL,GAA+BC,IAAI,CAACC,IAAL,CAClDD,IAAI,CAACE,IAAL,CAAU,KAAKC,YAAf,CADkD,CAApD;AAIA,WAAKC,gBAAL,GAAwBN,WAAW,GAAGA,WAAtC;AAEA,UAAMO,aAAa,GAAG,IAAI5D,UAAJ,CAAe,KAAK2D,gBAAL,GAAwB,CAAvC,CAAtB;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,aAAa,CAACE,MAAlC,EAA0CD,CAAC,EAA3C,EAA+C;AAC7CD,QAAAA,aAAa,CAACC,CAAD,CAAb,GAAmBN,IAAI,CAACQ,KAAL,CAAWR,IAAI,CAACS,MAAL,KAAgB,GAA3B,CAAnB;AACD;;AAED,WAAKC,qBAAL,GAA6BjC,OAAO,CAACe,aAAR,CAC3B3C,EAD2B,EAE3BA,EAAE,CAAC+C,OAFwB,EAG3BS,aAH2B,EAI3BP,WAJ2B,EAK3BA,WAL2B,CAA7B;AAOA,WAAKa,qBAAL,GAA6BlC,OAAO,CAACe,aAAR,CAC3B3C,EAD2B,EAE3BA,EAAE,CAAC+C,OAFwB,EAG3BS,aAH2B,EAI3BP,WAJ2B,EAK3BA,WAL2B,CAA7B;AAQA,UAAMc,eAAe,GAAG,IAAIvB,YAAJ,CAAiB,KAAKe,gBAAtB,CAAxB;;AACA,WAAK,IAAIS,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG,KAAKT,gBAA7B,EAA+CS,GAAG,EAAlD,EAAsD;AACpDD,QAAAA,eAAe,CAACC,GAAD,CAAf,GAAuBA,GAAvB;AACD;;AACD,WAAKC,mBAAL,GAA2BrC,OAAO,CAACW,YAAR,CAAqBvC,EAArB,EAAyB+D,eAAzB,CAA3B;AACD;;;WAED,iBAAeG,QAAf,EAAoC;AAClC,WAAKA,QAAL,GAAgBA,QAAhB;AACA,WAAKC,WAAL,GAAmBvC,OAAO,CAACwC,iBAAR,CACjB,KAAKpE,EADY,EAEjB,KAAKA,EAAL,CAAQ4C,MAFS,EAGjBsB,QAAQ,CAACG,KAHQ,CAAnB;AAKD;;;WAMD,2BAAyBC,GAAzB,EAAsC;AACpC,UAAMtE,EAAE,GAAG,KAAKA,EAAhB;;AACA,UAAIsE,GAAG,KAAK,KAAKhB,YAAjB,EAA+B;AAC7B,aAAKA,YAAL,GAAoBgB,GAApB;AAGA,YAAMrB,WAAW,GAAI,KAAKC,uBAAL,GAA+BC,IAAI,CAACC,IAAL,CAClDD,IAAI,CAACE,IAAL,CAAU,KAAKC,YAAf,CADkD,CAApD;AAGA,aAAKC,gBAAL,GAAwBN,WAAW,GAAGA,WAAtC;AAEA,YAAMO,aAAa,GAAG,IAAI5D,UAAJ,CAAe,KAAK2D,gBAAL,GAAwB,CAAvC,CAAtB;;AACA,aAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,aAAa,CAACE,MAAlC,EAA0CD,CAAC,EAA3C,EAA+C;AAC7CD,UAAAA,aAAa,CAACC,CAAD,CAAb,GAAmBN,IAAI,CAACQ,KAAL,CAAWR,IAAI,CAACS,MAAL,KAAgB,GAA3B,CAAnB;AACD;;AAED,aAAKC,qBAAL,GAA6BjC,OAAO,CAACe,aAAR,CAC3B3C,EAD2B,EAE3BA,EAAE,CAAC+C,OAFwB,EAG3BS,aAH2B,EAI3BP,WAJ2B,EAK3BA,WAL2B,CAA7B;AAOA,aAAKa,qBAAL,GAA6BlC,OAAO,CAACe,aAAR,CAC3B3C,EAD2B,EAE3BA,EAAE,CAAC+C,OAFwB,EAG3BS,aAH2B,EAI3BP,WAJ2B,EAK3BA,WAL2B,CAA7B;AAQA,YAAMc,eAAe,GAAG,IAAIvB,YAAJ,CAAiB,KAAKe,gBAAtB,CAAxB;;AACA,aAAK,IAAIS,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG,KAAKT,gBAA7B,EAA+CS,GAAG,EAAlD,EAAsD;AACpDD,UAAAA,eAAe,CAACC,GAAD,CAAf,GAAuBA,GAAvB;AACD;;AACD,aAAKC,mBAAL,GAA2BrC,OAAO,CAACW,YAAR,CAAqBvC,EAArB,EAAyB+D,eAAzB,CAA3B;AACD;AACF;;;WASD,uBAAqBQ,IAArB,EAAmCC,IAAnC,EAAiDC,IAAjD,EAA+DC,IAA/D,EAA6E;AAC3E,WAAKR,QAAL,CAAcK,IAAd,GAAqBA,IAArB;AACA,WAAKL,QAAL,CAAcM,IAAd,GAAqBA,IAArB;AACA,WAAKN,QAAL,CAAcO,IAAd,GAAqBA,IAArB;AACA,WAAKP,QAAL,CAAcQ,IAAd,GAAqBA,IAArB;AACD;;;WAMD,gCAA8BjD,UAA9B,EAAqE;AACnE,UAAI,KAAKkD,cAAL,CAAoBlD,UAApB,CAAJ,EAAqC;AACnC,aAAKA,UAAL,GAAkBA,UAAlB;AAEA,YAAMzB,EAAE,GAAG,KAAKA,EAAhB;AACAA,QAAAA,EAAE,CAAC4E,aAAH,CAAiB,KAAKlC,gBAAtB;AACA,aAAKA,gBAAL,GAAwBd,OAAO,CAACe,aAAR,CACtB3C,EADsB,EAEtBA,EAAE,CAAC4C,MAFmB,EAGtBjE,YAAY,CAAC8C,UAAD,CAHU,EAItB,EAJsB,EAKtB,EALsB,CAAxB;AAOD;AACF;;;WAED,wBAAsBA,UAAtB,EAAsE;AACpE,UAAMlC,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYkC,UAAZ,CAAb;;AACA,gCAAmBlC,IAAnB,6BAAyB;AAApB,YAAMsF,IAAI,aAAV;;AACH,YAAMC,IAAG,GAAGC,MAAM,CAACF,IAAD,CAAlB;;AAEA,YAAI,CAAC,KAAKpD,UAAL,CAAgBqD,IAAhB,CAAL,EAA2B;AACzB,iBAAO,IAAP;AACD;;AAED,YAAI,KAAKrD,UAAL,CAAgBqD,IAAhB,KAAwB,KAAKrD,UAAL,CAAgBqD,IAAhB,MAAyBrD,UAAU,CAACqD,IAAD,CAA/D,EAAsE;AACpE,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AACD;;;WAED,gBAAc5F,KAAd,EAA6BC,MAA7B,EAA6C;AAC3C,UAAID,KAAK,KAAK,KAAKA,KAAf,IAAwBC,MAAM,KAAK,KAAKA,MAA5C,EAAoD;AAClD,YAAMa,EAAE,GAAG,KAAKA,EAAhB;AACAA,QAAAA,EAAE,CAAC4E,aAAH,CAAiB,KAAK9B,iBAAtB;AACA9C,QAAAA,EAAE,CAAC4E,aAAH,CAAiB,KAAK5B,aAAtB;AAEA,aAAK9D,KAAL,GAAaA,KAAb;AACA,aAAKC,MAAL,GAAcA,MAAd;AACA,YAAM0D,WAAW,GAAG,IAAIjD,UAAJ,CAAeV,KAAK,GAAGC,MAAR,GAAiB,CAAhC,CAApB;AAEA,aAAK2D,iBAAL,GAAyBlB,OAAO,CAACe,aAAR,CACvB3C,EADuB,EAEvBA,EAAE,CAAC+C,OAFoB,EAGvBF,WAHuB,EAIvB3D,KAJuB,EAKvBC,MALuB,CAAzB;AAOA,aAAK6D,aAAL,GAAqBpB,OAAO,CAACe,aAAR,CACnB3C,EADmB,EAEnBA,EAAE,CAAC+C,OAFgB,EAGnBF,WAHmB,EAInB3D,KAJmB,EAKnBC,MALmB,CAArB;AAOD;AACF;;;WAED,gBAAc;AAAA;;AACZ,4BAAI,KAAK+E,QAAT,2CAAI,eAAeG,KAAnB,EAA0B;AACxB,YAAMrE,EAAE,GAAG,KAAKA,EAAhB;AAEA4B,QAAAA,OAAO,CAACoD,WAAR,CAAoBhF,EAApB,EAAwB,KAAKmE,WAA7B,EAA0D,CAA1D;AACAvC,QAAAA,OAAO,CAACoD,WAAR,CAAoBhF,EAApB,EAAwB,KAAK6D,qBAA7B,EAAoE,CAApE;AAEA,aAAKoB,UAAL;AACA,aAAKC,eAAL;AAEA,eAAO;AAAEC,UAAAA,CAAC,EAAE,KAAKC,MAAV;AAAkBC,UAAAA,CAAC,EAAE,KAAKnG,KAA1B;AAAiCoG,UAAAA,CAAC,EAAE,KAAKnG;AAAzC,SAAP;AACD,OAVD,MAUO;AACL,eAAO;AAAEgG,UAAAA,CAAC,EAAE,IAAIvF,UAAJ,CAAe,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAf,CAAL;AAAmCyF,UAAAA,CAAC,EAAE,CAAtC;AAAyCC,UAAAA,CAAC,EAAE;AAA5C,SAAP;AACD;AACF;;;WAED,sBAAoB;AAClB,UAAMtF,EAAE,GAAG,KAAKA,EAAhB;AAGAS,MAAAA,eAAe,CAACT,EAAD,EAAK,KAAKU,WAAV,EAAuB,KAAKsC,aAA5B,CAAf;AAEAhD,MAAAA,EAAE,CAACuF,QAAH,CAAY,CAAZ,EAAe,CAAf,EAAkB,KAAKrG,KAAvB,EAA8B,KAAKC,MAAnC;AAEA,WAAKqG,eAAL,CAAqB,KAAK1C,iBAA1B,EAA6C,KAAKzB,WAAlD;AACA,WAAKoE,aAAL;AAEAzF,MAAAA,EAAE,CAAC0F,OAAH,CAAW1F,EAAE,CAAC2F,KAAd;AAEA,WAAKP,MAAL,GAAc,IAAIxF,UAAJ,CAAe,IAAI,KAAKV,KAAT,GAAiB,KAAKC,MAArC,CAAd;AACAa,MAAAA,EAAE,CAAC4F,UAAH,CACE,CADF,EAEE,CAFF,EAGE,KAAK1G,KAHP,EAIE,KAAKC,MAJP,EAKEa,EAAE,CAAC6F,IALL,EAME7F,EAAE,CAAC8F,aANL,EAOE,KAAKV,MAPP;AAUA3E,MAAAA,eAAe,CAACT,EAAD,EAAK,IAAL,EAAW,IAAX,CAAf;AACAA,MAAAA,EAAE,CAACuF,QAAH,CAAY,CAAZ,EAAe,CAAf,EAAkB,KAAKvF,EAAL,CAAQnB,MAAR,CAAeK,KAAjC,EAAwC,KAAKc,EAAL,CAAQnB,MAAR,CAAeM,MAAvD;AAGA,UAAM4G,IAAI,GAAG,KAAKjD,iBAAlB;AACA,WAAKA,iBAAL,GAAyB,KAAKE,aAA9B;AACA,WAAKA,aAAL,GAAqB+C,IAArB;AACD;;;WAED,yBAAuBpF,OAAvB,EAAqCqF,OAArC,EAAsD;AACpD,UAAMhG,EAAE,GAAG,KAAKA,EAAhB;AACA,UAAMiG,OAAO,GAAG,KAAKjE,iBAArB;AACAhC,MAAAA,EAAE,CAACkG,UAAH,CAAcD,OAAd;AAIAjG,MAAAA,EAAE,CAACI,UAAH,CAAcJ,EAAE,CAACK,YAAjB,EAA+B,KAAKiC,UAApC;AACAtC,MAAAA,EAAE,CAACO,mBAAH,CAAuB0F,OAAO,CAACE,KAA/B,EAAsC,CAAtC,EAAyCnG,EAAE,CAACQ,KAA5C,EAAmD,KAAnD,EAA0D,CAA1D,EAA6D,CAA7D;AACAR,MAAAA,EAAE,CAACM,uBAAH,CAA2B2F,OAAO,CAACE,KAAnC;AAEAnG,MAAAA,EAAE,CAACI,UAAH,CAAcJ,EAAE,CAACK,YAAjB,EAA+B,IAA/B;AAEAuB,MAAAA,OAAO,CAACoD,WAAR,CAAoBhF,EAApB,EAAwBW,OAAxB,EAAiC,CAAjC;AACAX,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACI,QAArB,EAA+B,CAA/B;AACArG,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACM,SAArB,EAAgCP,OAAhC;AAEAhG,MAAAA,EAAE,CAACwG,UAAH,CAAcxG,EAAE,CAACyG,SAAjB,EAA4B,CAA5B,EAA+B,CAA/B;AAED;;;WAED,yBAAuB;AACrB,UAAMzG,EAAE,GAAG,KAAKA,EAAhB;AACA,UAAMiG,OAAO,GAAG,KAAKtE,WAArB;AACA3B,MAAAA,EAAE,CAACkG,UAAH,CAAcD,OAAd;AAEAlG,MAAAA,aAAa,CAACC,EAAD,EAAK,KAAKiE,mBAAV,EAA+BgC,OAAO,CAACS,OAAvC,EAAgD,CAAhD,CAAb;AACA9E,MAAAA,OAAO,CAACoD,WAAR,CAAoBhF,EAApB,EAAwB,KAAK0C,gBAA7B,EAA+D,CAA/D;AAEA1C,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACU,MAArB,EAA6B,CAA7B;AACA3G,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACW,WAArB,EAAkC,CAAlC;AACA5G,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACY,YAArB,EAAmC,CAAnC;AAEA7G,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACa,eAArB,EAAsC,KAAK5D,uBAA3C;AACAlD,MAAAA,EAAE,CAAC+G,SAAH,CAAad,OAAO,CAACe,UAArB,EAAiC,KAAK9C,QAAL,CAAcK,IAA/C,EAAqD,KAAKL,QAAL,CAAcO,IAAnE;AACAzE,MAAAA,EAAE,CAAC+G,SAAH,CAAad,OAAO,CAACgB,UAArB,EAAiC,KAAK/C,QAAL,CAAcM,IAA/C,EAAqD,KAAKN,QAAL,CAAcQ,IAAnE;AAEA1E,MAAAA,EAAE,CAACwG,UAAH,CAAcxG,EAAE,CAACkH,MAAjB,EAAyB,CAAzB,EAA4B,KAAK3D,gBAAjC;AACD;;;WAED,2BAAyB;AACvB,UAAMvD,EAAE,GAAG,KAAKA,EAAhB;AACAS,MAAAA,eAAe,CAACT,EAAD,EAAK,KAAKU,WAAV,EAAuB,KAAKoD,qBAA5B,CAAf;AACA9D,MAAAA,EAAE,CAACuF,QAAH,CACE,CADF,EAEE,CAFF,EAGE,KAAKrC,uBAHP,EAIE,KAAKA,uBAJP;AAOA,UAAM+C,OAAO,GAAG,KAAK9D,aAArB;AACAnC,MAAAA,EAAE,CAACkG,UAAH,CAAcD,OAAd;AAEAlG,MAAAA,aAAa,CAACC,EAAD,EAAK,KAAKsC,UAAV,EAAsB2D,OAAO,CAACE,KAA9B,EAAqC,CAArC,CAAb;AAEAnG,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACU,MAArB,EAA6B,CAA7B;AACA3G,MAAAA,EAAE,CAACoG,SAAH,CAAaH,OAAO,CAACW,WAArB,EAAkC,CAAlC;AAEA5G,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACkB,WAArB,EAAkChE,IAAI,CAACS,MAAL,EAAlC;AACA5D,MAAAA,EAAE,CAAC+G,SAAH,CACEd,OAAO,CAACmB,UADV,EAEE,KAAKlD,QAAL,CAAcG,KAAd,CAAoBnF,KAApB,GAA4B,CAF9B,EAGE,KAAKgF,QAAL,CAAcG,KAAd,CAAoBlF,MAApB,GAA6B,CAH/B;AAKAa,MAAAA,EAAE,CAAC+G,SAAH,CAAad,OAAO,CAACe,UAArB,EAAiC,KAAK9C,QAAL,CAAcK,IAA/C,EAAqD,KAAKL,QAAL,CAAcO,IAAnE;AACAzE,MAAAA,EAAE,CAAC+G,SAAH,CAAad,OAAO,CAACgB,UAArB,EAAiC,KAAK/C,QAAL,CAAcM,IAA/C,EAAqD,KAAKN,QAAL,CAAcQ,IAAnE;AACA1E,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACoB,cAArB,EAAqC,KAAK/F,WAA1C;AACAtB,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACqB,WAArB,EAAkC,KAAK/F,QAAvC;AACAvB,MAAAA,EAAE,CAACsG,SAAH,CAAaL,OAAO,CAACsB,gBAArB,EAAuC,KAAK/F,YAA5C;AAEAxB,MAAAA,EAAE,CAACwG,UAAH,CAAcxG,EAAE,CAACyG,SAAjB,EAA4B,CAA5B,EAA+B,CAA/B;AAGA,UAAMV,IAAI,GAAG,KAAKlC,qBAAlB;AACA,WAAKA,qBAAL,GAA6B,KAAKC,qBAAlC;AACA,WAAKA,qBAAL,GAA6BiC,IAA7B;AAEAtF,MAAAA,eAAe,CAACT,EAAD,EAAK,IAAL,EAAW,IAAX,CAAf;AAGD;;;WAED,mBAAiB;AAiBf,WAAKA,EAAL,CAAQwH,YAAR,CAAqB,KAAKlF,UAA1B;AACA,WAAKtC,EAAL,CAAQwH,YAAR,CAAqB,KAAKvD,mBAA1B;AAEA,WAAKjE,EAAL,CAAQyH,iBAAR,CAA0B,KAAK/G,WAA/B;AAGA,WAAKV,EAAL,CAAQ0H,YAAR,CAAqB,KAAK/F,WAAL,CAAiBgG,YAAtC;AAEA,WAAK3H,EAAL,CAAQ0H,YAAR,CAAqB,KAAK/F,WAAL,CAAiBiG,cAAtC;AACA,WAAK5H,EAAL,CAAQ6H,aAAR,CAAsB,KAAKlG,WAA3B;AAGA,WAAK3B,EAAL,CAAQ0H,YAAR,CAAqB,KAAK1F,iBAAL,CAAuB2F,YAA5C;AAEA,WAAK3H,EAAL,CAAQ0H,YAAR,CAAqB,KAAK1F,iBAAL,CAAuB4F,cAA5C;AACA,WAAK5H,EAAL,CAAQ6H,aAAR,CAAsB,KAAK7F,iBAA3B;AAGA,WAAKhC,EAAL,CAAQ0H,YAAR,CAAqB,KAAKvF,aAAL,CAAmBwF,YAAxC;AAEA,WAAK3H,EAAL,CAAQ0H,YAAR,CAAqB,KAAKvF,aAAL,CAAmByF,cAAxC;AACA,WAAK5H,EAAL,CAAQ6H,aAAR,CAAsB,KAAK1F,aAA3B;AAEA,WAAKnC,EAAL,CAAQ4E,aAAR,CAAsB,KAAKlC,gBAA3B;AACA,WAAK1C,EAAL,CAAQ4E,aAAR,CAAsB,KAAK9B,iBAA3B;AACA,WAAK9C,EAAL,CAAQ4E,aAAR,CAAsB,KAAK5B,aAA3B;AACA,WAAKhD,EAAL,CAAQ4E,aAAR,CAAsB,KAAKf,qBAA3B;AACA,WAAK7D,EAAL,CAAQ4E,aAAR,CAAsB,KAAKd,qBAA3B;AACA,WAAK9D,EAAL,CAAQ4E,aAAR,CAAsB,KAAKT,WAA3B;AACD","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(\n gl,\n drawVert,\n drawFrag,\n ) as WebGLProgram;\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n ) as WebGLProgram;\n this.updateProgram = glUtils.createProgram(\n gl,\n updateVert,\n updateFrag,\n ) as WebGLProgram;\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture as WebGLTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0 as WebGLTexture, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n gl.disable(gl.BLEND);\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture as WebGLTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","glUtils","createProgram","drawVert","drawFrag","fullScreenProgram","fullScreenVert","fullScreenFrag","updateProgram","updateVert","updateFrag","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","disable","BLEND","drawFullTexture","drawParticles","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":"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","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(\n gl,\n drawVert,\n drawFrag,\n ) as WebGLProgram;\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n ) as WebGLProgram;\n this.updateProgram = glUtils.createProgram(\n gl,\n updateVert,\n updateFrag,\n ) as WebGLProgram;\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture as WebGLTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0 as WebGLTexture, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n gl.disable(gl.BLEND);\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture as WebGLTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antv/l7-layers",
3
- "version": "2.9.17-alpha.0",
3
+ "version": "2.9.19",
4
4
  "description": "L7's collection of built-in layers",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -26,9 +26,9 @@
26
26
  "author": "xiaoiver",
27
27
  "license": "ISC",
28
28
  "dependencies": {
29
- "@antv/l7-core": "2.9.17-alpha.0",
30
- "@antv/l7-source": "2.9.17-alpha.0",
31
- "@antv/l7-utils": "2.9.17-alpha.0",
29
+ "@antv/l7-core": "2.9.19",
30
+ "@antv/l7-source": "2.9.19",
31
+ "@antv/l7-utils": "2.9.19",
32
32
  "@babel/runtime": "^7.7.7",
33
33
  "@mapbox/martini": "^0.2.0",
34
34
  "@turf/helpers": "^6.1.4",
@@ -58,7 +58,7 @@
58
58
  "@types/gl-matrix": "^2.4.5",
59
59
  "@types/lodash": "^4.14.138"
60
60
  },
61
- "gitHead": "40e29ed8c7e46515bd76123a87f6b93c587f4f04",
61
+ "gitHead": "f17d96188a5b36cecaa057a476a4c6e1c4249235",
62
62
  "publishConfig": {
63
63
  "access": "public"
64
64
  }