@openglobus/og 0.11.5 → 0.12.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 (267) hide show
  1. package/css/og.css +5 -2
  2. package/package.json +12 -14
  3. package/src/og/Clock.js +6 -10
  4. package/src/og/Events.js +5 -7
  5. package/src/og/Extent.js +73 -32
  6. package/src/og/Globe.js +25 -10
  7. package/src/og/ImageCanvas.js +18 -15
  8. package/src/og/LonLat.js +13 -10
  9. package/src/og/Popup.js +19 -17
  10. package/src/og/QueueArray.js +3 -4
  11. package/src/og/Rectangle.js +4 -6
  12. package/src/og/Stack.js +2 -4
  13. package/src/og/ajax.js +20 -14
  14. package/src/og/astro/earth.js +21 -15
  15. package/src/og/bv/Box.js +2 -3
  16. package/src/og/bv/Sphere.js +10 -7
  17. package/src/og/camera/Camera.js +70 -79
  18. package/src/og/camera/Frustum.js +19 -12
  19. package/src/og/camera/PlanetCamera.js +33 -34
  20. package/src/og/control/CompassButton.js +1 -2
  21. package/src/og/control/Control.js +7 -9
  22. package/src/og/control/DebugInfo.js +2 -3
  23. package/src/og/control/EarthNavigation.js +26 -17
  24. package/src/og/control/KeyboardNavigation.js +9 -9
  25. package/src/og/control/LayerSwitcher.js +21 -20
  26. package/src/og/control/Lighting.js +74 -64
  27. package/src/og/control/MouseNavigation.js +30 -29
  28. package/src/og/control/MouseWheelZoomControl.js +257 -0
  29. package/src/og/control/SegmentBoundVisualization.js +5 -6
  30. package/src/og/control/ShowFps.js +12 -7
  31. package/src/og/control/SimpleNavigation.js +5 -7
  32. package/src/og/control/Sun.js +24 -14
  33. package/src/og/control/ToggleWireframe.js +3 -3
  34. package/src/og/control/TouchNavigation.js +43 -32
  35. package/src/og/control/ZoomControl.js +40 -24
  36. package/src/og/control/index.js +2 -0
  37. package/src/og/control/visibleExtent/Segment.js +1862 -0
  38. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  39. package/src/og/control/visibleExtent/drawnode.js +751 -0
  40. package/src/og/ellipsoid/Ellipsoid.js +149 -57
  41. package/src/og/ellipsoid/wgs84.js +3 -3
  42. package/src/og/entity/BaseBillboard.js +72 -30
  43. package/src/og/entity/Billboard.js +9 -5
  44. package/src/og/entity/BillboardHandler.js +315 -62
  45. package/src/og/entity/Entity.js +742 -704
  46. package/src/og/entity/EntityCollection.js +47 -24
  47. package/src/og/entity/GeoObject.js +228 -0
  48. package/src/og/entity/GeoObjectHandler.js +895 -0
  49. package/src/og/entity/GeometryHandler.js +595 -123
  50. package/src/og/entity/Label.js +62 -30
  51. package/src/og/entity/LabelHandler.js +42 -243
  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 +76 -28
  55. package/src/og/entity/PointCloudHandler.js +5 -5
  56. package/src/og/entity/Ray.js +49 -16
  57. package/src/og/entity/Strip.js +72 -43
  58. package/src/og/entity/StripHandler.js +23 -23
  59. package/src/og/layer/BaseGeoImage.js +50 -19
  60. package/src/og/layer/CanvasTiles.js +16 -17
  61. package/src/og/layer/GeoImage.js +8 -16
  62. package/src/og/layer/GeoTexture2d.js +2 -10
  63. package/src/og/layer/GeoVideo.js +2 -10
  64. package/src/og/layer/KML.js +55 -33
  65. package/src/og/layer/Layer.js +24 -33
  66. package/src/og/layer/Material.js +1 -1
  67. package/src/og/layer/Vector.js +94 -48
  68. package/src/og/layer/WMS.js +33 -18
  69. package/src/og/layer/XYZ.js +24 -26
  70. package/src/og/light/LightSource.js +19 -12
  71. package/src/og/math/Mat3.js +24 -12
  72. package/src/og/math/Mat4.js +603 -603
  73. package/src/og/math/Plane.js +19 -18
  74. package/src/og/math/Ray.js +17 -12
  75. package/src/og/math/Vec2.js +24 -14
  76. package/src/og/math/Vec3.js +78 -32
  77. package/src/og/math/coder.js +7 -7
  78. package/src/og/proj/EPSG3857.js +3 -3
  79. package/src/og/proj/EPSG4326.js +3 -3
  80. package/src/og/proj/Proj.js +2 -4
  81. package/src/og/quadTree/Node.js +50 -95
  82. package/src/og/quadTree/quadTree.js +1 -1
  83. package/src/og/renderer/Renderer.js +106 -126
  84. package/src/og/renderer/RendererEvents.js +45 -23
  85. package/src/og/scene/BaseNode.js +2 -3
  86. package/src/og/scene/Planet.js +139 -191
  87. package/src/og/scene/RenderNode.js +15 -8
  88. package/src/og/segment/Segment.js +93 -268
  89. package/src/og/segment/Slice.js +45 -0
  90. package/src/og/shaders/drawnode.js +174 -360
  91. package/src/og/shaders/geoObject.js +211 -0
  92. package/src/og/shaders/pointCloud.js +41 -41
  93. package/src/og/shaders/shape.js +12 -18
  94. package/src/og/shaders/skybox.js +36 -36
  95. package/src/og/shaders/toneMapping.js +1 -0
  96. package/src/og/shapes/BaseShape.js +108 -36
  97. package/src/og/shapes/Icosphere.js +25 -10
  98. package/src/og/shapes/Sphere.js +8 -11
  99. package/src/og/terrain/EmptyTerrain.js +3 -2
  100. package/src/og/terrain/GlobusTerrain.js +2 -0
  101. package/src/og/utils/FontAtlas.js +6 -2
  102. package/src/og/utils/GeoImageCreator.js +5 -1
  103. package/src/og/utils/Loader.js +1 -1
  104. package/src/og/utils/PlainSegmentWorker.js +0 -13
  105. package/src/og/utils/TextureAtlas.js +18 -20
  106. package/src/og/utils/VectorTileCreator.js +1 -3
  107. package/src/og/utils/shared.js +2 -2
  108. package/src/og/webgl/Handler.js +219 -162
  109. package/src/og/webgl/Multisample.js +44 -16
  110. package/src/og/webgl/Program.js +78 -33
  111. package/src/og/webgl/callbacks.js +3 -3
  112. package/types/Clock.d.ts +0 -94
  113. package/types/Deferred.d.ts +0 -6
  114. package/types/Events.d.ts +0 -77
  115. package/types/Extent.d.ts +0 -166
  116. package/types/Globe.d.ts +0 -82
  117. package/types/ImageCanvas.d.ts +0 -123
  118. package/types/Lock.d.ts +0 -12
  119. package/types/LonLat.d.ts +0 -108
  120. package/types/Popup.d.ts +0 -42
  121. package/types/QueueArray.d.ts +0 -19
  122. package/types/Rectangle.d.ts +0 -80
  123. package/types/Stack.d.ts +0 -19
  124. package/types/ajax.d.ts +0 -24
  125. package/types/arial.d.ts +0 -48
  126. package/types/astro/astro.d.ts +0 -38
  127. package/types/astro/earth.d.ts +0 -7
  128. package/types/astro/jd.d.ts +0 -254
  129. package/types/bv/Box.d.ts +0 -30
  130. package/types/bv/Sphere.d.ts +0 -38
  131. package/types/bv/index.d.ts +0 -3
  132. package/types/camera/Camera.d.ts +0 -312
  133. package/types/camera/Frustum.d.ts +0 -133
  134. package/types/camera/PlanetCamera.d.ts +0 -218
  135. package/types/camera/index.d.ts +0 -3
  136. package/types/cons.d.ts +0 -40
  137. package/types/control/CompassButton.d.ts +0 -17
  138. package/types/control/Control.d.ts +0 -104
  139. package/types/control/DebugInfo.d.ts +0 -15
  140. package/types/control/EarthCoordinates.d.ts +0 -47
  141. package/types/control/EarthNavigation.d.ts +0 -42
  142. package/types/control/GeoImageDragControl.d.ts +0 -6
  143. package/types/control/KeyboardNavigation.d.ts +0 -21
  144. package/types/control/LayerSwitcher.d.ts +0 -21
  145. package/types/control/Lighting.d.ts +0 -16
  146. package/types/control/MouseNavigation.d.ts +0 -47
  147. package/types/control/ScaleControl.d.ts +0 -22
  148. package/types/control/ShowFps.d.ts +0 -11
  149. package/types/control/SimpleNavigation.d.ts +0 -25
  150. package/types/control/Sun.d.ts +0 -50
  151. package/types/control/ToggleWireframe.d.ts +0 -12
  152. package/types/control/TouchNavigation.d.ts +0 -48
  153. package/types/control/ZoomControl.d.ts +0 -27
  154. package/types/control/index.d.ts +0 -17
  155. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  156. package/types/ellipsoid/index.d.ts +0 -3
  157. package/types/ellipsoid/wgs84.d.ts +0 -6
  158. package/types/entity/BaseBillboard.d.ts +0 -208
  159. package/types/entity/Billboard.d.ts +0 -94
  160. package/types/entity/BillboardHandler.d.ts +0 -78
  161. package/types/entity/Entity.d.ts +0 -333
  162. package/types/entity/EntityCollection.d.ts +0 -311
  163. package/types/entity/Geometry.d.ts +0 -74
  164. package/types/entity/GeometryHandler.d.ts +0 -76
  165. package/types/entity/Label.d.ts +0 -189
  166. package/types/entity/LabelHandler.d.ts +0 -29
  167. package/types/entity/PointCloud.d.ts +0 -174
  168. package/types/entity/PointCloudHandler.d.ts +0 -38
  169. package/types/entity/Polyline.d.ts +0 -306
  170. package/types/entity/PolylineHandler.d.ts +0 -18
  171. package/types/entity/Ray.d.ts +0 -124
  172. package/types/entity/RayHandler.d.ts +0 -67
  173. package/types/entity/ShapeHandler.d.ts +0 -22
  174. package/types/entity/Strip.d.ts +0 -119
  175. package/types/entity/StripHandler.d.ts +0 -38
  176. package/types/entity/index.d.ts +0 -8
  177. package/types/index.core.d.ts +0 -65
  178. package/types/index.d.ts +0 -45
  179. package/types/index.webgl.d.ts +0 -7
  180. package/types/input/KeyboardHandler.d.ts +0 -10
  181. package/types/input/MouseHandler.d.ts +0 -5
  182. package/types/input/TouchHandler.d.ts +0 -5
  183. package/types/input/input.d.ts +0 -34
  184. package/types/layer/BaseGeoImage.d.ts +0 -94
  185. package/types/layer/CanvasTiles.d.ts +0 -68
  186. package/types/layer/GeoImage.d.ts +0 -52
  187. package/types/layer/GeoTexture2d.d.ts +0 -8
  188. package/types/layer/GeoVideo.d.ts +0 -55
  189. package/types/layer/KML.d.ts +0 -63
  190. package/types/layer/Layer.d.ts +0 -326
  191. package/types/layer/Material.d.ts +0 -45
  192. package/types/layer/Vector.d.ts +0 -208
  193. package/types/layer/WMS.d.ts +0 -63
  194. package/types/layer/XYZ.d.ts +0 -120
  195. package/types/layer/index.d.ts +0 -10
  196. package/types/light/LightSource.d.ts +0 -178
  197. package/types/math/Line2.d.ts +0 -11
  198. package/types/math/Line3.d.ts +0 -10
  199. package/types/math/Mat3.d.ts +0 -65
  200. package/types/math/Mat4.d.ts +0 -176
  201. package/types/math/Plane.d.ts +0 -18
  202. package/types/math/Quat.d.ts +0 -379
  203. package/types/math/Ray.d.ts +0 -82
  204. package/types/math/Vec2.d.ts +0 -309
  205. package/types/math/Vec3.d.ts +0 -460
  206. package/types/math/Vec4.d.ts +0 -162
  207. package/types/math/coder.d.ts +0 -43
  208. package/types/math/index.d.ts +0 -11
  209. package/types/math.d.ts +0 -261
  210. package/types/mercator.d.ts +0 -92
  211. package/types/proj/EPSG3857.d.ts +0 -6
  212. package/types/proj/EPSG4326.d.ts +0 -6
  213. package/types/proj/Proj.d.ts +0 -42
  214. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  215. package/types/quadTree/Node.d.ts +0 -61
  216. package/types/quadTree/quadTree.d.ts +0 -40
  217. package/types/renderer/Renderer.d.ts +0 -298
  218. package/types/renderer/RendererEvents.d.ts +0 -233
  219. package/types/res/images.d.ts +0 -3
  220. package/types/scene/Axes.d.ts +0 -11
  221. package/types/scene/BaseNode.d.ts +0 -60
  222. package/types/scene/Planet.d.ts +0 -577
  223. package/types/scene/RenderNode.d.ts +0 -142
  224. package/types/scene/SkyBox.d.ts +0 -10
  225. package/types/scene/index.d.ts +0 -4
  226. package/types/segment/Segment.d.ts +0 -279
  227. package/types/segment/SegmentLonLat.d.ts +0 -16
  228. package/types/segment/segmentHelper.d.ts +0 -13
  229. package/types/shaders/billboard.d.ts +0 -3
  230. package/types/shaders/depth.d.ts +0 -2
  231. package/types/shaders/drawnode.d.ts +0 -7
  232. package/types/shaders/label.d.ts +0 -4
  233. package/types/shaders/pointCloud.d.ts +0 -2
  234. package/types/shaders/polyline.d.ts +0 -3
  235. package/types/shaders/ray.d.ts +0 -2
  236. package/types/shaders/screenFrame.d.ts +0 -2
  237. package/types/shaders/shape.d.ts +0 -4
  238. package/types/shaders/skybox.d.ts +0 -2
  239. package/types/shaders/toneMapping.d.ts +0 -2
  240. package/types/shapes/BaseShape.d.ts +0 -250
  241. package/types/shapes/Sphere.d.ts +0 -41
  242. package/types/terrain/BilTerrain.d.ts +0 -7
  243. package/types/terrain/EmptyTerrain.d.ts +0 -72
  244. package/types/terrain/Geoid.d.ts +0 -26
  245. package/types/terrain/GlobusTerrain.d.ts +0 -116
  246. package/types/terrain/MapboxTerrain.d.ts +0 -7
  247. package/types/terrain/index.d.ts +0 -5
  248. package/types/utils/FontAtlas.d.ts +0 -14
  249. package/types/utils/GeoImageCreator.d.ts +0 -30
  250. package/types/utils/ImagesCacheManager.d.ts +0 -10
  251. package/types/utils/Loader.d.ts +0 -25
  252. package/types/utils/NormalMapCreator.d.ts +0 -39
  253. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  254. package/types/utils/TerrainWorker.d.ts +0 -9
  255. package/types/utils/TextureAtlas.d.ts +0 -111
  256. package/types/utils/VectorTileCreator.d.ts +0 -16
  257. package/types/utils/colorTable.d.ts +0 -143
  258. package/types/utils/earcut.d.ts +0 -6
  259. package/types/utils/shared.d.ts +0 -231
  260. package/types/webgl/Framebuffer.d.ts +0 -135
  261. package/types/webgl/Handler.d.ts +0 -388
  262. package/types/webgl/Multisample.d.ts +0 -89
  263. package/types/webgl/Program.d.ts +0 -155
  264. package/types/webgl/ProgramController.d.ts +0 -89
  265. package/types/webgl/callbacks.d.ts +0 -1
  266. package/types/webgl/index.d.ts +0 -6
  267. package/types/webgl/types.d.ts +0 -2
@@ -1,7 +1,7 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- import { BaseNode } from './BaseNode.js';
4
- import { Events } from '../Events.js';
3
+ import { BaseNode } from "./BaseNode.js";
4
+ import { Events } from "../Events.js";
5
5
 
6
6
  /**
7
7
  * Render node is a logical part of a render mechanism. Represents scene rendering.
@@ -98,8 +98,7 @@ class RenderNode extends BaseNode {
98
98
  n = this.name;
99
99
 
100
100
  if (r) {
101
- if (r.renderNodes[n] &&
102
- r.renderNodes[n].isEqual(this)) {
101
+ if (r.renderNodes[n] && r.renderNodes[n].isEqual(this)) {
103
102
  r.renderNodes[n] = null;
104
103
  delete r.renderNodes[n];
105
104
  }
@@ -195,7 +194,10 @@ class RenderNode extends BaseNode {
195
194
 
196
195
  if (this.renderer) {
197
196
  if (this._isActive && this._pickingId === -1) {
198
- this._pickingId = this.renderer.addPickingCallback(this, this._entityCollectionPickingCallback);
197
+ this._pickingId = this.renderer.addPickingCallback(
198
+ this,
199
+ this._entityCollectionPickingCallback
200
+ );
199
201
  } else if (!this._isActive && this._pickingId !== -1) {
200
202
  this.renderer.removePickingCallback(this._pickingId);
201
203
  this._pickingId = -1;
@@ -277,7 +279,6 @@ class RenderNode extends BaseNode {
277
279
  */
278
280
  drawPickingEntityCollections(ec) {
279
281
  if (ec.length) {
280
-
281
282
  var gl = this.renderer.handler.gl;
282
283
 
283
284
  gl.disable(gl.CULL_FACE);
@@ -292,6 +293,12 @@ class RenderNode extends BaseNode {
292
293
  ec[i]._fadingOpacity && ec[i].billboardHandler.drawPicking();
293
294
  }
294
295
 
296
+ // geoObject pass
297
+ i = ec.length;
298
+ while (i--) {
299
+ ec[i]._fadingOpacity && ec[i].geoObjectHandler.drawPicking();
300
+ }
301
+
295
302
  // label pass
296
303
  i = ec.length;
297
304
  while (i--) {
@@ -344,4 +351,4 @@ class RenderNode extends BaseNode {
344
351
  }
345
352
  }
346
353
 
347
- export { RenderNode };
354
+ export { RenderNode };
@@ -12,26 +12,11 @@ import { Box } from "../bv/Box.js";
12
12
  import { Vec3 } from "../math/Vec3.js";
13
13
  import * as segmentHelper from "../segment/segmentHelper.js";
14
14
  import { getMatrixSubArray } from "../utils/shared.js";
15
-
16
- export const MAX_NORMAL_ZOOM = 7;
15
+ import { Slice } from "./Slice.js";
17
16
 
18
17
  var _tempHigh = new Vec3();
19
18
  var _tempLow = new Vec3();
20
19
 
21
- var _RenderingSlice = function (p) {
22
- this.layers = [];
23
- this.tileOffsetArr = new Float32Array(p.SLICE_SIZE_4);
24
- this.visibleExtentOffsetArr = new Float32Array(p.SLICE_SIZE_4);
25
- this.transparentColorArr = new Float32Array(p.SLICE_SIZE_4);
26
-
27
- this.clear = function () {
28
- this.layers = null;
29
- this.tileOffsetArr = null;
30
- this.visibleExtentOffsetArr = null;
31
- this.transparentColorArr = null;
32
- };
33
- };
34
-
35
20
  let _v0 = new Vec3(),
36
21
  _v1 = new Vec3(),
37
22
  _v2 = new Vec3(),
@@ -54,8 +39,6 @@ _V[E] = true;
54
39
  _V[S] = false;
55
40
  _V[W] = true;
56
41
 
57
- window.BBSC = 100;
58
-
59
42
  /**
60
43
  * Planet segment Web Mercator tile class that stored and rendered with quad tree.
61
44
  * @class
@@ -110,10 +93,17 @@ class Segment {
110
93
  */
111
94
  this.bbox = new Box();
112
95
 
113
- this._swNorm = null;
114
- this._nwNorm = null;
115
- this._seNorm = null;
116
- this._neNorm = null;
96
+ //this._swNorm = null;
97
+ //this._nwNorm = null;
98
+ //this._seNorm = null;
99
+ //this._neNorm = null;
100
+
101
+ this._sw = new Vec3();
102
+ this._nw = new Vec3();
103
+ this._se = new Vec3();
104
+ this._ne = new Vec3();
105
+
106
+ this.centerNormal = new Vec3();
117
107
 
118
108
  /**
119
109
  * Geographical extent.
@@ -241,7 +231,7 @@ class Segment {
241
231
  this._inTheQueue = false;
242
232
  this._appliedNeighborsZoom = [0, 0, 0, 0];
243
233
 
244
- this._renderingSlices = [];
234
+ this._slices = [];
245
235
 
246
236
  this._indexBuffer = null;
247
237
 
@@ -250,19 +240,6 @@ class Segment {
250
240
  this.plainProcessing = false;
251
241
  }
252
242
 
253
- /**
254
- * Returns that segment good for rendering with camera by current lod ratio.
255
- * @public
256
- * @param {Camera} camera - Camera object.
257
- * @returns {boolean} -
258
- */
259
- acceptForRendering(camera) {
260
- return (
261
- camera.projectedSize(this.bsphere.center, this._plainRadius) <
262
- 256 / this.planet._lodRatio
263
- );
264
- }
265
-
266
243
  /**
267
244
  * Returns entity terrain point.
268
245
  * @public
@@ -946,12 +923,12 @@ class Segment {
946
923
 
947
924
  this.clearSegment();
948
925
 
949
- var i = this._renderingSlices.length;
926
+ var i = this._slices.length;
950
927
  while (i--) {
951
- this._renderingSlices[i].clear();
928
+ this._slices[i].clear();
952
929
  }
953
930
 
954
- this._renderingSlices = null;
931
+ this._slices = null;
955
932
 
956
933
  this.node = null;
957
934
 
@@ -990,9 +967,6 @@ class Segment {
990
967
  this.vertexPositionBufferLow = null;
991
968
  this.vertexTextureCoordBuffer = null;
992
969
 
993
- this._tileOffsetArr = null;
994
- this._visibleExtentOffsetArr = null;
995
-
996
970
  this._projection = null;
997
971
  this._appliedNeighborsZoom = null;
998
972
 
@@ -1013,22 +987,19 @@ class Segment {
1013
987
  var coord_sw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.southWest.lat);
1014
988
  var coord_ne = ellipsoid.geodeticToCartesian(extent.northEast.lon, extent.northEast.lat);
1015
989
 
1016
- // check for zoom
1017
- if (this.tileZoom <= MAX_NORMAL_ZOOM) {
1018
- var coord_nw = ellipsoid.geodeticToCartesian(
1019
- extent.southWest.lon,
1020
- extent.northEast.lat
1021
- );
1022
- var coord_se = ellipsoid.geodeticToCartesian(
1023
- extent.northEast.lon,
1024
- extent.southWest.lat
1025
- );
990
+ var coord_nw = ellipsoid.geodeticToCartesian(
991
+ extent.southWest.lon,
992
+ extent.northEast.lat
993
+ );
994
+ var coord_se = ellipsoid.geodeticToCartesian(
995
+ extent.northEast.lon,
996
+ extent.southWest.lat
997
+ );
1026
998
 
1027
- this._swNorm = coord_sw.normal();
1028
- this._nwNorm = coord_nw.normal();
1029
- this._neNorm = coord_ne.normal();
1030
- this._seNorm = coord_se.normal();
1031
- }
999
+ this._sw.copy(coord_sw);
1000
+ this._nw.copy(coord_nw);
1001
+ this._ne.copy(coord_ne);
1002
+ this._se.copy(coord_se);
1032
1003
 
1033
1004
  this.setBoundingVolume3v(coord_sw, coord_ne);
1034
1005
  }
@@ -1057,31 +1028,30 @@ class Segment {
1057
1028
  this.bsphere.center.z = pn.segment.bsphere.center.z;
1058
1029
  this.bsphere.radius = pn.segment.bsphere.radius;
1059
1030
 
1060
- if (this.tileZoom <= MAX_NORMAL_ZOOM) {
1061
- let i0 = gridSize * offsetY;
1062
- let j0 = gridSize * offsetX;
1031
+ let i0 = gridSize * offsetY;
1032
+ let j0 = gridSize * offsetX;
1063
1033
 
1064
- let pnGsOne = pn.segment.gridSize + 1;
1034
+ let pnGsOne = pn.segment.gridSize + 1;
1065
1035
 
1066
- let ind_sw = 3 * ((i0 + gridSize) * pnGsOne + j0),
1067
- ind_nw = 3 * (i0 * pnGsOne + j0),
1068
- ind_ne = 3 * (i0 * pnGsOne + j0 + gridSize),
1069
- ind_se = 3 * ((i0 + gridSize) * pnGsOne + j0 + gridSize);
1036
+ let ind_sw = 3 * ((i0 + gridSize) * pnGsOne + j0),
1037
+ ind_nw = 3 * (i0 * pnGsOne + j0),
1038
+ ind_ne = 3 * (i0 * pnGsOne + j0 + gridSize),
1039
+ ind_se = 3 * ((i0 + gridSize) * pnGsOne + j0 + gridSize);
1070
1040
 
1071
- let pVerts = pn.segment.tempVertices;
1041
+ let pVerts = pn.segment.tempVertices;
1072
1042
 
1073
- let v_sw = new Vec3(pVerts[ind_sw], pVerts[ind_sw + 1], pVerts[ind_sw + 2]),
1074
- v_ne = new Vec3(pVerts[ind_ne], pVerts[ind_ne + 1], pVerts[ind_ne + 2]);
1043
+ let v_sw = new Vec3(pVerts[ind_sw], pVerts[ind_sw + 1], pVerts[ind_sw + 2]),
1044
+ v_ne = new Vec3(pVerts[ind_ne], pVerts[ind_ne + 1], pVerts[ind_ne + 2]);
1075
1045
 
1076
- // check for segment zoom
1077
- let v_nw = new Vec3(pVerts[ind_nw], pVerts[ind_nw + 1], pVerts[ind_nw + 2]),
1078
- v_se = new Vec3(pVerts[ind_se], pVerts[ind_se + 1], pVerts[ind_se + 2]);
1046
+ // check for segment zoom
1047
+ let v_nw = new Vec3(pVerts[ind_nw], pVerts[ind_nw + 1], pVerts[ind_nw + 2]),
1048
+ v_se = new Vec3(pVerts[ind_se], pVerts[ind_se + 1], pVerts[ind_se + 2]);
1049
+
1050
+ this._sw.copy(v_sw);
1051
+ this._nw.copy(v_nw);
1052
+ this._ne.copy(v_ne);
1053
+ this._se.copy(v_se);
1079
1054
 
1080
- this._swNorm = v_sw.normal();
1081
- this._nwNorm = v_nw.normal();
1082
- this._neNorm = v_ne.normal();
1083
- this._seNorm = v_se.normal();
1084
- }
1085
1055
  } else {
1086
1056
  let pseg = pn.segment;
1087
1057
 
@@ -1104,10 +1074,10 @@ class Segment {
1104
1074
  v_rb = new Vec3(bigOne[9], bigOne[10], bigOne[11]);
1105
1075
 
1106
1076
  let vn = new Vec3(
1107
- bigOne[3] - bigOne[0],
1108
- bigOne[4] - bigOne[1],
1109
- bigOne[5] - bigOne[2]
1110
- ),
1077
+ bigOne[3] - bigOne[0],
1078
+ bigOne[4] - bigOne[1],
1079
+ bigOne[5] - bigOne[2]
1080
+ ),
1111
1081
  vw = new Vec3(
1112
1082
  bigOne[6] - bigOne[0],
1113
1083
  bigOne[7] - bigOne[1],
@@ -1291,13 +1261,13 @@ class Segment {
1291
1261
  n.sideSize[2] =
1292
1262
  n.sideSize[3] =
1293
1263
  this.gridSize =
1294
- p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1264
+ p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1295
1265
 
1296
1266
  n.sideSizeLog2[0] =
1297
1267
  n.sideSizeLog2[1] =
1298
1268
  n.sideSizeLog2[2] =
1299
1269
  n.sideSizeLog2[3] =
1300
- Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1270
+ Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1301
1271
 
1302
1272
  if (this.tileZoom <= p.terrain.maxZoom) {
1303
1273
  var nmc = this.planet._normalMapCreator;
@@ -1484,11 +1454,12 @@ class Segment {
1484
1454
 
1485
1455
  var notEmpty = false;
1486
1456
 
1487
- var slice = this._renderingSlices[sliceIndex];
1457
+ var slice = this._slices[sliceIndex];
1488
1458
 
1489
1459
  if (!slice) {
1490
- slice = this._renderingSlices[sliceIndex] = new _RenderingSlice(p);
1460
+ slice = this._slices[sliceIndex] = new Slice(this);
1491
1461
  } else {
1462
+ //TODO: optimization!!!
1492
1463
  slice.layers = [];
1493
1464
  }
1494
1465
 
@@ -1511,40 +1482,7 @@ class Segment {
1511
1482
  this.planet._renderCompleted = false;
1512
1483
  }
1513
1484
 
1514
- slice.layers.push(li);
1515
-
1516
- var n4 = n * 4,
1517
- n3 = n * 3;
1518
-
1519
- var arr = li.applyMaterial(m);
1520
- slice.tileOffsetArr[n4] = arr[0];
1521
- slice.tileOffsetArr[n4 + 1] = arr[1];
1522
- slice.tileOffsetArr[n4 + 2] = arr[2];
1523
- slice.tileOffsetArr[n4 + 3] = arr[3];
1524
-
1525
- arr = this._getLayerExtentOffset(li);
1526
- slice.visibleExtentOffsetArr[n4] = arr[0];
1527
- slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
1528
- slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
1529
- slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
1530
-
1531
- slice.transparentColorArr[n4] = li.transparentColor[0];
1532
- slice.transparentColorArr[n4 + 1] = li.transparentColor[1];
1533
- slice.transparentColorArr[n4 + 2] = li.transparentColor[2];
1534
- slice.transparentColorArr[n4 + 3] = li.opacity;
1535
-
1536
- p._diffuseMaterialArr[n3 + 3] = li.diffuse.x;
1537
- p._diffuseMaterialArr[n3 + 1 + 3] = li.diffuse.y;
1538
- p._diffuseMaterialArr[n3 + 2 + 3] = li.diffuse.z;
1539
-
1540
- p._ambientMaterialArr[n3 + 3] = li.ambient.x;
1541
- p._ambientMaterialArr[n3 + 1 + 3] = li.ambient.y;
1542
- p._ambientMaterialArr[n3 + 2 + 3] = li.ambient.z;
1543
-
1544
- p._specularMaterialArr[n4 + 4] = li.specular.x;
1545
- p._specularMaterialArr[n4 + 1 + 4] = li.specular.y;
1546
- p._specularMaterialArr[n4 + 2 + 4] = li.specular.z;
1547
- p._specularMaterialArr[n4 + 3 + 4] = li.shininess;
1485
+ slice.append(li, m);
1548
1486
 
1549
1487
  p._samplerArr[n] = n;
1550
1488
 
@@ -1561,9 +1499,12 @@ class Segment {
1561
1499
  gl.uniform1i(shu.samplerCount, n);
1562
1500
  gl.uniform1f(shu.height, currHeight);
1563
1501
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1502
+
1503
+ //slice.uniform(gl, shu);
1504
+
1564
1505
  gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1565
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1566
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1506
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1507
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1567
1508
 
1568
1509
  // bind normalmap texture
1569
1510
  if (p.lightEnabled) {
@@ -1575,30 +1516,12 @@ class Segment {
1575
1516
 
1576
1517
  // bind segment specular and night material texture coordinates
1577
1518
  gl.uniform4fv(shu.uGlobalTextureCoord, this._globalTextureCoordinates);
1578
-
1579
- gl.uniform3fv(shu.diffuseMaterial, p._diffuseMaterialArr);
1580
- gl.uniform3fv(shu.ambientMaterial, p._ambientMaterialArr);
1581
- gl.uniform4fv(shu.specularMaterial, p._specularMaterialArr);
1582
1519
  }
1583
1520
 
1584
1521
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1585
- gl.vertexAttribPointer(
1586
- sha.aVertexPositionHigh,
1587
- this.vertexPositionBufferHigh.itemSize,
1588
- gl.FLOAT,
1589
- false,
1590
- 0,
1591
- 0
1592
- );
1522
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1593
1523
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1594
- gl.vertexAttribPointer(
1595
- sha.aVertexPositionLow,
1596
- this.vertexPositionBufferLow.itemSize,
1597
- gl.FLOAT,
1598
- false,
1599
- 0,
1600
- 0
1601
- );
1524
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1602
1525
 
1603
1526
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1604
1527
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1608,7 +1531,7 @@ class Segment {
1608
1531
  }
1609
1532
  }
1610
1533
 
1611
- heightPickingRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
1534
+ heightPickingRendering(sh, layerSlice) {
1612
1535
  var gl = this.handler.gl;
1613
1536
  var sha = sh.attributes,
1614
1537
  shu = sh.uniforms;
@@ -1616,11 +1539,6 @@ class Segment {
1616
1539
  var pm = this.materials,
1617
1540
  p = this.planet;
1618
1541
 
1619
- // First always draw whole planet base layer segment with solid texture.
1620
- gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE);
1621
- gl.bindTexture(gl.TEXTURE_2D, defaultTexture || p.solidTextureOne);
1622
- gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE);
1623
-
1624
1542
  var currHeight;
1625
1543
  if (layerSlice) {
1626
1544
  currHeight = layerSlice[0]._height;
@@ -1628,53 +1546,16 @@ class Segment {
1628
1546
  currHeight = 0;
1629
1547
  }
1630
1548
 
1631
- var n = 0;
1632
-
1633
- var slice = this._renderingSlices[sliceIndex];
1549
+ gl.uniform1f(shu.height, currHeight);
1634
1550
 
1635
- var notEmpty = false;
1636
-
1637
- for (n = 0; n < slice.layers.length; n++) {
1638
- notEmpty = true;
1639
- p._samplerArr[n] = n;
1640
- gl.activeTexture(gl.TEXTURE0 + n);
1641
- gl.bindTexture(gl.TEXTURE_2D, pm[slice.layers[n]._id].texture || p.transparentTexture);
1642
- }
1551
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1552
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1643
1553
 
1644
- if (notEmpty || !isOverlay) {
1645
- gl.uniform1i(shu.samplerCount, n);
1646
- gl.uniform1f(shu.height, currHeight);
1647
- gl.uniform1iv(shu.samplerArr, p._samplerArr);
1648
- gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1649
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1650
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1554
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1555
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1651
1556
 
1652
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1653
- gl.vertexAttribPointer(
1654
- sha.aVertexPositionHigh,
1655
- this.vertexPositionBufferHigh.itemSize,
1656
- gl.FLOAT,
1657
- false,
1658
- 0,
1659
- 0
1660
- );
1661
-
1662
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1663
- gl.vertexAttribPointer(
1664
- sha.aVertexPositionLow,
1665
- this.vertexPositionBufferLow.itemSize,
1666
- gl.FLOAT,
1667
- false,
1668
- 0,
1669
- 0
1670
- );
1671
-
1672
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1673
- gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
1674
-
1675
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1676
- gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1677
- }
1557
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1558
+ gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1678
1559
  }
1679
1560
 
1680
1561
  colorPickingRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
@@ -1694,9 +1575,11 @@ class Segment {
1694
1575
 
1695
1576
  var notEmpty = false;
1696
1577
 
1697
- var slice = this._renderingSlices[sliceIndex];
1578
+ var slice = this._slices[sliceIndex];
1579
+
1580
+ let len = slice.layers.length;
1698
1581
 
1699
- for (var n = 0; n < slice.layers.length; n++) {
1582
+ for (let n = 0; n < len; n++) {
1700
1583
  notEmpty = true;
1701
1584
 
1702
1585
  var li = slice.layers[n];
@@ -1717,33 +1600,22 @@ class Segment {
1717
1600
  }
1718
1601
 
1719
1602
  if (notEmpty || !isOverlay) {
1720
- gl.uniform1i(shu.samplerCount, n);
1603
+ gl.uniform1i(shu.samplerCount, len);
1721
1604
  gl.uniform1f(shu.height, currHeight);
1722
1605
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1723
1606
  gl.uniform1iv(shu.pickingMaskArr, p._pickingMaskArr);
1724
- gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1725
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1726
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1727
1607
  gl.uniform4fv(shu.pickingColorArr, p._pickingColorArr);
1728
1608
 
1609
+ //slice.uniform(gl, shu);
1610
+
1611
+ gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1612
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1613
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1614
+
1729
1615
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1730
- gl.vertexAttribPointer(
1731
- sha.aVertexPositionHigh,
1732
- this.vertexPositionBufferHigh.itemSize,
1733
- gl.FLOAT,
1734
- false,
1735
- 0,
1736
- 0
1737
- );
1616
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1738
1617
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1739
- gl.vertexAttribPointer(
1740
- sha.aVertexPositionLow,
1741
- this.vertexPositionBufferLow.itemSize,
1742
- gl.FLOAT,
1743
- false,
1744
- 0,
1745
- 0
1746
- );
1618
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1747
1619
 
1748
1620
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1749
1621
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1753,19 +1625,11 @@ class Segment {
1753
1625
  }
1754
1626
  }
1755
1627
 
1756
- depthRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
1628
+ depthRendering(sh, layerSlice) {
1757
1629
  var gl = this.handler.gl;
1758
1630
  var sha = sh.attributes,
1759
1631
  shu = sh.uniforms;
1760
1632
 
1761
- var pm = this.materials,
1762
- p = this.planet;
1763
-
1764
- // First always draw whole planet base layer segment with solid texture.
1765
- gl.activeTexture(gl.TEXTURE0 + p.SLICE_SIZE);
1766
- gl.bindTexture(gl.TEXTURE_2D, defaultTexture || p.solidTextureOne);
1767
- gl.uniform1i(shu.defaultTexture, p.SLICE_SIZE);
1768
-
1769
1633
  var currHeight;
1770
1634
  if (layerSlice) {
1771
1635
  currHeight = layerSlice[0]._height;
@@ -1773,62 +1637,23 @@ class Segment {
1773
1637
  currHeight = 0;
1774
1638
  }
1775
1639
 
1776
- var n = 0;
1640
+ gl.uniform1f(shu.height, currHeight);
1777
1641
 
1778
- var slice = this._renderingSlices[sliceIndex];
1642
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1643
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1779
1644
 
1780
- var notEmpty = false;
1781
-
1782
- for (n = 0; n < slice.layers.length; n++) {
1783
- notEmpty = true;
1784
- p._samplerArr[n] = n;
1785
- gl.activeTexture(gl.TEXTURE0 + n);
1786
- gl.bindTexture(gl.TEXTURE_2D, pm[slice.layers[n]._id].texture || p.transparentTexture);
1787
- }
1788
-
1789
- if (notEmpty || !isOverlay) {
1790
- gl.uniform1i(shu.samplerCount, n);
1791
- gl.uniform1f(shu.height, currHeight);
1792
- gl.uniform1iv(shu.samplerArr, p._samplerArr);
1793
- gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1794
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1795
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1645
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1646
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1796
1647
 
1797
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1798
- gl.vertexAttribPointer(
1799
- sha.aVertexPositionHigh,
1800
- this.vertexPositionBufferHigh.itemSize,
1801
- gl.FLOAT,
1802
- false,
1803
- 0,
1804
- 0
1805
- );
1806
-
1807
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1808
- gl.vertexAttribPointer(
1809
- sha.aVertexPositionLow,
1810
- this.vertexPositionBufferLow.itemSize,
1811
- gl.FLOAT,
1812
- false,
1813
- 0,
1814
- 0
1815
- );
1816
-
1817
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1818
- gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
1819
-
1820
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1821
- gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1822
- }
1648
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1649
+ gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1823
1650
  }
1824
1651
 
1825
1652
  _getIndexBuffer() {
1826
1653
  var s = this.node.sideSizeLog2;
1827
1654
  var cache = this.planet._indexesCache[Math.log2(this.gridSize)][s[0]][s[1]][s[2]][s[3]];
1828
1655
  if (!cache.buffer) {
1829
- let indexes = segmentHelper
1830
- .getInstance()
1831
- .createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1656
+ let indexes = segmentHelper.getInstance().createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1832
1657
  cache.buffer = this.planet.renderer.handler.createElementArrayBuffer(indexes, 1);
1833
1658
  this.planet._indexesCacheToRemoveCounter++;
1834
1659
  indexes = null;
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ class Slice {
4
+ constructor(segment) {
5
+ this.segment = segment;
6
+ this.layers = [];
7
+ this.tileOffsetArr = new Float32Array(segment.planet.SLICE_SIZE_4);
8
+ this.layerOpacityArr = new Float32Array(segment.planet.SLICE_SIZE);
9
+ this.init();
10
+ }
11
+
12
+ init() {}
13
+
14
+ clear() {
15
+ this.layers = null;
16
+ this.tileOffsetArr = null;
17
+ this.layerOpacityArr = null;
18
+ //this.visibleExtentOffsetArr = null;
19
+ }
20
+
21
+ append(layer, material) {
22
+ let n = this.layers.length;
23
+
24
+ this.layers.push(layer);
25
+
26
+ this.layerOpacityArr[n] = layer.opacity;
27
+
28
+ let n4 = n * 4;
29
+
30
+ let arr = layer.applyMaterial(material);
31
+ this.tileOffsetArr[n4] = arr[0];
32
+ this.tileOffsetArr[n4 + 1] = arr[1];
33
+ this.tileOffsetArr[n4 + 2] = arr[2];
34
+ this.tileOffsetArr[n4 + 3] = arr[3];
35
+
36
+ //arr = this.segment._getLayerExtentOffset(layer);
37
+ //slice.visibleExtentOffsetArr[n4] = arr[0];
38
+ //slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
39
+ //slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
40
+ //slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
41
+
42
+ }
43
+ }
44
+
45
+ export { Slice }