@openglobus/og 0.11.4 → 0.11.8

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 (260) hide show
  1. package/css/og.css +3 -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 +8 -5
  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/Frustum.js +19 -12
  18. package/src/og/camera/PlanetCamera.js +9 -5
  19. package/src/og/control/CompassButton.js +1 -2
  20. package/src/og/control/Control.js +7 -9
  21. package/src/og/control/DebugInfo.js +0 -1
  22. package/src/og/control/KeyboardNavigation.js +9 -9
  23. package/src/og/control/LayerSwitcher.js +21 -20
  24. package/src/og/control/Lighting.js +74 -64
  25. package/src/og/control/MouseNavigation.js +21 -18
  26. package/src/og/control/MouseWheelZoomControl.js +257 -0
  27. package/src/og/control/SegmentBoundVisualization.js +5 -6
  28. package/src/og/control/ShowFps.js +12 -7
  29. package/src/og/control/SimpleNavigation.js +5 -7
  30. package/src/og/control/Sun.js +22 -12
  31. package/src/og/control/ToggleWireframe.js +3 -3
  32. package/src/og/control/TouchNavigation.js +43 -32
  33. package/src/og/control/ZoomControl.js +40 -24
  34. package/src/og/control/index.js +2 -0
  35. package/src/og/control/visibleExtent/Segment.js +1862 -0
  36. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  37. package/src/og/control/visibleExtent/drawnode.js +751 -0
  38. package/src/og/ellipsoid/Ellipsoid.js +149 -57
  39. package/src/og/ellipsoid/wgs84.js +3 -3
  40. package/src/og/entity/BaseBillboard.js +72 -30
  41. package/src/og/entity/Billboard.js +9 -5
  42. package/src/og/entity/BillboardHandler.js +315 -62
  43. package/src/og/entity/Entity.js +39 -1
  44. package/src/og/entity/EntityCollection.js +47 -24
  45. package/src/og/entity/GeoObject.js +228 -0
  46. package/src/og/entity/GeoObjectHandler.js +910 -0
  47. package/src/og/entity/GeometryHandler.js +595 -123
  48. package/src/og/entity/Label.js +62 -30
  49. package/src/og/entity/LabelHandler.js +40 -242
  50. package/src/og/entity/LabelWorker.js +218 -0
  51. package/src/og/entity/Object3d.js +504 -0
  52. package/src/og/entity/PointCloud.js +76 -28
  53. package/src/og/entity/PointCloudHandler.js +5 -5
  54. package/src/og/entity/Ray.js +49 -16
  55. package/src/og/entity/Strip.js +72 -43
  56. package/src/og/entity/StripHandler.js +23 -23
  57. package/src/og/layer/BaseGeoImage.js +50 -19
  58. package/src/og/layer/CanvasTiles.js +16 -17
  59. package/src/og/layer/GeoImage.js +8 -16
  60. package/src/og/layer/GeoTexture2d.js +2 -10
  61. package/src/og/layer/GeoVideo.js +2 -10
  62. package/src/og/layer/KML.js +55 -33
  63. package/src/og/layer/Layer.js +24 -32
  64. package/src/og/layer/Material.js +1 -1
  65. package/src/og/layer/Vector.js +94 -48
  66. package/src/og/layer/WMS.js +33 -18
  67. package/src/og/layer/XYZ.js +4 -5
  68. package/src/og/light/LightSource.js +19 -12
  69. package/src/og/math/Mat3.js +24 -12
  70. package/src/og/math/Mat4.js +603 -603
  71. package/src/og/math/Plane.js +19 -18
  72. package/src/og/math/Ray.js +17 -12
  73. package/src/og/math/Vec2.js +24 -14
  74. package/src/og/math/Vec3.js +60 -30
  75. package/src/og/math/coder.js +7 -7
  76. package/src/og/proj/EPSG3857.js +3 -3
  77. package/src/og/proj/EPSG4326.js +3 -3
  78. package/src/og/proj/Proj.js +2 -4
  79. package/src/og/quadTree/Node.js +3 -3
  80. package/src/og/renderer/Renderer.js +106 -124
  81. package/src/og/renderer/RendererEvents.js +45 -23
  82. package/src/og/scene/BaseNode.js +2 -3
  83. package/src/og/scene/Planet.js +51 -90
  84. package/src/og/scene/RenderNode.js +15 -8
  85. package/src/og/segment/Segment.js +60 -156
  86. package/src/og/segment/Slice.js +45 -0
  87. package/src/og/shaders/drawnode.js +245 -342
  88. package/src/og/shaders/geoObject.js +211 -0
  89. package/src/og/shaders/pointCloud.js +41 -41
  90. package/src/og/shaders/shape.js +12 -18
  91. package/src/og/shaders/skybox.js +36 -36
  92. package/src/og/shaders/toneMapping.js +1 -0
  93. package/src/og/shapes/BaseShape.js +108 -36
  94. package/src/og/shapes/Icosphere.js +25 -10
  95. package/src/og/shapes/Sphere.js +8 -11
  96. package/src/og/utils/FontAtlas.js +6 -2
  97. package/src/og/utils/GeoImageCreator.js +5 -1
  98. package/src/og/utils/TextureAtlas.js +18 -20
  99. package/src/og/utils/VectorTileCreator.js +1 -3
  100. package/src/og/utils/shared.js +2 -2
  101. package/src/og/webgl/Handler.js +215 -162
  102. package/src/og/webgl/Multisample.js +44 -16
  103. package/src/og/webgl/Program.js +78 -33
  104. package/src/og/webgl/callbacks.js +3 -3
  105. package/types/Clock.d.ts +0 -94
  106. package/types/Deferred.d.ts +0 -6
  107. package/types/Events.d.ts +0 -77
  108. package/types/Extent.d.ts +0 -166
  109. package/types/Globe.d.ts +0 -82
  110. package/types/ImageCanvas.d.ts +0 -123
  111. package/types/Lock.d.ts +0 -12
  112. package/types/LonLat.d.ts +0 -108
  113. package/types/Popup.d.ts +0 -42
  114. package/types/QueueArray.d.ts +0 -19
  115. package/types/Rectangle.d.ts +0 -80
  116. package/types/Stack.d.ts +0 -19
  117. package/types/ajax.d.ts +0 -24
  118. package/types/arial.d.ts +0 -48
  119. package/types/astro/astro.d.ts +0 -38
  120. package/types/astro/earth.d.ts +0 -7
  121. package/types/astro/jd.d.ts +0 -254
  122. package/types/bv/Box.d.ts +0 -30
  123. package/types/bv/Sphere.d.ts +0 -38
  124. package/types/bv/index.d.ts +0 -3
  125. package/types/camera/Camera.d.ts +0 -312
  126. package/types/camera/Frustum.d.ts +0 -133
  127. package/types/camera/PlanetCamera.d.ts +0 -218
  128. package/types/camera/index.d.ts +0 -3
  129. package/types/cons.d.ts +0 -40
  130. package/types/control/CompassButton.d.ts +0 -17
  131. package/types/control/Control.d.ts +0 -104
  132. package/types/control/DebugInfo.d.ts +0 -15
  133. package/types/control/EarthCoordinates.d.ts +0 -47
  134. package/types/control/EarthNavigation.d.ts +0 -42
  135. package/types/control/GeoImageDragControl.d.ts +0 -6
  136. package/types/control/KeyboardNavigation.d.ts +0 -21
  137. package/types/control/LayerSwitcher.d.ts +0 -21
  138. package/types/control/Lighting.d.ts +0 -16
  139. package/types/control/MouseNavigation.d.ts +0 -47
  140. package/types/control/ScaleControl.d.ts +0 -22
  141. package/types/control/ShowFps.d.ts +0 -11
  142. package/types/control/SimpleNavigation.d.ts +0 -25
  143. package/types/control/Sun.d.ts +0 -50
  144. package/types/control/ToggleWireframe.d.ts +0 -12
  145. package/types/control/TouchNavigation.d.ts +0 -48
  146. package/types/control/ZoomControl.d.ts +0 -27
  147. package/types/control/index.d.ts +0 -17
  148. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  149. package/types/ellipsoid/index.d.ts +0 -3
  150. package/types/ellipsoid/wgs84.d.ts +0 -6
  151. package/types/entity/BaseBillboard.d.ts +0 -208
  152. package/types/entity/Billboard.d.ts +0 -94
  153. package/types/entity/BillboardHandler.d.ts +0 -78
  154. package/types/entity/Entity.d.ts +0 -333
  155. package/types/entity/EntityCollection.d.ts +0 -311
  156. package/types/entity/Geometry.d.ts +0 -74
  157. package/types/entity/GeometryHandler.d.ts +0 -76
  158. package/types/entity/Label.d.ts +0 -189
  159. package/types/entity/LabelHandler.d.ts +0 -29
  160. package/types/entity/PointCloud.d.ts +0 -174
  161. package/types/entity/PointCloudHandler.d.ts +0 -38
  162. package/types/entity/Polyline.d.ts +0 -306
  163. package/types/entity/PolylineHandler.d.ts +0 -18
  164. package/types/entity/Ray.d.ts +0 -124
  165. package/types/entity/RayHandler.d.ts +0 -67
  166. package/types/entity/ShapeHandler.d.ts +0 -22
  167. package/types/entity/Strip.d.ts +0 -119
  168. package/types/entity/StripHandler.d.ts +0 -38
  169. package/types/entity/index.d.ts +0 -8
  170. package/types/index.core.d.ts +0 -65
  171. package/types/index.d.ts +0 -45
  172. package/types/index.webgl.d.ts +0 -7
  173. package/types/input/KeyboardHandler.d.ts +0 -10
  174. package/types/input/MouseHandler.d.ts +0 -5
  175. package/types/input/TouchHandler.d.ts +0 -5
  176. package/types/input/input.d.ts +0 -34
  177. package/types/layer/BaseGeoImage.d.ts +0 -94
  178. package/types/layer/CanvasTiles.d.ts +0 -68
  179. package/types/layer/GeoImage.d.ts +0 -52
  180. package/types/layer/GeoTexture2d.d.ts +0 -8
  181. package/types/layer/GeoVideo.d.ts +0 -55
  182. package/types/layer/KML.d.ts +0 -63
  183. package/types/layer/Layer.d.ts +0 -325
  184. package/types/layer/Material.d.ts +0 -45
  185. package/types/layer/Vector.d.ts +0 -208
  186. package/types/layer/WMS.d.ts +0 -63
  187. package/types/layer/XYZ.d.ts +0 -120
  188. package/types/layer/index.d.ts +0 -10
  189. package/types/light/LightSource.d.ts +0 -178
  190. package/types/math/Line2.d.ts +0 -11
  191. package/types/math/Line3.d.ts +0 -10
  192. package/types/math/Mat3.d.ts +0 -65
  193. package/types/math/Mat4.d.ts +0 -176
  194. package/types/math/Plane.d.ts +0 -18
  195. package/types/math/Quat.d.ts +0 -379
  196. package/types/math/Ray.d.ts +0 -82
  197. package/types/math/Vec2.d.ts +0 -309
  198. package/types/math/Vec3.d.ts +0 -460
  199. package/types/math/Vec4.d.ts +0 -162
  200. package/types/math/coder.d.ts +0 -43
  201. package/types/math/index.d.ts +0 -11
  202. package/types/math.d.ts +0 -261
  203. package/types/mercator.d.ts +0 -92
  204. package/types/proj/EPSG3857.d.ts +0 -6
  205. package/types/proj/EPSG4326.d.ts +0 -6
  206. package/types/proj/Proj.d.ts +0 -42
  207. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  208. package/types/quadTree/Node.d.ts +0 -61
  209. package/types/quadTree/quadTree.d.ts +0 -40
  210. package/types/renderer/Renderer.d.ts +0 -298
  211. package/types/renderer/RendererEvents.d.ts +0 -233
  212. package/types/res/images.d.ts +0 -3
  213. package/types/scene/Axes.d.ts +0 -11
  214. package/types/scene/BaseNode.d.ts +0 -60
  215. package/types/scene/Planet.d.ts +0 -577
  216. package/types/scene/RenderNode.d.ts +0 -142
  217. package/types/scene/SkyBox.d.ts +0 -10
  218. package/types/scene/index.d.ts +0 -4
  219. package/types/segment/Segment.d.ts +0 -279
  220. package/types/segment/SegmentLonLat.d.ts +0 -16
  221. package/types/segment/segmentHelper.d.ts +0 -13
  222. package/types/shaders/billboard.d.ts +0 -3
  223. package/types/shaders/depth.d.ts +0 -2
  224. package/types/shaders/drawnode.d.ts +0 -7
  225. package/types/shaders/label.d.ts +0 -4
  226. package/types/shaders/pointCloud.d.ts +0 -2
  227. package/types/shaders/polyline.d.ts +0 -3
  228. package/types/shaders/ray.d.ts +0 -2
  229. package/types/shaders/screenFrame.d.ts +0 -2
  230. package/types/shaders/shape.d.ts +0 -4
  231. package/types/shaders/skybox.d.ts +0 -2
  232. package/types/shaders/toneMapping.d.ts +0 -2
  233. package/types/shapes/BaseShape.d.ts +0 -250
  234. package/types/shapes/Sphere.d.ts +0 -41
  235. package/types/terrain/BilTerrain.d.ts +0 -7
  236. package/types/terrain/EmptyTerrain.d.ts +0 -72
  237. package/types/terrain/Geoid.d.ts +0 -26
  238. package/types/terrain/GlobusTerrain.d.ts +0 -116
  239. package/types/terrain/MapboxTerrain.d.ts +0 -7
  240. package/types/terrain/index.d.ts +0 -5
  241. package/types/utils/FontAtlas.d.ts +0 -14
  242. package/types/utils/GeoImageCreator.d.ts +0 -30
  243. package/types/utils/ImagesCacheManager.d.ts +0 -10
  244. package/types/utils/Loader.d.ts +0 -25
  245. package/types/utils/NormalMapCreator.d.ts +0 -39
  246. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  247. package/types/utils/TerrainWorker.d.ts +0 -9
  248. package/types/utils/TextureAtlas.d.ts +0 -111
  249. package/types/utils/VectorTileCreator.d.ts +0 -16
  250. package/types/utils/colorTable.d.ts +0 -143
  251. package/types/utils/earcut.d.ts +0 -6
  252. package/types/utils/shared.d.ts +0 -231
  253. package/types/webgl/Framebuffer.d.ts +0 -135
  254. package/types/webgl/Handler.d.ts +0 -388
  255. package/types/webgl/Multisample.d.ts +0 -89
  256. package/types/webgl/Program.d.ts +0 -155
  257. package/types/webgl/ProgramController.d.ts +0 -89
  258. package/types/webgl/callbacks.d.ts +0 -1
  259. package/types/webgl/index.d.ts +0 -6
  260. package/types/webgl/types.d.ts +0 -2
@@ -5,9 +5,40 @@
5
5
  "use strict";
6
6
 
7
7
  import { Program } from "../webgl/Program.js";
8
-
9
- const CORNERS = `const vec2 BOTTOMLEFT = vec2(-0.01);
10
- const vec2 TOPRIGHT = vec2(1.01);`;
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);
14
+
15
+
16
+ const NIGHT = `const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);`;
17
+
18
+ const BLEND = `
19
+ void blend(
20
+ out vec4 dest,
21
+ in sampler2D sampler,
22
+ in vec4 tileOffset,
23
+ in float opacity)
24
+ {
25
+ vec4 src = texture( sampler, tileOffset.xy + vTextureCoord.xy * tileOffset.zw );
26
+ //dest = dest * (1.0 - src.a * opacity) + src * opacity;
27
+ dest = vec4(mix(dest.rgb, src.rgb, src.a * opacity), 1.0);
28
+ }`;
29
+
30
+ const BLEND1 =
31
+ `void blend(
32
+ out vec4 dest,
33
+ in sampler2D sampler,
34
+ in vec4 tileOffset,
35
+ in float opacity)
36
+ {
37
+ vec4 src = texture2D(sampler, tileOffset.xy + vTextureCoord.xy * tileOffset.zw);
38
+ dest = vec4(mix(dest.rgb, src.rgb, src.a * opacity), 1.0);
39
+ }`
40
+
41
+ const SLICE_SIZE = 4;
11
42
 
12
43
  export function drawnode_screen_nl() {
13
44
  return new Program("drawnode_screen_nl", {
@@ -17,10 +48,9 @@ export function drawnode_screen_nl() {
17
48
  eyePositionHigh: "vec3",
18
49
  eyePositionLow: "vec3",
19
50
  samplerCount: "int",
20
- tileOffsetArr: "vec4",
21
- visibleExtentOffsetArr: "vec4",
51
+ tileOffsetArr: "vec4",
52
+ layerOpacityArr: "float",
22
53
  samplerArr: "sampler2darray",
23
- transparentColorArr: "vec4",
24
54
  defaultTexture: "sampler2d",
25
55
  height: "float"
26
56
  },
@@ -53,55 +83,36 @@ export function drawnode_screen_nl() {
53
83
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
54
84
 
55
85
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
56
-
57
- /*vec3 cameraPosition = eyePositionHigh + eyePositionLow;*/
58
- /*vec3 aVertexPosition = aVertexPositionHigh + aVertexPositionLow * (cameraPosition / cameraPosition);*/
59
- /*gl_Position = projectionViewMatrix * vec4(aVertexPosition + normalize(aVertexPosition) * height, 1.0);*/
60
86
  }`,
61
87
 
62
- fragmentShader: `precision highp float;
63
- uniform vec4 tileOffsetArr[5];
64
- uniform vec4 visibleExtentOffsetArr[5];
65
- uniform vec4 transparentColorArr[5];
88
+ fragmentShader: `precision highp float;
89
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
90
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
91
+ uniform float layerOpacityArr[SLICE_SIZE];
66
92
  uniform sampler2D defaultTexture;
67
- uniform sampler2D samplerArr[5];
93
+ uniform sampler2D samplerArr[SLICE_SIZE];
68
94
  uniform int samplerCount;
69
- varying vec2 vTextureCoord;
70
- /* return 1 if v inside the box, return 0 otherwise */
71
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
72
- vec2 s = step(bottomLeft, v) - step(topRight, v);
73
- return s.x * s.y;
74
- }
75
-
76
- ${CORNERS}
95
+ varying vec2 vTextureCoord;
96
+
97
+ ${BLEND1}
77
98
 
78
99
  void main(void) {
79
100
  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);
101
+ if( samplerCount == 0 ) return;
102
+
103
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
104
+ if( samplerCount == 1 ) return;
105
+
106
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
107
+ if( samplerCount == 2 ) return;
108
+
109
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
110
+ if( samplerCount == 3 ) return;
111
+
112
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
113
+ if( samplerCount == 4 ) return;
114
+
115
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
105
116
  }`
106
117
  });
107
118
  }
@@ -119,19 +130,18 @@ export function drawnode_screen_wl() {
119
130
  uNormalMapBias: "vec3",
120
131
 
121
132
  samplerCount: "int",
122
- tileOffsetArr: "vec4",
123
- visibleExtentOffsetArr: "vec4",
133
+ tileOffsetArr: "vec4",
134
+ layerOpacityArr: "float",
124
135
  samplerArr: "sampler2darray",
125
- transparentColorArr: "vec4",
126
136
  defaultTexture: "sampler2d",
127
137
  normalMatrix: "mat3",
128
138
  uNormalMap: "sampler2d",
129
139
  nightTexture: "sampler2d",
130
140
  specularTexture: "sampler2d",
131
141
  lightsPositions: "vec4",
132
- diffuseMaterial: "vec3",
133
- ambientMaterial: "vec3",
134
- specularMaterial: "vec4"
142
+ diffuse: "vec3",
143
+ ambient: "vec3",
144
+ specular: "vec4"
135
145
  },
136
146
  attributes: {
137
147
  aVertexPositionHigh: "vec3",
@@ -177,12 +187,11 @@ export function drawnode_screen_wl() {
177
187
  fragmentShader: `precision highp float;
178
188
 
179
189
  #define MAX_POINT_LIGHTS 1
180
- #define MAX_OVERLAYS 5
181
- #define MAX_OVERLAYS_PLUS_ONE 6
190
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
182
191
 
183
- uniform vec3 diffuseMaterial[MAX_OVERLAYS_PLUS_ONE];
184
- uniform vec3 ambientMaterial[MAX_OVERLAYS_PLUS_ONE];
185
- uniform vec4 specularMaterial[MAX_OVERLAYS_PLUS_ONE];
192
+ uniform vec3 diffuse;
193
+ uniform vec3 ambient;
194
+ uniform vec4 specular;
186
195
 
187
196
  uniform sampler2D uNormalMap;
188
197
  uniform vec4 lightsPositions[MAX_POINT_LIGHTS];
@@ -190,28 +199,22 @@ export function drawnode_screen_wl() {
190
199
  uniform sampler2D nightTexture;
191
200
  uniform sampler2D specularTexture;
192
201
 
193
- uniform vec4 tileOffsetArr[MAX_OVERLAYS];
194
- uniform vec4 visibleExtentOffsetArr[MAX_OVERLAYS];
195
- uniform vec4 transparentColorArr[MAX_OVERLAYS];
202
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
203
+ uniform float layerOpacityArr[SLICE_SIZE];
196
204
 
197
205
  uniform sampler2D defaultTexture;
198
- uniform sampler2D samplerArr[MAX_OVERLAYS];
206
+ uniform sampler2D samplerArr[SLICE_SIZE];
199
207
  uniform int samplerCount;
200
208
 
201
209
  varying vec4 vTextureCoord;
202
210
  varying vec2 vGlobalTextureCoord;
203
211
  varying vec4 v_vertex;
204
212
  varying float v_height;
213
+
214
+ ${NIGHT}
215
+
216
+ ${BLEND}
205
217
 
206
- /* return 1 if v inside the box, return 0 otherwise */
207
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
208
- vec2 s = step(bottomLeft, v) - step(topRight, v);
209
- return s.x * s.y;
210
- }
211
-
212
- ${CORNERS}
213
-
214
- const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);
215
218
 
216
219
  void main(void) {
217
220
 
@@ -227,63 +230,41 @@ export function drawnode_screen_wl() {
227
230
  vec3 night = nightStep * (0.3 - diffuseLightWeighting) * nightImageColor.rgb;
228
231
  night *= overGround * step(0.0, night);
229
232
 
230
-
231
-
232
- vec3 spec = specularMaterial[0].rgb * pow( reflection, specularMaterial[0].w) * shininess;
233
- vec3 lightWeighting = ambientMaterial[0] + diffuseMaterial[0] * diffuseLightWeighting + spec;
234
-
235
- vec4 t = texture2D( defaultTexture, vTextureCoord.xy );
236
- gl_FragColor = vec4(t.rgb * lightWeighting + night + spec, t.a);
237
- if( samplerCount == 0 ) return;
238
-
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);
233
+ vec3 spec = specular.rgb * pow( reflection, specular.w) * shininess;
234
+ vec3 lightWeighting = ambient + diffuse * diffuseLightWeighting + spec + night;
235
+
236
+ gl_FragColor = texture2D( defaultTexture, vTextureCoord.xy );
237
+ if( samplerCount == 0 ) {
238
+ gl_FragColor *= lightWeighting;
239
+ return;
240
+ }
241
+
242
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
243
+ if( samplerCount == 1 ) {
244
+ gl_FragColor *= lightWeighting;
245
+ return;
246
+ }
247
+
248
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
249
+ if( samplerCount == 2 ) {
250
+ gl_FragColor *= lightWeighting;
251
+ return;
252
+ }
253
+
254
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
255
+ if( samplerCount == 3 ) {
256
+ gl_FragColor *= lightWeighting;
257
+ return;
258
+ }
259
+
260
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
261
+ if( samplerCount == 4 ) {
262
+ gl_FragColor *= lightWeighting;
263
+ return;
264
+ }
265
+
266
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
267
+ gl_FragColor *= lightWeighting;
287
268
  }`
288
269
  });
289
270
  }
@@ -301,19 +282,18 @@ export function drawnode_screen_wl_webgl2() {
301
282
  uNormalMapBias: "vec3",
302
283
 
303
284
  samplerCount: "int",
304
- tileOffsetArr: "vec4",
305
- visibleExtentOffsetArr: "vec4",
285
+ tileOffsetArr: "vec4",
286
+ layerOpacityArr: "float",
306
287
  samplerArr: "sampler2darray",
307
- transparentColorArr: "vec4",
308
288
  defaultTexture: "sampler2d",
309
289
  normalMatrix: "mat3",
310
290
  uNormalMap: "sampler2d",
311
291
  nightTexture: "sampler2d",
312
292
  specularTexture: "sampler2d",
313
293
  lightsPositions: "vec4",
314
- diffuseMaterial: "vec3",
315
- ambientMaterial: "vec3",
316
- specularMaterial: "vec4"
294
+ diffuse: "vec3",
295
+ ambient: "vec3",
296
+ specular: "vec4"
317
297
  },
318
298
  attributes: {
319
299
  aVertexPositionHigh: "vec3",
@@ -321,7 +301,7 @@ export function drawnode_screen_wl_webgl2() {
321
301
  aTextureCoord: "vec2"
322
302
  },
323
303
 
324
- vertexShader: `#version 300 es
304
+ vertexShader: `#version 300 es
325
305
 
326
306
  in vec3 aVertexPositionHigh;
327
307
  in vec3 aVertexPositionLow;
@@ -363,12 +343,11 @@ export function drawnode_screen_wl_webgl2() {
363
343
  precision highp float;
364
344
 
365
345
  #define MAX_POINT_LIGHTS 1
366
- #define MAX_OVERLAYS 5
367
- #define MAX_OVERLAYS_PLUS_ONE 6
346
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
368
347
 
369
- uniform vec3 diffuseMaterial[MAX_OVERLAYS_PLUS_ONE];
370
- uniform vec3 ambientMaterial[MAX_OVERLAYS_PLUS_ONE];
371
- uniform vec4 specularMaterial[MAX_OVERLAYS_PLUS_ONE];
348
+ uniform vec3 diffuse;
349
+ uniform vec3 ambient;
350
+ uniform vec4 specular;
372
351
 
373
352
  uniform sampler2D uNormalMap;
374
353
  uniform vec4 lightsPositions[MAX_POINT_LIGHTS];
@@ -376,30 +355,28 @@ export function drawnode_screen_wl_webgl2() {
376
355
  uniform sampler2D nightTexture;
377
356
  uniform sampler2D specularTexture;
378
357
 
379
- uniform vec4 tileOffsetArr[MAX_OVERLAYS];
380
- uniform vec4 visibleExtentOffsetArr[MAX_OVERLAYS];
381
- uniform vec4 transparentColorArr[MAX_OVERLAYS];
358
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
359
+ uniform float layerOpacityArr[SLICE_SIZE];
382
360
 
383
361
  uniform sampler2D defaultTexture;
384
- uniform sampler2D samplerArr[MAX_OVERLAYS];
362
+ uniform sampler2D samplerArr[SLICE_SIZE];
385
363
  uniform int samplerCount;
386
364
 
387
365
  in vec4 vTextureCoord;
388
366
  in vec2 vGlobalTextureCoord;
389
367
  in vec4 v_vertex;
390
- in float v_height;
368
+ in float v_height;
391
369
 
392
- layout(location = 0) out vec4 fragColor;
393
-
394
- /* return 1 if v inside the box, return 0 otherwise */
395
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
396
- vec2 s = step(bottomLeft, v) - step(topRight, v);
397
- return s.x * s.y;
398
- }
370
+ float shininess;
371
+ float reflection;
372
+ float diffuseLightWeighting;
373
+ vec3 night;
399
374
 
400
- ${CORNERS}
375
+ layout(location = 0) out vec4 fragColor;
401
376
 
402
- const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);
377
+ ${NIGHT}
378
+
379
+ ${BLEND}
403
380
 
404
381
  void main(void) {
405
382
 
@@ -408,70 +385,49 @@ export function drawnode_screen_wl_webgl2() {
408
385
  vec3 lightDirection = normalize(lightsPositions[0].xyz - v_vertex.xyz * lightsPositions[0].w);
409
386
  vec3 eyeDirection = normalize(-v_vertex.xyz);
410
387
  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
-
419
-
420
- vec3 spec = specularMaterial[0].rgb * pow( reflection, specularMaterial[0].w) * shininess;
421
- vec3 lightWeighting = ambientMaterial[0] + diffuseMaterial[0] * diffuseLightWeighting + spec;
422
-
423
- vec4 t = texture( defaultTexture, vTextureCoord.xy );
424
- 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
-
388
+ vec4 nightImageColor = texture( nightTexture, vGlobalTextureCoord.st );
458
389
 
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);
390
+ shininess = texture( specularTexture, vGlobalTextureCoord.st ).r * 255.0 * overGround;
391
+ reflection = max( dot(reflectionDirection, eyeDirection), 0.0);
392
+ diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
393
+ night = nightStep * (.18 - diffuseLightWeighting * 3.0) * nightImageColor.rgb;
394
+ night *= overGround * step(0.0, night);
395
+
396
+ vec3 spec = specular.rgb * pow( reflection, specular.w) * shininess;
397
+ vec4 lightWeighting = vec4(ambient + diffuse * diffuseLightWeighting + spec + night, 1.0);
398
+
399
+ fragColor = texture( defaultTexture, vTextureCoord.xy );
400
+ if( samplerCount == 0 ) {
401
+ fragColor *= lightWeighting;
402
+ return;
403
+ }
404
+
405
+ blend(fragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
406
+ if( samplerCount == 1 ) {
407
+ fragColor *= lightWeighting;
408
+ return;
409
+ }
410
+
411
+ blend(fragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
412
+ if( samplerCount == 2 ) {
413
+ fragColor *= lightWeighting;
414
+ return;
415
+ }
416
+
417
+ blend(fragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
418
+ if( samplerCount == 3 ) {
419
+ fragColor *= lightWeighting;
420
+ return;
421
+ }
422
+
423
+ blend(fragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
424
+ if( samplerCount == 4 ) {
425
+ fragColor *= lightWeighting;
426
+ return;
427
+ }
428
+
429
+ blend(fragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
430
+ fragColor *= lightWeighting;
475
431
  }`
476
432
  });
477
433
  }
@@ -485,10 +441,8 @@ export function drawnode_colorPicking() {
485
441
  eyePositionLow: "vec3",
486
442
  samplerCount: "int",
487
443
  tileOffsetArr: "vec4",
488
- visibleExtentOffsetArr: "vec4",
489
444
  samplerArr: "sampler2darray",
490
445
  pickingMaskArr: "sampler2darray",
491
- transparentColorArr: "vec4",
492
446
  pickingColorArr: "vec4",
493
447
  height: "float"
494
448
  },
@@ -523,70 +477,46 @@ export function drawnode_colorPicking() {
523
477
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
524
478
  }`,
525
479
 
526
- fragmentShader: `precision highp float;
527
- uniform vec4 tileOffsetArr[5];
528
- uniform vec4 visibleExtentOffsetArr[5];
529
- uniform vec4 transparentColorArr[5];
530
- uniform vec4 pickingColorArr[5];
531
- uniform sampler2D samplerArr[5];
532
- uniform sampler2D pickingMaskArr[5];
480
+ fragmentShader: `precision highp float;
481
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
482
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
483
+ uniform vec4 pickingColorArr[SLICE_SIZE];
484
+ uniform sampler2D samplerArr[SLICE_SIZE];
485
+ uniform sampler2D pickingMaskArr[SLICE_SIZE];
533
486
  uniform int samplerCount;
534
- varying vec2 vTextureCoord;
535
- /* return 1 if v inside the box, return 0 otherwise */
536
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
537
- vec2 s = step(bottomLeft, v) - step(topRight, v);
538
- return s.x * s.y;
487
+ varying vec2 vTextureCoord;
488
+
489
+ void blendPicking(
490
+ out vec4 dest,
491
+ in vec4 tileOffset,
492
+ in sampler2D sampler,
493
+ in sampler2D pickingMask,
494
+ in vec4 pickingColor,
495
+ in float opacity)
496
+ {
497
+ vec2 tc = tileOffset.xy + vTextureCoord.xy * tileOffset.zw;
498
+ vec4 t = texture2D( sampler, tc );
499
+ vec4 p = texture2D( pickingMask, tc );
500
+ dest = mix( dest, vec4(max(pickingColor.rgb, p.rgb), opacity), (t.a == 0.0 ? 0.0 : 1.0) * pickingColor.a);
539
501
  }
540
502
 
541
- ${CORNERS}
542
-
543
503
  void main(void) {
544
504
  gl_FragColor = vec4(0.0);
545
505
  if( samplerCount == 0 ) return;
546
506
 
547
- vec2 tc = tileOffsetArr[0].xy + vTextureCoord.xy * tileOffsetArr[0].zw;
548
- float ins = insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord.xy * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
549
- vec4 t = texture2D( samplerArr[0], tc ) * ins;
550
- vec4 p = texture2D( pickingMaskArr[0], tc ) * ins;
551
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
552
- emptiness = 1.0 - step(0.0, -emptiness);
553
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[0].rgb, p.rgb), 1.0), emptiness * pickingColorArr[0].a);
507
+ blendPicking(gl_FragColor, tileOffsetArr[0], samplerArr[0], pickingMaskArr[0], pickingColorArr[0], 1.0);
554
508
  if( samplerCount == 1 ) return;
555
509
 
556
- tc = tileOffsetArr[1].xy + vTextureCoord.xy * tileOffsetArr[1].zw;
557
- ins = insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord.xy * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
558
- t = texture2D( samplerArr[1], tc ) * ins;
559
- p = texture2D( pickingMaskArr[1], tc ) * ins;
560
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
561
- emptiness = 1.0 - step(0.0, -emptiness);
562
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[1].rgb, p.rgb), 1.0), emptiness * pickingColorArr[1].a);
510
+ blendPicking(gl_FragColor, tileOffsetArr[1], samplerArr[1], pickingMaskArr[1], pickingColorArr[1], 1.0);
563
511
  if( samplerCount == 2 ) return;
564
512
 
565
- tc = tileOffsetArr[2].xy + vTextureCoord.xy * tileOffsetArr[2].zw;
566
- ins = insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord.xy * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
567
- t = texture2D( samplerArr[2], tc ) * ins;
568
- p = texture2D( pickingMaskArr[2], tc ) * ins;
569
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
570
- emptiness = 1.0 - step(0.0, -emptiness);
571
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[2].rgb, p.rgb), 1.0), emptiness * pickingColorArr[2].a);
513
+ blendPicking(gl_FragColor, tileOffsetArr[2], samplerArr[2], pickingMaskArr[2], pickingColorArr[2], 1.0);
572
514
  if( samplerCount == 3 ) return;
573
515
 
574
- tc = tileOffsetArr[3].xy + vTextureCoord.xy * tileOffsetArr[3].zw;
575
- ins = insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord.xy * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
576
- t = texture2D( samplerArr[3], tc ) * ins;
577
- p = texture2D( pickingMaskArr[3], tc ) * ins;
578
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
579
- emptiness = 1.0 - step(0.0, -emptiness);
580
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[3].rgb, p.rgb), 1.0), emptiness * pickingColorArr[3].a);
516
+ blendPicking(gl_FragColor, tileOffsetArr[3], samplerArr[3], pickingMaskArr[3], pickingColorArr[3], 1.0);
581
517
  if( samplerCount == 4 ) return;
582
518
 
583
- tc = tileOffsetArr[4].xy + vTextureCoord.xy * tileOffsetArr[4].zw;
584
- ins = insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord.xy * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
585
- t = texture2D( samplerArr[4], tc ) * ins;
586
- p = texture2D( pickingMaskArr[4], tc ) * ins;
587
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
588
- emptiness = 1.0 - step(0.0, -emptiness);
589
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[4].rgb, p.rgb), 1.0), emptiness * pickingColorArr[4].a);
519
+ blendPicking(gl_FragColor, tileOffsetArr[4], samplerArr[4], pickingMaskArr[4], pickingColorArr[4], 1.0);
590
520
  }`
591
521
  });
592
522
  }
@@ -598,9 +528,7 @@ export function drawnode_heightPicking() {
598
528
  viewMatrix: "mat4",
599
529
  samplerCount: "int",
600
530
  tileOffsetArr: "vec4",
601
- visibleExtentOffsetArr: "vec4",
602
531
  samplerArr: "sampler2darray",
603
- transparentColorArr: "vec4",
604
532
  defaultTexture: "sampler2d",
605
533
  height: "float",
606
534
  eyePositionHigh: "vec3",
@@ -641,22 +569,15 @@ export function drawnode_heightPicking() {
641
569
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
642
570
  }`,
643
571
 
644
- fragmentShader: `precision highp float;
572
+ fragmentShader: `precision highp float;
573
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
645
574
  uniform sampler2D defaultTexture;
646
- uniform vec4 tileOffsetArr[5];
647
- uniform vec4 visibleExtentOffsetArr[5];
648
- uniform vec4 transparentColorArr[5];
649
- uniform sampler2D samplerArr[5];
575
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
576
+ uniform sampler2D samplerArr[SLICE_SIZE];
650
577
  uniform int samplerCount;
651
578
  varying vec2 vTextureCoord;
652
579
  varying float range;
653
580
 
654
- /* return 1 if v inside the box, return 0 otherwise */
655
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
656
- vec2 s = step(bottomLeft, v) - step(topRight, v);
657
- return s.x * s.y;
658
- }
659
-
660
581
  vec3 encode24(highp float f) {
661
582
  float F = abs(f);
662
583
  float s = step( 0.0, -f );
@@ -669,35 +590,30 @@ export function drawnode_heightPicking() {
669
590
  floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
670
591
  }
671
592
 
672
- ${CORNERS}
673
-
674
593
  void main(void) {
675
594
  gl_FragColor = vec4(encode24(range), texture2D( defaultTexture, vTextureCoord ).a);
676
595
  if( samplerCount == 0 ) return;
677
596
 
678
- vec4 t = texture2D( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw ) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
679
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
680
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
681
- if( samplerCount == 1 ) return;
597
+ vec4 t = texture2D( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw );
598
+ gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0);
599
+ //
600
+ // TODO: Seems to be it is not necessary
601
+ //if( samplerCount == 1 ) return;
682
602
 
683
- t = texture2D( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw ) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
684
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
685
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
686
- if( samplerCount == 2 ) return;
603
+ //t = texture2D( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw );
604
+ //gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0);
605
+ //if( samplerCount == 2 ) return;
687
606
 
688
- t = texture2D( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw ) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
689
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
690
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
691
- if( samplerCount == 3 ) return;
607
+ //t = texture2D( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw );
608
+ //gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0);
609
+ //if( samplerCount == 3 ) return;
692
610
 
693
- t = texture2D( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw ) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
694
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
695
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
696
- if( samplerCount == 4 ) return;
611
+ //t = texture2D( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw );
612
+ //gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0);
613
+ //if( samplerCount == 4 ) return;
697
614
 
698
- t = texture2D( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw ) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
699
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
700
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
615
+ //t = texture2D( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw );
616
+ //gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0);
701
617
  }`
702
618
  });
703
619
  }
@@ -709,9 +625,7 @@ export function drawnode_depth() {
709
625
  viewMatrix: "mat4",
710
626
  samplerCount: "int",
711
627
  tileOffsetArr: "vec4",
712
- visibleExtentOffsetArr: "vec4",
713
628
  samplerArr: "sampler2darray",
714
- transparentColorArr: "vec4",
715
629
  defaultTexture: "sampler2d",
716
630
  height: "float",
717
631
  eyePositionHigh: "vec3",
@@ -752,13 +666,12 @@ export function drawnode_depth() {
752
666
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
753
667
  }`,
754
668
 
755
- fragmentShader: `#version 300 es
669
+ fragmentShader: `#version 300 es
670
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
756
671
  precision highp float;
757
672
  uniform sampler2D defaultTexture;
758
- uniform vec4 tileOffsetArr[5];
759
- uniform vec4 visibleExtentOffsetArr[5];
760
- uniform vec4 transparentColorArr[5];
761
- uniform sampler2D samplerArr[5];
673
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
674
+ uniform sampler2D samplerArr[SLICE_SIZE];
762
675
  uniform int samplerCount;
763
676
  uniform vec3 frustumPickingColor;
764
677
 
@@ -766,42 +679,32 @@ export function drawnode_depth() {
766
679
 
767
680
  layout(location = 0) out vec4 frustumColor;
768
681
 
769
- /* return 1 if v inside the box, return 0 otherwise */
770
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
771
- vec2 s = step(bottomLeft, v) - step(topRight, v);
772
- return s.x * s.y;
773
- }
774
-
775
- ${CORNERS}
776
-
777
682
  void main(void) {
778
683
 
779
684
  frustumColor = vec4(frustumPickingColor, texture(defaultTexture, vTextureCoord).a);
780
685
  if(samplerCount == 0) return;
781
686
 
782
- vec4 t = texture(samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
783
- float emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[0].rgb));
784
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
785
- if (samplerCount == 1) return;
786
-
787
- t = texture(samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
788
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[1].rgb));
789
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
790
- if (samplerCount == 2) return;
791
-
792
- t = texture(samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
793
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[2].rgb));
794
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
795
- if (samplerCount == 3) return;
796
-
797
- t = texture(samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
798
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[3].rgb));
799
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
800
- if (samplerCount == 4) return;
801
-
802
- t = texture(samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
803
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[4].rgb));
804
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
805
- } `
687
+ vec4 t = texture(samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw);
688
+ frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0);
689
+
690
+ //
691
+ // TODO: Seems to be it is not necessary
692
+ //if (samplerCount == 1) return;
693
+
694
+ //t = texture(samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw);
695
+ //frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0);
696
+ //if (samplerCount == 2) return;
697
+
698
+ //t = texture(samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw);
699
+ //frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0);
700
+ //if (samplerCount == 3) return;
701
+
702
+ //t = texture(samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw);
703
+ //frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0);
704
+ //if (samplerCount == 4) return;
705
+
706
+ //t = texture(samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw);
707
+ //frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0);
708
+ } `
806
709
  });
807
710
  }