@openglobus/og 0.11.6 → 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 (185) hide show
  1. package/package.json +11 -11
  2. package/src/og/Globe.js +8 -5
  3. package/src/og/Popup.js +3 -2
  4. package/src/og/camera/PlanetCamera.js +9 -4
  5. package/src/og/control/Lighting.js +33 -2
  6. package/src/og/ellipsoid/Ellipsoid.js +1 -1
  7. package/src/og/entity/BaseBillboard.js +67 -76
  8. package/src/og/entity/BillboardHandler.js +15 -8
  9. package/src/og/entity/Label.js +44 -47
  10. package/src/og/entity/LabelHandler.js +25 -25
  11. package/src/og/entity/LabelWorker.js +21 -16
  12. package/src/og/layer/Layer.js +28 -15
  13. package/src/og/layer/Material.js +1 -1
  14. package/src/og/quadTree/Node.js +16 -30
  15. package/src/og/renderer/Renderer.js +19 -29
  16. package/src/og/renderer/RendererEvents.js +41 -21
  17. package/src/og/scene/Planet.js +11 -28
  18. package/src/og/shaders/drawnode.js +135 -142
  19. package/src/og/shaders/toneMapping.js +1 -0
  20. package/src/og/shapes/BaseShape.js +1 -1
  21. package/src/og/utils/FontAtlas.js +6 -2
  22. package/src/og/utils/TextureAtlas.js +2 -2
  23. package/src/og/utils/VectorTileCreator.js +1 -3
  24. package/src/og/utils/shared.js +1 -1
  25. package/src/og/webgl/Handler.js +152 -118
  26. package/types/Clock.d.ts +0 -94
  27. package/types/Deferred.d.ts +0 -6
  28. package/types/Events.d.ts +0 -77
  29. package/types/Extent.d.ts +0 -166
  30. package/types/Globe.d.ts +0 -82
  31. package/types/ImageCanvas.d.ts +0 -123
  32. package/types/Lock.d.ts +0 -12
  33. package/types/LonLat.d.ts +0 -108
  34. package/types/Popup.d.ts +0 -42
  35. package/types/QueueArray.d.ts +0 -19
  36. package/types/Rectangle.d.ts +0 -80
  37. package/types/Stack.d.ts +0 -19
  38. package/types/ajax.d.ts +0 -24
  39. package/types/arial.d.ts +0 -48
  40. package/types/astro/astro.d.ts +0 -38
  41. package/types/astro/earth.d.ts +0 -7
  42. package/types/astro/jd.d.ts +0 -254
  43. package/types/bv/Box.d.ts +0 -30
  44. package/types/bv/Sphere.d.ts +0 -38
  45. package/types/bv/index.d.ts +0 -3
  46. package/types/camera/Camera.d.ts +0 -312
  47. package/types/camera/Frustum.d.ts +0 -133
  48. package/types/camera/PlanetCamera.d.ts +0 -218
  49. package/types/camera/index.d.ts +0 -3
  50. package/types/cons.d.ts +0 -40
  51. package/types/control/CompassButton.d.ts +0 -17
  52. package/types/control/Control.d.ts +0 -104
  53. package/types/control/DebugInfo.d.ts +0 -15
  54. package/types/control/EarthCoordinates.d.ts +0 -47
  55. package/types/control/EarthNavigation.d.ts +0 -42
  56. package/types/control/GeoImageDragControl.d.ts +0 -6
  57. package/types/control/KeyboardNavigation.d.ts +0 -21
  58. package/types/control/LayerSwitcher.d.ts +0 -21
  59. package/types/control/Lighting.d.ts +0 -16
  60. package/types/control/MouseNavigation.d.ts +0 -47
  61. package/types/control/ScaleControl.d.ts +0 -22
  62. package/types/control/ShowFps.d.ts +0 -11
  63. package/types/control/SimpleNavigation.d.ts +0 -25
  64. package/types/control/Sun.d.ts +0 -50
  65. package/types/control/ToggleWireframe.d.ts +0 -12
  66. package/types/control/TouchNavigation.d.ts +0 -48
  67. package/types/control/ZoomControl.d.ts +0 -27
  68. package/types/control/index.d.ts +0 -17
  69. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  70. package/types/ellipsoid/index.d.ts +0 -3
  71. package/types/ellipsoid/wgs84.d.ts +0 -6
  72. package/types/entity/BaseBillboard.d.ts +0 -215
  73. package/types/entity/Billboard.d.ts +0 -94
  74. package/types/entity/BillboardHandler.d.ts +0 -78
  75. package/types/entity/Entity.d.ts +0 -348
  76. package/types/entity/EntityCollection.d.ts +0 -317
  77. package/types/entity/GeoObject.d.ts +0 -111
  78. package/types/entity/GeoObjectHandler.d.ts +0 -77
  79. package/types/entity/Geometry.d.ts +0 -74
  80. package/types/entity/GeometryHandler.d.ts +0 -76
  81. package/types/entity/Label.d.ts +0 -189
  82. package/types/entity/LabelHandler.d.ts +0 -31
  83. package/types/entity/LabelWorker.d.ts +0 -9
  84. package/types/entity/PointCloud.d.ts +0 -174
  85. package/types/entity/PointCloudHandler.d.ts +0 -38
  86. package/types/entity/Polyline.d.ts +0 -306
  87. package/types/entity/PolylineHandler.d.ts +0 -18
  88. package/types/entity/Ray.d.ts +0 -124
  89. package/types/entity/RayHandler.d.ts +0 -67
  90. package/types/entity/ShapeHandler.d.ts +0 -22
  91. package/types/entity/Strip.d.ts +0 -119
  92. package/types/entity/StripHandler.d.ts +0 -38
  93. package/types/entity/index.d.ts +0 -8
  94. package/types/index.core.d.ts +0 -65
  95. package/types/index.d.ts +0 -45
  96. package/types/index.webgl.d.ts +0 -7
  97. package/types/input/KeyboardHandler.d.ts +0 -10
  98. package/types/input/MouseHandler.d.ts +0 -5
  99. package/types/input/TouchHandler.d.ts +0 -5
  100. package/types/input/input.d.ts +0 -34
  101. package/types/layer/BaseGeoImage.d.ts +0 -94
  102. package/types/layer/CanvasTiles.d.ts +0 -68
  103. package/types/layer/GeoImage.d.ts +0 -52
  104. package/types/layer/GeoTexture2d.d.ts +0 -8
  105. package/types/layer/GeoVideo.d.ts +0 -55
  106. package/types/layer/KML.d.ts +0 -63
  107. package/types/layer/Layer.d.ts +0 -326
  108. package/types/layer/Material.d.ts +0 -45
  109. package/types/layer/Vector.d.ts +0 -208
  110. package/types/layer/WMS.d.ts +0 -63
  111. package/types/layer/XYZ.d.ts +0 -120
  112. package/types/layer/index.d.ts +0 -10
  113. package/types/light/LightSource.d.ts +0 -178
  114. package/types/math/Line2.d.ts +0 -11
  115. package/types/math/Line3.d.ts +0 -10
  116. package/types/math/Mat3.d.ts +0 -65
  117. package/types/math/Mat4.d.ts +0 -176
  118. package/types/math/Plane.d.ts +0 -18
  119. package/types/math/Quat.d.ts +0 -379
  120. package/types/math/Ray.d.ts +0 -82
  121. package/types/math/Vec2.d.ts +0 -309
  122. package/types/math/Vec3.d.ts +0 -460
  123. package/types/math/Vec4.d.ts +0 -162
  124. package/types/math/coder.d.ts +0 -43
  125. package/types/math/index.d.ts +0 -11
  126. package/types/math.d.ts +0 -261
  127. package/types/mercator.d.ts +0 -92
  128. package/types/proj/EPSG3857.d.ts +0 -6
  129. package/types/proj/EPSG4326.d.ts +0 -6
  130. package/types/proj/Proj.d.ts +0 -42
  131. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  132. package/types/quadTree/Node.d.ts +0 -61
  133. package/types/quadTree/quadTree.d.ts +0 -40
  134. package/types/renderer/Renderer.d.ts +0 -300
  135. package/types/renderer/RendererEvents.d.ts +0 -233
  136. package/types/res/images.d.ts +0 -3
  137. package/types/scene/Axes.d.ts +0 -11
  138. package/types/scene/BaseNode.d.ts +0 -60
  139. package/types/scene/Planet.d.ts +0 -577
  140. package/types/scene/RenderNode.d.ts +0 -142
  141. package/types/scene/SkyBox.d.ts +0 -10
  142. package/types/scene/index.d.ts +0 -4
  143. package/types/segment/Segment.d.ts +0 -279
  144. package/types/segment/SegmentLonLat.d.ts +0 -16
  145. package/types/segment/segmentHelper.d.ts +0 -13
  146. package/types/shaders/billboard.d.ts +0 -3
  147. package/types/shaders/depth.d.ts +0 -2
  148. package/types/shaders/drawnode.d.ts +0 -7
  149. package/types/shaders/geoObject.d.ts +0 -3
  150. package/types/shaders/label.d.ts +0 -4
  151. package/types/shaders/pointCloud.d.ts +0 -2
  152. package/types/shaders/polyline.d.ts +0 -3
  153. package/types/shaders/ray.d.ts +0 -2
  154. package/types/shaders/screenFrame.d.ts +0 -2
  155. package/types/shaders/shape.d.ts +0 -4
  156. package/types/shaders/skybox.d.ts +0 -2
  157. package/types/shaders/toneMapping.d.ts +0 -2
  158. package/types/shapes/BaseShape.d.ts +0 -250
  159. package/types/shapes/Sphere.d.ts +0 -41
  160. package/types/terrain/BilTerrain.d.ts +0 -7
  161. package/types/terrain/EmptyTerrain.d.ts +0 -72
  162. package/types/terrain/Geoid.d.ts +0 -26
  163. package/types/terrain/GlobusTerrain.d.ts +0 -116
  164. package/types/terrain/MapboxTerrain.d.ts +0 -7
  165. package/types/terrain/index.d.ts +0 -5
  166. package/types/utils/FontAtlas.d.ts +0 -14
  167. package/types/utils/GeoImageCreator.d.ts +0 -30
  168. package/types/utils/ImagesCacheManager.d.ts +0 -10
  169. package/types/utils/Loader.d.ts +0 -25
  170. package/types/utils/NormalMapCreator.d.ts +0 -39
  171. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  172. package/types/utils/TerrainWorker.d.ts +0 -9
  173. package/types/utils/TextureAtlas.d.ts +0 -111
  174. package/types/utils/VectorTileCreator.d.ts +0 -16
  175. package/types/utils/colorTable.d.ts +0 -143
  176. package/types/utils/earcut.d.ts +0 -6
  177. package/types/utils/shared.d.ts +0 -231
  178. package/types/webgl/Framebuffer.d.ts +0 -135
  179. package/types/webgl/Handler.d.ts +0 -397
  180. package/types/webgl/Multisample.d.ts +0 -89
  181. package/types/webgl/Program.d.ts +0 -161
  182. package/types/webgl/ProgramController.d.ts +0 -89
  183. package/types/webgl/callbacks.d.ts +0 -1
  184. package/types/webgl/index.d.ts +0 -6
  185. package/types/webgl/types.d.ts +0 -2
@@ -84,10 +84,14 @@ class RendererEvents extends Events {
84
84
  ms.moving ||
85
85
  ms.justStopped
86
86
  );
87
- },
88
- /** Current mouse X position. */
87
+ },
88
+ /** Current screen mouse X position. */
89
+ clientX: 0,
90
+ /** Current screen mouse Y position. */
91
+ clientY: 0,
92
+ /** Current viewport mouse X position. */
89
93
  x: 0,
90
- /** Current mouse Y position. */
94
+ /** Current viewport mouse Y position. */
91
95
  y: 0,
92
96
  /** Current mouse X position from 0 to 1 */
93
97
  nx: 0,
@@ -357,16 +361,20 @@ class RendererEvents extends Events {
357
361
  this._mClkBegins = 0;
358
362
  }
359
363
 
360
- if (ms.x === event.clientX && ms.y === event.clientY) {
364
+ if (ms.clientX === event.clientX && ms.clientY === event.clientY) {
361
365
  return;
362
- }
366
+ }
363
367
 
364
- ms.x = event.clientX;
365
- ms.y = event.clientY;
368
+ ms.clientX = event.clientX;
369
+ ms.clientY = event.clientY;
370
+
371
+ let h = this.renderer.handler;
372
+
373
+ ms.x = event.clientX * h.pixelRatio;
374
+ ms.y = event.clientY * h.pixelRatio;
366
375
 
367
- var cnv = this.renderer.handler.canvas;
368
- ms.nx = ms.x / cnv.width;
369
- ms.ny = ms.y / cnv.height;
376
+ ms.nx = ms.x / h.canvas.width;
377
+ ms.ny = ms.y / h.canvas.height;
370
378
 
371
379
  ms.moving = true;
372
380
 
@@ -492,12 +500,18 @@ class RendererEvents extends Events {
492
500
  */
493
501
  onTouchStart(event) {
494
502
  var ts = this.touchState;
495
- ts.sys = event;
496
- ts.x = event.touches.item(0).clientX - event.offsetLeft;
497
- ts.y = event.touches.item(0).clientY - event.offsetTop;
498
- var cnv = this.renderer.handler.canvas;
499
- ts.nx = ts.x / cnv.width;
500
- ts.ny = ts.y / cnv.height;
503
+ ts.sys = event;
504
+
505
+ ts.clienX = event.touches.item(0).clientX - event.offsetLeft;
506
+ ts.clientY = event.touches.item(0).clientY - event.offsetTop;
507
+
508
+ let h = this.renderer.handler;
509
+
510
+ ts.x = ts.clientX * h.pixelRatio;
511
+ ts.y = ts.clientY * h.pixelRatio;
512
+
513
+ ts.nx = ts.x / h.canvas.width;
514
+ ts.ny = ts.y / h.canvas.height;
501
515
  ts.prev_x = ts.x;
502
516
  ts.prev_y = ts.y;
503
517
  ts.touchStart = true;
@@ -551,11 +565,17 @@ class RendererEvents extends Events {
551
565
  */
552
566
  onTouchMove(event) {
553
567
  var ts = this.touchState;
554
- ts.x = event.touches.item(0).clientX - event.offsetLeft;
555
- ts.y = event.touches.item(0).clientY - event.offsetTop;
556
- var cnv = this.renderer.handler.canvas;
557
- ts.nx = ts.x / cnv.width;
558
- ts.ny = ts.y / cnv.height;
568
+ ts.clientX = event.touches.item(0).clientX - event.offsetLeft;
569
+ ts.clientY = event.touches.item(0).clientY - event.offsetTop;
570
+
571
+ var h = this.renderer.handler;
572
+
573
+ ts.x = ts.clientX * h.pixelRatio;
574
+ ts.y = ts.clientY * h.pixelRatio;
575
+
576
+ ts.nx = ts.x / h.canvas.width;
577
+ ts.ny = ts.y / h.canvas.height;
578
+
559
579
  ts.sys = event;
560
580
  ts.moving = true;
561
581
  this._dblTchBegins = 0;
@@ -32,7 +32,7 @@ import { NIGHT, SPECULAR } from "../res/images.js";
32
32
  import { Geoid } from "../terrain/Geoid.js";
33
33
  import { isUndef } from "../utils/shared.js";
34
34
 
35
- const MAX_LOD = 0.9;
35
+ const MAX_LOD = 1.0;
36
36
  const MIN_LOD = 0.75;
37
37
 
38
38
  let _tempPickingPix_ = new Uint8Array(4),
@@ -93,7 +93,7 @@ const EVENT_NAMES = [
93
93
  * @param {string} [options.name="Earth"] - Planet name(Earth by default)
94
94
  * @param {Ellipsoid} [options.ellipsoid] - Planet ellipsoid(WGS84 by default)
95
95
  * @param {Number} [options.maxGridSize=128] - Segment maximal grid size
96
- * @param {Number} [options.maxEqualZoomAltitude=850000.0] - Maximal altitude since segments on the screen bacame the same zoom level
96
+ * @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
97
97
  * @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
98
98
  * @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
99
99
  * @fires og.scene.Planet#draw
@@ -180,7 +180,7 @@ export class Planet extends RenderNode {
180
180
  this._minAltitude = options.minAltitude;
181
181
  this._maxAltitude = options.maxAltitude;
182
182
 
183
- this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 850000.0;
183
+ this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 15000000.0;
184
184
  this.minEqualZoomAltitude = options.minEqualZoomAltitude || 10000.0;
185
185
  this.minEqualZoomCameraSlope = options.minEqualZoomCameraSlope || 0.8;
186
186
 
@@ -731,31 +731,13 @@ export class Planet extends RenderNode {
731
731
  }
732
732
 
733
733
  // Creating quad trees nodes
734
- this._quadTree = new Node(
735
- Segment,
736
- this,
737
- quadTree.NW,
738
- null,
739
- 0,
740
- 0,
734
+ this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0,
741
735
  Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
742
736
  );
743
- this._quadTreeNorth = new Node(
744
- SegmentLonLat,
745
- this,
746
- quadTree.NW,
747
- null,
748
- 0,
749
- 0,
737
+ this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
750
738
  Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
751
739
  );
752
- this._quadTreeSouth = new Node(
753
- SegmentLonLat,
754
- this,
755
- quadTree.NW,
756
- null,
757
- 0,
758
- 0,
740
+ this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
759
741
  Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
760
742
  );
761
743
 
@@ -771,7 +753,7 @@ export class Planet extends RenderNode {
771
753
  // loading Earth night glowing texture
772
754
  if (this._useNightTexture) {
773
755
  createImageBitmap(NIGHT).then(
774
- (e) => (this._nightTexture = this.renderer.handler.createTexture(e))
756
+ (e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
775
757
  );
776
758
  }
777
759
 
@@ -1147,12 +1129,13 @@ export class Planet extends RenderNode {
1147
1129
  this._vectorTileCreator.frame();
1148
1130
  }
1149
1131
 
1150
- gl.blendEquation(gl.FUNC_ADD);
1151
1132
 
1152
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
1133
+ gl.enable(gl.CULL_FACE);
1153
1134
 
1154
1135
  gl.enable(gl.BLEND);
1155
- gl.enable(gl.CULL_FACE);
1136
+ gl.blendEquation(gl.FUNC_ADD);
1137
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
1138
+ //gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ZERO);
1156
1139
 
1157
1140
  if (this.lightEnabled) {
1158
1141
  h.programs.drawnode_screen_wl.activate();
@@ -5,9 +5,17 @@
5
5
  "use strict";
6
6
 
7
7
  import { Program } from "../webgl/Program.js";
8
+
9
+ // REMEMBER!
10
+ // src*(1)+dest*(1-src.alpha)
11
+ // glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
12
+ // src*(src.alpha)+dest*(1-src.alpha)
13
+ // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
8
14
 
9
15
  const CORNERS = `const vec2 BOTTOMLEFT = vec2(-0.01);
10
- const vec2 TOPRIGHT = vec2(1.01);`;
16
+ const vec2 TOPRIGHT = vec2(1.01);`;
17
+
18
+ const NIGHT = `const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);`;
11
19
 
12
20
  export function drawnode_screen_nl() {
13
21
  return new Program("drawnode_screen_nl", {
@@ -66,42 +74,48 @@ export function drawnode_screen_nl() {
66
74
  uniform sampler2D defaultTexture;
67
75
  uniform sampler2D samplerArr[5];
68
76
  uniform int samplerCount;
69
- varying vec2 vTextureCoord;
77
+ varying vec2 vTextureCoord;
78
+
70
79
  /* return 1 if v inside the box, return 0 otherwise */
71
80
  float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
72
81
  vec2 s = step(bottomLeft, v) - step(topRight, v);
73
82
  return s.x * s.y;
83
+ }
84
+
85
+ ${CORNERS}
86
+
87
+ void blend(
88
+ out vec4 prevColor,
89
+ in sampler2D sampler,
90
+ in vec4 tileOffset,
91
+ in vec4 visibleExtentOffset,
92
+ in vec4 transparentColor)
93
+ {
94
+ vec4 t = texture2D( sampler, tileOffset.xy + vTextureCoord.xy * tileOffset.zw );
95
+
96
+ float emptiness = smoothstep(0.35, 0.5, distance( t.rgb, transparentColor.rgb )) *
97
+ insideBox(visibleExtentOffset.xy + vTextureCoord.xy * visibleExtentOffset.zw, BOTTOMLEFT, TOPRIGHT);
98
+
99
+ prevColor = prevColor * (1.0 - t.a * transparentColor.a * emptiness) + vec4(t.rgb, t.a) * transparentColor.a * emptiness;
74
100
  }
75
101
 
76
- ${CORNERS}
77
-
78
102
  void main(void) {
79
103
  gl_FragColor = texture2D( defaultTexture, vTextureCoord );
80
- if( samplerCount == 0 ) return;
81
-
82
- vec4 t = texture2D( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw ) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
83
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
84
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb, 1.0), transparentColorArr[0].a * t.a * emptiness);
85
- if( samplerCount == 1 ) return;
86
-
87
- t = texture2D( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw ) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
88
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
89
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb, 1.0), transparentColorArr[1].a * t.a * emptiness);
90
- if( samplerCount == 2 ) return;
91
-
92
- t = texture2D( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw ) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
93
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
94
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb, 1.0), transparentColorArr[2].a * t.a * emptiness);
95
- if( samplerCount == 3 ) return;
96
-
97
- t = texture2D( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw ) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
98
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
99
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb, 1.0), transparentColorArr[3].a * t.a * emptiness);
100
- if( samplerCount == 4 ) return;
101
-
102
- t = texture2D( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw ) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
103
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
104
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb, 1.0), transparentColorArr[4].a * t.a * emptiness);
104
+ if( samplerCount == 0 ) return;
105
+
106
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], visibleExtentOffsetArr[0], transparentColorArr[0]);
107
+ if( samplerCount == 1 ) return;
108
+
109
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], visibleExtentOffsetArr[1], transparentColorArr[1]);
110
+ if( samplerCount == 2 ) return;
111
+
112
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], visibleExtentOffsetArr[2], transparentColorArr[2]);
113
+ if( samplerCount == 3 ) return;
114
+
115
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], visibleExtentOffsetArr[3], transparentColorArr[3]);
116
+ if( samplerCount == 4 ) return;
117
+
118
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], visibleExtentOffsetArr[4], transparentColorArr[4]);
105
119
  }`
106
120
  });
107
121
  }
@@ -209,9 +223,24 @@ export function drawnode_screen_wl() {
209
223
  return s.x * s.y;
210
224
  }
211
225
 
212
- ${CORNERS}
213
-
214
- const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);
226
+ ${CORNERS}
227
+
228
+ ${NIGHT}
229
+
230
+ void blend(
231
+ out vec4 prevColor,
232
+ in sampler2D sampler,
233
+ in vec4 tileOffset,
234
+ in vec4 visibleExtentOffset,
235
+ in vec4 transparentColor)
236
+ {
237
+ vec4 t = texture2D( sampler, tileOffset.xy + vTextureCoord.xy * tileOffset.zw );
238
+
239
+ float emptiness = smoothstep(0.35, 0.5, distance( t.rgb, transparentColor.rgb )) *
240
+ insideBox(visibleExtentOffset.xy + vTextureCoord.xy * visibleExtentOffset.zw, BOTTOMLEFT, TOPRIGHT);
241
+
242
+ prevColor = prevColor * (1.0 - t.a * transparentColor.a * emptiness) + vec4(t.rgb, t.a) * transparentColor.a * emptiness;
243
+ }
215
244
 
216
245
  void main(void) {
217
246
 
@@ -236,54 +265,24 @@ export function drawnode_screen_wl() {
236
265
  gl_FragColor = vec4(t.rgb * lightWeighting + night + spec, t.a);
237
266
  if( samplerCount == 0 ) return;
238
267
 
239
-
240
-
241
- spec = specularMaterial[1].rgb * pow( reflection, specularMaterial[1].w) * (1.0 + shininess);
242
- lightWeighting = ambientMaterial[1] + diffuseMaterial[1] * diffuseLightWeighting + spec;
243
-
244
- t = texture2D( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord.xy * tileOffsetArr[0].zw ) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord.xy * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
245
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
246
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[0].a * t.a * emptiness);
247
- if( samplerCount == 1 ) return;
248
-
249
-
250
-
251
- spec = specularMaterial[2].rgb * pow( reflection, specularMaterial[2].w);
252
- lightWeighting = ambientMaterial[2] + diffuseMaterial[2] * diffuseLightWeighting + spec;
253
-
254
- t = texture2D( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord.xy * tileOffsetArr[1].zw ) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord.xy * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
255
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
256
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[1].a * t.a * emptiness);
257
- if( samplerCount == 2 ) return;
258
-
259
-
260
-
261
- spec = specularMaterial[3].rgb * pow( reflection, specularMaterial[3].w);
262
- lightWeighting = ambientMaterial[3] + diffuseMaterial[3] * diffuseLightWeighting + spec;
263
-
264
- t = texture2D( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord.xy * tileOffsetArr[2].zw ) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord.xy * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
265
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
266
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[2].a * t.a * emptiness);
267
- if( samplerCount == 3 ) return;
268
-
269
-
270
-
271
- spec = specularMaterial[4].rgb * pow( reflection, specularMaterial[4].w);
272
- lightWeighting = ambientMaterial[4] + diffuseMaterial[4] * diffuseLightWeighting + spec;
273
-
274
- t = texture2D( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord.xy * tileOffsetArr[3].zw ) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord.xy * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
275
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
276
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[3].a * t.a * emptiness);
277
- if( samplerCount == 4 ) return;
278
-
279
-
280
-
281
- spec = specularMaterial[5].rgb * pow( reflection, specularMaterial[5].w);
282
- lightWeighting = ambientMaterial[5] + diffuseMaterial[5] * diffuseLightWeighting + spec;
283
-
284
- t = texture2D( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord.xy * tileOffsetArr[4].zw ) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord.xy * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
285
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
286
- gl_FragColor = mix( gl_FragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[4].a * t.a * emptiness);
268
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], visibleExtentOffsetArr[0], transparentColorArr[0],
269
+ specularMaterial[1], ambientMaterial[1], diffuseMaterial[1]);
270
+ if( samplerCount == 1 ) return;
271
+
272
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], visibleExtentOffsetArr[1], transparentColorArr[1],
273
+ specularMaterial[2], ambientMaterial[2], diffuseMaterial[2]);
274
+ if( samplerCount == 2 ) return;
275
+
276
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], visibleExtentOffsetArr[2], transparentColorArr[2],
277
+ specularMaterial[3], ambientMaterial[3], diffuseMaterial[3]);
278
+ if( samplerCount == 3 ) return;
279
+
280
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], visibleExtentOffsetArr[3], transparentColorArr[3],
281
+ specularMaterial[4], ambientMaterial[4], diffuseMaterial[4]);
282
+ if( samplerCount == 4 ) return;
283
+
284
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], visibleExtentOffsetArr[4], transparentColorArr[4],
285
+ specularMaterial[5], ambientMaterial[5], diffuseMaterial[5]);
287
286
  }`
288
287
  });
289
288
  }
@@ -321,7 +320,7 @@ export function drawnode_screen_wl_webgl2() {
321
320
  aTextureCoord: "vec2"
322
321
  },
323
322
 
324
- vertexShader: `#version 300 es
323
+ vertexShader: `#version 300 es
325
324
 
326
325
  in vec3 aVertexPositionHigh;
327
326
  in vec3 aVertexPositionLow;
@@ -387,7 +386,12 @@ export function drawnode_screen_wl_webgl2() {
387
386
  in vec4 vTextureCoord;
388
387
  in vec2 vGlobalTextureCoord;
389
388
  in vec4 v_vertex;
390
- in float v_height;
389
+ in float v_height;
390
+
391
+ float shininess;
392
+ float reflection;
393
+ float diffuseLightWeighting;
394
+ vec3 night;
391
395
 
392
396
  layout(location = 0) out vec4 fragColor;
393
397
 
@@ -399,7 +403,28 @@ export function drawnode_screen_wl_webgl2() {
399
403
 
400
404
  ${CORNERS}
401
405
 
402
- const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);
406
+ ${NIGHT}
407
+
408
+ void blend(
409
+ out vec4 dest,
410
+ in sampler2D sampler,
411
+ in vec4 tileOffset,
412
+ in vec4 visibleExtentOffset,
413
+ in vec4 transparentColor,
414
+ in vec4 specular,
415
+ in vec3 ambient,
416
+ in vec3 diffuse)
417
+ {
418
+ vec3 spec = specular.rgb * pow(reflection, specular.w) * (1.0 + shininess);
419
+ vec3 lightWeighting = ambient + diffuse * diffuseLightWeighting + spec;
420
+
421
+ vec4 src = texture( sampler, tileOffset.xy + vTextureCoord.xy * tileOffset.zw );
422
+
423
+ float emptiness = smoothstep(0.35, 0.5, distance( src.rgb, transparentColor.rgb )) *
424
+ insideBox(visibleExtentOffset.xy + vTextureCoord.xy * visibleExtentOffset.zw, BOTTOMLEFT, TOPRIGHT);
425
+
426
+ dest = dest * (1.0 - src.a * transparentColor.a * emptiness) + vec4(src.rgb * lightWeighting + night + spec * src.a, src.a) * transparentColor.a * emptiness;
427
+ }
403
428
 
404
429
  void main(void) {
405
430
 
@@ -408,70 +433,38 @@ export function drawnode_screen_wl_webgl2() {
408
433
  vec3 lightDirection = normalize(lightsPositions[0].xyz - v_vertex.xyz * lightsPositions[0].w);
409
434
  vec3 eyeDirection = normalize(-v_vertex.xyz);
410
435
  vec3 reflectionDirection = reflect(-lightDirection, normal);
411
- vec4 nightImageColor = texture( nightTexture, vGlobalTextureCoord.st );
412
- float shininess = texture( specularTexture, vGlobalTextureCoord.st ).r * 255.0 * overGround;
413
- float reflection = max( dot(reflectionDirection, eyeDirection), 0.0);
414
- float diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
415
- vec3 night = nightStep * (0.3 - diffuseLightWeighting) * nightImageColor.rgb;
416
- night *= overGround * step(0.0, night);
417
-
418
-
436
+ vec4 nightImageColor = texture( nightTexture, vGlobalTextureCoord.st );
419
437
 
438
+ shininess = texture( specularTexture, vGlobalTextureCoord.st ).r * 255.0 * overGround;
439
+ reflection = max( dot(reflectionDirection, eyeDirection), 0.0);
440
+ diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
441
+ night = nightStep * (.18 - diffuseLightWeighting * 3.0) * nightImageColor.rgb;
442
+ night *= overGround * step(0.0, night);
443
+
420
444
  vec3 spec = specularMaterial[0].rgb * pow( reflection, specularMaterial[0].w) * shininess;
421
445
  vec3 lightWeighting = ambientMaterial[0] + diffuseMaterial[0] * diffuseLightWeighting + spec;
422
-
423
446
  vec4 t = texture( defaultTexture, vTextureCoord.xy );
424
447
  fragColor = vec4(t.rgb * lightWeighting + night + spec, t.a);
425
- if( samplerCount == 0 ) return;
426
-
427
-
428
-
429
- spec = specularMaterial[1].rgb * pow( reflection, specularMaterial[1].w) * (1.0 + shininess);
430
- lightWeighting = ambientMaterial[1] + diffuseMaterial[1] * diffuseLightWeighting + spec;
431
-
432
- t = texture( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord.xy * tileOffsetArr[0].zw ) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord.xy * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
433
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
434
- fragColor = mix( fragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[0].a * t.a * emptiness);
435
- if( samplerCount == 1 ) return;
436
-
437
-
438
-
439
- spec = specularMaterial[2].rgb * pow( reflection, specularMaterial[2].w);
440
- lightWeighting = ambientMaterial[2] + diffuseMaterial[2] * diffuseLightWeighting + spec;
441
-
442
- t = texture( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord.xy * tileOffsetArr[1].zw ) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord.xy * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
443
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
444
- fragColor = mix( fragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[1].a * t.a * emptiness);
445
- if( samplerCount == 2 ) return;
446
-
447
-
448
-
449
- spec = specularMaterial[3].rgb * pow( reflection, specularMaterial[3].w);
450
- lightWeighting = ambientMaterial[3] + diffuseMaterial[3] * diffuseLightWeighting + spec;
451
-
452
- t = texture( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord.xy * tileOffsetArr[2].zw ) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord.xy * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
453
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
454
- fragColor = mix( fragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[2].a * t.a * emptiness);
455
- if( samplerCount == 3 ) return;
456
-
457
-
458
-
459
- spec = specularMaterial[4].rgb * pow( reflection, specularMaterial[4].w);
460
- lightWeighting = ambientMaterial[4] + diffuseMaterial[4] * diffuseLightWeighting + spec;
461
-
462
- t = texture( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord.xy * tileOffsetArr[3].zw ) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord.xy * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
463
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
464
- fragColor = mix( fragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[3].a * t.a * emptiness);
465
- if( samplerCount == 4 ) return;
466
-
467
-
468
-
469
- spec = specularMaterial[5].rgb * pow( reflection, specularMaterial[5].w);
470
- lightWeighting = ambientMaterial[5] + diffuseMaterial[5] * diffuseLightWeighting + spec;
471
-
472
- t = texture( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord.xy * tileOffsetArr[4].zw ) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord.xy * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
473
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
474
- fragColor = mix( fragColor, vec4(t.rgb * lightWeighting + night + spec, 1.0), transparentColorArr[4].a * t.a * emptiness);
448
+ if( samplerCount == 0 ) return;
449
+
450
+ blend(fragColor, samplerArr[0], tileOffsetArr[0], visibleExtentOffsetArr[0], transparentColorArr[0],
451
+ specularMaterial[1], ambientMaterial[1], diffuseMaterial[1]);
452
+ if( samplerCount == 1 ) return;
453
+
454
+ blend(fragColor, samplerArr[1], tileOffsetArr[1], visibleExtentOffsetArr[1], transparentColorArr[1],
455
+ specularMaterial[2], ambientMaterial[2], diffuseMaterial[2]);
456
+ if( samplerCount == 2 ) return;
457
+
458
+ blend(fragColor, samplerArr[2], tileOffsetArr[2], visibleExtentOffsetArr[2], transparentColorArr[2],
459
+ specularMaterial[3], ambientMaterial[3], diffuseMaterial[3]);
460
+ if( samplerCount == 3 ) return;
461
+
462
+ blend(fragColor, samplerArr[3], tileOffsetArr[3], visibleExtentOffsetArr[3], transparentColorArr[3],
463
+ specularMaterial[4], ambientMaterial[4], diffuseMaterial[4]);
464
+ if( samplerCount == 4 ) return;
465
+
466
+ blend(fragColor, samplerArr[4], tileOffsetArr[4], visibleExtentOffsetArr[4], transparentColorArr[4],
467
+ specularMaterial[5], ambientMaterial[5], diffuseMaterial[5]);
475
468
  }`
476
469
  });
477
470
  }
@@ -80,6 +80,7 @@ export function toneMapping() {
80
80
  float oneByGamma = gamma / gamma;
81
81
  float oneByWhitePoint = whitepoint / whitepoint;
82
82
  vec3 mapped = ReinhardToneMapping2(hdrColor) * oneByGamma * oneByWhitePoint;
83
+ //vec3 mapped = ACESFilmicToneMapping(hdrColor) * oneByGamma * oneByWhitePoint;
83
84
 
84
85
  mapped = pow(mapped, vec3(1.0 / gamma));
85
86
 
@@ -304,7 +304,7 @@ class BaseShape {
304
304
  var img = new Image();
305
305
  var that = this;
306
306
  img.onload = function () {
307
- that.texture = renderNode.renderer.handler.createTexture(this);
307
+ that.texture = renderNode.renderer.handler.createTextureDefault(this);
308
308
  };
309
309
  img.src = this._src;
310
310
  }
@@ -138,10 +138,14 @@ class FontAtlas {
138
138
 
139
139
  let img = new Image();
140
140
  img.onload = () => {
141
- atlas.createTexture(img);
141
+ this._createTexture(atlas, img);
142
142
  def.resolve(index);
143
143
  };
144
144
  img.src = ARIAL_FONT_B64;
145
+ }
146
+
147
+ _createTexture(atlas, img) {
148
+ atlas.createTexture(img);
145
149
  }
146
150
 
147
151
  loadFont(faceName, srcDir, atlasUrl) {
@@ -183,7 +187,7 @@ class FontAtlas {
183
187
 
184
188
  let img = new Image();
185
189
  img.onload = () => {
186
- atlas.createTexture(img);
190
+ this._createTexture(atlas, img);
187
191
  def.resolve(index);
188
192
  };
189
193
 
@@ -180,14 +180,14 @@ class TextureAtlas {
180
180
  * Creates atlas gl texture.
181
181
  * @public
182
182
  */
183
- createTexture(img) {
183
+ createTexture(img, internalFormat) {
184
184
  if (this._handler) {
185
185
  this._handler.gl.deleteTexture(this.texture);
186
186
  if (img) {
187
187
  this.canvas.resize(img.width, img.height);
188
188
  this.canvas.drawImage(img, 0, 0, img.width, img.height);
189
189
  }
190
- this.texture = this._handler.createTexture_l(this.canvas._canvas);
190
+ this.texture = this._handler.createTexture_l(this.canvas._canvas, internalFormat);
191
191
  }
192
192
  }
193
193
 
@@ -217,8 +217,6 @@ export class VectorTileCreator {
217
217
 
218
218
  // var prevLayerId = -1;
219
219
 
220
- var extentParams = new Float32Array(4);
221
-
222
220
  var extentParamsHigh = new Float32Array(4);
223
221
  var extentParamsLow = new Float32Array(4);
224
222
 
@@ -245,7 +243,7 @@ export class VectorTileCreator {
245
243
 
246
244
  f.bindOutputTexture(texture);
247
245
 
248
- gl.clearColor(1.0, 1.0, 1.0, 0.0);
246
+ gl.clearColor(0.0, 0.0, 0.0, 0.0);
249
247
  gl.clear(gl.COLOR_BUFFER_BIT);
250
248
 
251
249
  var extent = material.segment.getExtentMerc();
@@ -940,4 +940,4 @@ export function cloneArray(items) {
940
940
  */
941
941
  export function isUndef(obj) {
942
942
  return obj === void 0;
943
- }
943
+ }