@antv/l7-layers 2.21.1 → 2.21.3

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 (394) hide show
  1. package/es/canvas/index.js +60 -113
  2. package/es/canvas/models/canvas.js +95 -135
  3. package/es/canvas/models/constants.js +1 -1
  4. package/es/citybuliding/building.js +20 -58
  5. package/es/citybuliding/models/build.js +142 -199
  6. package/es/core/BaseLayer.d.ts +1 -1
  7. package/es/core/BaseLayer.js +1113 -1412
  8. package/es/core/BaseModel.js +263 -317
  9. package/es/core/CommonStyleAttribute.js +25 -18
  10. package/es/core/LayerPickService.js +92 -141
  11. package/es/core/TextureService.js +58 -69
  12. package/es/core/constant.js +2 -2
  13. package/es/core/interface.js +5 -5
  14. package/es/core/line_trangluation.js +38 -43
  15. package/es/core/shape/Path.js +21 -12
  16. package/es/core/shape/arrow.js +50 -62
  17. package/es/core/shape/extrude.js +54 -62
  18. package/es/core/triangulation.js +192 -171
  19. package/es/core/utils.js +5 -5
  20. package/es/earth/index.js +35 -73
  21. package/es/earth/models/atmosphere.js +98 -148
  22. package/es/earth/models/base.js +148 -201
  23. package/es/earth/models/bloomsphere.js +97 -147
  24. package/es/earth/utils.js +37 -38
  25. package/es/geometry/index.js +36 -75
  26. package/es/geometry/models/billboard.js +147 -204
  27. package/es/geometry/models/index.js +1 -1
  28. package/es/geometry/models/plane.js +277 -357
  29. package/es/geometry/models/sprite.js +182 -240
  30. package/es/heatmap/index.js +72 -121
  31. package/es/heatmap/models/grid.js +66 -118
  32. package/es/heatmap/models/grid3d.js +101 -151
  33. package/es/heatmap/models/heatmap.js +398 -455
  34. package/es/heatmap/models/hexagon.js +67 -119
  35. package/es/heatmap/models/index.js +1 -1
  36. package/es/heatmap/triangulation.js +20 -20
  37. package/es/image/index.js +23 -62
  38. package/es/image/models/image.js +99 -163
  39. package/es/image/models/index.js +1 -1
  40. package/es/line/index.js +65 -106
  41. package/es/line/models/arc.js +200 -248
  42. package/es/line/models/arc_3d.js +190 -241
  43. package/es/line/models/flow.js +101 -153
  44. package/es/line/models/great_circle.js +183 -234
  45. package/es/line/models/index.js +1 -1
  46. package/es/line/models/line.js +230 -285
  47. package/es/line/models/simple_line.js +142 -192
  48. package/es/line/models/wall.js +221 -273
  49. package/es/mask/index.js +16 -53
  50. package/es/mask/models/fill.js +51 -108
  51. package/es/mask/models/index.js +1 -1
  52. package/es/plugins/DataMappingPlugin.js +205 -249
  53. package/es/plugins/DataSourcePlugin.js +64 -92
  54. package/es/plugins/FeatureScalePlugin.js +258 -302
  55. package/es/plugins/LayerAnimateStylePlugin.js +12 -22
  56. package/es/plugins/LayerMaskPlugin.js +15 -24
  57. package/es/plugins/LayerModelPlugin.js +52 -136
  58. package/es/plugins/LayerStylePlugin.js +14 -23
  59. package/es/plugins/LightingPlugin.js +26 -37
  60. package/es/plugins/MultiPassRendererPlugin.js +34 -39
  61. package/es/plugins/PixelPickingPlugin.js +129 -150
  62. package/es/plugins/RegisterStyleAttributePlugin.js +80 -96
  63. package/es/plugins/ShaderUniformPlugin.js +159 -131
  64. package/es/plugins/UpdateModelPlugin.js +16 -26
  65. package/es/plugins/UpdateStyleAttributePlugin.js +47 -65
  66. package/es/plugins/index.d.ts +1 -1
  67. package/es/point/index.js +118 -182
  68. package/es/point/models/billboard_point.js +72 -127
  69. package/es/point/models/earthExtrude.js +170 -220
  70. package/es/point/models/earthFill.js +136 -192
  71. package/es/point/models/extrude.js +167 -217
  72. package/es/point/models/fill.js +152 -209
  73. package/es/point/models/fillImage.js +156 -211
  74. package/es/point/models/image.js +127 -180
  75. package/es/point/models/index.js +1 -1
  76. package/es/point/models/normal.js +67 -122
  77. package/es/point/models/radar.js +93 -148
  78. package/es/point/models/text.js +447 -578
  79. package/es/point/shape/extrude.js +19 -25
  80. package/es/polygon/index.js +61 -99
  81. package/es/polygon/models/extrude.js +208 -281
  82. package/es/polygon/models/extrusion.js +95 -142
  83. package/es/polygon/models/fill.js +102 -153
  84. package/es/polygon/models/index.js +1 -1
  85. package/es/polygon/models/ocean.js +139 -198
  86. package/es/polygon/models/water.js +120 -179
  87. package/es/raster/buffers/triangulation.js +13 -11
  88. package/es/raster/index.js +47 -88
  89. package/es/raster/models/index.js +1 -1
  90. package/es/raster/models/raster.js +134 -202
  91. package/es/raster/models/rasterRgb.js +134 -208
  92. package/es/raster/models/rasterTerrainRgb.js +98 -153
  93. package/es/tile/core/BaseLayer.d.ts +1 -0
  94. package/es/tile/core/BaseLayer.js +206 -282
  95. package/es/tile/core/TileDebugLayer.js +12 -46
  96. package/es/tile/interaction/getRasterData.js +24 -30
  97. package/es/tile/interaction/utils.js +15 -33
  98. package/es/tile/service/TileLayerService.js +104 -177
  99. package/es/tile/service/TilePickService.js +99 -156
  100. package/es/tile/service/TileSourceService.js +17 -26
  101. package/es/tile/tile/DebugTile.js +41 -78
  102. package/es/tile/tile/ImageTile.js +33 -66
  103. package/es/tile/tile/MaskTile.js +47 -81
  104. package/es/tile/tile/RasterRGBTile.js +40 -71
  105. package/es/tile/tile/RasterTerrainRGBTile.js +33 -66
  106. package/es/tile/tile/RasterTile.js +69 -104
  107. package/es/tile/tile/Tile.d.ts +1 -1
  108. package/es/tile/tile/Tile.js +151 -232
  109. package/es/tile/tile/VectorTile.js +77 -124
  110. package/es/tile/tile/index.d.ts +1 -1
  111. package/es/tile/tile/index.js +4 -2
  112. package/es/tile/tile/util.d.ts +1 -1
  113. package/es/tile/utils/constants.js +1 -1
  114. package/es/tile/utils/utils.js +2 -2
  115. package/es/utils/blend.js +52 -46
  116. package/es/utils/collision-index.js +62 -70
  117. package/es/utils/extrude_polyline.js +441 -471
  118. package/es/utils/grid-index.js +97 -123
  119. package/es/utils/identityScale.js +5 -5
  120. package/es/utils/load-image.js +15 -39
  121. package/es/utils/multiPassRender.js +7 -9
  122. package/es/utils/polylineNormal.js +40 -42
  123. package/es/utils/rampcolor_legend.js +5 -3
  124. package/es/utils/simpleLine.js +53 -66
  125. package/es/utils/symbol-layout.js +95 -117
  126. package/es/wind/index.js +28 -70
  127. package/es/wind/models/index.js +1 -1
  128. package/es/wind/models/utils.js +36 -34
  129. package/es/wind/models/wind.js +203 -260
  130. package/es/wind/models/windRender.js +258 -269
  131. package/es/wind/models/windShader.js +145 -6
  132. package/lib/canvas/index.d.ts +18 -0
  133. package/lib/canvas/index.js +64 -113
  134. package/lib/canvas/models/canvas.d.ts +23 -0
  135. package/lib/canvas/models/canvas.js +97 -136
  136. package/lib/canvas/models/constants.d.ts +2 -0
  137. package/lib/canvas/models/constants.js +1 -1
  138. package/lib/canvas/models/index.d.ts +2 -0
  139. package/lib/canvas/models/index.js +2 -2
  140. package/lib/citybuliding/building.d.ts +7 -0
  141. package/lib/citybuliding/building.js +22 -58
  142. package/lib/citybuliding/models/build.d.ts +17 -0
  143. package/lib/citybuliding/models/build.js +144 -199
  144. package/lib/core/BaseLayer.d.ts +247 -0
  145. package/lib/core/BaseLayer.js +1115 -1412
  146. package/lib/core/BaseModel.d.ts +82 -0
  147. package/lib/core/BaseModel.js +263 -315
  148. package/lib/core/CommonStyleAttribute.d.ts +20 -0
  149. package/lib/core/CommonStyleAttribute.js +25 -18
  150. package/lib/core/LayerPickService.d.ts +12 -0
  151. package/lib/core/LayerPickService.js +93 -140
  152. package/lib/core/TextureService.d.ts +15 -0
  153. package/lib/core/TextureService.js +59 -68
  154. package/lib/core/constant.d.ts +6 -0
  155. package/lib/core/constant.js +2 -2
  156. package/lib/core/interface.d.ts +282 -0
  157. package/lib/core/interface.js +5 -5
  158. package/lib/core/line_trangluation.d.ts +19 -0
  159. package/lib/core/line_trangluation.js +38 -43
  160. package/lib/core/schema.d.ts +27 -0
  161. package/lib/core/shape/Path.d.ts +39 -0
  162. package/lib/core/shape/Path.js +21 -13
  163. package/lib/core/shape/arrow.d.ts +25 -0
  164. package/lib/core/shape/arrow.js +50 -62
  165. package/lib/core/shape/extrude.d.ts +17 -0
  166. package/lib/core/shape/extrude.js +54 -62
  167. package/lib/core/triangulation.d.ts +136 -0
  168. package/lib/core/triangulation.js +194 -174
  169. package/lib/core/utils.d.ts +4 -0
  170. package/lib/core/utils.js +5 -5
  171. package/lib/earth/index.d.ts +22 -0
  172. package/lib/earth/index.js +37 -73
  173. package/lib/earth/models/atmosphere.d.ts +15 -0
  174. package/lib/earth/models/atmosphere.js +100 -148
  175. package/lib/earth/models/base.d.ts +22 -0
  176. package/lib/earth/models/base.js +150 -201
  177. package/lib/earth/models/bloomsphere.d.ts +15 -0
  178. package/lib/earth/models/bloomsphere.js +99 -147
  179. package/lib/earth/utils.d.ts +26 -0
  180. package/lib/earth/utils.js +37 -39
  181. package/lib/geometry/index.d.ts +22 -0
  182. package/lib/geometry/index.js +38 -75
  183. package/lib/geometry/models/billboard.d.ts +24 -0
  184. package/lib/geometry/models/billboard.js +149 -204
  185. package/lib/geometry/models/index.d.ts +5 -0
  186. package/lib/geometry/models/index.js +1 -1
  187. package/lib/geometry/models/plane.d.ts +43 -0
  188. package/lib/geometry/models/plane.js +280 -357
  189. package/lib/geometry/models/sprite.d.ts +48 -0
  190. package/lib/geometry/models/sprite.js +184 -240
  191. package/lib/heatmap/index.d.ts +13 -0
  192. package/lib/heatmap/index.js +74 -121
  193. package/lib/heatmap/models/grid.d.ts +15 -0
  194. package/lib/heatmap/models/grid.js +68 -118
  195. package/lib/heatmap/models/grid3d.d.ts +15 -0
  196. package/lib/heatmap/models/grid3d.js +103 -151
  197. package/lib/heatmap/models/heatmap.d.ts +27 -0
  198. package/lib/heatmap/models/heatmap.js +400 -455
  199. package/lib/heatmap/models/hexagon.d.ts +15 -0
  200. package/lib/heatmap/models/hexagon.js +69 -119
  201. package/lib/heatmap/models/index.d.ts +5 -0
  202. package/lib/heatmap/models/index.js +1 -1
  203. package/lib/heatmap/triangulation.d.ts +5 -0
  204. package/lib/heatmap/triangulation.js +20 -20
  205. package/lib/image/index.d.ts +9 -0
  206. package/lib/image/index.js +25 -62
  207. package/lib/image/models/image.d.ts +17 -0
  208. package/lib/image/models/image.js +101 -163
  209. package/lib/image/models/index.d.ts +5 -0
  210. package/lib/image/models/index.js +1 -1
  211. package/lib/index.d.ts +18 -0
  212. package/lib/index.js +17 -17
  213. package/lib/line/index.d.ts +36 -0
  214. package/lib/line/index.js +67 -106
  215. package/lib/line/models/arc.d.ts +22 -0
  216. package/lib/line/models/arc.js +202 -248
  217. package/lib/line/models/arc_3d.d.ts +22 -0
  218. package/lib/line/models/arc_3d.js +193 -241
  219. package/lib/line/models/flow.d.ts +14 -0
  220. package/lib/line/models/flow.js +103 -153
  221. package/lib/line/models/great_circle.d.ts +17 -0
  222. package/lib/line/models/great_circle.js +185 -234
  223. package/lib/line/models/index.d.ts +5 -0
  224. package/lib/line/models/index.js +1 -1
  225. package/lib/line/models/line.d.ts +27 -0
  226. package/lib/line/models/line.js +232 -285
  227. package/lib/line/models/simple_line.d.ts +19 -0
  228. package/lib/line/models/simple_line.js +144 -192
  229. package/lib/line/models/wall.d.ts +17 -0
  230. package/lib/line/models/wall.js +223 -273
  231. package/lib/mask/index.d.ts +16 -0
  232. package/lib/mask/index.js +18 -53
  233. package/lib/mask/models/fill.d.ts +18 -0
  234. package/lib/mask/models/fill.js +53 -108
  235. package/lib/mask/models/index.d.ts +5 -0
  236. package/lib/mask/models/index.js +1 -1
  237. package/lib/plugins/DataMappingPlugin.d.ts +13 -0
  238. package/lib/plugins/DataMappingPlugin.js +206 -248
  239. package/lib/plugins/DataSourcePlugin.d.ts +6 -0
  240. package/lib/plugins/DataSourcePlugin.js +65 -91
  241. package/lib/plugins/FeatureScalePlugin.d.ts +20 -0
  242. package/lib/plugins/FeatureScalePlugin.js +261 -304
  243. package/lib/plugins/LayerAnimateStylePlugin.d.ts +4 -0
  244. package/lib/plugins/LayerAnimateStylePlugin.js +13 -21
  245. package/lib/plugins/LayerMaskPlugin.d.ts +7 -0
  246. package/lib/plugins/LayerMaskPlugin.js +16 -24
  247. package/lib/plugins/LayerModelPlugin.d.ts +10 -0
  248. package/lib/plugins/LayerModelPlugin.js +53 -135
  249. package/lib/plugins/LayerStylePlugin.d.ts +7 -0
  250. package/lib/plugins/LayerStylePlugin.js +15 -23
  251. package/lib/plugins/LightingPlugin.d.ts +35 -0
  252. package/lib/plugins/LightingPlugin.js +27 -36
  253. package/lib/plugins/MultiPassRendererPlugin.d.ts +22 -0
  254. package/lib/plugins/MultiPassRendererPlugin.js +35 -38
  255. package/lib/plugins/PixelPickingPlugin.d.ts +11 -0
  256. package/lib/plugins/PixelPickingPlugin.js +130 -149
  257. package/lib/plugins/RegisterStyleAttributePlugin.d.ts +11 -0
  258. package/lib/plugins/RegisterStyleAttributePlugin.js +81 -96
  259. package/lib/plugins/ShaderUniformPlugin.d.ts +22 -0
  260. package/lib/plugins/ShaderUniformPlugin.js +160 -130
  261. package/lib/plugins/UpdateModelPlugin.d.ts +7 -0
  262. package/lib/plugins/UpdateModelPlugin.js +17 -26
  263. package/lib/plugins/UpdateStyleAttributePlugin.d.ts +9 -0
  264. package/lib/plugins/UpdateStyleAttributePlugin.js +48 -65
  265. package/lib/plugins/index.d.ts +15 -0
  266. package/lib/point/index.d.ts +33 -0
  267. package/lib/point/index.js +120 -182
  268. package/lib/point/models/billboard_point.d.ts +21 -0
  269. package/lib/point/models/billboard_point.js +74 -127
  270. package/lib/point/models/earthExtrude.d.ts +16 -0
  271. package/lib/point/models/earthExtrude.js +172 -220
  272. package/lib/point/models/earthFill.d.ts +15 -0
  273. package/lib/point/models/earthFill.js +138 -192
  274. package/lib/point/models/extrude.d.ts +16 -0
  275. package/lib/point/models/extrude.js +169 -217
  276. package/lib/point/models/fill.d.ts +31 -0
  277. package/lib/point/models/fill.js +154 -209
  278. package/lib/point/models/fillImage.d.ts +26 -0
  279. package/lib/point/models/fillImage.js +159 -211
  280. package/lib/point/models/image.d.ts +18 -0
  281. package/lib/point/models/image.js +129 -180
  282. package/lib/point/models/index.d.ts +5 -0
  283. package/lib/point/models/index.js +1 -1
  284. package/lib/point/models/normal.d.ts +22 -0
  285. package/lib/point/models/normal.js +69 -122
  286. package/lib/point/models/radar.d.ts +22 -0
  287. package/lib/point/models/radar.js +95 -148
  288. package/lib/point/models/text.d.ts +69 -0
  289. package/lib/point/models/text.js +449 -578
  290. package/lib/point/shape/extrude.d.ts +15 -0
  291. package/lib/point/shape/extrude.js +19 -25
  292. package/lib/polygon/index.d.ts +18 -0
  293. package/lib/polygon/index.js +63 -99
  294. package/lib/polygon/models/extrude.d.ts +25 -0
  295. package/lib/polygon/models/extrude.js +210 -281
  296. package/lib/polygon/models/extrusion.d.ts +24 -0
  297. package/lib/polygon/models/extrusion.js +97 -142
  298. package/lib/polygon/models/fill.d.ts +18 -0
  299. package/lib/polygon/models/fill.js +104 -153
  300. package/lib/polygon/models/index.d.ts +5 -0
  301. package/lib/polygon/models/index.js +1 -1
  302. package/lib/polygon/models/ocean.d.ts +23 -0
  303. package/lib/polygon/models/ocean.js +141 -198
  304. package/lib/polygon/models/water.d.ts +21 -0
  305. package/lib/polygon/models/water.js +122 -179
  306. package/lib/raster/buffers/triangulation.d.ts +6 -0
  307. package/lib/raster/buffers/triangulation.js +13 -11
  308. package/lib/raster/index.d.ts +11 -0
  309. package/lib/raster/index.js +49 -88
  310. package/lib/raster/models/index.d.ts +5 -0
  311. package/lib/raster/models/index.js +1 -1
  312. package/lib/raster/models/raster.d.ts +21 -0
  313. package/lib/raster/models/raster.js +136 -202
  314. package/lib/raster/models/rasterRgb.d.ts +21 -0
  315. package/lib/raster/models/rasterRgb.js +136 -208
  316. package/lib/raster/models/rasterTerrainRgb.d.ts +16 -0
  317. package/lib/raster/models/rasterTerrainRgb.js +100 -153
  318. package/lib/tile/core/BaseLayer.d.ts +48 -0
  319. package/lib/tile/core/BaseLayer.js +207 -281
  320. package/lib/tile/core/TileDebugLayer.d.ts +15 -0
  321. package/lib/tile/core/TileDebugLayer.js +14 -46
  322. package/lib/tile/interaction/getFeatureData.d.ts +0 -0
  323. package/lib/tile/interaction/getRasterData.d.ts +4 -0
  324. package/lib/tile/interaction/getRasterData.js +24 -31
  325. package/lib/tile/interaction/utils.d.ts +11 -0
  326. package/lib/tile/interaction/utils.js +15 -34
  327. package/lib/tile/interface.d.ts +29 -0
  328. package/lib/tile/service/TileLayerService.d.ts +33 -0
  329. package/lib/tile/service/TileLayerService.js +105 -177
  330. package/lib/tile/service/TilePickService.d.ts +26 -0
  331. package/lib/tile/service/TilePickService.js +100 -156
  332. package/lib/tile/service/TileSourceService.d.ts +7 -0
  333. package/lib/tile/service/TileSourceService.js +20 -29
  334. package/lib/tile/tile/DebugTile.d.ts +16 -0
  335. package/lib/tile/tile/DebugTile.js +43 -78
  336. package/lib/tile/tile/ImageTile.d.ts +14 -0
  337. package/lib/tile/tile/ImageTile.js +35 -66
  338. package/lib/tile/tile/MaskTile.d.ts +18 -0
  339. package/lib/tile/tile/MaskTile.js +49 -81
  340. package/lib/tile/tile/RasterRGBTile.d.ts +11 -0
  341. package/lib/tile/tile/RasterRGBTile.js +42 -71
  342. package/lib/tile/tile/RasterTerrainRGBTile.d.ts +14 -0
  343. package/lib/tile/tile/RasterTerrainRGBTile.js +35 -66
  344. package/lib/tile/tile/RasterTile.d.ts +18 -0
  345. package/lib/tile/tile/RasterTile.js +71 -104
  346. package/lib/tile/tile/Tile.d.ts +114 -0
  347. package/lib/tile/tile/Tile.js +152 -231
  348. package/lib/tile/tile/VectorTile.d.ts +26 -0
  349. package/lib/tile/tile/VectorTile.js +79 -124
  350. package/lib/tile/tile/index.d.ts +12 -0
  351. package/lib/tile/tile/index.js +6 -4
  352. package/lib/tile/tile/util.d.ts +5 -0
  353. package/lib/tile/utils/constants.d.ts +1 -0
  354. package/lib/tile/utils/constants.js +1 -1
  355. package/lib/tile/utils/utils.d.ts +8 -0
  356. package/lib/tile/utils/utils.js +2 -2
  357. package/lib/utils/blend.d.ts +2 -0
  358. package/lib/utils/blend.js +52 -47
  359. package/lib/utils/collision-index.d.ts +47 -0
  360. package/lib/utils/collision-index.js +64 -69
  361. package/lib/utils/extrude_polyline.d.ts +68 -0
  362. package/lib/utils/extrude_polyline.js +442 -470
  363. package/lib/utils/grid-index.d.ts +28 -0
  364. package/lib/utils/grid-index.js +97 -123
  365. package/lib/utils/identityScale.d.ts +8 -0
  366. package/lib/utils/identityScale.js +5 -5
  367. package/lib/utils/load-image.d.ts +1 -0
  368. package/lib/utils/load-image.js +15 -39
  369. package/lib/utils/multiPassRender.d.ts +16 -0
  370. package/lib/utils/multiPassRender.js +7 -10
  371. package/lib/utils/polylineNormal.d.ts +9 -0
  372. package/lib/utils/polylineNormal.js +40 -43
  373. package/lib/utils/rampcolor_legend.d.ts +6 -0
  374. package/lib/utils/rampcolor_legend.js +5 -4
  375. package/lib/utils/simpleLine.d.ts +23 -0
  376. package/lib/utils/simpleLine.js +54 -65
  377. package/lib/utils/stencil.d.ts +7 -0
  378. package/lib/utils/symbol-layout.d.ts +43 -0
  379. package/lib/utils/symbol-layout.js +95 -117
  380. package/lib/wind/index.d.ts +11 -0
  381. package/lib/wind/index.js +30 -70
  382. package/lib/wind/models/index.d.ts +5 -0
  383. package/lib/wind/models/index.js +1 -1
  384. package/lib/wind/models/utils.d.ts +19 -0
  385. package/lib/wind/models/utils.js +36 -34
  386. package/lib/wind/models/wind.d.ts +24 -0
  387. package/lib/wind/models/wind.js +205 -260
  388. package/lib/wind/models/windRender.d.ts +104 -0
  389. package/lib/wind/models/windRender.js +261 -272
  390. package/lib/wind/models/windShader.d.ts +12 -0
  391. package/lib/wind/models/windShader.js +145 -6
  392. package/package.json +16 -19
  393. package/es/glsl.d.ts +0 -5
  394. package/lib/glsl.d.ts +0 -5
@@ -1,26 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.Wind = void 0;
9
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
9
  var glUtils = _interopRequireWildcard(require("./utils"));
13
10
  var _windShader = require("./windShader");
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
13
  function getColorRamp(colors) {
17
- var canvas = document.createElement('canvas');
18
- var ctx = canvas.getContext('2d');
14
+ let canvas = document.createElement('canvas');
15
+ const ctx = canvas.getContext('2d');
19
16
  canvas.width = 256;
20
17
  canvas.height = 1;
21
- var gradient = ctx.createLinearGradient(0, 0, 256, 0);
22
- for (var _i = 0, _Object$keys = Object.keys(colors); _i < _Object$keys.length; _i++) {
23
- var stop = _Object$keys[_i];
18
+ const gradient = ctx.createLinearGradient(0, 0, 256, 0);
19
+ for (const stop of Object.keys(colors)) {
24
20
  gradient.addColorStop(+stop, colors[+stop]);
25
21
  }
26
22
  ctx.fillStyle = gradient;
@@ -41,12 +37,33 @@ function bindFramebuffer(gl, framebuffer, texture) {
41
37
  gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
42
38
  }
43
39
  }
44
- var Wind = exports.Wind = /*#__PURE__*/function () {
45
- function Wind(options) {
46
- (0, _classCallCheck2.default)(this, Wind);
40
+ class Wind {
41
+ constructor(options) {
47
42
  (0, _defineProperty2.default)(this, "width", 512);
48
43
  (0, _defineProperty2.default)(this, "height", 512);
44
+ (0, _defineProperty2.default)(this, "pixels", void 0);
45
+ (0, _defineProperty2.default)(this, "fadeOpacity", void 0);
46
+ (0, _defineProperty2.default)(this, "speedFactor", void 0);
47
+ (0, _defineProperty2.default)(this, "dropRate", void 0);
48
+ (0, _defineProperty2.default)(this, "dropRateBump", void 0);
49
+ (0, _defineProperty2.default)(this, "gl", void 0);
50
+ (0, _defineProperty2.default)(this, "drawProgram", void 0);
51
+ (0, _defineProperty2.default)(this, "fullScreenProgram", void 0);
52
+ (0, _defineProperty2.default)(this, "updateProgram", void 0);
53
+ (0, _defineProperty2.default)(this, "rampColors", void 0);
49
54
  (0, _defineProperty2.default)(this, "numParticles", 65536);
55
+ (0, _defineProperty2.default)(this, "numParticlesSize", void 0);
56
+ (0, _defineProperty2.default)(this, "particleStateResolution", void 0);
57
+ (0, _defineProperty2.default)(this, "quadBuffer", void 0);
58
+ (0, _defineProperty2.default)(this, "particleIndexBuffer", void 0);
59
+ (0, _defineProperty2.default)(this, "framebuffer", void 0);
60
+ (0, _defineProperty2.default)(this, "colorRampTexture", void 0);
61
+ (0, _defineProperty2.default)(this, "backgroundTexture", void 0);
62
+ (0, _defineProperty2.default)(this, "screenTexture", void 0);
63
+ (0, _defineProperty2.default)(this, "particleStateTexture0", void 0);
64
+ (0, _defineProperty2.default)(this, "particleStateTexture1", void 0);
65
+ (0, _defineProperty2.default)(this, "windTexture", void 0);
66
+ (0, _defineProperty2.default)(this, "windData", void 0);
50
67
  this.gl = options.glContext;
51
68
  this.width = options.imageWidth;
52
69
  this.height = options.imageHeight;
@@ -57,298 +74,270 @@ var Wind = exports.Wind = /*#__PURE__*/function () {
57
74
  this.rampColors = options.rampColors;
58
75
  this.init();
59
76
  }
60
- (0, _createClass2.default)(Wind, [{
61
- key: "init",
62
- value: function init() {
63
- var gl = this.gl;
64
- this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame
65
- this.speedFactor = 0.25; // how fast the particles move
66
- this.dropRate = 0.003; // how often the particles move to a random place
67
- this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed
77
+ init() {
78
+ const gl = this.gl;
79
+ this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame
80
+ this.speedFactor = 0.25; // how fast the particles move
81
+ this.dropRate = 0.003; // how often the particles move to a random place
82
+ this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed
68
83
 
69
- this.drawProgram = glUtils.createProgram(gl, _windShader.drawVert, _windShader.drawFrag);
70
- this.fullScreenProgram = glUtils.createProgram(gl, _windShader.fullScreenVert, _windShader.fullScreenFrag);
71
- this.updateProgram = glUtils.createProgram(gl, _windShader.updateVert, _windShader.updateFrag);
72
- this.quadBuffer = glUtils.createBuffer(gl, new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]));
73
- this.framebuffer = gl.createFramebuffer();
74
- this.colorRampTexture = glUtils.createTexture(this.gl, this.gl.LINEAR, getColorRamp(this.rampColors), 16, 16);
75
- var emptyPixels = new Uint8Array(this.width * this.height * 4);
84
+ this.drawProgram = glUtils.createProgram(gl, _windShader.drawVert, _windShader.drawFrag);
85
+ this.fullScreenProgram = glUtils.createProgram(gl, _windShader.fullScreenVert, _windShader.fullScreenFrag);
86
+ this.updateProgram = glUtils.createProgram(gl, _windShader.updateVert, _windShader.updateFrag);
87
+ this.quadBuffer = glUtils.createBuffer(gl, new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]));
88
+ this.framebuffer = gl.createFramebuffer();
89
+ this.colorRampTexture = glUtils.createTexture(this.gl, this.gl.LINEAR, getColorRamp(this.rampColors), 16, 16);
90
+ const emptyPixels = new Uint8Array(this.width * this.height * 4);
76
91
 
77
- // screen textures to hold the drawn screen for the previous and the current frame
92
+ // screen textures to hold the drawn screen for the previous and the current frame
78
93
 
79
- this.backgroundTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, this.width, this.height);
80
- this.screenTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, this.width, this.height);
94
+ this.backgroundTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, this.width, this.height);
95
+ this.screenTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, this.width, this.height);
96
+
97
+ // we create a square texture where each pixel will hold a particle position encoded as RGBA
98
+ const particleRes = this.particleStateResolution = Math.ceil(Math.sqrt(this.numParticles));
99
+ // particleRes size
100
+ this.numParticlesSize = particleRes * particleRes;
101
+ const particleState = new Uint8Array(this.numParticlesSize * 4);
102
+ for (let i = 0; i < particleState.length; i++) {
103
+ particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions
104
+ }
105
+ // textures to hold the particle state for the current and the next frame
106
+ this.particleStateTexture0 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
107
+ this.particleStateTexture1 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
108
+ const particleIndices = new Float32Array(this.numParticlesSize);
109
+ for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {
110
+ particleIndices[i$1] = i$1;
111
+ }
112
+ this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);
113
+ }
114
+ setWind(windData) {
115
+ this.windData = windData;
116
+ this.windTexture = glUtils.createDataTexture(this.gl, this.gl.LINEAR, windData.image);
117
+ }
118
+
119
+ /**
120
+ * 更新风场粒子数量
121
+ * @param num
122
+ */
123
+ updateParticelNum(num) {
124
+ const gl = this.gl;
125
+ if (num !== this.numParticles) {
126
+ this.numParticles = num; // params number
81
127
 
82
128
  // we create a square texture where each pixel will hold a particle position encoded as RGBA
83
- var particleRes = this.particleStateResolution = Math.ceil(Math.sqrt(this.numParticles));
84
- // particleRes size
129
+ const particleRes = this.particleStateResolution = Math.ceil(Math.sqrt(this.numParticles));
85
130
  this.numParticlesSize = particleRes * particleRes;
86
- var particleState = new Uint8Array(this.numParticlesSize * 4);
87
- for (var i = 0; i < particleState.length; i++) {
131
+ const particleState = new Uint8Array(this.numParticlesSize * 4);
132
+ for (let i = 0; i < particleState.length; i++) {
88
133
  particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions
89
134
  }
90
135
  // textures to hold the particle state for the current and the next frame
91
136
  this.particleStateTexture0 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
92
137
  this.particleStateTexture1 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
93
- var particleIndices = new Float32Array(this.numParticlesSize);
94
- for (var i$1 = 0; i$1 < this.numParticlesSize; i$1++) {
138
+ const particleIndices = new Float32Array(this.numParticlesSize);
139
+ for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {
95
140
  particleIndices[i$1] = i$1;
96
141
  }
97
142
  this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);
98
143
  }
99
- }, {
100
- key: "setWind",
101
- value: function setWind(windData) {
102
- this.windData = windData;
103
- this.windTexture = glUtils.createDataTexture(this.gl, this.gl.LINEAR, windData.image);
104
- }
105
-
106
- /**
107
- * 更新风场粒子数量
108
- * @param num
109
- */
110
- }, {
111
- key: "updateParticelNum",
112
- value: function updateParticelNum(num) {
113
- var gl = this.gl;
114
- if (num !== this.numParticles) {
115
- this.numParticles = num; // params number
144
+ }
116
145
 
117
- // we create a square texture where each pixel will hold a particle position encoded as RGBA
118
- var particleRes = this.particleStateResolution = Math.ceil(Math.sqrt(this.numParticles));
119
- this.numParticlesSize = particleRes * particleRes;
120
- var particleState = new Uint8Array(this.numParticlesSize * 4);
121
- for (var i = 0; i < particleState.length; i++) {
122
- particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions
123
- }
124
- // textures to hold the particle state for the current and the next frame
125
- this.particleStateTexture0 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
126
- this.particleStateTexture1 = glUtils.createTexture(gl, gl.NEAREST, particleState, particleRes, particleRes);
127
- var particleIndices = new Float32Array(this.numParticlesSize);
128
- for (var i$1 = 0; i$1 < this.numParticlesSize; i$1++) {
129
- particleIndices[i$1] = i$1;
130
- }
131
- this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);
132
- }
133
- }
146
+ /**
147
+ * 更新风场风向风速
148
+ * @param uMin
149
+ * @param uMax
150
+ * @param vMin
151
+ * @param vMax
152
+ */
153
+ updateWindDir(uMin, uMax, vMin, vMax) {
154
+ this.windData.uMin = uMin;
155
+ this.windData.uMax = uMax;
156
+ this.windData.vMin = vMin;
157
+ this.windData.vMax = vMax;
158
+ }
134
159
 
135
- /**
136
- * 更新风场风向风速
137
- * @param uMin
138
- * @param uMax
139
- * @param vMin
140
- * @param vMax
141
- */
142
- }, {
143
- key: "updateWindDir",
144
- value: function updateWindDir(uMin, uMax, vMin, vMax) {
145
- this.windData.uMin = uMin;
146
- this.windData.uMax = uMax;
147
- this.windData.vMin = vMin;
148
- this.windData.vMax = vMax;
160
+ /**
161
+ * update rampColors
162
+ * @param rampColors
163
+ */
164
+ updateColorRampTexture(rampColors) {
165
+ if (this.isColorChanged(rampColors)) {
166
+ this.rampColors = rampColors;
167
+ const gl = this.gl;
168
+ gl.deleteTexture(this.colorRampTexture);
169
+ this.colorRampTexture = glUtils.createTexture(gl, gl.LINEAR, getColorRamp(rampColors), 16, 16);
149
170
  }
150
-
151
- /**
152
- * update rampColors
153
- * @param rampColors
154
- */
155
- }, {
156
- key: "updateColorRampTexture",
157
- value: function updateColorRampTexture(rampColors) {
158
- if (this.isColorChanged(rampColors)) {
159
- this.rampColors = rampColors;
160
- var gl = this.gl;
161
- gl.deleteTexture(this.colorRampTexture);
162
- this.colorRampTexture = glUtils.createTexture(gl, gl.LINEAR, getColorRamp(rampColors), 16, 16);
171
+ }
172
+ isColorChanged(rampColors) {
173
+ const keys = Object.keys(rampColors);
174
+ for (const item of keys) {
175
+ const key = Number(item);
176
+ // exist new key -> color need update
177
+ if (!this.rampColors[key]) {
178
+ return true;
163
179
  }
164
- }
165
- }, {
166
- key: "isColorChanged",
167
- value: function isColorChanged(rampColors) {
168
- var keys = Object.keys(rampColors);
169
- for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {
170
- var item = _keys[_i2];
171
- var _key = Number(item);
172
- // exist new key -> color need update
173
- if (!this.rampColors[_key]) {
174
- return true;
175
- }
176
- // value changed -> color need update
177
- if (this.rampColors[_key] && this.rampColors[_key] !== rampColors[_key]) {
178
- return true;
179
- }
180
+ // value changed -> color need update
181
+ if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {
182
+ return true;
180
183
  }
181
- return false;
182
184
  }
183
- }, {
184
- key: "reSize",
185
- value: function reSize(width, height) {
186
- if (width !== this.width || height !== this.height) {
187
- var gl = this.gl;
188
- gl.deleteTexture(this.backgroundTexture);
189
- gl.deleteTexture(this.screenTexture);
190
- this.width = width;
191
- this.height = height;
192
- var emptyPixels = new Uint8Array(width * height * 4);
193
- // screen textures to hold the drawn screen for the previous and the current frame
194
- this.backgroundTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, width, height);
195
- this.screenTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, width, height);
196
- }
185
+ return false;
186
+ }
187
+ reSize(width, height) {
188
+ if (width !== this.width || height !== this.height) {
189
+ const gl = this.gl;
190
+ gl.deleteTexture(this.backgroundTexture);
191
+ gl.deleteTexture(this.screenTexture);
192
+ this.width = width;
193
+ this.height = height;
194
+ const emptyPixels = new Uint8Array(width * height * 4);
195
+ // screen textures to hold the drawn screen for the previous and the current frame
196
+ this.backgroundTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, width, height);
197
+ this.screenTexture = glUtils.createTexture(gl, gl.NEAREST, emptyPixels, width, height);
197
198
  }
198
- }, {
199
- key: "draw",
200
- value: function draw() {
201
- var _this$windData;
202
- if ((_this$windData = this.windData) !== null && _this$windData !== void 0 && _this$windData.image) {
203
- var gl = this.gl;
204
- glUtils.bindTexture(gl, this.windTexture, 0);
205
- glUtils.bindTexture(gl, this.particleStateTexture0, 1);
206
- this.drawScreen(); // draw Particles into framebuffer
207
- this.updateParticles();
208
- return {
209
- d: this.pixels,
210
- w: this.width,
211
- h: this.height
212
- };
213
- } else {
214
- return {
215
- d: new Uint8Array([0, 0, 0, 0]),
216
- w: 1,
217
- h: 1
218
- };
219
- }
199
+ }
200
+ draw() {
201
+ var _this$windData;
202
+ if ((_this$windData = this.windData) !== null && _this$windData !== void 0 && _this$windData.image) {
203
+ const gl = this.gl;
204
+ glUtils.bindTexture(gl, this.windTexture, 0);
205
+ glUtils.bindTexture(gl, this.particleStateTexture0, 1);
206
+ this.drawScreen(); // draw Particles into framebuffer
207
+ this.updateParticles();
208
+ return {
209
+ d: this.pixels,
210
+ w: this.width,
211
+ h: this.height
212
+ };
213
+ } else {
214
+ return {
215
+ d: new Uint8Array([0, 0, 0, 0]),
216
+ w: 1,
217
+ h: 1
218
+ };
220
219
  }
221
- }, {
222
- key: "drawScreen",
223
- value: function drawScreen() {
224
- var gl = this.gl;
220
+ }
221
+ drawScreen() {
222
+ const gl = this.gl;
225
223
 
226
- // draw the screen into a temporary framebuffer to retain it as the background on the next frame
227
- bindFramebuffer(gl, this.framebuffer, this.screenTexture);
228
- gl.viewport(0, 0, this.width, this.height);
229
- gl.disable(gl.BLEND);
230
- this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);
231
- this.drawParticles();
232
- this.pixels = new Uint8Array(4 * this.width * this.height);
233
- gl.readPixels(0, 0, this.width, this.height, gl.RGBA, gl.UNSIGNED_BYTE, this.pixels);
234
- bindFramebuffer(gl, null, null);
235
- gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);
224
+ // draw the screen into a temporary framebuffer to retain it as the background on the next frame
225
+ bindFramebuffer(gl, this.framebuffer, this.screenTexture);
226
+ gl.viewport(0, 0, this.width, this.height);
227
+ gl.disable(gl.BLEND);
228
+ this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);
229
+ this.drawParticles();
230
+ this.pixels = new Uint8Array(4 * this.width * this.height);
231
+ gl.readPixels(0, 0, this.width, this.height, gl.RGBA, gl.UNSIGNED_BYTE, this.pixels);
232
+ bindFramebuffer(gl, null, null);
233
+ gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);
236
234
 
237
- // save the current screen as the background for the next frame
238
- var temp = this.backgroundTexture;
239
- this.backgroundTexture = this.screenTexture;
240
- this.screenTexture = temp;
241
- }
242
- }, {
243
- key: "drawFullTexture",
244
- value: function drawFullTexture(texture, opacity) {
245
- var gl = this.gl;
246
- var program = this.fullScreenProgram;
247
- gl.useProgram(program);
235
+ // save the current screen as the background for the next frame
236
+ const temp = this.backgroundTexture;
237
+ this.backgroundTexture = this.screenTexture;
238
+ this.screenTexture = temp;
239
+ }
240
+ drawFullTexture(texture, opacity) {
241
+ const gl = this.gl;
242
+ const program = this.fullScreenProgram;
243
+ gl.useProgram(program);
248
244
 
249
- // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);
245
+ // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);
250
246
 
251
- gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);
252
- gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);
253
- gl.enableVertexAttribArray(program.a_pos);
254
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
255
- glUtils.bindTexture(gl, texture, 2);
256
- gl.uniform1i(program.u_screen, 2);
257
- gl.uniform1f(program.u_opacity, opacity);
258
- gl.drawArrays(gl.TRIANGLES, 0, 6);
259
- // gl.drawArrays(gl.POINTS, 0, 6);
260
- }
261
- }, {
262
- key: "drawParticles",
263
- value: function drawParticles() {
264
- var gl = this.gl;
265
- var program = this.drawProgram;
266
- gl.useProgram(program);
267
- bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);
268
- glUtils.bindTexture(gl, this.colorRampTexture, 2);
269
- gl.uniform1i(program.u_wind, 0);
270
- gl.uniform1i(program.u_particles, 1);
271
- gl.uniform1i(program.u_color_ramp, 2);
272
- gl.uniform1f(program.u_particles_res, this.particleStateResolution);
273
- gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);
274
- gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);
275
- gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);
276
- }
277
- }, {
278
- key: "updateParticles",
279
- value: function updateParticles() {
280
- var gl = this.gl;
281
- bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);
282
- gl.viewport(0, 0, this.particleStateResolution, this.particleStateResolution);
283
- var program = this.updateProgram;
284
- gl.useProgram(program);
285
- bindAttribute(gl, this.quadBuffer, program.a_pos, 2);
286
- gl.uniform1i(program.u_wind, 0);
287
- gl.uniform1i(program.u_particles, 1);
288
- gl.uniform1f(program.u_rand_seed, Math.random());
289
- gl.uniform2f(program.u_wind_res, this.windData.image.width * 2, this.windData.image.height * 2);
290
- gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);
291
- gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);
292
- gl.uniform1f(program.u_speed_factor, this.speedFactor);
293
- gl.uniform1f(program.u_drop_rate, this.dropRate);
294
- gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);
295
- gl.drawArrays(gl.TRIANGLES, 0, 6);
247
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);
248
+ gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);
249
+ gl.enableVertexAttribArray(program.a_pos);
250
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
251
+ glUtils.bindTexture(gl, texture, 2);
252
+ gl.uniform1i(program.u_screen, 2);
253
+ gl.uniform1f(program.u_opacity, opacity);
254
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
255
+ // gl.drawArrays(gl.POINTS, 0, 6);
256
+ }
257
+ drawParticles() {
258
+ const gl = this.gl;
259
+ const program = this.drawProgram;
260
+ gl.useProgram(program);
261
+ bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);
262
+ glUtils.bindTexture(gl, this.colorRampTexture, 2);
263
+ gl.uniform1i(program.u_wind, 0);
264
+ gl.uniform1i(program.u_particles, 1);
265
+ gl.uniform1i(program.u_color_ramp, 2);
266
+ gl.uniform1f(program.u_particles_res, this.particleStateResolution);
267
+ gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);
268
+ gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);
269
+ gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);
270
+ }
271
+ updateParticles() {
272
+ const gl = this.gl;
273
+ bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);
274
+ gl.viewport(0, 0, this.particleStateResolution, this.particleStateResolution);
275
+ const program = this.updateProgram;
276
+ gl.useProgram(program);
277
+ bindAttribute(gl, this.quadBuffer, program.a_pos, 2);
278
+ gl.uniform1i(program.u_wind, 0);
279
+ gl.uniform1i(program.u_particles, 1);
280
+ gl.uniform1f(program.u_rand_seed, Math.random());
281
+ gl.uniform2f(program.u_wind_res, this.windData.image.width * 2, this.windData.image.height * 2);
282
+ gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);
283
+ gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);
284
+ gl.uniform1f(program.u_speed_factor, this.speedFactor);
285
+ gl.uniform1f(program.u_drop_rate, this.dropRate);
286
+ gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);
287
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
296
288
 
297
- // swap the particle state textures so the new one becomes the current one
298
- var temp = this.particleStateTexture0;
299
- this.particleStateTexture0 = this.particleStateTexture1;
300
- this.particleStateTexture1 = temp;
301
- bindFramebuffer(gl, null, null);
289
+ // swap the particle state textures so the new one becomes the current one
290
+ const temp = this.particleStateTexture0;
291
+ this.particleStateTexture0 = this.particleStateTexture1;
292
+ this.particleStateTexture1 = temp;
293
+ bindFramebuffer(gl, null, null);
302
294
 
303
- // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);
304
- }
305
- }, {
306
- key: "destroy",
307
- value: function destroy() {
308
- // private drawProgram: WebGLProgram;
309
- // private fullScreenProgram: WebGLProgram;
310
- // private updateProgram: WebGLProgram;
295
+ // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);
296
+ }
297
+ destroy() {
298
+ // private drawProgram: WebGLProgram;
299
+ // private fullScreenProgram: WebGLProgram;
300
+ // private updateProgram: WebGLProgram;
311
301
 
312
- // private quadBuffer: WebGLBuffer | null;
313
- // private particleIndexBuffer: WebGLBuffer | null;
302
+ // private quadBuffer: WebGLBuffer | null;
303
+ // private particleIndexBuffer: WebGLBuffer | null;
314
304
 
315
- // private framebuffer: WebGLFramebuffer | null;
305
+ // private framebuffer: WebGLFramebuffer | null;
316
306
 
317
- // private colorRampTexture: WebGLTexture | null;
318
- // private backgroundTexture: WebGLTexture | null;
319
- // private screenTexture: WebGLTexture | null;
320
- // private particleStateTexture0: WebGLTexture | null;
321
- // private particleStateTexture1: WebGLTexture | null;
322
- // private windTexture: WebGLTexture | null;
307
+ // private colorRampTexture: WebGLTexture | null;
308
+ // private backgroundTexture: WebGLTexture | null;
309
+ // private screenTexture: WebGLTexture | null;
310
+ // private particleStateTexture0: WebGLTexture | null;
311
+ // private particleStateTexture1: WebGLTexture | null;
312
+ // private windTexture: WebGLTexture | null;
323
313
 
324
- this.gl.deleteBuffer(this.quadBuffer);
325
- this.gl.deleteBuffer(this.particleIndexBuffer);
326
- this.gl.deleteFramebuffer(this.framebuffer);
314
+ this.gl.deleteBuffer(this.quadBuffer);
315
+ this.gl.deleteBuffer(this.particleIndexBuffer);
316
+ this.gl.deleteFramebuffer(this.framebuffer);
327
317
 
328
- // @ts-ignore
329
- this.gl.deleteShader(this.drawProgram.vertexShader);
330
- // @ts-ignore
331
- this.gl.deleteShader(this.drawProgram.fragmentShader);
332
- this.gl.deleteProgram(this.drawProgram);
318
+ // @ts-ignore
319
+ this.gl.deleteShader(this.drawProgram.vertexShader);
320
+ // @ts-ignore
321
+ this.gl.deleteShader(this.drawProgram.fragmentShader);
322
+ this.gl.deleteProgram(this.drawProgram);
333
323
 
334
- // @ts-ignore
335
- this.gl.deleteShader(this.fullScreenProgram.vertexShader);
336
- // @ts-ignore
337
- this.gl.deleteShader(this.fullScreenProgram.fragmentShader);
338
- this.gl.deleteProgram(this.fullScreenProgram);
324
+ // @ts-ignore
325
+ this.gl.deleteShader(this.fullScreenProgram.vertexShader);
326
+ // @ts-ignore
327
+ this.gl.deleteShader(this.fullScreenProgram.fragmentShader);
328
+ this.gl.deleteProgram(this.fullScreenProgram);
339
329
 
340
- // @ts-ignore
341
- this.gl.deleteShader(this.updateProgram.vertexShader);
342
- // @ts-ignore
343
- this.gl.deleteShader(this.updateProgram.fragmentShader);
344
- this.gl.deleteProgram(this.updateProgram);
345
- this.gl.deleteTexture(this.colorRampTexture);
346
- this.gl.deleteTexture(this.backgroundTexture);
347
- this.gl.deleteTexture(this.screenTexture);
348
- this.gl.deleteTexture(this.particleStateTexture0);
349
- this.gl.deleteTexture(this.particleStateTexture1);
350
- this.gl.deleteTexture(this.windTexture);
351
- }
352
- }]);
353
- return Wind;
354
- }();
330
+ // @ts-ignore
331
+ this.gl.deleteShader(this.updateProgram.vertexShader);
332
+ // @ts-ignore
333
+ this.gl.deleteShader(this.updateProgram.fragmentShader);
334
+ this.gl.deleteProgram(this.updateProgram);
335
+ this.gl.deleteTexture(this.colorRampTexture);
336
+ this.gl.deleteTexture(this.backgroundTexture);
337
+ this.gl.deleteTexture(this.screenTexture);
338
+ this.gl.deleteTexture(this.particleStateTexture0);
339
+ this.gl.deleteTexture(this.particleStateTexture1);
340
+ this.gl.deleteTexture(this.windTexture);
341
+ }
342
+ }
343
+ exports.Wind = Wind;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * drawProgram drawVert drawFrag
3
+ * screenProgram screenVert screenFrag
4
+ * updateProgram updateVert updateFrag
5
+ * fullScreenProgram fullScreenVert fullScreenFrag
6
+ */
7
+ export declare const drawVert = "\n precision mediump float;\n\n attribute float a_index;\n\n uniform sampler2D u_particles;\n uniform float u_particles_res;\n\n varying vec2 v_particle_pos;\n\n void main() {\n vec4 color = texture2D(u_particles, vec2(\n fract(a_index / u_particles_res),\n floor(a_index / u_particles_res) / u_particles_res)\n );\n\n // decode current particle position from the pixel's RGBA value\n v_particle_pos = vec2( color.r / 255.0 + color.b, color.g / 255.0 + color.a);\n\n gl_PointSize = 1.0;\n gl_Position = vec4(2.0 * v_particle_pos.x - 1.0, 1.0 - 2.0 * v_particle_pos.y, 0, 1);\n }";
8
+ export declare const drawFrag = "\n precision mediump float;\n\n uniform sampler2D u_wind;\n uniform vec2 u_wind_min;\n uniform vec2 u_wind_max;\n uniform sampler2D u_color_ramp;\n\n varying vec2 v_particle_pos;\n\n void main() {\n vec2 velocity = mix(u_wind_min, u_wind_max, texture2D(u_wind, v_particle_pos).rg);\n float speed_t = length(velocity) / length(u_wind_max);\n\n // color ramp is encoded in a 16x16 texture\n vec2 ramp_pos = vec2( fract(16.0 * speed_t), floor(16.0 * speed_t) / 16.0);\n\n gl_FragColor = texture2D(u_color_ramp, ramp_pos);\n }";
9
+ export declare const updateVert = "\n precision mediump float;\n\n attribute vec2 a_pos;\n\n varying vec2 v_tex_pos;\n\n void main() {\n v_tex_pos = a_pos;\n gl_Position = vec4(1.0 - 2.0 * a_pos, 0, 1);\n // framebuffer \u59CB\u7EC8\u7528\u94FA\u6EE1\u5C4F\u5E55\u7684 texture\n }";
10
+ export declare const updateFrag = "\n precision highp float;\n\n uniform sampler2D u_particles;\n uniform sampler2D u_wind;\n uniform vec2 u_wind_res;\n uniform vec2 u_wind_min;\n uniform vec2 u_wind_max;\n uniform float u_rand_seed;\n uniform float u_speed_factor;\n uniform float u_drop_rate;\n uniform float u_drop_rate_bump;\n\n varying vec2 v_tex_pos;\n\n // pseudo-random generator\n const vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);\n float rand(const vec2 co) {\n float t = dot(rand_constants.xy, co);\n return fract(sin(t) * (rand_constants.z + t));\n }\n\n // wind speed lookup; use manual bilinear filtering based on 4 adjacent pixels for smooth interpolation\n vec2 lookup_wind(const vec2 uv) {\n // return texture2D(u_wind, uv).rg; // lower-res hardware filtering\n vec2 px = 1.0 / u_wind_res;\n vec2 vc = (floor(uv * u_wind_res)) * px;\n vec2 f = fract(uv * u_wind_res);\n vec2 tl = texture2D(u_wind, vc).rg;\n vec2 tr = texture2D(u_wind, vc + vec2(px.x, 0)).rg;\n vec2 bl = texture2D(u_wind, vc + vec2(0, px.y)).rg;\n vec2 br = texture2D(u_wind, vc + px).rg;\n return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);\n }\n\n void main() {\n vec4 color = texture2D(u_particles, v_tex_pos);\n vec2 pos = vec2(\n color.r / 255.0 + color.b,\n color.g / 255.0 + color.a); // decode particle position from pixel RGBA\n vec2 velocity = mix(u_wind_min, u_wind_max, lookup_wind(pos));\n float speed_t = length(velocity) / length(u_wind_max);\n\n // take EPSG:4236 distortion into account for calculating where the particle moved\n float distortion = cos(radians(pos.y * 180.0 - 90.0));\n vec2 offset = vec2(velocity.x / distortion, -velocity.y) * 0.0001 * u_speed_factor;\n\n // update particle position, wrapping around the date line\n pos = fract(1.0 + pos + offset);\n\n // a random seed to use for the particle drop\n vec2 seed = (pos + v_tex_pos) * u_rand_seed;\n\n // drop rate is a chance a particle will restart at random position, to avoid degeneration\n float drop_rate = u_drop_rate + speed_t * u_drop_rate_bump;\n float drop = step(1.0 - drop_rate, rand(seed));\n\n vec2 random_pos = vec2(\n rand(seed + 1.3),\n rand(seed + 2.1));\n pos = mix(pos, random_pos, drop);\n\n // encode the new particle position back into RGBA\n gl_FragColor = vec4(\n fract(pos * 255.0),\n floor(pos * 255.0) / 255.0);\n }";
11
+ export declare const fullScreenVert = "\n precision mediump float;\n\n attribute vec2 a_pos;\n\n varying vec2 v_tex_pos;\n\n void main() {\n v_tex_pos = a_pos;\n gl_Position = vec4(1.0 - 2.0 * a_pos, 0.0, 1.0);\n gl_PointSize = 100.0;\n }";
12
+ export declare const fullScreenFrag = "\n precision mediump float;\n\n uniform sampler2D u_screen;\n uniform float u_opacity;\n varying vec2 v_tex_pos;\n\n void main() {\n vec4 color = texture2D(u_screen, 1.0 - v_tex_pos);\n\n // a hack to guarantee opacity fade out even with a value close to 1.0\n gl_FragColor = vec4(floor(255.0 * color * u_opacity) / 255.0);\n }";