@openglobus/og 0.11.7 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/css/og.css +5 -2
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +11 -11
  8. package/src/og/Globe.js +18 -6
  9. package/src/og/camera/Camera.js +70 -79
  10. package/src/og/camera/PlanetCamera.js +25 -30
  11. package/src/og/control/DebugInfo.js +2 -2
  12. package/src/og/control/EarthNavigation.js +26 -17
  13. package/src/og/control/Lighting.js +52 -73
  14. package/src/og/control/MouseNavigation.js +30 -29
  15. package/src/og/control/MouseWheelZoomControl.js +257 -0
  16. package/src/og/control/Sun.js +3 -3
  17. package/src/og/control/index.js +2 -0
  18. package/src/og/control/visibleExtent/Segment.js +1862 -0
  19. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  20. package/src/og/control/visibleExtent/drawnode.js +751 -0
  21. package/src/og/entity/BaseBillboard.js +9 -9
  22. package/src/og/entity/Entity.js +742 -742
  23. package/src/og/entity/GeoObjectHandler.js +138 -134
  24. package/src/og/entity/Label.js +7 -7
  25. package/src/og/entity/LabelHandler.js +2 -1
  26. package/src/og/layer/CanvasTiles.js +8 -12
  27. package/src/og/layer/GeoImage.js +2 -10
  28. package/src/og/layer/GeoTexture2d.js +2 -10
  29. package/src/og/layer/GeoVideo.js +2 -10
  30. package/src/og/layer/KML.js +19 -12
  31. package/src/og/layer/Layer.js +4 -23
  32. package/src/og/layer/WMS.js +0 -2
  33. package/src/og/layer/XYZ.js +31 -33
  34. package/src/og/math/Vec3.js +18 -2
  35. package/src/og/quadTree/Node.js +48 -93
  36. package/src/og/quadTree/quadTree.js +1 -1
  37. package/src/og/renderer/Renderer.js +69 -96
  38. package/src/og/renderer/RendererEvents.js +3 -1
  39. package/src/og/scene/Planet.js +171 -173
  40. package/src/og/segment/Segment.js +99 -268
  41. package/src/og/segment/Slice.js +45 -0
  42. package/src/og/shaders/drawnode.js +171 -350
  43. package/src/og/shaders/geoObject.js +15 -6
  44. package/src/og/terrain/EmptyTerrain.js +3 -2
  45. package/src/og/terrain/GlobusTerrain.js +2 -0
  46. package/src/og/utils/GeoImageCreator.js +5 -1
  47. package/src/og/utils/Loader.js +1 -1
  48. package/src/og/utils/PlainSegmentWorker.js +0 -13
  49. package/src/og/webgl/Handler.js +14 -10
  50. package/types/Clock.d.ts +94 -0
  51. package/types/Deferred.d.ts +6 -0
  52. package/types/Events.d.ts +77 -0
  53. package/types/Extent.d.ts +166 -0
  54. package/types/Globe.d.ts +85 -0
  55. package/types/ImageCanvas.d.ts +123 -0
  56. package/types/Lock.d.ts +12 -0
  57. package/types/LonLat.d.ts +108 -0
  58. package/types/Popup.d.ts +42 -0
  59. package/types/QueueArray.d.ts +19 -0
  60. package/types/Rectangle.d.ts +80 -0
  61. package/types/Stack.d.ts +19 -0
  62. package/types/ajax.d.ts +24 -0
  63. package/types/arial.d.ts +48 -0
  64. package/types/astro/astro.d.ts +38 -0
  65. package/types/astro/earth.d.ts +7 -0
  66. package/types/astro/jd.d.ts +254 -0
  67. package/types/bv/Box.d.ts +30 -0
  68. package/types/bv/Sphere.d.ts +38 -0
  69. package/types/bv/index.d.ts +3 -0
  70. package/types/camera/Camera.d.ts +312 -0
  71. package/types/camera/Frustum.d.ts +133 -0
  72. package/types/camera/PlanetCamera.d.ts +219 -0
  73. package/types/camera/index.d.ts +3 -0
  74. package/types/cons.d.ts +40 -0
  75. package/types/control/CompassButton.d.ts +17 -0
  76. package/types/control/Control.d.ts +104 -0
  77. package/types/control/DebugInfo.d.ts +15 -0
  78. package/types/control/EarthCoordinates.d.ts +47 -0
  79. package/types/control/EarthNavigation.d.ts +43 -0
  80. package/types/control/GeoImageDragControl.d.ts +6 -0
  81. package/types/control/KeyboardNavigation.d.ts +21 -0
  82. package/types/control/LayerSwitcher.d.ts +21 -0
  83. package/types/control/Lighting.d.ts +16 -0
  84. package/types/control/MouseNavigation.d.ts +48 -0
  85. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  86. package/types/control/ScaleControl.d.ts +22 -0
  87. package/types/control/ShowFps.d.ts +11 -0
  88. package/types/control/SimpleNavigation.d.ts +25 -0
  89. package/types/control/Sun.d.ts +50 -0
  90. package/types/control/ToggleWireframe.d.ts +12 -0
  91. package/types/control/TouchNavigation.d.ts +48 -0
  92. package/types/control/ZoomControl.d.ts +27 -0
  93. package/types/control/index.d.ts +18 -0
  94. package/types/ellipsoid/Ellipsoid.d.ts +146 -0
  95. package/types/ellipsoid/index.d.ts +3 -0
  96. package/types/ellipsoid/wgs84.d.ts +6 -0
  97. package/types/entity/BaseBillboard.d.ts +215 -0
  98. package/types/entity/Billboard.d.ts +94 -0
  99. package/types/entity/BillboardHandler.d.ts +79 -0
  100. package/types/entity/Entity.d.ts +348 -0
  101. package/types/entity/EntityCollection.d.ts +317 -0
  102. package/types/entity/GeoObject.d.ts +111 -0
  103. package/types/entity/GeoObjectHandler.d.ts +81 -0
  104. package/types/entity/Geometry.d.ts +74 -0
  105. package/types/entity/GeometryHandler.d.ts +76 -0
  106. package/types/entity/Label.d.ts +189 -0
  107. package/types/entity/LabelHandler.d.ts +31 -0
  108. package/types/entity/LabelWorker.d.ts +11 -0
  109. package/types/entity/PointCloud.d.ts +174 -0
  110. package/types/entity/PointCloudHandler.d.ts +38 -0
  111. package/types/entity/Polyline.d.ts +306 -0
  112. package/types/entity/PolylineHandler.d.ts +18 -0
  113. package/types/entity/Ray.d.ts +124 -0
  114. package/types/entity/RayHandler.d.ts +67 -0
  115. package/types/entity/ShapeHandler.d.ts +22 -0
  116. package/types/entity/Strip.d.ts +119 -0
  117. package/types/entity/StripHandler.d.ts +38 -0
  118. package/types/entity/index.d.ts +8 -0
  119. package/types/index.core.d.ts +65 -0
  120. package/types/index.d.ts +45 -0
  121. package/types/index.webgl.d.ts +7 -0
  122. package/types/input/KeyboardHandler.d.ts +10 -0
  123. package/types/input/MouseHandler.d.ts +5 -0
  124. package/types/input/TouchHandler.d.ts +5 -0
  125. package/types/input/input.d.ts +34 -0
  126. package/types/layer/BaseGeoImage.d.ts +94 -0
  127. package/types/layer/CanvasTiles.d.ts +67 -0
  128. package/types/layer/GeoImage.d.ts +52 -0
  129. package/types/layer/GeoTexture2d.d.ts +8 -0
  130. package/types/layer/GeoVideo.d.ts +55 -0
  131. package/types/layer/KML.d.ts +68 -0
  132. package/types/layer/Layer.d.ts +310 -0
  133. package/types/layer/Material.d.ts +45 -0
  134. package/types/layer/Vector.d.ts +208 -0
  135. package/types/layer/WMS.d.ts +61 -0
  136. package/types/layer/XYZ.d.ts +119 -0
  137. package/types/layer/index.d.ts +10 -0
  138. package/types/light/LightSource.d.ts +178 -0
  139. package/types/math/Line2.d.ts +11 -0
  140. package/types/math/Line3.d.ts +10 -0
  141. package/types/math/Mat3.d.ts +65 -0
  142. package/types/math/Mat4.d.ts +176 -0
  143. package/types/math/Plane.d.ts +18 -0
  144. package/types/math/Quat.d.ts +379 -0
  145. package/types/math/Ray.d.ts +82 -0
  146. package/types/math/Vec2.d.ts +309 -0
  147. package/types/math/Vec3.d.ts +467 -0
  148. package/types/math/Vec4.d.ts +162 -0
  149. package/types/math/coder.d.ts +43 -0
  150. package/types/math/index.d.ts +11 -0
  151. package/types/math.d.ts +261 -0
  152. package/types/mercator.d.ts +92 -0
  153. package/types/proj/EPSG3857.d.ts +6 -0
  154. package/types/proj/EPSG4326.d.ts +6 -0
  155. package/types/proj/Proj.d.ts +42 -0
  156. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  157. package/types/quadTree/Node.d.ts +60 -0
  158. package/types/quadTree/quadTree.d.ts +40 -0
  159. package/types/renderer/Renderer.d.ts +290 -0
  160. package/types/renderer/RendererEvents.d.ts +237 -0
  161. package/types/res/images.d.ts +3 -0
  162. package/types/scene/Axes.d.ts +11 -0
  163. package/types/scene/BaseNode.d.ts +60 -0
  164. package/types/scene/Planet.d.ts +576 -0
  165. package/types/scene/RenderNode.d.ts +142 -0
  166. package/types/scene/SkyBox.d.ts +10 -0
  167. package/types/scene/index.d.ts +4 -0
  168. package/types/segment/Segment.d.ts +275 -0
  169. package/types/segment/SegmentLonLat.d.ts +17 -0
  170. package/types/segment/Slice.d.ts +10 -0
  171. package/types/segment/segmentHelper.d.ts +13 -0
  172. package/types/shaders/billboard.d.ts +3 -0
  173. package/types/shaders/depth.d.ts +2 -0
  174. package/types/shaders/drawnode.d.ts +7 -0
  175. package/types/shaders/geoObject.d.ts +3 -0
  176. package/types/shaders/label.d.ts +4 -0
  177. package/types/shaders/pointCloud.d.ts +2 -0
  178. package/types/shaders/polyline.d.ts +3 -0
  179. package/types/shaders/ray.d.ts +2 -0
  180. package/types/shaders/screenFrame.d.ts +2 -0
  181. package/types/shaders/shape.d.ts +4 -0
  182. package/types/shaders/skybox.d.ts +2 -0
  183. package/types/shaders/toneMapping.d.ts +2 -0
  184. package/types/shapes/BaseShape.d.ts +250 -0
  185. package/types/shapes/Sphere.d.ts +41 -0
  186. package/types/terrain/BilTerrain.d.ts +7 -0
  187. package/types/terrain/EmptyTerrain.d.ts +73 -0
  188. package/types/terrain/Geoid.d.ts +26 -0
  189. package/types/terrain/GlobusTerrain.d.ts +116 -0
  190. package/types/terrain/MapboxTerrain.d.ts +7 -0
  191. package/types/terrain/index.d.ts +5 -0
  192. package/types/utils/FontAtlas.d.ts +15 -0
  193. package/types/utils/GeoImageCreator.d.ts +30 -0
  194. package/types/utils/ImagesCacheManager.d.ts +10 -0
  195. package/types/utils/Loader.d.ts +25 -0
  196. package/types/utils/NormalMapCreator.d.ts +39 -0
  197. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  198. package/types/utils/TerrainWorker.d.ts +9 -0
  199. package/types/utils/TextureAtlas.d.ts +111 -0
  200. package/types/utils/VectorTileCreator.d.ts +16 -0
  201. package/types/utils/colorTable.d.ts +143 -0
  202. package/types/utils/earcut.d.ts +6 -0
  203. package/types/utils/shared.d.ts +231 -0
  204. package/types/webgl/Framebuffer.d.ts +135 -0
  205. package/types/webgl/Handler.d.ts +417 -0
  206. package/types/webgl/Multisample.d.ts +89 -0
  207. package/types/webgl/Program.d.ts +161 -0
  208. package/types/webgl/ProgramController.d.ts +89 -0
  209. package/types/webgl/callbacks.d.ts +1 -0
  210. package/types/webgl/index.d.ts +6 -0
  211. package/types/webgl/types.d.ts +2 -0
@@ -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.
@@ -209,6 +199,12 @@ class Segment {
209
199
  */
210
200
  this.terrainExists = false;
211
201
 
202
+ /**
203
+ * Means that tree passage reach the segment, and the segment terrain is ready.
204
+ * @type {boolean}
205
+ */
206
+ this.passReady = false;
207
+
212
208
  this.plainVertices = null;
213
209
  this.plainVerticesHigh = null;
214
210
  this.plainVerticesLow = null;
@@ -241,7 +237,7 @@ class Segment {
241
237
  this._inTheQueue = false;
242
238
  this._appliedNeighborsZoom = [0, 0, 0, 0];
243
239
 
244
- this._renderingSlices = [];
240
+ this._slices = [];
245
241
 
246
242
  this._indexBuffer = null;
247
243
 
@@ -250,19 +246,6 @@ class Segment {
250
246
  this.plainProcessing = false;
251
247
  }
252
248
 
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
249
  /**
267
250
  * Returns entity terrain point.
268
251
  * @public
@@ -946,12 +929,12 @@ class Segment {
946
929
 
947
930
  this.clearSegment();
948
931
 
949
- var i = this._renderingSlices.length;
932
+ var i = this._slices.length;
950
933
  while (i--) {
951
- this._renderingSlices[i].clear();
934
+ this._slices[i].clear();
952
935
  }
953
936
 
954
- this._renderingSlices = null;
937
+ this._slices = null;
955
938
 
956
939
  this.node = null;
957
940
 
@@ -990,9 +973,6 @@ class Segment {
990
973
  this.vertexPositionBufferLow = null;
991
974
  this.vertexTextureCoordBuffer = null;
992
975
 
993
- this._tileOffsetArr = null;
994
- this._visibleExtentOffsetArr = null;
995
-
996
976
  this._projection = null;
997
977
  this._appliedNeighborsZoom = null;
998
978
 
@@ -1013,22 +993,19 @@ class Segment {
1013
993
  var coord_sw = ellipsoid.geodeticToCartesian(extent.southWest.lon, extent.southWest.lat);
1014
994
  var coord_ne = ellipsoid.geodeticToCartesian(extent.northEast.lon, extent.northEast.lat);
1015
995
 
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
- );
996
+ var coord_nw = ellipsoid.geodeticToCartesian(
997
+ extent.southWest.lon,
998
+ extent.northEast.lat
999
+ );
1000
+ var coord_se = ellipsoid.geodeticToCartesian(
1001
+ extent.northEast.lon,
1002
+ extent.southWest.lat
1003
+ );
1026
1004
 
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
- }
1005
+ this._sw.copy(coord_sw);
1006
+ this._nw.copy(coord_nw);
1007
+ this._ne.copy(coord_ne);
1008
+ this._se.copy(coord_se);
1032
1009
 
1033
1010
  this.setBoundingVolume3v(coord_sw, coord_ne);
1034
1011
  }
@@ -1057,31 +1034,30 @@ class Segment {
1057
1034
  this.bsphere.center.z = pn.segment.bsphere.center.z;
1058
1035
  this.bsphere.radius = pn.segment.bsphere.radius;
1059
1036
 
1060
- if (this.tileZoom <= MAX_NORMAL_ZOOM) {
1061
- let i0 = gridSize * offsetY;
1062
- let j0 = gridSize * offsetX;
1037
+ let i0 = gridSize * offsetY;
1038
+ let j0 = gridSize * offsetX;
1063
1039
 
1064
- let pnGsOne = pn.segment.gridSize + 1;
1040
+ let pnGsOne = pn.segment.gridSize + 1;
1065
1041
 
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);
1042
+ let ind_sw = 3 * ((i0 + gridSize) * pnGsOne + j0),
1043
+ ind_nw = 3 * (i0 * pnGsOne + j0),
1044
+ ind_ne = 3 * (i0 * pnGsOne + j0 + gridSize),
1045
+ ind_se = 3 * ((i0 + gridSize) * pnGsOne + j0 + gridSize);
1070
1046
 
1071
- let pVerts = pn.segment.tempVertices;
1047
+ let pVerts = pn.segment.tempVertices;
1072
1048
 
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]);
1049
+ let v_sw = new Vec3(pVerts[ind_sw], pVerts[ind_sw + 1], pVerts[ind_sw + 2]),
1050
+ v_ne = new Vec3(pVerts[ind_ne], pVerts[ind_ne + 1], pVerts[ind_ne + 2]);
1075
1051
 
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]);
1052
+ // check for segment zoom
1053
+ let v_nw = new Vec3(pVerts[ind_nw], pVerts[ind_nw + 1], pVerts[ind_nw + 2]),
1054
+ v_se = new Vec3(pVerts[ind_se], pVerts[ind_se + 1], pVerts[ind_se + 2]);
1055
+
1056
+ this._sw.copy(v_sw);
1057
+ this._nw.copy(v_nw);
1058
+ this._ne.copy(v_ne);
1059
+ this._se.copy(v_se);
1079
1060
 
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
1061
  } else {
1086
1062
  let pseg = pn.segment;
1087
1063
 
@@ -1104,10 +1080,10 @@ class Segment {
1104
1080
  v_rb = new Vec3(bigOne[9], bigOne[10], bigOne[11]);
1105
1081
 
1106
1082
  let vn = new Vec3(
1107
- bigOne[3] - bigOne[0],
1108
- bigOne[4] - bigOne[1],
1109
- bigOne[5] - bigOne[2]
1110
- ),
1083
+ bigOne[3] - bigOne[0],
1084
+ bigOne[4] - bigOne[1],
1085
+ bigOne[5] - bigOne[2]
1086
+ ),
1111
1087
  vw = new Vec3(
1112
1088
  bigOne[6] - bigOne[0],
1113
1089
  bigOne[7] - bigOne[1],
@@ -1291,13 +1267,13 @@ class Segment {
1291
1267
  n.sideSize[2] =
1292
1268
  n.sideSize[3] =
1293
1269
  this.gridSize =
1294
- p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1270
+ p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1295
1271
 
1296
1272
  n.sideSizeLog2[0] =
1297
1273
  n.sideSizeLog2[1] =
1298
1274
  n.sideSizeLog2[2] =
1299
1275
  n.sideSizeLog2[3] =
1300
- Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1276
+ Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1301
1277
 
1302
1278
  if (this.tileZoom <= p.terrain.maxZoom) {
1303
1279
  var nmc = this.planet._normalMapCreator;
@@ -1484,11 +1460,12 @@ class Segment {
1484
1460
 
1485
1461
  var notEmpty = false;
1486
1462
 
1487
- var slice = this._renderingSlices[sliceIndex];
1463
+ var slice = this._slices[sliceIndex];
1488
1464
 
1489
1465
  if (!slice) {
1490
- slice = this._renderingSlices[sliceIndex] = new _RenderingSlice(p);
1466
+ slice = this._slices[sliceIndex] = new Slice(this);
1491
1467
  } else {
1468
+ //TODO: optimization!!!
1492
1469
  slice.layers = [];
1493
1470
  }
1494
1471
 
@@ -1511,40 +1488,7 @@ class Segment {
1511
1488
  this.planet._renderCompleted = false;
1512
1489
  }
1513
1490
 
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;
1491
+ slice.append(li, m);
1548
1492
 
1549
1493
  p._samplerArr[n] = n;
1550
1494
 
@@ -1561,9 +1505,12 @@ class Segment {
1561
1505
  gl.uniform1i(shu.samplerCount, n);
1562
1506
  gl.uniform1f(shu.height, currHeight);
1563
1507
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1508
+
1509
+ //slice.uniform(gl, shu);
1510
+
1564
1511
  gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1565
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1566
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1512
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1513
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1567
1514
 
1568
1515
  // bind normalmap texture
1569
1516
  if (p.lightEnabled) {
@@ -1575,30 +1522,12 @@ class Segment {
1575
1522
 
1576
1523
  // bind segment specular and night material texture coordinates
1577
1524
  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
1525
  }
1583
1526
 
1584
1527
  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
- );
1528
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1593
1529
  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
- );
1530
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1602
1531
 
1603
1532
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1604
1533
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1608,7 +1537,7 @@ class Segment {
1608
1537
  }
1609
1538
  }
1610
1539
 
1611
- heightPickingRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
1540
+ heightPickingRendering(sh, layerSlice) {
1612
1541
  var gl = this.handler.gl;
1613
1542
  var sha = sh.attributes,
1614
1543
  shu = sh.uniforms;
@@ -1616,11 +1545,6 @@ class Segment {
1616
1545
  var pm = this.materials,
1617
1546
  p = this.planet;
1618
1547
 
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
1548
  var currHeight;
1625
1549
  if (layerSlice) {
1626
1550
  currHeight = layerSlice[0]._height;
@@ -1628,53 +1552,16 @@ class Segment {
1628
1552
  currHeight = 0;
1629
1553
  }
1630
1554
 
1631
- var n = 0;
1632
-
1633
- var slice = this._renderingSlices[sliceIndex];
1555
+ gl.uniform1f(shu.height, currHeight);
1634
1556
 
1635
- var notEmpty = false;
1557
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1558
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1636
1559
 
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
- }
1560
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1561
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1643
1562
 
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);
1651
-
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
- }
1563
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1564
+ gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1678
1565
  }
1679
1566
 
1680
1567
  colorPickingRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
@@ -1694,9 +1581,11 @@ class Segment {
1694
1581
 
1695
1582
  var notEmpty = false;
1696
1583
 
1697
- var slice = this._renderingSlices[sliceIndex];
1584
+ var slice = this._slices[sliceIndex];
1698
1585
 
1699
- for (var n = 0; n < slice.layers.length; n++) {
1586
+ let len = slice.layers.length;
1587
+
1588
+ for (let n = 0; n < len; n++) {
1700
1589
  notEmpty = true;
1701
1590
 
1702
1591
  var li = slice.layers[n];
@@ -1717,33 +1606,22 @@ class Segment {
1717
1606
  }
1718
1607
 
1719
1608
  if (notEmpty || !isOverlay) {
1720
- gl.uniform1i(shu.samplerCount, n);
1609
+ gl.uniform1i(shu.samplerCount, len);
1721
1610
  gl.uniform1f(shu.height, currHeight);
1722
1611
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1723
1612
  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
1613
  gl.uniform4fv(shu.pickingColorArr, p._pickingColorArr);
1728
1614
 
1615
+ //slice.uniform(gl, shu);
1616
+
1617
+ gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1618
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1619
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1620
+
1729
1621
  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
- );
1622
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1738
1623
  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
- );
1624
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1747
1625
 
1748
1626
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1749
1627
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1753,19 +1631,11 @@ class Segment {
1753
1631
  }
1754
1632
  }
1755
1633
 
1756
- depthRendering(sh, layerSlice, sliceIndex, defaultTexture, isOverlay) {
1634
+ depthRendering(sh, layerSlice) {
1757
1635
  var gl = this.handler.gl;
1758
1636
  var sha = sh.attributes,
1759
1637
  shu = sh.uniforms;
1760
1638
 
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
1639
  var currHeight;
1770
1640
  if (layerSlice) {
1771
1641
  currHeight = layerSlice[0]._height;
@@ -1773,62 +1643,23 @@ class Segment {
1773
1643
  currHeight = 0;
1774
1644
  }
1775
1645
 
1776
- var n = 0;
1777
-
1778
- var slice = this._renderingSlices[sliceIndex];
1646
+ gl.uniform1f(shu.height, currHeight);
1779
1647
 
1780
- var notEmpty = false;
1648
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1649
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1781
1650
 
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);
1651
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1652
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1796
1653
 
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
- }
1654
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
1655
+ gl.drawElements(gl.TRIANGLE_STRIP, this._indexBuffer.numItems, gl.UNSIGNED_INT, 0);
1823
1656
  }
1824
1657
 
1825
1658
  _getIndexBuffer() {
1826
1659
  var s = this.node.sideSizeLog2;
1827
1660
  var cache = this.planet._indexesCache[Math.log2(this.gridSize)][s[0]][s[1]][s[2]][s[3]];
1828
1661
  if (!cache.buffer) {
1829
- let indexes = segmentHelper
1830
- .getInstance()
1831
- .createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1662
+ let indexes = segmentHelper.getInstance().createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1832
1663
  cache.buffer = this.planet.renderer.handler.createElementArrayBuffer(indexes, 1);
1833
1664
  this.planet._indexesCacheToRemoveCounter++;
1834
1665
  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 }