@openglobus/og 0.11.2 → 0.11.7

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 (273) hide show
  1. package/package.json +13 -13
  2. package/src/og/Clock.js +10 -10
  3. package/src/og/Events.js +8 -6
  4. package/src/og/Extent.js +82 -41
  5. package/src/og/Globe.js +25 -13
  6. package/src/og/ImageCanvas.js +22 -16
  7. package/src/og/LonLat.js +16 -13
  8. package/src/og/Popup.js +21 -14
  9. package/src/og/QueueArray.js +6 -2
  10. package/src/og/Rectangle.js +11 -6
  11. package/src/og/Stack.js +5 -2
  12. package/src/og/ajax.js +21 -33
  13. package/src/og/astro/astro.js +5 -5
  14. package/src/og/astro/earth.js +22 -16
  15. package/src/og/astro/jd.js +23 -18
  16. package/src/og/astro/orbit.js +13 -11
  17. package/src/og/astro/rotation.js +17 -8
  18. package/src/og/bv/Box.js +7 -3
  19. package/src/og/bv/Sphere.js +14 -11
  20. package/src/og/camera/Camera.js +51 -54
  21. package/src/og/camera/Frustum.js +29 -18
  22. package/src/og/camera/PlanetCamera.js +32 -23
  23. package/src/og/control/CompassButton.js +5 -1
  24. package/src/og/control/Control.js +12 -10
  25. package/src/og/control/DebugInfo.js +4 -1
  26. package/src/og/control/EarthCoordinates.js +54 -33
  27. package/src/og/control/KeyboardNavigation.js +10 -10
  28. package/src/og/control/LayerSwitcher.js +22 -21
  29. package/src/og/control/Lighting.js +34 -3
  30. package/src/og/control/MouseNavigation.js +1 -1
  31. package/src/og/control/ScaleControl.js +1 -1
  32. package/src/og/control/SegmentBoundVisualization.js +6 -7
  33. package/src/og/control/ShowFps.js +13 -8
  34. package/src/og/control/SimpleNavigation.js +6 -8
  35. package/src/og/control/Sun.js +25 -15
  36. package/src/og/control/ToggleWireframe.js +4 -4
  37. package/src/og/control/TouchNavigation.js +44 -33
  38. package/src/og/control/ZoomControl.js +41 -25
  39. package/src/og/ellipsoid/Ellipsoid.js +162 -66
  40. package/src/og/ellipsoid/wgs84.js +4 -4
  41. package/src/og/entity/BaseBillboard.js +100 -56
  42. package/src/og/entity/Billboard.js +14 -10
  43. package/src/og/entity/BillboardHandler.js +317 -60
  44. package/src/og/entity/Entity.js +100 -68
  45. package/src/og/entity/EntityCollection.js +70 -47
  46. package/src/og/entity/GeoObject.js +228 -0
  47. package/src/og/entity/GeoObjectHandler.js +910 -0
  48. package/src/og/entity/Geometry.js +27 -24
  49. package/src/og/entity/GeometryHandler.js +596 -124
  50. package/src/og/entity/Label.js +80 -49
  51. package/src/og/entity/LabelHandler.js +45 -244
  52. package/src/og/entity/LabelWorker.js +218 -0
  53. package/src/og/entity/Object3d.js +504 -0
  54. package/src/og/entity/PointCloud.js +80 -32
  55. package/src/og/entity/PointCloudHandler.js +8 -8
  56. package/src/og/entity/Polyline.js +16 -16
  57. package/src/og/entity/Ray.js +60 -27
  58. package/src/og/entity/Strip.js +77 -48
  59. package/src/og/entity/StripHandler.js +26 -26
  60. package/src/og/entity/index.js +8 -16
  61. package/src/og/layer/BaseGeoImage.js +54 -23
  62. package/src/og/layer/CanvasTiles.js +24 -24
  63. package/src/og/layer/GeoImage.js +9 -9
  64. package/src/og/layer/GeoVideo.js +3 -3
  65. package/src/og/layer/KML.js +63 -37
  66. package/src/og/layer/Layer.js +44 -21
  67. package/src/og/layer/Material.js +23 -20
  68. package/src/og/layer/Vector.js +114 -68
  69. package/src/og/layer/WMS.js +34 -17
  70. package/src/og/layer/XYZ.js +48 -46
  71. package/src/og/light/LightSource.js +46 -39
  72. package/src/og/math/Mat3.js +34 -22
  73. package/src/og/math/Mat4.js +603 -459
  74. package/src/og/math/Plane.js +21 -20
  75. package/src/og/math/Quat.js +182 -139
  76. package/src/og/math/Ray.js +38 -33
  77. package/src/og/math/Vec2.js +85 -75
  78. package/src/og/math/Vec3.js +142 -112
  79. package/src/og/math/Vec4.js +27 -31
  80. package/src/og/math/coder.js +10 -10
  81. package/src/og/math.js +12 -12
  82. package/src/og/proj/EPSG3857.js +4 -4
  83. package/src/og/proj/EPSG4326.js +4 -4
  84. package/src/og/proj/Proj.js +4 -6
  85. package/src/og/quadTree/Node.js +8 -8
  86. package/src/og/renderer/Renderer.js +59 -52
  87. package/src/og/renderer/RendererEvents.js +50 -27
  88. package/src/og/scene/BaseNode.js +7 -8
  89. package/src/og/scene/Planet.js +102 -103
  90. package/src/og/scene/RenderNode.js +28 -21
  91. package/src/og/segment/Segment.js +26 -21
  92. package/src/og/segment/SegmentLonLat.js +5 -5
  93. package/src/og/shaders/drawnode.js +135 -142
  94. package/src/og/shaders/geoObject.js +211 -0
  95. package/src/og/shaders/pointCloud.js +41 -41
  96. package/src/og/shaders/shape.js +12 -18
  97. package/src/og/shaders/skybox.js +36 -36
  98. package/src/og/shaders/toneMapping.js +1 -0
  99. package/src/og/shapes/BaseShape.js +126 -54
  100. package/src/og/shapes/Icosphere.js +29 -14
  101. package/src/og/shapes/Sphere.js +12 -15
  102. package/src/og/terrain/BilTerrain.js +1 -0
  103. package/src/og/terrain/EmptyTerrain.js +2 -2
  104. package/src/og/terrain/GlobusTerrain.js +9 -9
  105. package/src/og/utils/FontAtlas.js +6 -2
  106. package/src/og/utils/TextureAtlas.js +22 -24
  107. package/src/og/utils/VectorTileCreator.js +1 -3
  108. package/src/og/utils/shared.js +16 -16
  109. package/src/og/webgl/Framebuffer.js +88 -40
  110. package/src/og/webgl/Handler.js +243 -169
  111. package/src/og/webgl/Multisample.js +47 -19
  112. package/src/og/webgl/Program.js +79 -34
  113. package/src/og/webgl/ProgramController.js +17 -13
  114. package/src/og/webgl/callbacks.js +8 -8
  115. package/src/og/inherits.js +0 -8
  116. package/src/og/utils/polylabel.js +0 -176
  117. package/types/Clock.d.ts +0 -90
  118. package/types/Deferred.d.ts +0 -6
  119. package/types/Events.d.ts +0 -73
  120. package/types/Extent.d.ts +0 -166
  121. package/types/Globe.d.ts +0 -75
  122. package/types/ImageCanvas.d.ts +0 -121
  123. package/types/Lock.d.ts +0 -12
  124. package/types/LonLat.d.ts +0 -108
  125. package/types/Popup.d.ts +0 -38
  126. package/types/QueueArray.d.ts +0 -15
  127. package/types/Rectangle.d.ts +0 -74
  128. package/types/Stack.d.ts +0 -15
  129. package/types/ajax.d.ts +0 -24
  130. package/types/arial.d.ts +0 -48
  131. package/types/astro/astro.d.ts +0 -38
  132. package/types/astro/earth.d.ts +0 -6
  133. package/types/astro/jd.d.ts +0 -254
  134. package/types/bv/Box.d.ts +0 -25
  135. package/types/bv/Sphere.d.ts +0 -38
  136. package/types/bv/index.d.ts +0 -3
  137. package/types/camera/Camera.d.ts +0 -303
  138. package/types/camera/Frustum.d.ts +0 -129
  139. package/types/camera/PlanetCamera.d.ts +0 -223
  140. package/types/camera/index.d.ts +0 -3
  141. package/types/cons.d.ts +0 -40
  142. package/types/control/CompassButton.d.ts +0 -18
  143. package/types/control/Control.d.ts +0 -101
  144. package/types/control/DebugInfo.d.ts +0 -16
  145. package/types/control/EarthCoordinates.d.ts +0 -47
  146. package/types/control/EarthNavigation.d.ts +0 -42
  147. package/types/control/GeoImageDragControl.d.ts +0 -6
  148. package/types/control/KeyboardNavigation.d.ts +0 -22
  149. package/types/control/LayerSwitcher.d.ts +0 -23
  150. package/types/control/Lighting.d.ts +0 -16
  151. package/types/control/MouseNavigation.d.ts +0 -51
  152. package/types/control/ScaleControl.d.ts +0 -22
  153. package/types/control/ShowFps.d.ts +0 -12
  154. package/types/control/SimpleNavigation.d.ts +0 -28
  155. package/types/control/Sun.d.ts +0 -52
  156. package/types/control/ToggleWireframe.d.ts +0 -12
  157. package/types/control/TouchNavigation.d.ts +0 -50
  158. package/types/control/ZoomControl.d.ts +0 -28
  159. package/types/control/index.d.ts +0 -17
  160. package/types/ellipsoid/Ellipsoid.d.ts +0 -142
  161. package/types/ellipsoid/index.d.ts +0 -3
  162. package/types/ellipsoid/wgs84.d.ts +0 -5
  163. package/types/entity/BaseBillboard.d.ts +0 -208
  164. package/types/entity/Billboard.d.ts +0 -94
  165. package/types/entity/BillboardHandler.d.ts +0 -74
  166. package/types/entity/Entity.d.ts +0 -331
  167. package/types/entity/EntityCollection.d.ts +0 -303
  168. package/types/entity/Geometry.d.ts +0 -73
  169. package/types/entity/GeometryHandler.d.ts +0 -76
  170. package/types/entity/Label.d.ts +0 -194
  171. package/types/entity/LabelHandler.d.ts +0 -24
  172. package/types/entity/PointCloud.d.ts +0 -174
  173. package/types/entity/PointCloudHandler.d.ts +0 -38
  174. package/types/entity/Polyline.d.ts +0 -304
  175. package/types/entity/PolylineHandler.d.ts +0 -18
  176. package/types/entity/Ray.d.ts +0 -123
  177. package/types/entity/RayHandler.d.ts +0 -67
  178. package/types/entity/ShapeHandler.d.ts +0 -22
  179. package/types/entity/Strip.d.ts +0 -118
  180. package/types/entity/StripHandler.d.ts +0 -38
  181. package/types/entity/index.d.ts +0 -8
  182. package/types/index.core.d.ts +0 -65
  183. package/types/index.d.ts +0 -45
  184. package/types/index.webgl.d.ts +0 -7
  185. package/types/inherits.d.ts +0 -4
  186. package/types/input/KeyboardHandler.d.ts +0 -10
  187. package/types/input/MouseHandler.d.ts +0 -5
  188. package/types/input/TouchHandler.d.ts +0 -5
  189. package/types/input/input.d.ts +0 -34
  190. package/types/layer/BaseGeoImage.d.ts +0 -107
  191. package/types/layer/CanvasTiles.d.ts +0 -75
  192. package/types/layer/GeoImage.d.ts +0 -65
  193. package/types/layer/GeoTexture2d.d.ts +0 -8
  194. package/types/layer/GeoVideo.d.ts +0 -80
  195. package/types/layer/KML.d.ts +0 -58
  196. package/types/layer/Layer.d.ts +0 -321
  197. package/types/layer/Material.d.ts +0 -48
  198. package/types/layer/Vector.d.ts +0 -228
  199. package/types/layer/WMS.d.ts +0 -66
  200. package/types/layer/XYZ.d.ts +0 -130
  201. package/types/layer/index.d.ts +0 -10
  202. package/types/light/LightSource.d.ts +0 -177
  203. package/types/math/Line2.d.ts +0 -11
  204. package/types/math/Line3.d.ts +0 -10
  205. package/types/math/Mat3.d.ts +0 -63
  206. package/types/math/Mat4.d.ts +0 -173
  207. package/types/math/Plane.d.ts +0 -17
  208. package/types/math/Quat.d.ts +0 -376
  209. package/types/math/Ray.d.ts +0 -81
  210. package/types/math/Vec2.d.ts +0 -308
  211. package/types/math/Vec3.d.ts +0 -459
  212. package/types/math/Vec4.d.ts +0 -161
  213. package/types/math/coder.d.ts +0 -42
  214. package/types/math/index.d.ts +0 -11
  215. package/types/math.d.ts +0 -261
  216. package/types/mercator.d.ts +0 -92
  217. package/types/proj/EPSG3857.d.ts +0 -5
  218. package/types/proj/EPSG4326.d.ts +0 -5
  219. package/types/proj/Proj.d.ts +0 -42
  220. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  221. package/types/quadTree/Node.d.ts +0 -61
  222. package/types/quadTree/quadTree.d.ts +0 -40
  223. package/types/renderer/Renderer.d.ts +0 -296
  224. package/types/renderer/RendererEvents.d.ts +0 -230
  225. package/types/res/images.d.ts +0 -3
  226. package/types/scene/Axes.d.ts +0 -11
  227. package/types/scene/BaseNode.d.ts +0 -60
  228. package/types/scene/Planet.d.ts +0 -574
  229. package/types/scene/RenderNode.d.ts +0 -143
  230. package/types/scene/SkyBox.d.ts +0 -10
  231. package/types/scene/index.d.ts +0 -4
  232. package/types/segment/Segment.d.ts +0 -271
  233. package/types/segment/SegmentLonLat.d.ts +0 -62
  234. package/types/segment/segmentHelper.d.ts +0 -13
  235. package/types/shaders/billboard.d.ts +0 -3
  236. package/types/shaders/depth.d.ts +0 -2
  237. package/types/shaders/drawnode.d.ts +0 -7
  238. package/types/shaders/label.d.ts +0 -4
  239. package/types/shaders/pointCloud.d.ts +0 -2
  240. package/types/shaders/polyline.d.ts +0 -3
  241. package/types/shaders/ray.d.ts +0 -2
  242. package/types/shaders/screenFrame.d.ts +0 -2
  243. package/types/shaders/shape.d.ts +0 -4
  244. package/types/shaders/skybox.d.ts +0 -2
  245. package/types/shaders/toneMapping.d.ts +0 -2
  246. package/types/shapes/BaseShape.d.ts +0 -247
  247. package/types/shapes/Sphere.d.ts +0 -41
  248. package/types/terrain/BilTerrain.d.ts +0 -8
  249. package/types/terrain/EmptyTerrain.d.ts +0 -72
  250. package/types/terrain/Geoid.d.ts +0 -26
  251. package/types/terrain/GlobusTerrain.d.ts +0 -153
  252. package/types/terrain/MapboxTerrain.d.ts +0 -8
  253. package/types/terrain/index.d.ts +0 -5
  254. package/types/utils/FontAtlas.d.ts +0 -14
  255. package/types/utils/GeoImageCreator.d.ts +0 -30
  256. package/types/utils/ImagesCacheManager.d.ts +0 -10
  257. package/types/utils/Loader.d.ts +0 -25
  258. package/types/utils/NormalMapCreator.d.ts +0 -39
  259. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  260. package/types/utils/TerrainWorker.d.ts +0 -9
  261. package/types/utils/TextureAtlas.d.ts +0 -111
  262. package/types/utils/VectorTileCreator.d.ts +0 -16
  263. package/types/utils/colorTable.d.ts +0 -143
  264. package/types/utils/earcut.d.ts +0 -6
  265. package/types/utils/shared.d.ts +0 -230
  266. package/types/webgl/Framebuffer.d.ts +0 -135
  267. package/types/webgl/Handler.d.ts +0 -372
  268. package/types/webgl/Multisample.d.ts +0 -89
  269. package/types/webgl/Program.d.ts +0 -155
  270. package/types/webgl/ProgramController.d.ts +0 -84
  271. package/types/webgl/callbacks.d.ts +0 -1
  272. package/types/webgl/index.d.ts +0 -6
  273. package/types/webgl/types.d.ts +0 -2
@@ -2,11 +2,12 @@
2
2
  * @module og/entity/Label
3
3
  */
4
4
 
5
- 'use strict';
5
+ "use strict";
6
6
 
7
- import * as utils from '../utils/shared.js';
8
- import { BaseBillboard } from './BaseBillboard.js';
9
- import { Vec4 } from '../math/Vec4.js';
7
+ import * as utils from "../utils/shared.js";
8
+ import { BaseBillboard } from "./BaseBillboard.js";
9
+ import { Vec4 } from "../math/Vec4.js";
10
+ import { LOCK_FREE, LOCK_UPDATE } from "./LabelWorker.js";
10
11
 
11
12
  const ALIGN = {
12
13
  RIGHT: 0,
@@ -28,13 +29,13 @@ const STR2ALIGN = {
28
29
  /**
29
30
  * Billboard text label.
30
31
  * @class
31
- * @extends {og.BaseBillboard}
32
+ * @extends {BaseBillboard}
32
33
  * @param {Object} [options] - Label options:
33
- * @param {og.Vec3|Array.<number>} [options.position] - Billboard spatial position.
34
+ * @param {Vec3|Array.<number>} [options.position] - Billboard spatial position.
34
35
  * @param {number} [options.rotation] - Screen angle rotaion.
35
- * @param {og.Vec4|string|Array.<number>} [options.color] - Billboard color.
36
- * @param {og.Vec3|Array.<number>} [options.alignedAxis] - Billboard aligned vector.
37
- * @param {og.Vec3|Array.<number>} [options.offset] - Billboard center screen offset.
36
+ * @param {Vec4|string|Array.<number>} [options.color] - Billboard color.
37
+ * @param {Vec3|Array.<number>} [options.alignedAxis] - Billboard aligned vector.
38
+ * @param {Vec3|Array.<number>} [options.offset] - Billboard center screen offset.
38
39
  * @param {boolean} [options.visibility] - Visibility.
39
40
  * @param {string} [options.text] - Text string.
40
41
  * @param {string} [options.face] - HTML5 font face.
@@ -42,8 +43,8 @@ const STR2ALIGN = {
42
43
  * @param {string} [options.style] - HTML5 font style. Example 'normal', 'italic'.
43
44
  * @param {string} [options.weight] - HTML5 font weight. Example 'normal', 'bold'.
44
45
  * @param {number} [options.outline] - Text outline size. 0 - no outline, 1 - maximum outline. Default 0.58.
45
- * @param {og.Vec4|string|Array.<number>} [options.outlineColor] - Outline color.
46
- * @param {og.Label.ALIGN} [options.align] - Text horizontal align: "left", "right" and "center".
46
+ * @param {Vec4|string|Array.<number>} [options.outlineColor] - Outline color.
47
+ * @param {Label.ALIGN} [options.align] - Text horizontal align: "left", "right" and "center".
47
48
  */
48
49
  class Label extends BaseBillboard {
49
50
  constructor(options) {
@@ -82,16 +83,21 @@ class Label extends BaseBillboard {
82
83
  /**
83
84
  * Label outline color.
84
85
  * @private
85
- * @type {og.Vec4}
86
+ * @type {Vec4}
86
87
  */
87
- this._outlineColor = utils.createColorRGBA(options.outlineColor, new Vec4(0.0, 0.0, 0.0, 1.0));
88
+ this._outlineColor = utils.createColorRGBA(
89
+ options.outlineColor,
90
+ new Vec4(0.0, 0.0, 0.0, 1.0)
91
+ );
88
92
 
89
93
  /**
90
94
  * Text horizontal align: "left", "right" and "center".
91
95
  * @private
92
- * @type {og.Label.ALIGN}
96
+ * @type {Label.ALIGN}
93
97
  */
94
- this._align = options.align ? STR2ALIGN[options.align.trim().toLowerCase()] || ALIGN.RIGHT : ALIGN.RIGHT;
98
+ this._align = options.align
99
+ ? STR2ALIGN[options.align.trim().toLowerCase()] || ALIGN.RIGHT
100
+ : ALIGN.RIGHT;
95
101
 
96
102
  /**
97
103
  * Label font atlas index.
@@ -103,7 +109,7 @@ class Label extends BaseBillboard {
103
109
  /**
104
110
  * Font atlas pointer.
105
111
  * @private
106
- * @type {og.utils.FontAtlas}
112
+ * @type {utils.FontAtlas}
107
113
  */
108
114
  this._fontAtlas = null;
109
115
  }
@@ -111,12 +117,14 @@ class Label extends BaseBillboard {
111
117
  /**
112
118
  * Sets lablel text.
113
119
  * @public
114
- * @param {string} text - Text string.
120
+ * @param {string} text - Text string.
115
121
  * It can't be bigger than maximum labelHandler _maxLetters value.
116
122
  */
117
123
  setText(text) {
118
124
  this._text = text.toString();
119
- this._handler && this._handler.setText(this._handlerIndex, text, this._fontIndex, this._align);
125
+ if (this._isReady) {
126
+ this._handler.setText(this._handlerIndex, text, this._fontIndex, this._align);
127
+ }
120
128
  }
121
129
 
122
130
  /**
@@ -131,17 +139,21 @@ class Label extends BaseBillboard {
131
139
  /**
132
140
  * Sets label text align. Could be center, left or right. Left is default.
133
141
  * @public
134
- * @param {og.Label.ALIGN} align - Text align.
142
+ * @param {Label.ALIGN} align - Text align.
135
143
  */
136
144
  setAlign(align) {
137
145
  this._align = STR2ALIGN[align.trim().toLowerCase()];
138
- this._handler && this._handler.setText(this._handlerIndex, this._text, this._fontIndex, this._align);
146
+ if (this._isReady) {
147
+ this._handler.setText(this._handlerIndex, this._text, this._fontIndex, this._align);
148
+ } else if (this._lockId !== LOCK_FREE) {
149
+ this._lockId = LOCK_UPDATE;
150
+ }
139
151
  }
140
152
 
141
153
  /**
142
154
  * Gets label text current alignment.
143
155
  * @public
144
- * @returns {og.Label.ALIGN}
156
+ * @returns {Label.ALIGN}
145
157
  */
146
158
  getAlign() {
147
159
  return this._align;
@@ -172,8 +184,14 @@ class Label extends BaseBillboard {
172
184
  * @param {number} size - Label size in pixels.
173
185
  */
174
186
  setSize(size) {
175
- this._size = size;
176
- this._handler && this._handler.setSizeArr(this._handlerIndex, size);
187
+ if (size !== this._size) {
188
+ this._size = size;
189
+ if (this._isReady) {
190
+ this._handler.setSizeArr(this._handlerIndex, size);
191
+ } else if (this._lockId !== LOCK_FREE) {
192
+ this._lockId = LOCK_UPDATE;
193
+ }
194
+ }
177
195
  }
178
196
 
179
197
  /**
@@ -192,7 +210,11 @@ class Label extends BaseBillboard {
192
210
  */
193
211
  setOutline(outline) {
194
212
  this._outline = outline;
195
- this._handler && this._handler.setOutlineArr(this._handlerIndex, outline);
213
+ if (this._isReady) {
214
+ this._handler.setOutlineArr(this._handlerIndex, outline);
215
+ } else if (this._lockId !== LOCK_FREE) {
216
+ this._lockId = LOCK_UPDATE;
217
+ }
196
218
  }
197
219
 
198
220
  /**
@@ -210,10 +232,8 @@ class Label extends BaseBillboard {
210
232
  * @param {number} a - Label opacity.
211
233
  */
212
234
  setOpacity(a) {
213
- this._color.w = a;
214
- this.setColor4v(this._color);
215
- this._outlineColor.w = a;
216
- this.setOutlineColor4v(this._outlineColor);
235
+ super.setOpacity(a);
236
+ this.setOutlineOpacity(a);
217
237
  }
218
238
 
219
239
  /**
@@ -225,24 +245,26 @@ class Label extends BaseBillboard {
225
245
  * @param {number} a - Alpha.
226
246
  */
227
247
  setOutlineColor(r, g, b, a) {
228
- this._outlineColor.x = r;
229
- this._outlineColor.y = g;
230
- this._outlineColor.z = b;
231
- this._outlineColor.w = a;
232
- this._handler && this._handler.setOutlineColorArr(this._handlerIndex, this._outlineColor);
248
+ if (a !== this._outlineColor.w || r !== this._outlineColor.x || g !== this._outlineColor.y || b !== this._outlineColor.z) {
249
+ this._outlineColor.x = r;
250
+ this._outlineColor.y = g;
251
+ this._outlineColor.z = b;
252
+ this._outlineColor.w = a;
253
+ if (this._isReady) {
254
+ this._handler.setOutlineColorArr(this._handlerIndex, this._outlineColor);
255
+ } else if (this._lockId !== LOCK_FREE) {
256
+ this._lockId = LOCK_UPDATE;
257
+ }
258
+ }
233
259
  }
234
260
 
235
261
  /**
236
262
  * Sets text outline color.
237
263
  * @public
238
- * @param {og.Vec4} rgba - Color vector.
264
+ * @param {Vec4} rgba - Color vector.
239
265
  */
240
266
  setOutlineColor4v(rgba) {
241
- this._outlineColor.x = rgba.x;
242
- this._outlineColor.y = rgba.y;
243
- this._outlineColor.z = rgba.z;
244
- this._outlineColor.w = rgba.w;
245
- this._handler && this._handler.setOutlineColorArr(this._handlerIndex, rgba);
267
+ this.setOutlineColor(rgba.x, rgba.y, rgba.z, rgba.w);
246
268
  }
247
269
 
248
270
  /**
@@ -257,7 +279,7 @@ class Label extends BaseBillboard {
257
279
  /**
258
280
  * Gets outline color vector.
259
281
  * @public
260
- * @returns {og.Vec4}
282
+ * @returns {Vec4}
261
283
  */
262
284
  getOutlineColor() {
263
285
  return this._outlineColor;
@@ -269,8 +291,14 @@ class Label extends BaseBillboard {
269
291
  * @param {number} opacity - Outline opacity.
270
292
  */
271
293
  setOutlineOpacity(opacity) {
272
- this._outlineColor.w = opacity;
273
- this._handler && this._handler.setOutlineColorArr(this._handlerIndex, this._outlineColor);
294
+ if (opacity !== this._outlineColor.w) {
295
+ this._outlineColor.w = opacity;
296
+ if (this._isReady) {
297
+ this._handler.setOutlineColorArr(this._handlerIndex, this._outlineColor);
298
+ } else if (this._lockId !== LOCK_FREE) {
299
+ this._lockId = LOCK_UPDATE;
300
+ }
301
+ }
274
302
  }
275
303
 
276
304
  /**
@@ -286,29 +314,32 @@ class Label extends BaseBillboard {
286
314
  * Updates label parameters.
287
315
  * @public
288
316
  */
289
- update() {
317
+ async update() {
290
318
  if (this._fontAtlas) {
291
- this._fontAtlas.getFontIndex(this._face).then((fontIndex) => {
292
- this._applyFontIndex(fontIndex);
293
- });
319
+ const fontIndex = await this._fontAtlas.getFontIndex(this._face);
320
+ this._applyFontIndex(fontIndex);
294
321
  }
295
322
  }
296
323
 
297
324
  _applyFontIndex(fontIndex) {
298
325
  this._fontIndex = fontIndex;
299
- if (this._handler) {
326
+ if (this._isReady) {
300
327
  this._handler.setFontIndexArr(this._handlerIndex, this._fontIndex);
301
328
  this._handler.setText(this._handlerIndex, this._text, this._fontIndex, this._align);
329
+ } else if (this._lockId !== LOCK_FREE) {
330
+ this._lockId = LOCK_UPDATE;
302
331
  }
303
332
  }
304
333
 
305
334
  /**
306
335
  * Assigns font atlas and update.
307
336
  * @public
308
- * @param {og.utils.FontAtlas} fontAtlas - Font atlas.
337
+ * @param {utils.FontAtlas} fontAtlas - Font atlas.
309
338
  */
310
339
  assignFontAtlas(fontAtlas) {
311
- !this._fontAtlas && (this._fontAtlas = fontAtlas);
340
+ if (!this._fontAtlas) {
341
+ this._fontAtlas = fontAtlas;
342
+ }
312
343
  this.update();
313
344
  }
314
345
  }
@@ -8,6 +8,7 @@ import * as shaders from "../shaders/label.js";
8
8
  import { ALIGN } from "./Label.js";
9
9
  import { BillboardHandler } from "./BillboardHandler.js";
10
10
  import { concatTypedArrays, spliceTypedArray } from "../utils/shared.js";
11
+ import { LOCK_FREE } from "./LabelWorker.js";
11
12
 
12
13
  const PICKINGCOLOR_BUFFER = 0;
13
14
  const POSITION_BUFFER = 1;
@@ -30,6 +31,11 @@ window.dZ = 1.1;
30
31
  *
31
32
  */
32
33
  class LabelHandler extends BillboardHandler {
34
+ /**
35
+ *
36
+ * @param {*} entityCollection
37
+ * @param {*} maxLetters
38
+ */
33
39
  constructor(entityCollection, maxLetters = 21) {
34
40
  super(entityCollection);
35
41
 
@@ -71,19 +77,52 @@ class LabelHandler extends BillboardHandler {
71
77
  }
72
78
 
73
79
  add(label) {
74
- if (label._handlerIndex === -1) {
80
+ if (!label._handler) {
75
81
  label._handler = this;
76
- label._handlerIndex = this._billboards.length;
77
- this._billboards.push(label);
78
- this._addBillboardToArrays(label);
79
- this.refresh();
80
82
  this.assignFontAtlas(label);
83
+ this.refresh();
81
84
  }
82
85
  }
83
86
 
87
+ _addLabelToArrays(label) {
88
+ this._renderer.labelWorker.make(this, label);
89
+ }
90
+
84
91
  assignFontAtlas(label) {
85
92
  if (this._entityCollection && this._renderer) {
86
93
  label.assignFontAtlas(this._renderer.fontAtlas);
94
+ this._addLabelToArrays(label);
95
+ } else {
96
+ this._billboards.push(label);
97
+ }
98
+ }
99
+
100
+ workerCallback(data, label) {
101
+ if (label._lockId !== LOCK_FREE && this.isEqual(label._handler)) {
102
+ label._isReady = true;
103
+ label._lockId = LOCK_FREE;
104
+ label._handlerIndex = this._billboards.length;
105
+ this._billboards.push(label);
106
+
107
+ this._vertexArr = concatTypedArrays(this._vertexArr, data.vertexArr);
108
+ this._texCoordArr = concatTypedArrays(this._texCoordArr, data.texCoordArr);
109
+ this._gliphParamArr = concatTypedArrays(this._gliphParamArr, data.gliphParamArr);
110
+ this._positionHighArr = concatTypedArrays(this._positionHighArr, data.positionHighArr);
111
+ this._positionLowArr = concatTypedArrays(this._positionLowArr, data.positionLowArr);
112
+ this._sizeArr = concatTypedArrays(this._sizeArr, data.sizeArr);
113
+ this._offsetArr = concatTypedArrays(this._offsetArr, data.offsetArr);
114
+ this._rgbaArr = concatTypedArrays(this._rgbaArr, data.rgbaArr);
115
+ this._rotationArr = concatTypedArrays(this._rotationArr, data.rotationArr);
116
+ this._alignedAxisArr = concatTypedArrays(this._alignedAxisArr, data.alignedAxisArr);
117
+ this._fontIndexArr = concatTypedArrays(this._fontIndexArr, data.fontIndexArr);
118
+ this._outlineArr = concatTypedArrays(this._outlineArr, data.outlineArr);
119
+ this._noOutlineArr = concatTypedArrays(this._noOutlineArr, data.noOutlineArr);
120
+ this._outlineColorArr = concatTypedArrays(this._outlineColorArr, data.outlineColorArr);
121
+ this._pickingColorArr = concatTypedArrays(this._pickingColorArr, data.pickingColorArr);
122
+
123
+ label.update();
124
+
125
+ this.refresh();
87
126
  }
88
127
  }
89
128
 
@@ -163,236 +202,6 @@ class LabelHandler extends BillboardHandler {
163
202
  }
164
203
  }
165
204
 
166
- _addBillboardToArrays(label) {
167
- for (var i = 0; i < this._maxLetters; i++) {
168
- if (label._visibility) {
169
- this._vertexArr = concatTypedArrays(
170
- this._vertexArr,
171
- [0, 0, 0, -1, 1, -1, 1, -1, 1, 0, 0, 0]
172
- );
173
- } else {
174
- this._vertexArr = concatTypedArrays(
175
- this._vertexArr,
176
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
177
- );
178
- }
179
-
180
- this._texCoordArr = concatTypedArrays(
181
- this._texCoordArr,
182
- [0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0]
183
- );
184
- this._gliphParamArr = concatTypedArrays(
185
- this._gliphParamArr,
186
- [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0]
187
- );
188
-
189
- var x = label._positionHigh.x,
190
- y = label._positionHigh.y,
191
- z = label._positionHigh.z,
192
- w;
193
- this._positionHighArr = concatTypedArrays(this._positionHighArr, [
194
- x,
195
- y,
196
- z,
197
- x,
198
- y,
199
- z,
200
- x,
201
- y,
202
- z,
203
- x,
204
- y,
205
- z,
206
- x,
207
- y,
208
- z,
209
- x,
210
- y,
211
- z
212
- ]);
213
-
214
- x = label._positionLow.x;
215
- y = label._positionLow.y;
216
- z = label._positionLow.z;
217
- this._positionLowArr = concatTypedArrays(this._positionLowArr, [
218
- x,
219
- y,
220
- z,
221
- x,
222
- y,
223
- z,
224
- x,
225
- y,
226
- z,
227
- x,
228
- y,
229
- z,
230
- x,
231
- y,
232
- z,
233
- x,
234
- y,
235
- z
236
- ]);
237
-
238
- x = label._size;
239
- this._sizeArr = concatTypedArrays(this._sizeArr, [x, x, x, x, x, x]);
240
-
241
- x = label._offset.x;
242
- y = label._offset.y;
243
- z = label._offset.z;
244
- this._offsetArr = concatTypedArrays(this._offsetArr, [
245
- x,
246
- y,
247
- z,
248
- x,
249
- y,
250
- z,
251
- x,
252
- y,
253
- z,
254
- x,
255
- y,
256
- z,
257
- x,
258
- y,
259
- z,
260
- x,
261
- y,
262
- z
263
- ]);
264
-
265
- x = label._color.x;
266
- y = label._color.y;
267
- z = label._color.z;
268
- w = label._color.w;
269
- this._rgbaArr = concatTypedArrays(this._rgbaArr, [
270
- x,
271
- y,
272
- z,
273
- w,
274
- x,
275
- y,
276
- z,
277
- w,
278
- x,
279
- y,
280
- z,
281
- w,
282
- x,
283
- y,
284
- z,
285
- w,
286
- x,
287
- y,
288
- z,
289
- w,
290
- x,
291
- y,
292
- z,
293
- w
294
- ]);
295
-
296
- x = label._rotation;
297
- this._rotationArr = concatTypedArrays(this._rotationArr, [x, x, x, x, x, x]);
298
-
299
- x = label._alignedAxis.x;
300
- y = label._alignedAxis.y;
301
- z = label._alignedAxis.z;
302
- this._alignedAxisArr = concatTypedArrays(this._alignedAxisArr, [
303
- x,
304
- y,
305
- z,
306
- x,
307
- y,
308
- z,
309
- x,
310
- y,
311
- z,
312
- x,
313
- y,
314
- z,
315
- x,
316
- y,
317
- z,
318
- x,
319
- y,
320
- z
321
- ]);
322
-
323
- x = label._fontIndex;
324
- this._fontIndexArr = concatTypedArrays(this._fontIndexArr, [x, x, x, x, x, x]);
325
-
326
- x = label._outline;
327
- this._outlineArr = concatTypedArrays(this._outlineArr, [x, x, x, x, x, x]);
328
-
329
- const weight = 0.001;
330
- this._noOutlineArr = concatTypedArrays(this._noOutlineArr, [
331
- weight,
332
- weight,
333
- weight,
334
- weight,
335
- weight,
336
- weight
337
- ]);
338
-
339
- x = label._outlineColor.x;
340
- y = label._outlineColor.y;
341
- z = label._outlineColor.z;
342
- w = label._outlineColor.w;
343
- this._outlineColorArr = concatTypedArrays(this._outlineColorArr, [
344
- x,
345
- y,
346
- z,
347
- w,
348
- x,
349
- y,
350
- z,
351
- w,
352
- x,
353
- y,
354
- z,
355
- w,
356
- x,
357
- y,
358
- z,
359
- w,
360
- x,
361
- y,
362
- z,
363
- w,
364
- x,
365
- y,
366
- z,
367
- w
368
- ]);
369
-
370
- x = label._entity._pickingColor.x / 255;
371
- y = label._entity._pickingColor.y / 255;
372
- z = label._entity._pickingColor.z / 255;
373
- this._pickingColorArr = concatTypedArrays(this._pickingColorArr, [
374
- x,
375
- y,
376
- z,
377
- x,
378
- y,
379
- z,
380
- x,
381
- y,
382
- z,
383
- x,
384
- y,
385
- z,
386
- x,
387
- y,
388
- z,
389
- x,
390
- y,
391
- z
392
- ]);
393
- }
394
- }
395
-
396
205
  _displayPASS() {
397
206
  var r = this._renderer;
398
207
  var h = r.handler;
@@ -687,12 +496,6 @@ class LabelHandler extends BillboardHandler {
687
496
 
688
497
  let m = n.metrics;
689
498
 
690
- //m.nWidth;
691
- //m.nHeight;
692
- //m.nAdvance;
693
- //m.nXOffset;
694
- //m.nYOffset;
695
-
696
499
  a[j] = tc[0];
697
500
  a[j + 1] = tc[1];
698
501
  a[j + 2] = offset;
@@ -1151,8 +954,6 @@ class LabelHandler extends BillboardHandler {
1151
954
  }
1152
955
 
1153
956
  setFontIndexArr(index, fontIndex) {
1154
- fontIndex = fontIndex;
1155
-
1156
957
  var i = index * 6 * this._maxLetters;
1157
958
  var a = this._fontIndexArr;
1158
959
 
@@ -1237,4 +1038,4 @@ class LabelHandler extends BillboardHandler {
1237
1038
  }
1238
1039
  }
1239
1040
 
1240
- export { LabelHandler };
1041
+ export { LabelHandler };