@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
@@ -5,17 +5,32 @@
5
5
  "use strict";
6
6
 
7
7
  import { Program } from "../webgl/Program.js";
8
-
9
- // REMEMBER!
8
+
9
+ // REMEMBER!
10
10
  // src*(1)+dest*(1-src.alpha)
11
11
  // glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
12
12
  // src*(src.alpha)+dest*(1-src.alpha)
13
13
  // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
14
14
 
15
- const CORNERS = `const vec2 BOTTOMLEFT = vec2(-0.01);
16
- const vec2 TOPRIGHT = vec2(1.01);`;
17
-
15
+
18
16
  const NIGHT = `const vec3 nightStep = 10.0 * vec3(0.58, 0.48, 0.25);`;
17
+
18
+ const DEF_BLEND = `#define blend(DEST, SAMPLER, OFFSET, OPACITY) \
19
+ src = texture( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); \
20
+ DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;`;
21
+
22
+ const DEF_BLEND_WEBGL1 = `#define blend(DEST, SAMPLER, OFFSET, OPACITY) \
23
+ src = texture2D( SAMPLER, OFFSET.xy + vTextureCoord.xy * OFFSET.zw ); \
24
+ DEST = DEST * (1.0 - src.a * OPACITY) + src * OPACITY;`;
25
+
26
+ const DEF_BLEND_PICKING = `#define blendPicking(DEST, OFFSET, SAMPLER, MASK, COLOR, OPACITY) \
27
+ tc = OFFSET.xy + vTextureCoord.xy * OFFSET.zw; \
28
+ t = texture2D(SAMPLER, tc); \
29
+ p = texture2D(MASK, tc); \
30
+ DEST = mix(DEST, vec4(max(COLOR.rgb, p.rgb), OPACITY), (t.a == 0.0 ? 0.0 : 1.0) * COLOR.a);`
31
+
32
+
33
+ const SLICE_SIZE = 4;
19
34
 
20
35
  export function drawnode_screen_nl() {
21
36
  return new Program("drawnode_screen_nl", {
@@ -26,9 +41,8 @@ export function drawnode_screen_nl() {
26
41
  eyePositionLow: "vec3",
27
42
  samplerCount: "int",
28
43
  tileOffsetArr: "vec4",
29
- visibleExtentOffsetArr: "vec4",
44
+ layerOpacityArr: "float",
30
45
  samplerArr: "sampler2darray",
31
- transparentColorArr: "vec4",
32
46
  defaultTexture: "sampler2d",
33
47
  height: "float"
34
48
  },
@@ -61,61 +75,38 @@ export function drawnode_screen_nl() {
61
75
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
62
76
 
63
77
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
64
-
65
- /*vec3 cameraPosition = eyePositionHigh + eyePositionLow;*/
66
- /*vec3 aVertexPosition = aVertexPositionHigh + aVertexPositionLow * (cameraPosition / cameraPosition);*/
67
- /*gl_Position = projectionViewMatrix * vec4(aVertexPosition + normalize(aVertexPosition) * height, 1.0);*/
68
78
  }`,
69
79
 
70
80
  fragmentShader: `precision highp float;
71
- uniform vec4 tileOffsetArr[5];
72
- uniform vec4 visibleExtentOffsetArr[5];
73
- uniform vec4 transparentColorArr[5];
81
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
82
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
83
+ uniform float layerOpacityArr[SLICE_SIZE];
74
84
  uniform sampler2D defaultTexture;
75
- uniform sampler2D samplerArr[5];
85
+ uniform sampler2D samplerArr[SLICE_SIZE];
76
86
  uniform int samplerCount;
77
- varying vec2 vTextureCoord;
78
-
79
- /* return 1 if v inside the box, return 0 otherwise */
80
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
81
- vec2 s = step(bottomLeft, v) - step(topRight, v);
82
- return s.x * s.y;
83
- }
87
+ varying vec2 vTextureCoord;
84
88
 
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;
100
- }
89
+ ${DEF_BLEND_WEBGL1}
101
90
 
102
91
  void main(void) {
103
92
  gl_FragColor = texture2D( defaultTexture, vTextureCoord );
104
93
  if( samplerCount == 0 ) return;
105
94
 
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]);
95
+ vec4 src;
96
+
97
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
98
+ if( samplerCount == 1 ) return;
99
+
100
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
101
+ if( samplerCount == 2 ) return;
102
+
103
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
104
+ if( samplerCount == 3 ) return;
105
+
106
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
107
+ if( samplerCount == 4 ) return;
108
+
109
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
119
110
  }`
120
111
  });
121
112
  }
@@ -134,18 +125,17 @@ export function drawnode_screen_wl() {
134
125
 
135
126
  samplerCount: "int",
136
127
  tileOffsetArr: "vec4",
137
- visibleExtentOffsetArr: "vec4",
128
+ layerOpacityArr: "float",
138
129
  samplerArr: "sampler2darray",
139
- transparentColorArr: "vec4",
140
130
  defaultTexture: "sampler2d",
141
131
  normalMatrix: "mat3",
142
132
  uNormalMap: "sampler2d",
143
133
  nightTexture: "sampler2d",
144
134
  specularTexture: "sampler2d",
145
135
  lightsPositions: "vec4",
146
- diffuseMaterial: "vec3",
147
- ambientMaterial: "vec3",
148
- specularMaterial: "vec4"
136
+ diffuse: "vec3",
137
+ ambient: "vec3",
138
+ specular: "vec4"
149
139
  },
150
140
  attributes: {
151
141
  aVertexPositionHigh: "vec3",
@@ -191,12 +181,11 @@ export function drawnode_screen_wl() {
191
181
  fragmentShader: `precision highp float;
192
182
 
193
183
  #define MAX_POINT_LIGHTS 1
194
- #define MAX_OVERLAYS 5
195
- #define MAX_OVERLAYS_PLUS_ONE 6
184
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
196
185
 
197
- uniform vec3 diffuseMaterial[MAX_OVERLAYS_PLUS_ONE];
198
- uniform vec3 ambientMaterial[MAX_OVERLAYS_PLUS_ONE];
199
- uniform vec4 specularMaterial[MAX_OVERLAYS_PLUS_ONE];
186
+ uniform vec3 diffuse;
187
+ uniform vec3 ambient;
188
+ uniform vec4 specular;
200
189
 
201
190
  uniform sampler2D uNormalMap;
202
191
  uniform vec4 lightsPositions[MAX_POINT_LIGHTS];
@@ -204,12 +193,11 @@ export function drawnode_screen_wl() {
204
193
  uniform sampler2D nightTexture;
205
194
  uniform sampler2D specularTexture;
206
195
 
207
- uniform vec4 tileOffsetArr[MAX_OVERLAYS];
208
- uniform vec4 visibleExtentOffsetArr[MAX_OVERLAYS];
209
- uniform vec4 transparentColorArr[MAX_OVERLAYS];
196
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
197
+ uniform float layerOpacityArr[SLICE_SIZE];
210
198
 
211
199
  uniform sampler2D defaultTexture;
212
- uniform sampler2D samplerArr[MAX_OVERLAYS];
200
+ uniform sampler2D samplerArr[SLICE_SIZE];
213
201
  uniform int samplerCount;
214
202
 
215
203
  varying vec4 vTextureCoord;
@@ -217,30 +205,10 @@ export function drawnode_screen_wl() {
217
205
  varying vec4 v_vertex;
218
206
  varying float v_height;
219
207
 
220
- /* return 1 if v inside the box, return 0 otherwise */
221
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
222
- vec2 s = step(bottomLeft, v) - step(topRight, v);
223
- return s.x * s.y;
224
- }
225
-
226
- ${CORNERS}
227
-
228
208
  ${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
- }
209
+
210
+ ${DEF_BLEND}
211
+
244
212
 
245
213
  void main(void) {
246
214
 
@@ -256,33 +224,43 @@ export function drawnode_screen_wl() {
256
224
  vec3 night = nightStep * (0.3 - diffuseLightWeighting) * nightImageColor.rgb;
257
225
  night *= overGround * step(0.0, night);
258
226
 
259
-
260
-
261
- vec3 spec = specularMaterial[0].rgb * pow( reflection, specularMaterial[0].w) * shininess;
262
- vec3 lightWeighting = ambientMaterial[0] + diffuseMaterial[0] * diffuseLightWeighting + spec;
263
-
264
- vec4 t = texture2D( defaultTexture, vTextureCoord.xy );
265
- gl_FragColor = vec4(t.rgb * lightWeighting + night + spec, t.a);
266
- if( samplerCount == 0 ) return;
267
-
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]);
227
+ vec3 spec = specular.rgb * pow( reflection, specular.w) * shininess;
228
+ vec3 lightWeighting = ambient + diffuse * diffuseLightWeighting + spec + night;
229
+
230
+ gl_FragColor = texture2D( defaultTexture, vTextureCoord.xy );
231
+ if( samplerCount == 0 ) {
232
+ gl_FragColor *= lightWeighting;
233
+ return;
234
+ }
235
+
236
+ vec4 src;
237
+
238
+ blend(gl_FragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
239
+ if( samplerCount == 1 ) {
240
+ gl_FragColor *= lightWeighting;
241
+ return;
242
+ }
243
+
244
+ blend(gl_FragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
245
+ if( samplerCount == 2 ) {
246
+ gl_FragColor *= lightWeighting;
247
+ return;
248
+ }
249
+
250
+ blend(gl_FragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
251
+ if( samplerCount == 3 ) {
252
+ gl_FragColor *= lightWeighting;
253
+ return;
254
+ }
255
+
256
+ blend(gl_FragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
257
+ if( samplerCount == 4 ) {
258
+ gl_FragColor *= lightWeighting;
259
+ return;
260
+ }
261
+
262
+ blend(gl_FragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
263
+ gl_FragColor *= lightWeighting;
286
264
  }`
287
265
  });
288
266
  }
@@ -301,18 +279,17 @@ export function drawnode_screen_wl_webgl2() {
301
279
 
302
280
  samplerCount: "int",
303
281
  tileOffsetArr: "vec4",
304
- visibleExtentOffsetArr: "vec4",
282
+ layerOpacityArr: "float",
305
283
  samplerArr: "sampler2darray",
306
- transparentColorArr: "vec4",
307
284
  defaultTexture: "sampler2d",
308
285
  normalMatrix: "mat3",
309
286
  uNormalMap: "sampler2d",
310
287
  nightTexture: "sampler2d",
311
288
  specularTexture: "sampler2d",
312
289
  lightsPositions: "vec4",
313
- diffuseMaterial: "vec3",
314
- ambientMaterial: "vec3",
315
- specularMaterial: "vec4"
290
+ diffuse: "vec3",
291
+ ambient: "vec3",
292
+ specular: "vec4"
316
293
  },
317
294
  attributes: {
318
295
  aVertexPositionHigh: "vec3",
@@ -320,7 +297,7 @@ export function drawnode_screen_wl_webgl2() {
320
297
  aTextureCoord: "vec2"
321
298
  },
322
299
 
323
- vertexShader: `#version 300 es
300
+ vertexShader: `#version 300 es
324
301
 
325
302
  in vec3 aVertexPositionHigh;
326
303
  in vec3 aVertexPositionLow;
@@ -362,12 +339,11 @@ export function drawnode_screen_wl_webgl2() {
362
339
  precision highp float;
363
340
 
364
341
  #define MAX_POINT_LIGHTS 1
365
- #define MAX_OVERLAYS 5
366
- #define MAX_OVERLAYS_PLUS_ONE 6
342
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
367
343
 
368
- uniform vec3 diffuseMaterial[MAX_OVERLAYS_PLUS_ONE];
369
- uniform vec3 ambientMaterial[MAX_OVERLAYS_PLUS_ONE];
370
- uniform vec4 specularMaterial[MAX_OVERLAYS_PLUS_ONE];
344
+ uniform vec3 diffuse;
345
+ uniform vec3 ambient;
346
+ uniform vec4 specular;
371
347
 
372
348
  uniform sampler2D uNormalMap;
373
349
  uniform vec4 lightsPositions[MAX_POINT_LIGHTS];
@@ -375,18 +351,17 @@ export function drawnode_screen_wl_webgl2() {
375
351
  uniform sampler2D nightTexture;
376
352
  uniform sampler2D specularTexture;
377
353
 
378
- uniform vec4 tileOffsetArr[MAX_OVERLAYS];
379
- uniform vec4 visibleExtentOffsetArr[MAX_OVERLAYS];
380
- uniform vec4 transparentColorArr[MAX_OVERLAYS];
354
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
355
+ uniform float layerOpacityArr[SLICE_SIZE];
381
356
 
382
357
  uniform sampler2D defaultTexture;
383
- uniform sampler2D samplerArr[MAX_OVERLAYS];
358
+ uniform sampler2D samplerArr[SLICE_SIZE];
384
359
  uniform int samplerCount;
385
360
 
386
361
  in vec4 vTextureCoord;
387
362
  in vec2 vGlobalTextureCoord;
388
363
  in vec4 v_vertex;
389
- in float v_height;
364
+ in float v_height;
390
365
 
391
366
  float shininess;
392
367
  float reflection;
@@ -395,76 +370,62 @@ export function drawnode_screen_wl_webgl2() {
395
370
 
396
371
  layout(location = 0) out vec4 fragColor;
397
372
 
398
- /* return 1 if v inside the box, return 0 otherwise */
399
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
400
- vec2 s = step(bottomLeft, v) - step(topRight, v);
401
- return s.x * s.y;
402
- }
403
-
404
- ${CORNERS}
373
+ ${NIGHT}
405
374
 
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
- }
375
+ ${DEF_BLEND}
428
376
 
429
- void main(void) {
377
+ void main(void) {
430
378
 
431
379
  float overGround = 1.0 - step(0.1, v_height);
432
380
  vec3 normal = normalize(normalMatrix * ((texture(uNormalMap, vTextureCoord.zw).rgb - 0.5) * 2.0));
433
381
  vec3 lightDirection = normalize(lightsPositions[0].xyz - v_vertex.xyz * lightsPositions[0].w);
434
382
  vec3 eyeDirection = normalize(-v_vertex.xyz);
435
383
  vec3 reflectionDirection = reflect(-lightDirection, normal);
436
- vec4 nightImageColor = texture( nightTexture, vGlobalTextureCoord.st );
384
+ vec4 nightImageColor = texture( nightTexture, vGlobalTextureCoord.st );
437
385
 
438
386
  shininess = texture( specularTexture, vGlobalTextureCoord.st ).r * 255.0 * overGround;
439
387
  reflection = max( dot(reflectionDirection, eyeDirection), 0.0);
440
388
  diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
441
389
  night = nightStep * (.18 - diffuseLightWeighting * 3.0) * nightImageColor.rgb;
442
390
  night *= overGround * step(0.0, night);
391
+
392
+ vec3 spec = specular.rgb * pow( reflection, specular.w) * shininess;
393
+ vec4 lightWeighting = vec4(ambient + diffuse * diffuseLightWeighting + spec + night, 1.0);
394
+
395
+ fragColor = texture( defaultTexture, vTextureCoord.xy );
396
+ if( samplerCount == 0 ) {
397
+ fragColor *= lightWeighting;
398
+ return;
399
+ }
443
400
 
444
- vec3 spec = specularMaterial[0].rgb * pow( reflection, specularMaterial[0].w) * shininess;
445
- vec3 lightWeighting = ambientMaterial[0] + diffuseMaterial[0] * diffuseLightWeighting + spec;
446
- vec4 t = texture( defaultTexture, vTextureCoord.xy );
447
- fragColor = vec4(t.rgb * lightWeighting + night + spec, t.a);
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]);
401
+ vec4 src;
402
+
403
+ blend(fragColor, samplerArr[0], tileOffsetArr[0], layerOpacityArr[0]);
404
+ if( samplerCount == 1 ) {
405
+ fragColor *= lightWeighting;
406
+ return;
407
+ }
408
+
409
+ blend(fragColor, samplerArr[1], tileOffsetArr[1], layerOpacityArr[1]);
410
+ if( samplerCount == 2 ) {
411
+ fragColor *= lightWeighting;
412
+ return;
413
+ }
414
+
415
+ blend(fragColor, samplerArr[2], tileOffsetArr[2], layerOpacityArr[2]);
416
+ if( samplerCount == 3 ) {
417
+ fragColor *= lightWeighting;
418
+ return;
419
+ }
420
+
421
+ blend(fragColor, samplerArr[3], tileOffsetArr[3], layerOpacityArr[3]);
422
+ if( samplerCount == 4 ) {
423
+ fragColor *= lightWeighting;
424
+ return;
425
+ }
426
+
427
+ blend(fragColor, samplerArr[4], tileOffsetArr[4], layerOpacityArr[4]);
428
+ fragColor *= lightWeighting;
468
429
  }`
469
430
  });
470
431
  }
@@ -478,10 +439,8 @@ export function drawnode_colorPicking() {
478
439
  eyePositionLow: "vec3",
479
440
  samplerCount: "int",
480
441
  tileOffsetArr: "vec4",
481
- visibleExtentOffsetArr: "vec4",
482
442
  samplerArr: "sampler2darray",
483
443
  pickingMaskArr: "sampler2darray",
484
- transparentColorArr: "vec4",
485
444
  pickingColorArr: "vec4",
486
445
  height: "float"
487
446
  },
@@ -517,69 +476,37 @@ export function drawnode_colorPicking() {
517
476
  }`,
518
477
 
519
478
  fragmentShader: `precision highp float;
520
- uniform vec4 tileOffsetArr[5];
521
- uniform vec4 visibleExtentOffsetArr[5];
522
- uniform vec4 transparentColorArr[5];
523
- uniform vec4 pickingColorArr[5];
524
- uniform sampler2D samplerArr[5];
525
- uniform sampler2D pickingMaskArr[5];
479
+ #define SLICE_SIZE ${SLICE_SIZE + 1}
480
+ uniform vec4 tileOffsetArr[SLICE_SIZE];
481
+ uniform vec4 pickingColorArr[SLICE_SIZE];
482
+ uniform sampler2D samplerArr[SLICE_SIZE];
483
+ uniform sampler2D pickingMaskArr[SLICE_SIZE];
526
484
  uniform int samplerCount;
527
485
  varying vec2 vTextureCoord;
528
- /* return 1 if v inside the box, return 0 otherwise */
529
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
530
- vec2 s = step(bottomLeft, v) - step(topRight, v);
531
- return s.x * s.y;
532
- }
533
486
 
534
- ${CORNERS}
487
+ ${DEF_BLEND_PICKING}
535
488
 
536
489
  void main(void) {
537
490
  gl_FragColor = vec4(0.0);
538
491
  if( samplerCount == 0 ) return;
492
+
493
+ vec2 tc;
494
+ vec4 t;
495
+ vec4 p;
539
496
 
540
- vec2 tc = tileOffsetArr[0].xy + vTextureCoord.xy * tileOffsetArr[0].zw;
541
- float ins = insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord.xy * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
542
- vec4 t = texture2D( samplerArr[0], tc ) * ins;
543
- vec4 p = texture2D( pickingMaskArr[0], tc ) * ins;
544
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
545
- emptiness = 1.0 - step(0.0, -emptiness);
546
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[0].rgb, p.rgb), 1.0), emptiness * pickingColorArr[0].a);
497
+ blendPicking(gl_FragColor, tileOffsetArr[0], samplerArr[0], pickingMaskArr[0], pickingColorArr[0], 1.0);
547
498
  if( samplerCount == 1 ) return;
548
499
 
549
- tc = tileOffsetArr[1].xy + vTextureCoord.xy * tileOffsetArr[1].zw;
550
- ins = insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord.xy * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
551
- t = texture2D( samplerArr[1], tc ) * ins;
552
- p = texture2D( pickingMaskArr[1], tc ) * ins;
553
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
554
- emptiness = 1.0 - step(0.0, -emptiness);
555
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[1].rgb, p.rgb), 1.0), emptiness * pickingColorArr[1].a);
500
+ blendPicking(gl_FragColor, tileOffsetArr[1], samplerArr[1], pickingMaskArr[1], pickingColorArr[1], 1.0);
556
501
  if( samplerCount == 2 ) return;
557
502
 
558
- tc = tileOffsetArr[2].xy + vTextureCoord.xy * tileOffsetArr[2].zw;
559
- ins = insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord.xy * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
560
- t = texture2D( samplerArr[2], tc ) * ins;
561
- p = texture2D( pickingMaskArr[2], tc ) * ins;
562
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
563
- emptiness = 1.0 - step(0.0, -emptiness);
564
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[2].rgb, p.rgb), 1.0), emptiness * pickingColorArr[2].a);
503
+ blendPicking(gl_FragColor, tileOffsetArr[2], samplerArr[2], pickingMaskArr[2], pickingColorArr[2], 1.0);
565
504
  if( samplerCount == 3 ) return;
566
505
 
567
- tc = tileOffsetArr[3].xy + vTextureCoord.xy * tileOffsetArr[3].zw;
568
- ins = insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord.xy * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
569
- t = texture2D( samplerArr[3], tc ) * ins;
570
- p = texture2D( pickingMaskArr[3], tc ) * ins;
571
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
572
- emptiness = 1.0 - step(0.0, -emptiness);
573
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[3].rgb, p.rgb), 1.0), emptiness * pickingColorArr[3].a);
506
+ blendPicking(gl_FragColor, tileOffsetArr[3], samplerArr[3], pickingMaskArr[3], pickingColorArr[3], 1.0);
574
507
  if( samplerCount == 4 ) return;
575
508
 
576
- tc = tileOffsetArr[4].xy + vTextureCoord.xy * tileOffsetArr[4].zw;
577
- ins = insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord.xy * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
578
- t = texture2D( samplerArr[4], tc ) * ins;
579
- p = texture2D( pickingMaskArr[4], tc ) * ins;
580
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
581
- emptiness = 1.0 - step(0.0, -emptiness);
582
- gl_FragColor = mix( gl_FragColor, vec4(max(pickingColorArr[4].rgb, p.rgb), 1.0), emptiness * pickingColorArr[4].a);
509
+ blendPicking(gl_FragColor, tileOffsetArr[4], samplerArr[4], pickingMaskArr[4], pickingColorArr[4], 1.0);
583
510
  }`
584
511
  });
585
512
  }
@@ -589,25 +516,17 @@ export function drawnode_heightPicking() {
589
516
  uniforms: {
590
517
  projectionMatrix: "mat4",
591
518
  viewMatrix: "mat4",
592
- samplerCount: "int",
593
- tileOffsetArr: "vec4",
594
- visibleExtentOffsetArr: "vec4",
595
- samplerArr: "sampler2darray",
596
- transparentColorArr: "vec4",
597
- defaultTexture: "sampler2d",
598
519
  height: "float",
599
520
  eyePositionHigh: "vec3",
600
521
  eyePositionLow: "vec3"
601
522
  },
602
523
  attributes: {
603
524
  aVertexPositionHigh: "vec3",
604
- aVertexPositionLow: "vec3",
605
- aTextureCoord: "vec2"
525
+ aVertexPositionLow: "vec3"
606
526
  },
607
527
 
608
528
  vertexShader: `attribute vec3 aVertexPositionHigh;
609
529
  attribute vec3 aVertexPositionLow;
610
- attribute vec2 aTextureCoord;
611
530
 
612
531
  uniform mat4 projectionMatrix;
613
532
  uniform mat4 viewMatrix;
@@ -615,7 +534,6 @@ export function drawnode_heightPicking() {
615
534
  uniform vec3 eyePositionHigh;
616
535
  uniform vec3 eyePositionLow;
617
536
 
618
- varying vec2 vTextureCoord;
619
537
  varying float range;
620
538
 
621
539
  void main(void) {
@@ -630,25 +548,12 @@ export function drawnode_heightPicking() {
630
548
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
631
549
 
632
550
  range = distance(cameraPosition, aVertexPosition + normalize(aVertexPosition) * height);
633
- vTextureCoord = aTextureCoord;
634
551
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
635
552
  }`,
636
553
 
637
554
  fragmentShader: `precision highp float;
638
- uniform sampler2D defaultTexture;
639
- uniform vec4 tileOffsetArr[5];
640
- uniform vec4 visibleExtentOffsetArr[5];
641
- uniform vec4 transparentColorArr[5];
642
- uniform sampler2D samplerArr[5];
643
- uniform int samplerCount;
644
- varying vec2 vTextureCoord;
645
- varying float range;
646
555
 
647
- /* return 1 if v inside the box, return 0 otherwise */
648
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
649
- vec2 s = step(bottomLeft, v) - step(topRight, v);
650
- return s.x * s.y;
651
- }
556
+ varying float range;
652
557
 
653
558
  vec3 encode24(highp float f) {
654
559
  float F = abs(f);
@@ -662,35 +567,8 @@ export function drawnode_heightPicking() {
662
567
  floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
663
568
  }
664
569
 
665
- ${CORNERS}
666
-
667
570
  void main(void) {
668
- gl_FragColor = vec4(encode24(range), texture2D( defaultTexture, vTextureCoord ).a);
669
- if( samplerCount == 0 ) return;
670
-
671
- vec4 t = texture2D( samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw ) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
672
- float emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[0].rgb ));
673
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
674
- if( samplerCount == 1 ) return;
675
-
676
- t = texture2D( samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw ) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
677
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[1].rgb ));
678
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
679
- if( samplerCount == 2 ) return;
680
-
681
- t = texture2D( samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw ) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
682
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[2].rgb ));
683
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
684
- if( samplerCount == 3 ) return;
685
-
686
- t = texture2D( samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw ) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
687
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[3].rgb ));
688
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
689
- if( samplerCount == 4 ) return;
690
-
691
- t = texture2D( samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw ) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
692
- emptiness = t.a * smoothstep(0.35, 0.5, distance( t.rgb, transparentColorArr[4].rgb ));
693
- gl_FragColor = mix( gl_FragColor, vec4(encode24(range), 1.0), 1.0 - step(0.0, -emptiness));
571
+ gl_FragColor = vec4(encode24(range), 1.0);
694
572
  }`
695
573
  });
696
574
  }
@@ -700,12 +578,6 @@ export function drawnode_depth() {
700
578
  uniforms: {
701
579
  projectionMatrix: "mat4",
702
580
  viewMatrix: "mat4",
703
- samplerCount: "int",
704
- tileOffsetArr: "vec4",
705
- visibleExtentOffsetArr: "vec4",
706
- samplerArr: "sampler2darray",
707
- transparentColorArr: "vec4",
708
- defaultTexture: "sampler2d",
709
581
  height: "float",
710
582
  eyePositionHigh: "vec3",
711
583
  eyePositionLow: "vec3",
@@ -713,14 +585,11 @@ export function drawnode_depth() {
713
585
  },
714
586
  attributes: {
715
587
  aVertexPositionHigh: "vec3",
716
- aVertexPositionLow: "vec3",
717
- aTextureCoord: "vec2"
588
+ aVertexPositionLow: "vec3"
718
589
  },
719
590
 
720
- vertexShader: `#version 300 es
721
- in vec3 aVertexPositionHigh;
722
- in vec3 aVertexPositionLow;
723
- in vec2 aTextureCoord;
591
+ vertexShader: `attribute vec3 aVertexPositionHigh;
592
+ attribute vec3 aVertexPositionLow;
724
593
 
725
594
  uniform mat4 projectionMatrix;
726
595
  uniform mat4 viewMatrix;
@@ -728,8 +597,6 @@ export function drawnode_depth() {
728
597
  uniform vec3 eyePositionHigh;
729
598
  uniform vec3 eyePositionLow;
730
599
 
731
- out vec2 vTextureCoord;
732
-
733
600
  void main(void) {
734
601
 
735
602
  vec3 cameraPosition = eyePositionHigh + eyePositionLow;
@@ -741,60 +608,14 @@ export function drawnode_depth() {
741
608
  mat4 viewMatrixRTE = viewMatrix;
742
609
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
743
610
 
744
- vTextureCoord = aTextureCoord;
745
611
  gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
746
612
  }`,
747
613
 
748
- fragmentShader: `#version 300 es
749
- precision highp float;
750
- uniform sampler2D defaultTexture;
751
- uniform vec4 tileOffsetArr[5];
752
- uniform vec4 visibleExtentOffsetArr[5];
753
- uniform vec4 transparentColorArr[5];
754
- uniform sampler2D samplerArr[5];
755
- uniform int samplerCount;
614
+ fragmentShader: `precision highp float;
756
615
  uniform vec3 frustumPickingColor;
757
616
 
758
- in vec2 vTextureCoord;
759
-
760
- layout(location = 0) out vec4 frustumColor;
761
-
762
- /* return 1 if v inside the box, return 0 otherwise */
763
- float insideBox(vec2 v, vec2 bottomLeft, vec2 topRight) {
764
- vec2 s = step(bottomLeft, v) - step(topRight, v);
765
- return s.x * s.y;
766
- }
767
-
768
- ${CORNERS}
769
-
770
617
  void main(void) {
771
-
772
- frustumColor = vec4(frustumPickingColor, texture(defaultTexture, vTextureCoord).a);
773
- if(samplerCount == 0) return;
774
-
775
- vec4 t = texture(samplerArr[0], tileOffsetArr[0].xy + vTextureCoord * tileOffsetArr[0].zw) * insideBox(visibleExtentOffsetArr[0].xy + vTextureCoord * visibleExtentOffsetArr[0].zw, BOTTOMLEFT, TOPRIGHT);
776
- float emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[0].rgb));
777
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
778
- if (samplerCount == 1) return;
779
-
780
- t = texture(samplerArr[1], tileOffsetArr[1].xy + vTextureCoord * tileOffsetArr[1].zw) * insideBox(visibleExtentOffsetArr[1].xy + vTextureCoord * visibleExtentOffsetArr[1].zw, BOTTOMLEFT, TOPRIGHT);
781
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[1].rgb));
782
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
783
- if (samplerCount == 2) return;
784
-
785
- t = texture(samplerArr[2], tileOffsetArr[2].xy + vTextureCoord * tileOffsetArr[2].zw) * insideBox(visibleExtentOffsetArr[2].xy + vTextureCoord * visibleExtentOffsetArr[2].zw, BOTTOMLEFT, TOPRIGHT);
786
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[2].rgb));
787
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
788
- if (samplerCount == 3) return;
789
-
790
- t = texture(samplerArr[3], tileOffsetArr[3].xy + vTextureCoord * tileOffsetArr[3].zw) * insideBox(visibleExtentOffsetArr[3].xy + vTextureCoord * visibleExtentOffsetArr[3].zw, BOTTOMLEFT, TOPRIGHT);
791
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[3].rgb));
792
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
793
- if (samplerCount == 4) return;
794
-
795
- t = texture(samplerArr[4], tileOffsetArr[4].xy + vTextureCoord * tileOffsetArr[4].zw) * insideBox(visibleExtentOffsetArr[4].xy + vTextureCoord * visibleExtentOffsetArr[4].zw, BOTTOMLEFT, TOPRIGHT);
796
- emptiness = t.a * smoothstep(0.35, 0.5, distance(t.rgb, transparentColorArr[4].rgb));
797
- frustumColor = mix(frustumColor, vec4(frustumPickingColor, 1.0), 1.0 - step(0.0, -emptiness));
798
- } `
618
+ gl_FragColor = vec4(frustumPickingColor, 1.0);
619
+ } `
799
620
  });
800
621
  }