@antv/l7-layers 2.8.35 → 2.8.38

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 (196) hide show
  1. package/es/Geometry/models/billboard.d.ts +0 -3
  2. package/es/Geometry/models/billboard.js +0 -9
  3. package/es/Geometry/models/billboard.js.map +1 -1
  4. package/es/Geometry/models/sprite.js +2 -2
  5. package/es/core/BaseLayer.d.ts +2 -2
  6. package/es/core/BaseLayer.js.map +1 -1
  7. package/es/core/LayerGroup.d.ts +2 -1
  8. package/es/core/LayerGroup.js +5 -0
  9. package/es/core/LayerGroup.js.map +1 -1
  10. package/es/core/interface.d.ts +25 -2
  11. package/es/core/interface.js.map +1 -1
  12. package/es/image/models/image.js.map +1 -1
  13. package/es/index.d.ts +2 -2
  14. package/es/index.js +2 -2
  15. package/es/index.js.map +1 -1
  16. package/es/line/models/arc.js +4 -4
  17. package/es/line/models/arc.js.map +1 -1
  18. package/es/line/models/arc_3d.js +4 -5
  19. package/es/line/models/arc_3d.js.map +1 -1
  20. package/es/line/models/arcmini.js +5 -5
  21. package/es/line/models/arcmini.js.map +1 -1
  22. package/es/line/models/great_circle.js +3 -3
  23. package/es/line/models/great_circle.js.map +1 -1
  24. package/es/line/models/line.js +3 -3
  25. package/es/line/models/line.js.map +1 -1
  26. package/es/line/models/linearline.js +3 -3
  27. package/es/line/models/linearline.js.map +1 -1
  28. package/es/line/models/simpleLine.js +8 -8
  29. package/es/line/models/simpleLine.js.map +1 -1
  30. package/es/line/models/wall.js +5 -5
  31. package/es/line/models/wall.js.map +1 -1
  32. package/es/mask/index.d.ts +1 -4
  33. package/es/mask/index.js.map +1 -1
  34. package/es/mask/models/fill.js.map +1 -1
  35. package/es/plugins/DataMappingPlugin.d.ts +1 -0
  36. package/es/plugins/DataMappingPlugin.js +17 -9
  37. package/es/plugins/DataMappingPlugin.js.map +1 -1
  38. package/es/plugins/FeatureScalePlugin.d.ts +1 -2
  39. package/es/plugins/FeatureScalePlugin.js +42 -33
  40. package/es/plugins/FeatureScalePlugin.js.map +1 -1
  41. package/es/plugins/ShaderUniformPlugin.d.ts +1 -0
  42. package/es/plugins/ShaderUniformPlugin.js +12 -0
  43. package/es/plugins/ShaderUniformPlugin.js.map +1 -1
  44. package/es/point/models/extrude.js +3 -4
  45. package/es/point/models/extrude.js.map +1 -1
  46. package/es/point/models/fill.js +3 -4
  47. package/es/point/models/fill.js.map +1 -1
  48. package/es/point/models/fillmage.d.ts +1 -1
  49. package/es/point/models/fillmage.js +6 -21
  50. package/es/point/models/fillmage.js.map +1 -1
  51. package/es/point/models/icon-font.js +1 -1
  52. package/es/point/models/image.js +4 -4
  53. package/es/point/models/image.js.map +1 -1
  54. package/es/point/models/normal.js +1 -2
  55. package/es/point/models/normal.js.map +1 -1
  56. package/es/point/models/radar.js +5 -18
  57. package/es/point/models/radar.js.map +1 -1
  58. package/es/point/models/simplePoint.js +5 -6
  59. package/es/point/models/simplePoint.js.map +1 -1
  60. package/es/point/models/text.js +4 -4
  61. package/es/point/models/text.js.map +1 -1
  62. package/es/polygon/models/extrude.js +3 -4
  63. package/es/polygon/models/extrude.js.map +1 -1
  64. package/es/polygon/models/fill.d.ts +1 -0
  65. package/es/polygon/models/fill.js +37 -12
  66. package/es/polygon/models/fill.js.map +1 -1
  67. package/es/polygon/models/ocean.js +3 -4
  68. package/es/polygon/models/ocean.js.map +1 -1
  69. package/es/polygon/models/water.js +3 -4
  70. package/es/polygon/models/water.js.map +1 -1
  71. package/es/raster/index.d.ts +3 -3
  72. package/es/raster/index.js +16 -6
  73. package/es/raster/index.js.map +1 -1
  74. package/es/raster/models/index.d.ts +1 -1
  75. package/es/raster/models/index.js +3 -1
  76. package/es/raster/models/index.js.map +1 -1
  77. package/es/raster/models/raste-tile.d.ts +23 -0
  78. package/es/raster/models/raste-tile.js +285 -0
  79. package/es/raster/models/raste-tile.js.map +1 -0
  80. package/es/raster/models/raster.js +2 -0
  81. package/es/raster/models/raster.js.map +1 -1
  82. package/es/wind/index.d.ts +1 -17
  83. package/es/wind/index.js.map +1 -1
  84. package/es/wind/models/utils.d.ts +12 -12
  85. package/es/wind/models/utils.js +6 -5
  86. package/es/wind/models/utils.js.map +1 -1
  87. package/es/wind/models/wind.js.map +1 -1
  88. package/es/wind/models/windRender.js.map +1 -1
  89. package/lib/Geometry/models/billboard.js +0 -6
  90. package/lib/Geometry/models/billboard.js.map +1 -1
  91. package/lib/Geometry/models/sprite.js +2 -2
  92. package/lib/core/BaseLayer.js.map +1 -1
  93. package/lib/core/LayerGroup.js +5 -0
  94. package/lib/core/LayerGroup.js.map +1 -1
  95. package/lib/core/interface.js.map +1 -1
  96. package/lib/image/models/image.js.map +1 -1
  97. package/lib/index.js +29 -8
  98. package/lib/index.js.map +1 -1
  99. package/lib/line/models/arc.js +4 -5
  100. package/lib/line/models/arc.js.map +1 -1
  101. package/lib/line/models/arc_3d.js +4 -6
  102. package/lib/line/models/arc_3d.js.map +1 -1
  103. package/lib/line/models/arcmini.js +5 -6
  104. package/lib/line/models/arcmini.js.map +1 -1
  105. package/lib/line/models/great_circle.js +3 -4
  106. package/lib/line/models/great_circle.js.map +1 -1
  107. package/lib/line/models/line.js +3 -4
  108. package/lib/line/models/line.js.map +1 -1
  109. package/lib/line/models/linearline.js +3 -4
  110. package/lib/line/models/linearline.js.map +1 -1
  111. package/lib/line/models/simpleLine.js +8 -9
  112. package/lib/line/models/simpleLine.js.map +1 -1
  113. package/lib/line/models/wall.js +5 -6
  114. package/lib/line/models/wall.js.map +1 -1
  115. package/lib/mask/index.js.map +1 -1
  116. package/lib/mask/models/fill.js.map +1 -1
  117. package/lib/plugins/DataMappingPlugin.js +17 -9
  118. package/lib/plugins/DataMappingPlugin.js.map +1 -1
  119. package/lib/plugins/FeatureScalePlugin.js +43 -33
  120. package/lib/plugins/FeatureScalePlugin.js.map +1 -1
  121. package/lib/plugins/ShaderUniformPlugin.js +12 -0
  122. package/lib/plugins/ShaderUniformPlugin.js.map +1 -1
  123. package/lib/point/models/extrude.js +3 -5
  124. package/lib/point/models/extrude.js.map +1 -1
  125. package/lib/point/models/fill.js +3 -5
  126. package/lib/point/models/fill.js.map +1 -1
  127. package/lib/point/models/fillmage.js +7 -23
  128. package/lib/point/models/fillmage.js.map +1 -1
  129. package/lib/point/models/icon-font.js +1 -1
  130. package/lib/point/models/image.js +4 -5
  131. package/lib/point/models/image.js.map +1 -1
  132. package/lib/point/models/normal.js +1 -3
  133. package/lib/point/models/normal.js.map +1 -1
  134. package/lib/point/models/radar.js +5 -19
  135. package/lib/point/models/radar.js.map +1 -1
  136. package/lib/point/models/simplePoint.js +5 -7
  137. package/lib/point/models/simplePoint.js.map +1 -1
  138. package/lib/point/models/text.js +4 -5
  139. package/lib/point/models/text.js.map +1 -1
  140. package/lib/polygon/models/extrude.js +3 -5
  141. package/lib/polygon/models/extrude.js.map +1 -1
  142. package/lib/polygon/models/fill.js +37 -13
  143. package/lib/polygon/models/fill.js.map +1 -1
  144. package/lib/polygon/models/ocean.js +3 -5
  145. package/lib/polygon/models/ocean.js.map +1 -1
  146. package/lib/polygon/models/water.js +3 -5
  147. package/lib/polygon/models/water.js.map +1 -1
  148. package/lib/raster/index.js +16 -6
  149. package/lib/raster/index.js.map +1 -1
  150. package/lib/raster/models/index.js +4 -1
  151. package/lib/raster/models/index.js.map +1 -1
  152. package/lib/raster/models/raste-tile.js +294 -0
  153. package/lib/raster/models/raste-tile.js.map +1 -0
  154. package/lib/raster/models/raster.js +2 -0
  155. package/lib/raster/models/raster.js.map +1 -1
  156. package/lib/wind/index.js.map +1 -1
  157. package/lib/wind/models/utils.js +6 -5
  158. package/lib/wind/models/utils.js.map +1 -1
  159. package/lib/wind/models/wind.js.map +1 -1
  160. package/lib/wind/models/windRender.js.map +1 -1
  161. package/package.json +7 -6
  162. package/es/imagetile/index.d.ts +0 -22
  163. package/es/imagetile/index.js +0 -82
  164. package/es/imagetile/index.js.map +0 -1
  165. package/es/imagetile/models/imagetile.d.ts +0 -12
  166. package/es/imagetile/models/imagetile.js +0 -133
  167. package/es/imagetile/models/imagetile.js.map +0 -1
  168. package/es/imagetile/models/index.d.ts +0 -5
  169. package/es/imagetile/models/index.js +0 -6
  170. package/es/imagetile/models/index.js.map +0 -1
  171. package/es/imagetile/utils/ImageTile.d.ts +0 -20
  172. package/es/imagetile/utils/ImageTile.js +0 -92
  173. package/es/imagetile/utils/ImageTile.js.map +0 -1
  174. package/es/imagetile/utils/Tile.d.ts +0 -27
  175. package/es/imagetile/utils/Tile.js +0 -313
  176. package/es/imagetile/utils/Tile.js.map +0 -1
  177. package/es/imagetile/utils/lruCache.d.ts +0 -20
  178. package/es/imagetile/utils/lruCache.js +0 -105
  179. package/es/imagetile/utils/lruCache.js.map +0 -1
  180. package/es/imagetile/utils/tileCache.d.ts +0 -8
  181. package/es/imagetile/utils/tileCache.js +0 -50
  182. package/es/imagetile/utils/tileCache.js.map +0 -1
  183. package/lib/imagetile/index.js +0 -95
  184. package/lib/imagetile/index.js.map +0 -1
  185. package/lib/imagetile/models/imagetile.js +0 -146
  186. package/lib/imagetile/models/imagetile.js.map +0 -1
  187. package/lib/imagetile/models/index.js +0 -17
  188. package/lib/imagetile/models/index.js.map +0 -1
  189. package/lib/imagetile/utils/ImageTile.js +0 -101
  190. package/lib/imagetile/utils/ImageTile.js.map +0 -1
  191. package/lib/imagetile/utils/Tile.js +0 -316
  192. package/lib/imagetile/utils/Tile.js.map +0 -1
  193. package/lib/imagetile/utils/lruCache.js +0 -109
  194. package/lib/imagetile/utils/lruCache.js.map +0 -1
  195. package/lib/imagetile/utils/tileCache.js +0 -58
  196. package/lib/imagetile/utils/tileCache.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/raster/models/raster.ts"],"names":["AttributeType","gl","generateColorRamp","getMask","BaseModel","RasterImageTriangulation","RasterModel","layer","getLayerConfig","opacity","clampLow","clampHigh","noDataValue","domain","updateColorTexure","u_opacity","u_texture","texture","u_domain","u_clampLow","u_clampHigh","u_noDataValue","u_colorTexture","colorTexture","mask","maskInside","source","getSource","createTexture2D","rendererService","parserDataItem","data","dataArray","width","height","format","LUMINANCE","type","FLOAT","rampColors","imageData","flipY","buildLayerModel","moduleName","vertexShader","rasterVert","fragmentShader","rasterFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","stencil","initModels","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ITexture2D,\n lazyInject,\n TYPES,\n} from '@antv/l7-core';\nimport { generateColorRamp, getMask, IColorRamp } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IRasterLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport rasterFrag from '../shaders/raster_2d_frag.glsl';\nimport rasterVert from '../shaders/raster_2d_vert.glsl';\nexport default class RasterModel extends BaseModel {\n protected texture: ITexture2D;\n protected colorTexture: ITexture2D;\n public getUninforms() {\n const {\n opacity = 1,\n clampLow = true,\n clampHigh = true,\n noDataValue = -9999999,\n domain = [0, 1],\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n this.updateColorTexure();\n return {\n u_opacity: opacity || 1,\n u_texture: this.texture,\n u_domain: domain,\n u_clampLow: clampLow,\n u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow,\n u_noDataValue: noDataValue,\n u_colorTexture: this.colorTexture,\n };\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const source = this.layer.getSource();\n const { createTexture2D } = this.rendererService;\n const parserDataItem = source.data.dataArray[0];\n this.texture = createTexture2D({\n data: parserDataItem.data,\n width: parserDataItem.width,\n height: parserDataItem.height,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n // aniso: 4,\n });\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: imageData.data,\n width: imageData.width,\n height: imageData.height,\n flipY: false,\n });\n return [\n this.layer.buildLayerModel({\n moduleName: 'RasterImageData',\n vertexShader: rasterVert,\n fragmentShader: rasterFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private updateColorTexure() {\n const { createTexture2D } = this.rendererService;\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: imageData.data,\n width: imageData.width,\n height: imageData.height,\n flipY: false,\n });\n }\n}\n"],"file":"raster.js"}
1
+ {"version":3,"sources":["../../../src/raster/models/raster.ts"],"names":["AttributeType","gl","generateColorRamp","getMask","BaseModel","RasterImageTriangulation","RasterModel","layer","getLayerConfig","opacity","clampLow","clampHigh","noDataValue","domain","updateColorTexure","u_opacity","u_texture","texture","u_domain","u_clampLow","u_clampHigh","u_noDataValue","u_colorTexture","colorTexture","isLayerGroup","mask","maskInside","source","getSource","createTexture2D","rendererService","parserDataItem","data","dataArray","width","height","format","LUMINANCE","type","FLOAT","rampColors","imageData","flipY","buildLayerModel","moduleName","vertexShader","rasterVert","fragmentShader","rasterFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","stencil","initModels","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ITexture2D,\n lazyInject,\n TYPES,\n} from '@antv/l7-core';\nimport { generateColorRamp, getMask, IColorRamp } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IRasterLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport rasterFrag from '../shaders/raster_2d_frag.glsl';\nimport rasterVert from '../shaders/raster_2d_vert.glsl';\nexport default class RasterModel extends BaseModel {\n protected texture: ITexture2D;\n protected colorTexture: ITexture2D;\n public getUninforms() {\n const {\n opacity = 1,\n clampLow = true,\n clampHigh = true,\n noDataValue = -9999999,\n domain = [0, 1],\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n this.updateColorTexure();\n return {\n u_opacity: opacity || 1,\n u_texture: this.texture,\n u_domain: domain,\n u_clampLow: clampLow,\n u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow,\n u_noDataValue: noDataValue,\n u_colorTexture: this.colorTexture,\n };\n }\n\n public initModels() {\n // 指定当前 layer 当作普通的 layer 进行渲染\n this.layer.isLayerGroup = false;\n\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const source = this.layer.getSource();\n const { createTexture2D } = this.rendererService;\n const parserDataItem = source.data.dataArray[0];\n this.texture = createTexture2D({\n data: parserDataItem.data,\n width: parserDataItem.width,\n height: parserDataItem.height,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n // aniso: 4,\n });\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: imageData.data,\n width: imageData.width,\n height: imageData.height,\n flipY: false,\n });\n return [\n this.layer.buildLayerModel({\n moduleName: 'RasterImageData',\n vertexShader: rasterVert,\n fragmentShader: rasterFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private updateColorTexure() {\n const { createTexture2D } = this.rendererService;\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IRasterLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: imageData.data,\n width: imageData.width,\n height: imageData.height,\n flipY: false,\n });\n }\n}\n"],"file":"raster.js"}
@@ -1,21 +1,6 @@
1
1
  import BaseLayer from '../core/BaseLayer';
2
+ import { IWindLayerStyleOptions } from '../core/interface';
2
3
  import { WindModelType } from './models';
3
- interface IWindLayerStyleOptions {
4
- uMin?: number;
5
- uMax?: number;
6
- vMin?: number;
7
- vMax?: number;
8
- fadeOpacity?: number;
9
- speedFactor?: number;
10
- dropRate?: number;
11
- dropRateBump?: number;
12
- opacity?: number;
13
- numParticles?: number;
14
- rampColors?: {
15
- [key: number]: string;
16
- };
17
- sizeScale?: number;
18
- }
19
4
  export default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {
20
5
  type: string;
21
6
  buildModels(): void;
@@ -33,4 +18,3 @@ export default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {
33
18
  protected getDefaultConfig(): {};
34
19
  protected getModelType(): WindModelType;
35
20
  }
36
- export {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/wind/index.ts"],"names":["BaseLayer","WindModels","WindLayer","modelType","getModelType","layerModel","models","initModels","buildModels","render","properties","opacity","type","minimum","maximum","defaultConfig","wind"],"mappings":";;;;;;;;;;;;AAAA,OAAOA,SAAP,MAAsB,mBAAtB;AACA,OAAOC,UAAP,MAA0C,UAA1C;;IAiBqBC,S;;;;;;;;;;;;;;;;2DACG,W;;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIJ,UAAU,CAACE,SAAD,CAAd,CAA0B,IAA1B,CAAlB;AACA,WAAKG,MAAL,GAAc,KAAKD,UAAL,CAAgBE,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKD,UAAL,CAAgBG,WAAhB,EAAd;AACD;;;WAED,wBAAsB;AACpB,UAAI,KAAKH,UAAT,EAAqB;AACnB,aAAKA,UAAL,CAAgBI,MAAhB;AACD;;AAED,aAAO,IAAP;AACD;;;WACD,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,IAAI,EAAE;AADc,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAAwC;AACtC,aAAO,MAAP;AACD;;;;EAvCoCZ,S;;SAAlBE,S","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport WindModels, { WindModelType } from './models';\ninterface IWindLayerStyleOptions {\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n fadeOpacity?: number;\n speedFactor?: number;\n dropRate?: number;\n dropRateBump?: number;\n opacity?: number;\n numParticles?: number;\n rampColors?: {\n [key: number]: string;\n };\n sizeScale?: number;\n}\nexport default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {\n public type: string = 'WindLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new WindModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n public renderModels() {\n if (this.layerModel) {\n this.layerModel.render(); // 独立的渲染流程\n }\n\n return this;\n }\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n wind: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): WindModelType {\n return 'wind';\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/wind/index.ts"],"names":["BaseLayer","WindModels","WindLayer","modelType","getModelType","layerModel","models","initModels","buildModels","render","properties","opacity","type","minimum","maximum","defaultConfig","wind"],"mappings":";;;;;;;;;;;;AAAA,OAAOA,SAAP,MAAsB,mBAAtB;AAEA,OAAOC,UAAP,MAA0C,UAA1C;;IACqBC,S;;;;;;;;;;;;;;;;2DACG,W;;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIJ,UAAU,CAACE,SAAD,CAAd,CAA0B,IAA1B,CAAlB;AACA,WAAKG,MAAL,GAAc,KAAKD,UAAL,CAAgBE,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKD,UAAL,CAAgBG,WAAhB,EAAd;AACD;;;WAED,wBAAsB;AACpB,UAAI,KAAKH,UAAT,EAAqB;AACnB,aAAKA,UAAL,CAAgBI,MAAhB;AACD;;AAED,aAAO,IAAP;AACD;;;WACD,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,IAAI,EAAE;AADc,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAAwC;AACtC,aAAO,MAAP;AACD;;;;EAvCoCZ,S;;SAAlBE,S","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IWindLayerStyleOptions } from '../core/interface';\nimport WindModels, { WindModelType } from './models';\nexport default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {\n public type: string = 'WindLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new WindModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n public renderModels() {\n if (this.layerModel) {\n this.layerModel.render(); // 独立的渲染流程\n }\n\n return this;\n }\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n wind: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): WindModelType {\n return 'wind';\n }\n}\n"],"file":"index.js"}
@@ -1,19 +1,19 @@
1
- export declare function createProgram(gl: any, vshader: any, fshader: any): any;
2
- export declare function loadShader(gl: WebGLRenderingContext, type: any, source: any): WebGLShader | null;
1
+ export declare function createProgram(gl: WebGLRenderingContext, vshader: string, fshader: string): WebGLProgram | null;
2
+ export declare function loadShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null;
3
3
  export declare function createTexture(gl: WebGLRenderingContext, filter: any, data: any, width: number, height: number): WebGLTexture | null;
4
4
  export declare function createDataTexture(gl: WebGLRenderingContext, filter: any, data: any): WebGLTexture | null;
5
- export declare function bindTexture(gl: any, texture: any, unit: any): void;
6
- export declare function createBuffer(gl: any, data: any): any;
7
- export declare function bindAttriBuffer(gl: WebGLRenderingContext, attrName: string, vertices: any, count: any, program: any): {
5
+ export declare function bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, unit: number): void;
6
+ export declare function createBuffer(gl: WebGLRenderingContext, data: Float32Array): WebGLBuffer | null;
7
+ export declare function bindAttriBuffer(gl: WebGLRenderingContext, attrName: string, vertices: number, count: number, program: WebGLProgram): {
8
8
  buffer: WebGLBuffer | null;
9
9
  attr: number;
10
- count: any;
10
+ count: number;
11
11
  };
12
12
  export declare function bindAttriIndicesBuffer(gl: WebGLRenderingContext, indices: Uint8Array): WebGLBuffer;
13
- export declare function bindUnifrom(gl: any, unifromName: any, data: any, program: any, vec: any): any;
14
- export declare function setUnifrom(gl: any, location: any, data: any, vec: any): void;
15
- export declare function initFramebuffer(gl: any): {
16
- FRAMEBUFFER: any;
17
- OFFER_SCREEN_WIDTH: any;
18
- OFFER_SCREEN_HEIGHT: any;
13
+ export declare function bindUnifrom(gl: WebGLRenderingContext, unifromName: string, data: number | Float32List, program: WebGLProgram, vec: string): WebGLUniformLocation | null;
14
+ export declare function setUnifrom(gl: WebGLRenderingContext, location: WebGLUniformLocation, data: number | Float32List, vec: string): void;
15
+ export declare function initFramebuffer(gl: WebGLRenderingContext): {
16
+ FRAMEBUFFER: WebGLFramebuffer | null;
17
+ OFFER_SCREEN_WIDTH: number;
18
+ OFFER_SCREEN_HEIGHT: number;
19
19
  };
@@ -121,20 +121,22 @@ export function bindAttriIndicesBuffer(gl, indices) {
121
121
 
122
122
  if (!buffer) {
123
123
  console.warn('failed create vertex buffer');
124
+ } else {
125
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
126
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
124
127
  }
125
128
 
126
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
127
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
128
129
  return buffer;
129
130
  }
130
131
  export function bindUnifrom(gl, unifromName, data, program, vec) {
131
132
  var uniform = gl.getUniformLocation(program, unifromName);
132
133
 
133
- if (uniform < 0) {
134
+ if (uniform === null || uniform < 0) {
134
135
  console.warn('无法获取 uniform 变量的存储位置');
136
+ } else {
137
+ setUnifrom(gl, uniform, data, vec);
135
138
  }
136
139
 
137
- setUnifrom(gl, uniform, data, vec);
138
140
  return uniform;
139
141
  }
140
142
  export function setUnifrom(gl, location, data, vec) {
@@ -179,7 +181,6 @@ export function initFramebuffer(gl) {
179
181
  gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, OFFER_SCREEN_WIDTH, OFFER_SCREEN_HEIGHT);
180
182
  gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthbuffer);
181
183
  var texture = gl.createTexture();
182
- var textureSize = 1024;
183
184
  FRAMEBUFFER.texture = texture;
184
185
  FRAMEBUFFER.width = OFFER_SCREEN_WIDTH;
185
186
  FRAMEBUFFER.height = OFFER_SCREEN_HEIGHT;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/utils.ts"],"names":["createProgram","gl","vshader","fshader","vertexShader","loadShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","program","attachShader","linkProgram","linked","getProgramParameter","LINK_STATUS","error","getProgramInfoLog","console","warn","deleteProgram","deleteShader","numAttributes","ACTIVE_ATTRIBUTES","i","attribute","getActiveAttrib","name","getAttribLocation","numUniforms","ACTIVE_UNIFORMS","i$1","uniform","getActiveUniform","getUniformLocation","type","source","shader","createShader","shaderSource","compileShader","compiled","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","createTexture","filter","data","width","height","texture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","texImage2D","RGBA","UNSIGNED_BYTE","createDataTexture","unit","activeTexture","TEXTURE0","createBuffer","buffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","bindAttriBuffer","attrName","vertices","count","attr","vertexAttribPointer","FLOAT","enableVertexAttribArray","bindAttriIndicesBuffer","indices","ELEMENT_ARRAY_BUFFER","bindUnifrom","unifromName","vec","setUnifrom","location","uniform1f","uniform2fv","uniform3fv","uniform4fv","uniform1i","uniformMatrix4fv","initFramebuffer","drawingBufferWidth","drawingBufferHeight","OFFER_SCREEN_WIDTH","OFFER_SCREEN_HEIGHT","FRAMEBUFFER","createFramebuffer","bindFramebuffer","depthbuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","DEPTH_COMPONENT16","framebufferRenderbuffer","DEPTH_ATTACHMENT","textureSize","NEAREST","framebufferTexture2D","COLOR_ATTACHMENT0"],"mappings":"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","sourcesContent":["// @ts-nocheck\nexport function createProgram(gl, vshader, fshader) {\n // Create shader object\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader); // 创建顶点着色器对象\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader); // 创建片元着色器对象\n if (!vertexShader || !fragmentShader) {\n return null;\n }\n\n // Create a program object\n const program = gl.createProgram(); // 创建程序对象\n if (!program) {\n return null;\n }\n\n // Attach the shader objects\n gl.attachShader(program, vertexShader); // 绑定着色器对象\n gl.attachShader(program, fragmentShader);\n\n // Link the program object\n gl.linkProgram(program); // 链接着色器对象\n\n // Check the result of linking\n const linked = gl.getProgramParameter(program, gl.LINK_STATUS); // 判断着色器对象是否链接成功\n if (!linked) {\n const error = gl.getProgramInfoLog(program);\n console.warn('Failed to link program: ' + error);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n return null;\n }\n\n const numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n for (let i = 0; i < numAttributes; i++) {\n const attribute = gl.getActiveAttrib(program, i);\n program[attribute.name] = gl.getAttribLocation(program, attribute.name);\n }\n const numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n for (let i$1 = 0; i$1 < numUniforms; i$1++) {\n const uniform = gl.getActiveUniform(program, i$1);\n program[uniform.name] = gl.getUniformLocation(program, uniform.name);\n }\n\n program.vertexShader = vertexShader;\n program.fragmentShader = fragmentShader;\n\n return program;\n}\n\nexport function loadShader(gl: WebGLRenderingContext, type, source) {\n // Create shader object\n const shader = gl.createShader(type); // 生成着色器对象\n if (shader == null) {\n console.warn('unable to create shader');\n return null;\n }\n\n // Set the shader program\n gl.shaderSource(shader, source); // 载入着色器\n\n // Compile the shader\n gl.compileShader(shader); // 编译着色器代码\n\n // Check the result of compilation\n const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); // 判断着色器对象是否生成成功\n // gl.SHADER_TYPE、gl.DELETE_STATUS、gl.COMPILE_STATUS\n if (!compiled) {\n const error = gl.getShaderInfoLog(shader);\n console.warn('Failed to compile shader: ' + error);\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n}\n\nexport function createTexture(\n gl: WebGLRenderingContext,\n filter: any,\n data: any,\n width: number,\n height: number,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n data,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, null);\n return texture;\n}\n\nexport function createDataTexture(\n gl: WebGLRenderingContext,\n filter: any,\n data: any,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, data);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return texture;\n}\n\nexport function bindTexture(gl, texture, unit) {\n gl.activeTexture(gl.TEXTURE0 + unit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n}\n\nexport function createBuffer(gl, data) {\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);\n return buffer;\n}\n\nexport function bindAttriBuffer(\n gl: WebGLRenderingContext,\n attrName: string,\n vertices,\n count,\n program,\n) {\n const buffer = gl.createBuffer();\n if (!buffer) {\n console.warn('failed create vertex buffer');\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer); // 将缓冲区对象绑定到目标\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 向缓冲区对象中写入数据\n\n const attr = gl.getAttribLocation(program, attrName);\n gl.vertexAttribPointer(attr, count, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(attr);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n return { buffer, attr, count };\n}\n\nexport function bindAttriIndicesBuffer(\n gl: WebGLRenderingContext,\n indices: Uint8Array,\n): WebGLBuffer {\n const buffer = gl.createBuffer();\n if (!buffer) {\n console.warn('failed create vertex buffer');\n }\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);\n return buffer;\n}\n\nexport function bindUnifrom(gl, unifromName, data, program, vec) {\n const uniform = gl.getUniformLocation(program, unifromName);\n if (uniform < 0) {\n console.warn('无法获取 uniform 变量的存储位置');\n }\n setUnifrom(gl, uniform, data, vec);\n return uniform;\n}\n\nexport function setUnifrom(gl, location, data, vec) {\n switch (vec) {\n case 'float':\n gl.uniform1f(location, data);\n break;\n case 'vec2':\n gl.uniform2fv(location, data);\n break;\n case 'vec3':\n gl.uniform3fv(location, data);\n break;\n case 'vec4':\n gl.uniform4fv(location, data);\n break;\n case 'bool':\n gl.uniform1i(location, data); // 1 - true 0 - false\n break;\n case 'sampler2d':\n break;\n case 'mat4':\n gl.uniformMatrix4fv(location, false, data);\n break;\n }\n}\n\nexport function initFramebuffer(gl) {\n const { drawingBufferWidth, drawingBufferHeight } = gl;\n\n const OFFER_SCREEN_WIDTH = drawingBufferWidth;\n const OFFER_SCREEN_HEIGHT = drawingBufferHeight;\n\n const FRAMEBUFFER = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, FRAMEBUFFER);\n const depthbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, depthbuffer);\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n gl.DEPTH_COMPONENT16,\n OFFER_SCREEN_WIDTH,\n OFFER_SCREEN_HEIGHT,\n );\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n depthbuffer,\n );\n\n const texture = gl.createTexture();\n const textureSize = 1024;\n FRAMEBUFFER.texture = texture;\n FRAMEBUFFER.width = OFFER_SCREEN_WIDTH;\n FRAMEBUFFER.height = OFFER_SCREEN_HEIGHT;\n\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n OFFER_SCREEN_WIDTH,\n OFFER_SCREEN_HEIGHT,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n return { FRAMEBUFFER, OFFER_SCREEN_WIDTH, OFFER_SCREEN_HEIGHT };\n}\n"],"file":"utils.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/utils.ts"],"names":["createProgram","gl","vshader","fshader","vertexShader","loadShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","program","attachShader","linkProgram","linked","getProgramParameter","LINK_STATUS","error","getProgramInfoLog","console","warn","deleteProgram","deleteShader","numAttributes","ACTIVE_ATTRIBUTES","i","attribute","getActiveAttrib","name","getAttribLocation","numUniforms","ACTIVE_UNIFORMS","i$1","uniform","getActiveUniform","getUniformLocation","type","source","shader","createShader","shaderSource","compileShader","compiled","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","createTexture","filter","data","width","height","texture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","texImage2D","RGBA","UNSIGNED_BYTE","createDataTexture","unit","activeTexture","TEXTURE0","createBuffer","buffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","bindAttriBuffer","attrName","vertices","count","attr","vertexAttribPointer","FLOAT","enableVertexAttribArray","bindAttriIndicesBuffer","indices","ELEMENT_ARRAY_BUFFER","bindUnifrom","unifromName","vec","setUnifrom","location","uniform1f","uniform2fv","uniform3fv","uniform4fv","uniform1i","uniformMatrix4fv","initFramebuffer","drawingBufferWidth","drawingBufferHeight","OFFER_SCREEN_WIDTH","OFFER_SCREEN_HEIGHT","FRAMEBUFFER","createFramebuffer","bindFramebuffer","depthbuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","DEPTH_COMPONENT16","framebufferRenderbuffer","DEPTH_ATTACHMENT","NEAREST","framebufferTexture2D","COLOR_ATTACHMENT0"],"mappings":"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","sourcesContent":["export function createProgram(\n gl: WebGLRenderingContext,\n vshader: string,\n fshader: string,\n) {\n // Create shader object\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader); // 创建顶点着色器对象\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader); // 创建片元着色器对象\n if (!vertexShader || !fragmentShader) {\n return null;\n }\n\n // Create a program object\n const program = gl.createProgram(); // 创建程序对象\n if (!program) {\n return null;\n }\n\n // Attach the shader objects\n gl.attachShader(program, vertexShader); // 绑定着色器对象\n gl.attachShader(program, fragmentShader);\n\n // Link the program object\n gl.linkProgram(program); // 链接着色器对象\n\n // Check the result of linking\n const linked = gl.getProgramParameter(program, gl.LINK_STATUS); // 判断着色器对象是否链接成功\n if (!linked) {\n const error = gl.getProgramInfoLog(program);\n console.warn('Failed to link program: ' + error);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n return null;\n }\n\n const numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n for (let i = 0; i < numAttributes; i++) {\n const attribute = gl.getActiveAttrib(program, i) as WebGLActiveInfo;\n // @ts-ignore\n program[attribute.name] = gl.getAttribLocation(program, attribute.name);\n }\n const numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n for (let i$1 = 0; i$1 < numUniforms; i$1++) {\n const uniform = gl.getActiveUniform(program, i$1) as WebGLActiveInfo;\n // @ts-ignore\n program[uniform.name] = gl.getUniformLocation(program, uniform.name);\n }\n\n // @ts-ignore\n program.vertexShader = vertexShader;\n // @ts-ignore\n program.fragmentShader = fragmentShader;\n\n return program;\n}\n\nexport function loadShader(\n gl: WebGLRenderingContext,\n type: number,\n source: string,\n) {\n // Create shader object\n const shader = gl.createShader(type); // 生成着色器对象\n if (shader == null) {\n console.warn('unable to create shader');\n return null;\n }\n\n // Set the shader program\n gl.shaderSource(shader, source); // 载入着色器\n\n // Compile the shader\n gl.compileShader(shader); // 编译着色器代码\n\n // Check the result of compilation\n const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); // 判断着色器对象是否生成成功\n // gl.SHADER_TYPE、gl.DELETE_STATUS、gl.COMPILE_STATUS\n if (!compiled) {\n const error = gl.getShaderInfoLog(shader);\n console.warn('Failed to compile shader: ' + error);\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n}\n\nexport function createTexture(\n gl: WebGLRenderingContext,\n filter: any,\n data: any,\n width: number,\n height: number,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n data,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, null);\n return texture;\n}\n\nexport function createDataTexture(\n gl: WebGLRenderingContext,\n filter: any,\n data: any,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, data);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return texture;\n}\n\nexport function bindTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n unit: number,\n) {\n gl.activeTexture(gl.TEXTURE0 + unit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n}\n\nexport function createBuffer(gl: WebGLRenderingContext, data: Float32Array) {\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);\n return buffer;\n}\n\nexport function bindAttriBuffer(\n gl: WebGLRenderingContext,\n attrName: string,\n vertices: number,\n count: number,\n program: WebGLProgram,\n) {\n const buffer = gl.createBuffer();\n if (!buffer) {\n console.warn('failed create vertex buffer');\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer); // 将缓冲区对象绑定到目标\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 向缓冲区对象中写入数据\n\n const attr = gl.getAttribLocation(program, attrName);\n gl.vertexAttribPointer(attr, count, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(attr);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n return { buffer, attr, count };\n}\n\nexport function bindAttriIndicesBuffer(\n gl: WebGLRenderingContext,\n indices: Uint8Array,\n): WebGLBuffer {\n const buffer = gl.createBuffer();\n if (!buffer) {\n console.warn('failed create vertex buffer');\n } else {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);\n }\n\n return buffer as WebGLBuffer;\n}\n\nexport function bindUnifrom(\n gl: WebGLRenderingContext,\n unifromName: string,\n data: number | Float32List,\n program: WebGLProgram,\n vec: string,\n) {\n const uniform = gl.getUniformLocation(program, unifromName);\n if (uniform === null || uniform < 0) {\n console.warn('无法获取 uniform 变量的存储位置');\n } else {\n setUnifrom(gl, uniform, data, vec);\n }\n return uniform;\n}\n\nexport function setUnifrom(\n gl: WebGLRenderingContext,\n location: WebGLUniformLocation,\n data: number | Float32List,\n vec: string,\n) {\n switch (vec) {\n case 'float':\n gl.uniform1f(location, data as number);\n break;\n case 'vec2':\n gl.uniform2fv(location, data as Float32List);\n break;\n case 'vec3':\n gl.uniform3fv(location, data as Float32List);\n break;\n case 'vec4':\n gl.uniform4fv(location, data as Float32List);\n break;\n case 'bool':\n gl.uniform1i(location, data as number); // 1 - true 0 - false\n break;\n case 'sampler2d':\n break;\n case 'mat4':\n gl.uniformMatrix4fv(location, false, data as Float32List);\n break;\n }\n}\n\nexport function initFramebuffer(gl: WebGLRenderingContext) {\n const { drawingBufferWidth, drawingBufferHeight } = gl;\n\n const OFFER_SCREEN_WIDTH = drawingBufferWidth;\n const OFFER_SCREEN_HEIGHT = drawingBufferHeight;\n\n const FRAMEBUFFER = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, FRAMEBUFFER);\n const depthbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, depthbuffer);\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n gl.DEPTH_COMPONENT16,\n OFFER_SCREEN_WIDTH,\n OFFER_SCREEN_HEIGHT,\n );\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n depthbuffer,\n );\n\n const texture = gl.createTexture();\n // @ts-ignore\n FRAMEBUFFER.texture = texture;\n // @ts-ignore\n FRAMEBUFFER.width = OFFER_SCREEN_WIDTH;\n // @ts-ignore\n FRAMEBUFFER.height = OFFER_SCREEN_HEIGHT;\n\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n OFFER_SCREEN_WIDTH,\n OFFER_SCREEN_HEIGHT,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n return { FRAMEBUFFER, OFFER_SCREEN_WIDTH, OFFER_SCREEN_HEIGHT };\n}\n"],"file":"utils.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["AttributeType","gl","FrequencyController","BaseModel","RasterImageTriangulation","Wind","defaultRampColors","WindModel","frequency","run","drawWind","drawColorMode","Error","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","getWindSize","imageWidth","imageHeight","options","wind","setWind","image","layerService","updateLayerRenderList","renderLayers","colorModel","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController, isMini } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\ninterface IWindLayerStyleOptions {\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n fadeOpacity?: number;\n speedFactor?: number;\n dropRate?: number;\n dropRateBump?: number;\n opacity?: number;\n numParticles?: number;\n rampColors?: {\n [key: number]: string;\n };\n sizeScale?: number;\n}\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels() {\n const { createTexture2D } = this.rendererService;\n\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.colorModel = this.layer.buildLayerModel({\n moduleName: 'WindLayer',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n });\n\n return [this.colorModel];\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["AttributeType","gl","FrequencyController","BaseModel","RasterImageTriangulation","Wind","defaultRampColors","WindModel","frequency","run","drawWind","drawColorMode","Error","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","getWindSize","imageWidth","imageHeight","options","wind","setWind","image","layerService","updateLayerRenderList","renderLayers","colorModel","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels() {\n const { createTexture2D } = this.rendererService;\n\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.colorModel = this.layer.buildLayerModel({\n moduleName: 'WindLayer',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n });\n\n return [this.colorModel];\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["glUtils","drawFrag","drawVert","fullScreenFrag","fullScreenVert","updateFrag","updateVert","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","createProgram","fullScreenProgram","updateProgram","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":"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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(gl, drawVert, drawFrag);\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n );\n this.updateProgram = glUtils.createProgram(gl, updateVert, updateFrag);\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, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0, 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, 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":["glUtils","drawFrag","drawVert","fullScreenFrag","fullScreenVert","updateFrag","updateVert","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","createProgram","fullScreenProgram","updateProgram","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":"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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\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"}
@@ -52,9 +52,6 @@ var BillBoardModel = function (_BaseModel) {
52
52
 
53
53
  _this = _super.call.apply(_super, [this].concat(args));
54
54
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "texture", void 0);
55
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "terrainImage", void 0);
56
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "terrainImageLoaded", false);
57
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mapTexture", void 0);
58
55
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "radian", 0);
59
56
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryTriangulation", function () {
60
57
  var _ref = _this.layer.getLayerConfig(),
@@ -102,7 +99,6 @@ var BillBoardModel = function (_BaseModel) {
102
99
  value: function clearModels() {
103
100
  var _this$texture;
104
101
 
105
- this.terrainImage = null;
106
102
  (_this$texture = this.texture) === null || _this$texture === void 0 ? void 0 : _this$texture.destroy();
107
103
  }
108
104
  }, {
@@ -113,10 +109,8 @@ var BillBoardModel = function (_BaseModel) {
113
109
  mask = _ref3$mask === void 0 ? false : _ref3$mask,
114
110
  _ref3$maskInside = _ref3.maskInside,
115
111
  maskInside = _ref3$maskInside === void 0 ? true : _ref3$maskInside,
116
- mapTexture = _ref3.mapTexture,
117
112
  drawCanvas = _ref3.drawCanvas;
118
113
 
119
- this.mapTexture = mapTexture;
120
114
  var createTexture2D = this.rendererService.createTexture2D;
121
115
  this.texture = createTexture2D({
122
116
  height: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Geometry/models/billboard.ts"],"names":["BillBoardModel","layer","getLayerConfig","center","size","indices","vertices","opacity","width","height","raisingHeight","rotateFlag","mapService","version","radian","Math","PI","getRotation","u_raisingHeight","Number","u_RotateMatrix","Float32Array","cos","sin","u_opacity","u_texture","texture","u_size","terrainImage","destroy","mask","maskInside","mapTexture","drawCanvas","createTexture2D","rendererService","updateTexture","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","stencil","initModels","canvasWidth","canvasHeight","canvas","document","createElement","ctx","getContext","data","wrapS","CLAMP_TO_EDGE","wrapT","layerService","updateLayerRenderList","renderLayers","properties","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx","extrude","extrudeIndex","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttrubuteAndElements,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getMask, isMini } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/billboard_frag.glsl';\nimport planeVert from '../shaders/billboard_vert.glsl';\n\nexport default class BillBoardModel extends BaseModel {\n protected texture: ITexture2D;\n protected terrainImage: HTMLImageElement;\n protected terrainImageLoaded: boolean = false;\n protected mapTexture: string | undefined;\n private radian: number = 0; // 旋转的弧度\n\n public planeGeometryTriangulation = () => {\n const {\n center = [120, 30],\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n return {\n size: 4,\n indices: [0, 1, 2, 2, 3, 0],\n vertices: [\n ...center,\n ...[1, 1],\n ...center,\n ...[0, 1],\n ...center,\n ...[0, 0],\n ...center,\n ...[1, 0],\n ],\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n width = 1,\n height = 1,\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian =\n (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n return {\n u_raisingHeight: Number(raisingHeight),\n u_RotateMatrix: new Float32Array([\n // z\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_opacity: opacity || 1,\n u_texture: this.texture,\n u_size: [width, height],\n };\n }\n\n public clearModels(): void {\n // @ts-ignore\n this.terrainImage = null;\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n mapTexture,\n drawCanvas,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n this.mapTexture = mapTexture;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n if (drawCanvas) {\n this.updateTexture(drawCanvas);\n }\n\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_billboard',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n // primitive: gl.LINES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public updateTexture(drawCanvas: (canvas: HTMLCanvasElement) => void): void {\n const { createTexture2D } = this.rendererService;\n\n const {\n canvasWidth = 1,\n canvasHeight = 1,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n drawCanvas(canvas);\n this.texture = createTexture2D({\n data: canvas,\n width: canvas.width,\n height: canvas.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[2], vertex[3]];\n },\n },\n });\n }\n}\n"],"file":"billboard.js"}
1
+ {"version":3,"sources":["../../../src/Geometry/models/billboard.ts"],"names":["BillBoardModel","layer","getLayerConfig","center","size","indices","vertices","opacity","width","height","raisingHeight","rotateFlag","mapService","version","radian","Math","PI","getRotation","u_raisingHeight","Number","u_RotateMatrix","Float32Array","cos","sin","u_opacity","u_texture","texture","u_size","destroy","mask","maskInside","drawCanvas","createTexture2D","rendererService","updateTexture","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","stencil","initModels","canvasWidth","canvasHeight","canvas","document","createElement","ctx","getContext","data","wrapS","CLAMP_TO_EDGE","wrapT","layerService","updateLayerRenderList","renderLayers","properties","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx","extrude","extrudeIndex","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttrubuteAndElements,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getMask, isMini } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/billboard_frag.glsl';\nimport planeVert from '../shaders/billboard_vert.glsl';\n\nexport default class BillBoardModel extends BaseModel {\n protected texture: ITexture2D;\n private radian: number = 0; // 旋转的弧度\n\n public planeGeometryTriangulation = () => {\n const {\n center = [120, 30],\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n return {\n size: 4,\n indices: [0, 1, 2, 2, 3, 0],\n vertices: [\n ...center,\n ...[1, 1],\n ...center,\n ...[0, 1],\n ...center,\n ...[0, 0],\n ...center,\n ...[1, 0],\n ],\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n width = 1,\n height = 1,\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian =\n (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n return {\n u_raisingHeight: Number(raisingHeight),\n u_RotateMatrix: new Float32Array([\n // z\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_opacity: opacity || 1,\n u_texture: this.texture,\n u_size: [width, height],\n };\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n drawCanvas,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n if (drawCanvas) {\n this.updateTexture(drawCanvas);\n }\n\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_billboard',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public updateTexture(drawCanvas: (canvas: HTMLCanvasElement) => void): void {\n const { createTexture2D } = this.rendererService;\n\n const {\n canvasWidth = 1,\n canvasHeight = 1,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n drawCanvas(canvas);\n this.texture = createTexture2D({\n data: canvas,\n width: canvas.width,\n height: canvas.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[2], vertex[3]];\n },\n },\n });\n }\n}\n"],"file":"billboard.js"}
@@ -35,8 +35,8 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
35
35
 
36
36
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
37
 
38
- var spriteFrag = "\nuniform sampler2D u_texture;\nuniform float u_mapFlag;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"picking\"\nvoid main() {\n\n if(v_d < 0.0) {\n discard;\n }\n\n if(u_mapFlag > 0.0) {\n gl_FragColor = texture2D(u_texture, gl_PointCoord);\n gl_FragColor.a *= u_opacity;\n } else {\n gl_FragColor = vec4(v_Color, u_opacity);\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
39
- var spriteVert = "precision highp float;\n\nattribute vec3 a_Position;\nattribute vec3 a_Color;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform float u_Scale;\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\nvoid main() {\n v_Color = a_Color;\n \n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n v_d = a_Position.z;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, a_Position.z, 1.0));\n }\n\n gl_PointSize = pow((u_Zoom - 1.0), 2.0) * u_Scale;\n\n setPickingColor(a_PickingColor);\n}\n";
38
+ var spriteFrag = "\nuniform sampler2D u_texture;\nuniform float u_mapFlag;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying float v_d;\n\nvoid main() {\n\n if(v_d < 0.0) {\n discard;\n }\n\n if(u_mapFlag > 0.0) {\n gl_FragColor = texture2D(u_texture, gl_PointCoord);\n gl_FragColor.a *= u_opacity;\n } else {\n gl_FragColor = vec4(v_Color, u_opacity);\n }\n}\n";
39
+ var spriteVert = "precision highp float;\n\nattribute vec3 a_Position;\nattribute vec3 a_Color;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform float u_Scale;\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"projection\"\nvoid main() {\n v_Color = a_Color;\n \n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n v_d = a_Position.z;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, a_Position.z, 1.0));\n }\n\n gl_PointSize = pow((u_Zoom - 1.0), 2.0) * u_Scale;\n}\n";
40
40
  var SPRITE_ANIMATE_DIR;
41
41
 
42
42
  (function (SPRITE_ANIMATE_DIR) {