@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.
- package/css/og.css +5 -2
- package/dist/@openglobus/og.css +1 -0
- package/dist/@openglobus/og.esm.js +21 -0
- package/dist/@openglobus/og.esm.js.map +1 -0
- package/dist/@openglobus/og.umd.js +21 -0
- package/dist/@openglobus/og.umd.js.map +1 -0
- package/package.json +11 -11
- package/src/og/Globe.js +18 -6
- package/src/og/camera/Camera.js +70 -79
- package/src/og/camera/PlanetCamera.js +25 -30
- package/src/og/control/DebugInfo.js +2 -2
- package/src/og/control/EarthNavigation.js +26 -17
- package/src/og/control/Lighting.js +52 -73
- package/src/og/control/MouseNavigation.js +30 -29
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- package/src/og/control/Sun.js +3 -3
- package/src/og/control/index.js +2 -0
- package/src/og/control/visibleExtent/Segment.js +1862 -0
- package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
- package/src/og/control/visibleExtent/drawnode.js +751 -0
- package/src/og/entity/BaseBillboard.js +9 -9
- package/src/og/entity/Entity.js +742 -742
- package/src/og/entity/GeoObjectHandler.js +138 -134
- package/src/og/entity/Label.js +7 -7
- package/src/og/entity/LabelHandler.js +2 -1
- package/src/og/layer/CanvasTiles.js +8 -12
- package/src/og/layer/GeoImage.js +2 -10
- package/src/og/layer/GeoTexture2d.js +2 -10
- package/src/og/layer/GeoVideo.js +2 -10
- package/src/og/layer/KML.js +19 -12
- package/src/og/layer/Layer.js +4 -23
- package/src/og/layer/WMS.js +0 -2
- package/src/og/layer/XYZ.js +31 -33
- package/src/og/math/Vec3.js +18 -2
- package/src/og/quadTree/Node.js +48 -93
- package/src/og/quadTree/quadTree.js +1 -1
- package/src/og/renderer/Renderer.js +69 -96
- package/src/og/renderer/RendererEvents.js +3 -1
- package/src/og/scene/Planet.js +171 -173
- package/src/og/segment/Segment.js +99 -268
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +171 -350
- package/src/og/shaders/geoObject.js +15 -6
- package/src/og/terrain/EmptyTerrain.js +3 -2
- package/src/og/terrain/GlobusTerrain.js +2 -0
- package/src/og/utils/GeoImageCreator.js +5 -1
- package/src/og/utils/Loader.js +1 -1
- package/src/og/utils/PlainSegmentWorker.js +0 -13
- package/src/og/webgl/Handler.js +14 -10
- package/types/Clock.d.ts +94 -0
- package/types/Deferred.d.ts +6 -0
- package/types/Events.d.ts +77 -0
- package/types/Extent.d.ts +166 -0
- package/types/Globe.d.ts +85 -0
- package/types/ImageCanvas.d.ts +123 -0
- package/types/Lock.d.ts +12 -0
- package/types/LonLat.d.ts +108 -0
- package/types/Popup.d.ts +42 -0
- package/types/QueueArray.d.ts +19 -0
- package/types/Rectangle.d.ts +80 -0
- package/types/Stack.d.ts +19 -0
- package/types/ajax.d.ts +24 -0
- package/types/arial.d.ts +48 -0
- package/types/astro/astro.d.ts +38 -0
- package/types/astro/earth.d.ts +7 -0
- package/types/astro/jd.d.ts +254 -0
- package/types/bv/Box.d.ts +30 -0
- package/types/bv/Sphere.d.ts +38 -0
- package/types/bv/index.d.ts +3 -0
- package/types/camera/Camera.d.ts +312 -0
- package/types/camera/Frustum.d.ts +133 -0
- package/types/camera/PlanetCamera.d.ts +219 -0
- package/types/camera/index.d.ts +3 -0
- package/types/cons.d.ts +40 -0
- package/types/control/CompassButton.d.ts +17 -0
- package/types/control/Control.d.ts +104 -0
- package/types/control/DebugInfo.d.ts +15 -0
- package/types/control/EarthCoordinates.d.ts +47 -0
- package/types/control/EarthNavigation.d.ts +43 -0
- package/types/control/GeoImageDragControl.d.ts +6 -0
- package/types/control/KeyboardNavigation.d.ts +21 -0
- package/types/control/LayerSwitcher.d.ts +21 -0
- package/types/control/Lighting.d.ts +16 -0
- package/types/control/MouseNavigation.d.ts +48 -0
- package/types/control/MouseWheelZoomControl.d.ts +45 -0
- package/types/control/ScaleControl.d.ts +22 -0
- package/types/control/ShowFps.d.ts +11 -0
- package/types/control/SimpleNavigation.d.ts +25 -0
- package/types/control/Sun.d.ts +50 -0
- package/types/control/ToggleWireframe.d.ts +12 -0
- package/types/control/TouchNavigation.d.ts +48 -0
- package/types/control/ZoomControl.d.ts +27 -0
- package/types/control/index.d.ts +18 -0
- package/types/ellipsoid/Ellipsoid.d.ts +146 -0
- package/types/ellipsoid/index.d.ts +3 -0
- package/types/ellipsoid/wgs84.d.ts +6 -0
- package/types/entity/BaseBillboard.d.ts +215 -0
- package/types/entity/Billboard.d.ts +94 -0
- package/types/entity/BillboardHandler.d.ts +79 -0
- package/types/entity/Entity.d.ts +348 -0
- package/types/entity/EntityCollection.d.ts +317 -0
- package/types/entity/GeoObject.d.ts +111 -0
- package/types/entity/GeoObjectHandler.d.ts +81 -0
- package/types/entity/Geometry.d.ts +74 -0
- package/types/entity/GeometryHandler.d.ts +76 -0
- package/types/entity/Label.d.ts +189 -0
- package/types/entity/LabelHandler.d.ts +31 -0
- package/types/entity/LabelWorker.d.ts +11 -0
- package/types/entity/PointCloud.d.ts +174 -0
- package/types/entity/PointCloudHandler.d.ts +38 -0
- package/types/entity/Polyline.d.ts +306 -0
- package/types/entity/PolylineHandler.d.ts +18 -0
- package/types/entity/Ray.d.ts +124 -0
- package/types/entity/RayHandler.d.ts +67 -0
- package/types/entity/ShapeHandler.d.ts +22 -0
- package/types/entity/Strip.d.ts +119 -0
- package/types/entity/StripHandler.d.ts +38 -0
- package/types/entity/index.d.ts +8 -0
- package/types/index.core.d.ts +65 -0
- package/types/index.d.ts +45 -0
- package/types/index.webgl.d.ts +7 -0
- package/types/input/KeyboardHandler.d.ts +10 -0
- package/types/input/MouseHandler.d.ts +5 -0
- package/types/input/TouchHandler.d.ts +5 -0
- package/types/input/input.d.ts +34 -0
- package/types/layer/BaseGeoImage.d.ts +94 -0
- package/types/layer/CanvasTiles.d.ts +67 -0
- package/types/layer/GeoImage.d.ts +52 -0
- package/types/layer/GeoTexture2d.d.ts +8 -0
- package/types/layer/GeoVideo.d.ts +55 -0
- package/types/layer/KML.d.ts +68 -0
- package/types/layer/Layer.d.ts +310 -0
- package/types/layer/Material.d.ts +45 -0
- package/types/layer/Vector.d.ts +208 -0
- package/types/layer/WMS.d.ts +61 -0
- package/types/layer/XYZ.d.ts +119 -0
- package/types/layer/index.d.ts +10 -0
- package/types/light/LightSource.d.ts +178 -0
- package/types/math/Line2.d.ts +11 -0
- package/types/math/Line3.d.ts +10 -0
- package/types/math/Mat3.d.ts +65 -0
- package/types/math/Mat4.d.ts +176 -0
- package/types/math/Plane.d.ts +18 -0
- package/types/math/Quat.d.ts +379 -0
- package/types/math/Ray.d.ts +82 -0
- package/types/math/Vec2.d.ts +309 -0
- package/types/math/Vec3.d.ts +467 -0
- package/types/math/Vec4.d.ts +162 -0
- package/types/math/coder.d.ts +43 -0
- package/types/math/index.d.ts +11 -0
- package/types/math.d.ts +261 -0
- package/types/mercator.d.ts +92 -0
- package/types/proj/EPSG3857.d.ts +6 -0
- package/types/proj/EPSG4326.d.ts +6 -0
- package/types/proj/Proj.d.ts +42 -0
- package/types/quadTree/EntityCollectionNode.d.ts +34 -0
- package/types/quadTree/Node.d.ts +60 -0
- package/types/quadTree/quadTree.d.ts +40 -0
- package/types/renderer/Renderer.d.ts +290 -0
- package/types/renderer/RendererEvents.d.ts +237 -0
- package/types/res/images.d.ts +3 -0
- package/types/scene/Axes.d.ts +11 -0
- package/types/scene/BaseNode.d.ts +60 -0
- package/types/scene/Planet.d.ts +576 -0
- package/types/scene/RenderNode.d.ts +142 -0
- package/types/scene/SkyBox.d.ts +10 -0
- package/types/scene/index.d.ts +4 -0
- package/types/segment/Segment.d.ts +275 -0
- package/types/segment/SegmentLonLat.d.ts +17 -0
- package/types/segment/Slice.d.ts +10 -0
- package/types/segment/segmentHelper.d.ts +13 -0
- package/types/shaders/billboard.d.ts +3 -0
- package/types/shaders/depth.d.ts +2 -0
- package/types/shaders/drawnode.d.ts +7 -0
- package/types/shaders/geoObject.d.ts +3 -0
- package/types/shaders/label.d.ts +4 -0
- package/types/shaders/pointCloud.d.ts +2 -0
- package/types/shaders/polyline.d.ts +3 -0
- package/types/shaders/ray.d.ts +2 -0
- package/types/shaders/screenFrame.d.ts +2 -0
- package/types/shaders/shape.d.ts +4 -0
- package/types/shaders/skybox.d.ts +2 -0
- package/types/shaders/toneMapping.d.ts +2 -0
- package/types/shapes/BaseShape.d.ts +250 -0
- package/types/shapes/Sphere.d.ts +41 -0
- package/types/terrain/BilTerrain.d.ts +7 -0
- package/types/terrain/EmptyTerrain.d.ts +73 -0
- package/types/terrain/Geoid.d.ts +26 -0
- package/types/terrain/GlobusTerrain.d.ts +116 -0
- package/types/terrain/MapboxTerrain.d.ts +7 -0
- package/types/terrain/index.d.ts +5 -0
- package/types/utils/FontAtlas.d.ts +15 -0
- package/types/utils/GeoImageCreator.d.ts +30 -0
- package/types/utils/ImagesCacheManager.d.ts +10 -0
- package/types/utils/Loader.d.ts +25 -0
- package/types/utils/NormalMapCreator.d.ts +39 -0
- package/types/utils/PlainSegmentWorker.d.ts +10 -0
- package/types/utils/TerrainWorker.d.ts +9 -0
- package/types/utils/TextureAtlas.d.ts +111 -0
- package/types/utils/VectorTileCreator.d.ts +16 -0
- package/types/utils/colorTable.d.ts +143 -0
- package/types/utils/earcut.d.ts +6 -0
- package/types/utils/shared.d.ts +231 -0
- package/types/webgl/Framebuffer.d.ts +135 -0
- package/types/webgl/Handler.d.ts +417 -0
- package/types/webgl/Multisample.d.ts +89 -0
- package/types/webgl/Program.d.ts +161 -0
- package/types/webgl/ProgramController.d.ts +89 -0
- package/types/webgl/callbacks.d.ts +1 -0
- package/types/webgl/index.d.ts +6 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
uniform vec4
|
|
73
|
-
uniform
|
|
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[
|
|
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
|
-
${
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
|
195
|
-
#define MAX_OVERLAYS_PLUS_ONE 6
|
|
184
|
+
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
196
185
|
|
|
197
|
-
uniform vec3
|
|
198
|
-
uniform vec3
|
|
199
|
-
uniform vec4
|
|
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[
|
|
208
|
-
uniform
|
|
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[
|
|
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
|
-
|
|
231
|
-
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
blend(gl_FragColor, samplerArr[
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
|
366
|
-
#define MAX_OVERLAYS_PLUS_ONE 6
|
|
342
|
+
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
367
343
|
|
|
368
|
-
uniform vec3
|
|
369
|
-
uniform vec3
|
|
370
|
-
uniform vec4
|
|
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[
|
|
379
|
-
uniform
|
|
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[
|
|
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
|
-
|
|
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
|
-
${
|
|
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
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
blend(fragColor, samplerArr[2], tileOffsetArr[2],
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
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
|
-
|
|
521
|
-
uniform vec4
|
|
522
|
-
uniform vec4
|
|
523
|
-
uniform
|
|
524
|
-
uniform sampler2D
|
|
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
|
-
${
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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),
|
|
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:
|
|
721
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
}
|