@antv/l7-layers 2.19.10 → 2.20.0

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 (189) hide show
  1. package/es/canvas/models/canvas.js +2 -2
  2. package/es/core/BaseLayer.d.ts +1 -1
  3. package/es/core/BaseLayer.js +22 -15
  4. package/es/core/BaseModel.d.ts +3 -1
  5. package/es/core/BaseModel.js +28 -4
  6. package/es/core/CommonStyleAttribute.d.ts +15 -0
  7. package/es/core/CommonStyleAttribute.js +21 -0
  8. package/es/core/TextureService.js +2 -2
  9. package/es/core/interface.d.ts +13 -9
  10. package/es/core/line_trangluation.d.ts +19 -0
  11. package/es/core/line_trangluation.js +91 -0
  12. package/es/core/shape/arrow.d.ts +25 -0
  13. package/es/core/shape/arrow.js +160 -0
  14. package/es/core/triangulation.d.ts +2 -8
  15. package/es/core/triangulation.js +6 -34
  16. package/es/earth/index.js +1 -1
  17. package/es/geometry/index.js +1 -1
  18. package/es/geometry/models/billboard.js +1 -1
  19. package/es/geometry/models/plane.js +2 -2
  20. package/es/geometry/models/sprite.js +2 -2
  21. package/es/heatmap/index.js +1 -1
  22. package/es/heatmap/models/heatmap.js +4 -4
  23. package/es/image/models/image.js +1 -1
  24. package/es/line/index.js +3 -2
  25. package/es/line/models/arc.js +6 -4
  26. package/es/line/models/arc_3d.js +4 -2
  27. package/es/line/models/earthArc_3d.js +4 -2
  28. package/es/line/models/flow.js +4 -5
  29. package/es/line/models/great_circle.js +1 -1
  30. package/es/line/models/line.js +3 -15
  31. package/es/line/models/linearline.js +1 -1
  32. package/es/line/models/wall.js +1 -1
  33. package/es/line/shaders/dash/arc_dash_vert.glsl +2 -5
  34. package/es/line/shaders/flow/flow_line_vert.glsl +36 -6
  35. package/es/line/shaders/linear/arc_linear_vert.glsl +2 -3
  36. package/es/plugins/DataMappingPlugin.js +3 -20
  37. package/es/plugins/PixelPickingPlugin.d.ts +4 -1
  38. package/es/plugins/PixelPickingPlugin.js +91 -22
  39. package/es/plugins/RegisterStyleAttributePlugin.d.ts +0 -1
  40. package/es/plugins/RegisterStyleAttributePlugin.js +4 -22
  41. package/es/plugins/ShaderUniformPlugin.d.ts +2 -0
  42. package/es/plugins/ShaderUniformPlugin.js +74 -6
  43. package/es/point/index.js +1 -1
  44. package/es/point/models/fill.js +31 -7
  45. package/es/point/models/fillmage.js +1 -1
  46. package/es/point/models/image.js +1 -1
  47. package/es/point/models/normal.js +30 -12
  48. package/es/point/models/text.js +1 -1
  49. package/es/point/shaders/fill_frag.glsl +20 -14
  50. package/es/point/shaders/fill_vert.glsl +19 -18
  51. package/es/point/shaders/normal_frag.glsl +4 -3
  52. package/es/point/shaders/normal_vert.glsl +12 -11
  53. package/es/polygon/index.js +1 -1
  54. package/es/polygon/models/extrude.js +1 -1
  55. package/es/polygon/models/extrusion.js +1 -1
  56. package/es/polygon/models/ocean.js +3 -3
  57. package/es/polygon/models/water.js +1 -1
  58. package/es/raster/models/raster.js +2 -2
  59. package/es/raster/models/rasterRgb.js +1 -1
  60. package/es/raster/models/rasterTerrainRgb.js +1 -1
  61. package/es/tile/core/BaseLayer.js +4 -4
  62. package/es/tile/interaction/getRasterData.js +4 -4
  63. package/es/tile/service/TileLayerService.js +4 -4
  64. package/es/tile/service/TilePickService.js +3 -3
  65. package/es/tile/tile/Tile.d.ts +3 -1
  66. package/es/tile/tile/Tile.js +2 -2
  67. package/es/wind/models/wind.js +5 -6
  68. package/lib/canvas/index.js +2 -3
  69. package/lib/canvas/models/canvas.js +4 -5
  70. package/lib/canvas/models/index.js +1 -2
  71. package/lib/citybuliding/building.js +2 -3
  72. package/lib/citybuliding/models/build.js +2 -3
  73. package/lib/core/BaseLayer.js +23 -17
  74. package/lib/core/BaseModel.js +30 -7
  75. package/lib/core/CommonStyleAttribute.js +22 -0
  76. package/lib/core/LayerPickService.js +2 -3
  77. package/lib/core/TextureService.js +4 -5
  78. package/lib/core/constant.js +3 -5
  79. package/lib/core/interface.js +6 -11
  80. package/lib/core/line_trangluation.js +99 -0
  81. package/lib/core/schema.js +2 -3
  82. package/lib/core/shape/Path.js +3 -6
  83. package/lib/core/shape/arrow.js +174 -0
  84. package/lib/core/triangulation.js +8 -37
  85. package/lib/earth/index.js +3 -4
  86. package/lib/earth/models/atmosphere.js +2 -3
  87. package/lib/earth/models/base.js +2 -3
  88. package/lib/earth/models/bloomsphere.js +2 -3
  89. package/lib/earth/utils.js +3 -6
  90. package/lib/geometry/index.js +3 -4
  91. package/lib/geometry/models/billboard.js +3 -4
  92. package/lib/geometry/models/index.js +1 -2
  93. package/lib/geometry/models/plane.js +4 -5
  94. package/lib/geometry/models/sprite.js +4 -5
  95. package/lib/heatmap/index.js +3 -4
  96. package/lib/heatmap/models/grid.js +2 -3
  97. package/lib/heatmap/models/grid3d.js +2 -3
  98. package/lib/heatmap/models/heatmap.js +6 -7
  99. package/lib/heatmap/models/hexagon.js +2 -3
  100. package/lib/heatmap/models/index.js +1 -2
  101. package/lib/image/index.js +2 -3
  102. package/lib/image/models/image.js +3 -4
  103. package/lib/image/models/index.js +1 -2
  104. package/lib/line/index.js +5 -5
  105. package/lib/line/models/arc.js +8 -7
  106. package/lib/line/models/arc_3d.js +6 -5
  107. package/lib/line/models/earthArc_3d.js +6 -5
  108. package/lib/line/models/flow.js +6 -8
  109. package/lib/line/models/great_circle.js +3 -4
  110. package/lib/line/models/index.js +1 -2
  111. package/lib/line/models/line.js +5 -18
  112. package/lib/line/models/linearline.js +3 -4
  113. package/lib/line/models/simpleLine.js +2 -3
  114. package/lib/line/models/wall.js +3 -4
  115. package/lib/line/shaders/dash/arc_dash_vert.glsl +2 -5
  116. package/lib/line/shaders/flow/flow_line_vert.glsl +36 -6
  117. package/lib/line/shaders/linear/arc_linear_vert.glsl +2 -3
  118. package/lib/mask/index.js +2 -3
  119. package/lib/mask/models/fill.js +2 -3
  120. package/lib/mask/models/index.js +1 -2
  121. package/lib/plugins/DataMappingPlugin.js +5 -23
  122. package/lib/plugins/DataSourcePlugin.js +2 -3
  123. package/lib/plugins/FeatureScalePlugin.js +4 -5
  124. package/lib/plugins/LayerAnimateStylePlugin.js +2 -3
  125. package/lib/plugins/LayerMaskPlugin.js +2 -3
  126. package/lib/plugins/LayerModelPlugin.js +2 -3
  127. package/lib/plugins/LayerStylePlugin.js +2 -3
  128. package/lib/plugins/LightingPlugin.js +2 -3
  129. package/lib/plugins/MultiPassRendererPlugin.js +2 -3
  130. package/lib/plugins/PixelPickingPlugin.js +93 -25
  131. package/lib/plugins/RegisterStyleAttributePlugin.js +6 -25
  132. package/lib/plugins/ShaderUniformPlugin.js +75 -8
  133. package/lib/plugins/UpdateModelPlugin.js +2 -3
  134. package/lib/plugins/UpdateStyleAttributePlugin.js +2 -3
  135. package/lib/point/index.js +3 -4
  136. package/lib/point/models/billboard_point.js +2 -3
  137. package/lib/point/models/earthExtrude.js +2 -3
  138. package/lib/point/models/earthFill.js +2 -3
  139. package/lib/point/models/extrude.js +2 -3
  140. package/lib/point/models/fill.js +33 -10
  141. package/lib/point/models/fillmage.js +3 -4
  142. package/lib/point/models/image.js +3 -4
  143. package/lib/point/models/index.js +1 -2
  144. package/lib/point/models/normal.js +32 -15
  145. package/lib/point/models/radar.js +2 -3
  146. package/lib/point/models/text.js +3 -4
  147. package/lib/point/shaders/fill_frag.glsl +20 -14
  148. package/lib/point/shaders/fill_vert.glsl +19 -18
  149. package/lib/point/shaders/normal_frag.glsl +4 -3
  150. package/lib/point/shaders/normal_vert.glsl +12 -11
  151. package/lib/polygon/index.js +3 -4
  152. package/lib/polygon/models/extrude.js +3 -4
  153. package/lib/polygon/models/extrusion.js +3 -4
  154. package/lib/polygon/models/fill.js +2 -3
  155. package/lib/polygon/models/index.js +1 -2
  156. package/lib/polygon/models/ocean.js +5 -6
  157. package/lib/polygon/models/water.js +3 -4
  158. package/lib/raster/index.js +2 -3
  159. package/lib/raster/models/index.js +1 -2
  160. package/lib/raster/models/raster.js +4 -5
  161. package/lib/raster/models/rasterRgb.js +3 -4
  162. package/lib/raster/models/rasterTerrainRgb.js +3 -4
  163. package/lib/tile/core/BaseLayer.js +6 -7
  164. package/lib/tile/core/TileDebugLayer.js +2 -3
  165. package/lib/tile/interaction/getRasterData.js +4 -4
  166. package/lib/tile/service/TileLayerService.js +6 -7
  167. package/lib/tile/service/TilePickService.js +5 -6
  168. package/lib/tile/service/TileSourceService.js +4 -5
  169. package/lib/tile/tile/DebugTile.js +2 -3
  170. package/lib/tile/tile/ImageTile.js +2 -3
  171. package/lib/tile/tile/MaskTile.js +2 -3
  172. package/lib/tile/tile/RasterRGBTile.js +2 -3
  173. package/lib/tile/tile/RasterTerrainRGBTile.js +2 -3
  174. package/lib/tile/tile/RasterTile.js +2 -3
  175. package/lib/tile/tile/Tile.js +4 -5
  176. package/lib/tile/tile/VectorTile.js +2 -3
  177. package/lib/tile/utils/constants.js +2 -3
  178. package/lib/tile/utils/utils.js +1 -2
  179. package/lib/utils/blend.js +2 -3
  180. package/lib/utils/collision-index.js +2 -3
  181. package/lib/utils/extrude_polyline.js +2 -3
  182. package/lib/utils/grid-index.js +1 -2
  183. package/lib/utils/simpleLine.js +2 -3
  184. package/lib/wind/index.js +2 -3
  185. package/lib/wind/models/index.js +1 -2
  186. package/lib/wind/models/wind.js +7 -9
  187. package/lib/wind/models/windRender.js +4 -5
  188. package/lib/wind/models/windShader.js +6 -12
  189. package/package.json +7 -7
@@ -13,9 +13,6 @@ uniform vec4 u_dash_array: [10.0, 5., 0, 0];
13
13
  uniform float u_lineDir: 1.0;
14
14
  varying vec4 v_dash_array;
15
15
  varying float v_distance_ratio;
16
-
17
- uniform float u_thetaOffset: 0.314;
18
-
19
16
  #pragma include "projection"
20
17
  #pragma include "project"
21
18
  #pragma include "picking"
@@ -92,8 +89,8 @@ void main() {
92
89
 
93
90
  v_distance_ratio = segmentIndex / segmentNumber;
94
91
 
95
- vec4 curr = project_position(vec4(interpolate(source, target, segmentRatio, u_thetaOffset), 0.0, 1.0));
96
- vec4 next = project_position(vec4(interpolate(source, target, nextSegmentRatio, u_thetaOffset), 0.0, 1.0));
92
+ vec4 curr = project_position(vec4(interpolate(source, target, segmentRatio, thetaOffset), 0.0, 1.0));
93
+ vec4 next = project_position(vec4(interpolate(source, target, nextSegmentRatio, thetaOffset), 0.0, 1.0));
97
94
 
98
95
 
99
96
  vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
@@ -8,29 +8,59 @@ uniform mat4 u_ModelMatrix;
8
8
 
9
9
 
10
10
  #pragma include "projection"
11
+ #pragma include "project"
11
12
  #pragma include "picking"
12
13
  varying vec4 v_color;
13
14
  uniform float u_gap_width: 1.0;
14
15
  uniform float u_stroke_width: 1.0;
15
16
  uniform float u_stroke_opacity: 1.0;
16
17
 
18
+ vec2 project_pixel_offset(vec2 offsets) {
19
+
20
+ vec2 data = project_pixel(offsets);
21
+ if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
22
+ // P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
23
+ return data;
24
+ }
25
+
26
+ return vec2(data.x, -data.y);;
27
+ }
28
+
29
+ vec2 line_dir(vec2 target, vec2 source) {
30
+
31
+ if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
32
+ // P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
33
+ return normalize(target - source);
34
+ }
35
+ return normalize(ProjectFlat(target) - ProjectFlat(source));
36
+ }
37
+
38
+ float flag_gap() {
39
+ if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
40
+ // P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
41
+ return 1.;
42
+ }
43
+ return -1.;
44
+
45
+ }
46
+
17
47
 
18
48
  void main() {
19
49
 
20
50
  // 透明度计算
21
51
  vec2 source = a_Instance.rg; // 起始点
22
52
  vec2 target = a_Instance.ba; // 终点
23
- vec2 flowlineDir = normalize(target - source);
24
- vec2 perpendicularDir = vec2(-flowlineDir.y, flowlineDir.x);
53
+ vec2 flowlineDir = line_dir(target,source);
54
+ vec2 perpendicularDir = vec2(flowlineDir.y, flowlineDir.x); // mapbox || 高德
25
55
 
26
56
 
27
57
  vec2 position = mix(source, target, a_Position.x);
28
58
 
29
59
  float lengthCommon = length(project_position(vec4(target,0,1)) - project_position(vec4(source,0,1))); //
30
- vec2 offsetDistances = a_Size.x * project_pixel(a_Position.yz);
60
+ vec2 offsetDistances = a_Size.x * project_pixel_offset(vec2(a_Position.y, a_Position.z)); // Mapbox || 高德
31
61
  vec2 limitedOffsetDistances = clamp(
32
62
  offsetDistances,
33
- project_pixel(-lengthCommon*.8), project_pixel(lengthCommon*.8)
63
+ project_pixel(-lengthCommon*.2), project_pixel(lengthCommon*.2)
34
64
  );
35
65
 
36
66
 
@@ -42,9 +72,9 @@ void main() {
42
72
  a_Position.x
43
73
  );
44
74
 
45
- vec2 normalsCommon = u_stroke_width * project_pixel(a_Normal.xy);
75
+ vec2 normalsCommon = u_stroke_width * project_pixel_offset(vec2(a_Normal.x, a_Normal.y)); // mapbox || 高德
46
76
 
47
- float gapCommon = project_pixel(u_gap_width);
77
+ float gapCommon = flag_gap() * project_pixel(u_gap_width);
48
78
  vec3 offsetCommon = vec3(
49
79
  flowlineDir * (limitedOffsetDistances[1] + normalsCommon.y + endpointOffset * 1.05) -
50
80
  perpendicularDir * (limitedOffsetDistances[0] + gapCommon + normalsCommon.x),
@@ -11,7 +11,6 @@ varying float v_segmentIndex;
11
11
 
12
12
  uniform float u_lineDir: 1.0;
13
13
 
14
- uniform float u_thetaOffset: 0.314;
15
14
  uniform vec4 u_sourceColor;
16
15
  uniform vec4 u_targetColor;
17
16
 
@@ -80,8 +79,8 @@ void main() {
80
79
  float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
81
80
  float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
82
81
  float d_distance_ratio;
83
- vec4 curr = project_position(vec4(interpolate(source, target, segmentRatio, u_thetaOffset), 0.0, 1.0));
84
- vec4 next = project_position(vec4(interpolate(source, target, nextSegmentRatio, u_thetaOffset), 0.0, 1.0));
82
+ vec4 curr = project_position(vec4(interpolate(source, target, segmentRatio, thetaOffset), 0.0, 1.0));
83
+ vec4 next = project_position(vec4(interpolate(source, target, nextSegmentRatio, thetaOffset), 0.0, 1.0));
85
84
  // v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
86
85
  //unProjCustomCoord
87
86
 
@@ -140,11 +140,6 @@ var DataMappingPlugin = (_dec = injectable(), _dec2 = inject(TYPES.IMapService),
140
140
  key: "mapping",
141
141
  value: function mapping(layer, attributes, data, predata) {
142
142
  var _this3 = this;
143
- var _ref5 = layer.getLayerConfig(),
144
- _ref5$arrow = _ref5.arrow,
145
- arrow = _ref5$arrow === void 0 ? {
146
- enable: false
147
- } : _ref5$arrow;
148
143
  var usedAttributes = attributes.filter(function (attribute) {
149
144
  return attribute.scale !== undefined;
150
145
  }).filter(function (attribute) {
@@ -172,18 +167,6 @@ var DataMappingPlugin = (_dec = injectable(), _dec2 = inject(TYPES.IMapService),
172
167
  encodeRecord.shape = _this3.fontService.getIconFontKey(encodeRecord[attribute.name]);
173
168
  }
174
169
  });
175
- if (arrow.enable && encodeRecord.shape === 'line') {
176
- // 只有在线图层且支持配置箭头的时候进行插入顶点的处理
177
- var coords = encodeRecord.coordinates;
178
- // @ts-ignore
179
- if (layer.arrowInsertCount < layer.encodeDataLength) {
180
- // Tip: arrowInsert 的判断用于确保每一条线数据 arrow 的属性点只会被植入一次
181
- var arrowPoint = _this3.getArrowPoints(coords[0], coords[1]);
182
- encodeRecord.coordinates.splice(1, 0, arrowPoint, arrowPoint);
183
- // @ts-ignore
184
- layer.arrowInsertCount++;
185
- }
186
- }
187
170
  return encodeRecord;
188
171
  });
189
172
  attributes.forEach(function (attribute) {
@@ -271,11 +254,11 @@ var DataMappingPlugin = (_dec = injectable(), _dec2 = inject(TYPES.IMapService),
271
254
  if (!attribute.scale) {
272
255
  return [];
273
256
  }
274
- var scalers = (attribute === null || attribute === void 0 ? void 0 : (_attribute$scale = attribute.scale) === null || _attribute$scale === void 0 ? void 0 : _attribute$scale.scalers) || [];
257
+ var scalers = (attribute === null || attribute === void 0 || (_attribute$scale = attribute.scale) === null || _attribute$scale === void 0 ? void 0 : _attribute$scale.scalers) || [];
275
258
  var params = [];
276
- scalers.forEach(function (_ref6) {
259
+ scalers.forEach(function (_ref5) {
277
260
  var _attribute$scale2;
278
- var field = _ref6.field;
261
+ var field = _ref5.field;
279
262
  if (record.hasOwnProperty(field) || ((_attribute$scale2 = attribute.scale) === null || _attribute$scale2 === void 0 ? void 0 : _attribute$scale2.type) === 'variable') {
280
263
  // TODO:多字段,常量
281
264
  params.push(record[field]);
@@ -1,7 +1,10 @@
1
1
  import { ILayer, ILayerPlugin, IRendererService, IStyleAttributeService } from '@antv/l7-core';
2
2
  import 'reflect-metadata';
3
3
  export default class PixelPickingPlugin implements ILayerPlugin {
4
- apply(layer: ILayer, { styleAttributeService, }: {
4
+ private PickOption;
5
+ private pickOption2Array;
6
+ private updatePickOption;
7
+ apply(layer: ILayer, { rendererService, styleAttributeService, }: {
5
8
  rendererService: IRendererService;
6
9
  styleAttributeService: IStyleAttributeService;
7
10
  }): void;
@@ -1,10 +1,12 @@
1
1
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
2
  import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
4
  var _dec, _class;
4
5
  import { AttributeType, gl } from '@antv/l7-core';
5
6
  import { decodePickingColor, encodePickingColor, rgb2arr } from '@antv/l7-utils';
6
7
  import { injectable } from 'inversify';
7
8
  import 'reflect-metadata';
9
+ import { ShaderLocation } from "../core/CommonStyleAttribute";
8
10
  var PickingStage = {
9
11
  NONE: 0.0,
10
12
  ENCODE: 1.0,
@@ -13,11 +15,66 @@ var PickingStage = {
13
15
  var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/function () {
14
16
  function PixelPickingPlugin() {
15
17
  _classCallCheck(this, PixelPickingPlugin);
18
+ _defineProperty(this, "PickOption", {
19
+ u_HighlightColor: [1, 0, 0, 1],
20
+ u_SelectColor: [1, 0, 0, 1],
21
+ u_PickingColor: [0, 0, 0],
22
+ u_PickingStage: 0,
23
+ u_CurrentSelectedId: [0, 0, 0],
24
+ u_PickingThreshold: 10,
25
+ u_PickingBuffer: 0,
26
+ // TODO: 更新机制
27
+ u_shaderPick: 0,
28
+ u_EnableSelect: 0,
29
+ u_activeMix: 0
30
+ });
16
31
  }
17
32
  _createClass(PixelPickingPlugin, [{
33
+ key: "pickOption2Array",
34
+ value: function pickOption2Array() {
35
+ return Object.values(this.PickOption).flat();
36
+ }
37
+ }, {
38
+ key: "updatePickOption",
39
+ value: function updatePickOption(option, rendererService) {
40
+ var _this = this;
41
+ Object.keys(option).forEach(function (key) {
42
+ _this.PickOption[key] = option[key];
43
+ });
44
+ rendererService.uniformBuffers[1].subData({
45
+ offset: 0,
46
+ data: new Uint8Array(new Float32Array(this.pickOption2Array()))
47
+ });
48
+ }
49
+ }, {
18
50
  key: "apply",
19
51
  value: function apply(layer, _ref) {
20
- var styleAttributeService = _ref.styleAttributeService;
52
+ var _this2 = this;
53
+ var rendererService = _ref.rendererService,
54
+ styleAttributeService = _ref.styleAttributeService;
55
+ if (!rendererService.uniformBuffers[1]) {
56
+ // Create a Uniform Buffer Object(UBO).
57
+ var uniformBuffer = rendererService.createBuffer({
58
+ // vec4 u_HighlightColor;
59
+ // vec4 u_SelectColor;
60
+ // vec3 u_PickingColor;
61
+ // float u_PickingStage;
62
+ // vec3 u_CurrentSelectedId;
63
+ // float u_PickingThreshold;
64
+ // float u_PickingBuffer;
65
+ // float u_shaderPick;
66
+ // float u_EnableSelect;
67
+ // float u_activeMix;
68
+ data: new Float32Array(this.pickOption2Array().length),
69
+ isUBO: true
70
+ });
71
+ rendererService.uniformBuffers[1] = uniformBuffer;
72
+ this.updatePickOption({}, rendererService);
73
+ }
74
+ // u_PickingBuffer: layer.getLayerConfig().pickingBuffer || 0,
75
+ // // Tip: 当前地图是否在拖动
76
+ // u_shaderPick: Number(layer.getShaderPickStat()),
77
+
21
78
  // TODO: 由于 Shader 目前无法根据是否开启拾取进行内容修改,因此即使不开启也需要生成 a_PickingColor
22
79
  layer.hooks.init.tapPromise('PixelPickingPlugin', function () {
23
80
  var _layer$getLayerConfig = layer.getLayerConfig(),
@@ -27,6 +84,7 @@ var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/functi
27
84
  type: AttributeType.Attribute,
28
85
  descriptor: {
29
86
  name: 'a_PickingColor',
87
+ shaderLocation: ShaderLocation.PICKING_COLOR,
30
88
  buffer: {
31
89
  data: [],
32
90
  type: gl.FLOAT
@@ -46,6 +104,9 @@ var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/functi
46
104
  var _layer$getLayerConfig2 = layer.getLayerConfig(),
47
105
  enablePicking = _layer$getLayerConfig2.enablePicking;
48
106
  if (enablePicking && layer.isVisible()) {
107
+ _this2.updatePickOption({
108
+ u_PickingStage: PickingStage.ENCODE
109
+ }, rendererService);
49
110
  layer.models.forEach(function (model) {
50
111
  return model.addUniforms({
51
112
  u_PickingStage: PickingStage.ENCODE
@@ -58,6 +119,9 @@ var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/functi
58
119
  enablePicking = _layer$getLayerConfig3.enablePicking;
59
120
  // 区分选中高亮 和滑过高亮
60
121
  if (enablePicking && layer.isVisible()) {
122
+ _this2.updatePickOption({
123
+ u_PickingStage: PickingStage.HIGHLIGHT
124
+ }, rendererService);
61
125
  layer.models.forEach(function (model) {
62
126
  return model.addUniforms({
63
127
  u_PickingStage: PickingStage.HIGHLIGHT
@@ -74,15 +138,17 @@ var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/functi
74
138
  layer.updateLayerConfig({
75
139
  pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor))
76
140
  });
141
+ var option = {
142
+ u_PickingStage: PickingStage.HIGHLIGHT,
143
+ u_PickingColor: pickedColor,
144
+ u_HighlightColor: highlightColorInArray.map(function (c) {
145
+ return c * 255;
146
+ }),
147
+ u_activeMix: activeMix
148
+ };
149
+ _this2.updatePickOption(option, rendererService);
77
150
  layer.models.forEach(function (model) {
78
- return model.addUniforms({
79
- u_PickingStage: PickingStage.HIGHLIGHT,
80
- u_PickingColor: pickedColor,
81
- u_HighlightColor: highlightColorInArray.map(function (c) {
82
- return c * 255;
83
- }),
84
- u_activeMix: activeMix
85
- });
151
+ return model.addUniforms(option);
86
152
  });
87
153
  });
88
154
  layer.hooks.beforeSelect.tap('PixelPickingPlugin', function (pickedColor) {
@@ -94,20 +160,23 @@ var PixelPickingPlugin = (_dec = injectable(), _dec(_class = /*#__PURE__*/functi
94
160
  layer.updateLayerConfig({
95
161
  pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor))
96
162
  });
163
+ var option = {
164
+ u_PickingStage: PickingStage.HIGHLIGHT,
165
+ u_PickingColor: pickedColor,
166
+ u_HighlightColor: highlightColorInArray.map(function (c) {
167
+ return c * 255;
168
+ }),
169
+ u_activeMix: selectMix,
170
+ u_CurrentSelectedId: pickedColor,
171
+ u_SelectColor: highlightColorInArray.map(function (c) {
172
+ return c * 255;
173
+ }),
174
+ u_EnableSelect: 1
175
+ };
176
+ console.log(option);
177
+ _this2.updatePickOption(option, rendererService);
97
178
  layer.models.forEach(function (model) {
98
- return model.addUniforms({
99
- u_PickingStage: PickingStage.HIGHLIGHT,
100
- u_PickingColor: pickedColor,
101
- u_HighlightColor: highlightColorInArray.map(function (c) {
102
- return c * 255;
103
- }),
104
- u_activeMix: selectMix,
105
- u_CurrentSelectedId: pickedColor,
106
- u_SelectColor: highlightColorInArray.map(function (c) {
107
- return c * 255;
108
- }),
109
- u_EnableSelect: 1
110
- });
179
+ return model.addUniforms(option);
111
180
  });
112
181
  });
113
182
  }
@@ -9,7 +9,6 @@ export default class RegisterStyleAttributePlugin implements ILayerPlugin {
9
9
  }): void;
10
10
  private registerBuiltinAttributes;
11
11
  private registerPositionAttribute;
12
- private registerFilterAttribute;
13
12
  private registerColorAttribute;
14
13
  private registerVertexIdAttribute;
15
14
  }
@@ -4,6 +4,7 @@ var _dec, _class;
4
4
  import { AttributeType, gl } from '@antv/l7-core';
5
5
  import { injectable } from 'inversify';
6
6
  import 'reflect-metadata';
7
+ import { ShaderLocation } from "../core/CommonStyleAttribute";
7
8
  import { isTileGroup } from "../tile/utils/utils";
8
9
 
9
10
  /**
@@ -48,6 +49,7 @@ var RegisterStyleAttributePlugin = (_dec = injectable(), _dec(_class = /*#__PURE
48
49
  type: AttributeType.Attribute,
49
50
  descriptor: {
50
51
  name: 'a_Position',
52
+ shaderLocation: ShaderLocation.POSITION,
51
53
  buffer: {
52
54
  data: [],
53
55
  type: gl.FLOAT
@@ -59,28 +61,6 @@ var RegisterStyleAttributePlugin = (_dec = injectable(), _dec(_class = /*#__PURE
59
61
  }
60
62
  });
61
63
  }
62
- }, {
63
- key: "registerFilterAttribute",
64
- value: function registerFilterAttribute(styleAttributeService) {
65
- styleAttributeService.registerStyleAttribute({
66
- name: 'filter',
67
- type: AttributeType.Attribute,
68
- descriptor: {
69
- name: 'filter',
70
- buffer: {
71
- // give the WebGL driver a hint that this buffer may change
72
- usage: gl.DYNAMIC_DRAW,
73
- data: [],
74
- type: gl.FLOAT
75
- },
76
- size: 1,
77
- update: function update(feature) {
78
- var filter = feature.filter;
79
- return filter ? [1] : [0];
80
- }
81
- }
82
- });
83
- }
84
64
  }, {
85
65
  key: "registerColorAttribute",
86
66
  value: function registerColorAttribute(styleAttributeService) {
@@ -89,6 +69,7 @@ var RegisterStyleAttributePlugin = (_dec = injectable(), _dec(_class = /*#__PURE
89
69
  type: AttributeType.Attribute,
90
70
  descriptor: {
91
71
  name: 'a_Color',
72
+ shaderLocation: ShaderLocation.COLOR,
92
73
  buffer: {
93
74
  // give the WebGL driver a hint that this buffer may change
94
75
  usage: gl.DYNAMIC_DRAW,
@@ -112,6 +93,7 @@ var RegisterStyleAttributePlugin = (_dec = injectable(), _dec(_class = /*#__PURE
112
93
  type: AttributeType.Attribute,
113
94
  descriptor: {
114
95
  name: 'a_vertexId',
96
+ shaderLocation: ShaderLocation.VERTEX_ID,
115
97
  buffer: {
116
98
  // give the WebGL driver a hint that this buffer may change
117
99
  usage: gl.DYNAMIC_DRAW,
@@ -12,10 +12,12 @@ export default class ShaderUniformPlugin implements ILayerPlugin {
12
12
  private readonly coordinateSystemService;
13
13
  private readonly rendererService;
14
14
  private readonly mapService;
15
+ private readonly layerService;
15
16
  apply(layer: ILayer): void;
16
17
  /**
17
18
  * 对于每个 layer 都有不同的几何中心点,因此在绘制每个 layer 的时候都需要重新设置
18
19
  * @param layer
19
20
  */
20
21
  private setLayerCenter;
22
+ private generateUBO;
21
23
  }
@@ -1,10 +1,12 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
1
3
  import _initializerDefineProperty from "@babel/runtime/helpers/esm/initializerDefineProperty";
2
4
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
5
  import _createClass from "@babel/runtime/helpers/esm/createClass";
4
6
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
7
  import _applyDecoratedDescriptor from "@babel/runtime/helpers/esm/applyDecoratedDescriptor";
6
8
  import _initializerWarningHelper from "@babel/runtime/helpers/esm/initializerWarningHelper";
7
- var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4;
9
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;
8
10
  import { CameraUniform, CoordinateUniform, TYPES } from '@antv/l7-core';
9
11
  import { inject, injectable } from 'inversify';
10
12
  import 'reflect-metadata';
@@ -16,13 +18,14 @@ import 'reflect-metadata';
16
18
  * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/doml91
17
19
  * 3. 当前 Layer 本身的样式属性
18
20
  */
19
- var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraService), _dec3 = inject(TYPES.ICoordinateSystemService), _dec4 = inject(TYPES.IRendererService), _dec5 = inject(TYPES.IMapService), _dec(_class = (_class2 = /*#__PURE__*/function () {
21
+ var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraService), _dec3 = inject(TYPES.ICoordinateSystemService), _dec4 = inject(TYPES.IRendererService), _dec5 = inject(TYPES.IMapService), _dec6 = inject(TYPES.ILayerService), _dec(_class = (_class2 = /*#__PURE__*/function () {
20
22
  function ShaderUniformPlugin() {
21
23
  _classCallCheck(this, ShaderUniformPlugin);
22
24
  _initializerDefineProperty(this, "cameraService", _descriptor, this);
23
25
  _initializerDefineProperty(this, "coordinateSystemService", _descriptor2, this);
24
26
  _initializerDefineProperty(this, "rendererService", _descriptor3, this);
25
27
  _initializerDefineProperty(this, "mapService", _descriptor4, this);
28
+ _initializerDefineProperty(this, "layerService", _descriptor5, this);
26
29
  }
27
30
  _createClass(ShaderUniformPlugin, [{
28
31
  key: "apply",
@@ -31,6 +34,15 @@ var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraServ
31
34
  var version = this.mapService.version;
32
35
  var mvp = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; // default matrix (for gaode2.x)
33
36
  var sceneCenterMercator = [0, 0];
37
+ var uniformBuffer;
38
+ if (!this.rendererService.uniformBuffers[0]) {
39
+ // Create a Uniform Buffer Object(UBO).
40
+ uniformBuffer = this.rendererService.createBuffer({
41
+ data: new Float32Array(16 * 5 + 4 * 6 + 4),
42
+ isUBO: true
43
+ });
44
+ this.rendererService.uniformBuffers[0] = uniformBuffer;
45
+ }
34
46
  layer.hooks.beforeRender.tap('ShaderUniformPlugin', function () {
35
47
  // @ts-ignore
36
48
  var offset = layer.getLayerConfig().tileOrigin;
@@ -47,12 +59,25 @@ var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraServ
47
59
  var _this$rendererService = _this.rendererService.getViewportSize(),
48
60
  width = _this$rendererService.width,
49
61
  height = _this$rendererService.height;
62
+ var _this$generateUBO = _this.generateUBO(mvp, sceneCenterMercator, width, height),
63
+ data = _this$generateUBO.data,
64
+ uniforms = _this$generateUBO.uniforms;
65
+ if (_this.layerService.alreadyInRendering && uniformBuffer) {
66
+ // Update only once since all models can share one UBO.
67
+ uniformBuffer.subData({
68
+ offset: 0,
69
+ data: data
70
+ });
71
+ }
72
+ // For WebGL1. regl
50
73
  layer.models.forEach(function (model) {
51
- var _model$addUniforms;
52
- model.addUniforms((_model$addUniforms = {}, _defineProperty(_model$addUniforms, CameraUniform.ProjectionMatrix, _this.cameraService.getProjectionMatrix()), _defineProperty(_model$addUniforms, CameraUniform.ViewMatrix, _this.cameraService.getViewMatrix()), _defineProperty(_model$addUniforms, CameraUniform.ViewProjectionMatrix, _this.cameraService.getViewProjectionMatrix()), _defineProperty(_model$addUniforms, CameraUniform.Zoom, _this.cameraService.getZoom()), _defineProperty(_model$addUniforms, CameraUniform.ZoomScale, _this.cameraService.getZoomScale()), _defineProperty(_model$addUniforms, CameraUniform.FocalDistance, _this.cameraService.getFocalDistance()), _defineProperty(_model$addUniforms, CameraUniform.CameraPosition, _this.cameraService.getCameraPosition()), _defineProperty(_model$addUniforms, CoordinateUniform.CoordinateSystem, _this.coordinateSystemService.getCoordinateSystem()), _defineProperty(_model$addUniforms, CoordinateUniform.ViewportCenter, _this.coordinateSystemService.getViewportCenter()), _defineProperty(_model$addUniforms, CoordinateUniform.ViewportCenterProjection, _this.coordinateSystemService.getViewportCenterProjection()), _defineProperty(_model$addUniforms, CoordinateUniform.PixelsPerDegree, _this.coordinateSystemService.getPixelsPerDegree()), _defineProperty(_model$addUniforms, CoordinateUniform.PixelsPerDegree2, _this.coordinateSystemService.getPixelsPerDegree2()), _defineProperty(_model$addUniforms, CoordinateUniform.PixelsPerMeter, _this.coordinateSystemService.getPixelsPerMeter()), _defineProperty(_model$addUniforms, CoordinateUniform.Mvp, mvp), _defineProperty(_model$addUniforms, "u_sceneCenterMercator", sceneCenterMercator), _defineProperty(_model$addUniforms, "u_ViewportSize", [width, height]), _defineProperty(_model$addUniforms, "u_ModelMatrix", _this.cameraService.getModelMatrix()), _defineProperty(_model$addUniforms, "u_DevicePixelRatio", window.devicePixelRatio), _defineProperty(_model$addUniforms, "u_PickingBuffer", layer.getLayerConfig().pickingBuffer || 0), _defineProperty(_model$addUniforms, "u_shaderPick", Number(layer.getShaderPickStat())), _model$addUniforms));
74
+ model.addUniforms(_objectSpread(_objectSpread({}, uniforms), {}, {
75
+ // TODO: move these 2 uniforms to PixelPickingPlugin
76
+ u_PickingBuffer: layer.getLayerConfig().pickingBuffer || 0,
77
+ // Tip: 当前地图是否在拖动
78
+ u_shaderPick: Number(layer.getShaderPickStat())
79
+ }));
53
80
  });
54
-
55
- // TODO:脏检查,决定是否需要渲染
56
81
  });
57
82
  }
58
83
 
@@ -70,6 +95,44 @@ var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraServ
70
95
  this.mapService.setCoordCenter(layer.coordCenter);
71
96
  }
72
97
  }
98
+ }, {
99
+ key: "generateUBO",
100
+ value: function generateUBO(u_Mvp, sceneCenterMercator, width, height) {
101
+ var _uniforms;
102
+ var u_ProjectionMatrix = this.cameraService.getProjectionMatrix();
103
+ var u_ViewMatrix = this.cameraService.getViewMatrix();
104
+ var u_ViewProjectionMatrix = this.cameraService.getViewProjectionMatrix();
105
+ var u_ModelMatrix = this.cameraService.getModelMatrix();
106
+ var u_ViewportCenterProjection = this.coordinateSystemService.getViewportCenterProjection();
107
+ var u_PixelsPerDegree = this.coordinateSystemService.getPixelsPerDegree();
108
+ var u_Zoom = this.cameraService.getZoom();
109
+ var u_PixelsPerDegree2 = this.coordinateSystemService.getPixelsPerDegree2();
110
+ var u_ZoomScale = this.cameraService.getZoomScale();
111
+ var u_PixelsPerMeter = this.coordinateSystemService.getPixelsPerMeter();
112
+ var u_CoordinateSystem = this.coordinateSystemService.getCoordinateSystem();
113
+ var u_CameraPosition = this.cameraService.getCameraPosition();
114
+ var u_DevicePixelRatio = window.devicePixelRatio;
115
+ var u_ViewportCenter = this.coordinateSystemService.getViewportCenter();
116
+ var u_ViewportSize = [width, height];
117
+ var u_FocalDistance = this.cameraService.getFocalDistance();
118
+ var data = [].concat(_toConsumableArray(u_ViewMatrix), _toConsumableArray(u_ProjectionMatrix), _toConsumableArray(u_ViewProjectionMatrix), _toConsumableArray(u_ModelMatrix), _toConsumableArray(u_Mvp), _toConsumableArray(u_ViewportCenterProjection), _toConsumableArray(u_PixelsPerDegree), [
119
+ // 4
120
+ u_Zoom], _toConsumableArray(u_PixelsPerDegree2), [
121
+ // 4
122
+ u_ZoomScale], _toConsumableArray(u_PixelsPerMeter), [
123
+ // 4
124
+ u_CoordinateSystem], _toConsumableArray(u_CameraPosition), [
125
+ // 4
126
+ u_DevicePixelRatio], _toConsumableArray(u_ViewportCenter), u_ViewportSize, _toConsumableArray(sceneCenterMercator), [
127
+ // 2
128
+ u_FocalDistance,
129
+ // 1
130
+ 0]);
131
+ return {
132
+ data: data,
133
+ uniforms: (_uniforms = {}, _defineProperty(_uniforms, CameraUniform.ProjectionMatrix, u_ProjectionMatrix), _defineProperty(_uniforms, CameraUniform.ViewMatrix, u_ViewMatrix), _defineProperty(_uniforms, CameraUniform.ViewProjectionMatrix, u_ViewProjectionMatrix), _defineProperty(_uniforms, CameraUniform.Zoom, u_Zoom), _defineProperty(_uniforms, CameraUniform.ZoomScale, u_ZoomScale), _defineProperty(_uniforms, CameraUniform.FocalDistance, u_FocalDistance), _defineProperty(_uniforms, CameraUniform.CameraPosition, u_CameraPosition), _defineProperty(_uniforms, CoordinateUniform.CoordinateSystem, u_CoordinateSystem), _defineProperty(_uniforms, CoordinateUniform.ViewportCenter, u_ViewportCenter), _defineProperty(_uniforms, CoordinateUniform.ViewportCenterProjection, u_ViewportCenterProjection), _defineProperty(_uniforms, CoordinateUniform.PixelsPerDegree, u_PixelsPerDegree), _defineProperty(_uniforms, CoordinateUniform.PixelsPerDegree2, u_PixelsPerDegree2), _defineProperty(_uniforms, CoordinateUniform.PixelsPerMeter, u_PixelsPerMeter), _defineProperty(_uniforms, CoordinateUniform.Mvp, u_Mvp), _defineProperty(_uniforms, "u_sceneCenterMercator", sceneCenterMercator), _defineProperty(_uniforms, "u_ViewportSize", u_ViewportSize), _defineProperty(_uniforms, "u_ModelMatrix", u_ModelMatrix), _defineProperty(_uniforms, "u_DevicePixelRatio", u_DevicePixelRatio), _uniforms)
134
+ };
135
+ }
73
136
  }]);
74
137
  return ShaderUniformPlugin;
75
138
  }(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "cameraService", [_dec2], {
@@ -92,5 +155,10 @@ var ShaderUniformPlugin = (_dec = injectable(), _dec2 = inject(TYPES.ICameraServ
92
155
  enumerable: true,
93
156
  writable: true,
94
157
  initializer: null
158
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "layerService", [_dec6], {
159
+ configurable: true,
160
+ enumerable: true,
161
+ writable: true,
162
+ initializer: null
95
163
  })), _class2)) || _class);
96
164
  export { ShaderUniformPlugin as default };
package/es/point/index.js CHANGED
@@ -25,7 +25,7 @@ var PointLayer = /*#__PURE__*/function (_BaseLayer) {
25
25
  }
26
26
  _this = _super.call.apply(_super, [this].concat(args));
27
27
  _defineProperty(_assertThisInitialized(_this), "type", 'PointLayer');
28
- _defineProperty(_assertThisInitialized(_this), "enableShaderEncodeStyles", ['opacity', 'offsets', 'stroke', 'rotation']);
28
+ _defineProperty(_assertThisInitialized(_this), "enableShaderEncodeStyles", ['stroke', 'offsets', 'opacity', 'rotation']);
29
29
  _defineProperty(_assertThisInitialized(_this), "enableDataEncodeStyles", ['textOffset', 'textAnchor']);
30
30
  _defineProperty(_assertThisInitialized(_this), "defaultSourceConfig", {
31
31
  data: [],