@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.
- package/css/og.css +3 -2
- package/package.json +12 -14
- package/src/og/Clock.js +6 -10
- package/src/og/Events.js +5 -7
- package/src/og/Extent.js +73 -32
- package/src/og/Globe.js +8 -5
- package/src/og/ImageCanvas.js +18 -15
- package/src/og/LonLat.js +13 -10
- package/src/og/Popup.js +19 -17
- package/src/og/QueueArray.js +3 -4
- package/src/og/Rectangle.js +4 -6
- package/src/og/Stack.js +2 -4
- package/src/og/ajax.js +20 -14
- package/src/og/astro/earth.js +21 -15
- package/src/og/bv/Box.js +2 -3
- package/src/og/bv/Sphere.js +10 -7
- package/src/og/camera/Frustum.js +19 -12
- package/src/og/camera/PlanetCamera.js +9 -5
- package/src/og/control/CompassButton.js +1 -2
- package/src/og/control/Control.js +7 -9
- package/src/og/control/DebugInfo.js +0 -1
- package/src/og/control/KeyboardNavigation.js +9 -9
- package/src/og/control/LayerSwitcher.js +21 -20
- package/src/og/control/Lighting.js +74 -64
- package/src/og/control/MouseNavigation.js +21 -18
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- package/src/og/control/SegmentBoundVisualization.js +5 -6
- package/src/og/control/ShowFps.js +12 -7
- package/src/og/control/SimpleNavigation.js +5 -7
- package/src/og/control/Sun.js +22 -12
- package/src/og/control/ToggleWireframe.js +3 -3
- package/src/og/control/TouchNavigation.js +43 -32
- package/src/og/control/ZoomControl.js +40 -24
- 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/ellipsoid/Ellipsoid.js +149 -57
- package/src/og/ellipsoid/wgs84.js +3 -3
- package/src/og/entity/BaseBillboard.js +72 -30
- package/src/og/entity/Billboard.js +9 -5
- package/src/og/entity/BillboardHandler.js +315 -62
- package/src/og/entity/Entity.js +39 -1
- package/src/og/entity/EntityCollection.js +47 -24
- package/src/og/entity/GeoObject.js +228 -0
- package/src/og/entity/GeoObjectHandler.js +910 -0
- package/src/og/entity/GeometryHandler.js +595 -123
- package/src/og/entity/Label.js +62 -30
- package/src/og/entity/LabelHandler.js +40 -242
- package/src/og/entity/LabelWorker.js +218 -0
- package/src/og/entity/Object3d.js +504 -0
- package/src/og/entity/PointCloud.js +76 -28
- package/src/og/entity/PointCloudHandler.js +5 -5
- package/src/og/entity/Ray.js +49 -16
- package/src/og/entity/Strip.js +72 -43
- package/src/og/entity/StripHandler.js +23 -23
- package/src/og/layer/BaseGeoImage.js +50 -19
- package/src/og/layer/CanvasTiles.js +16 -17
- package/src/og/layer/GeoImage.js +8 -16
- package/src/og/layer/GeoTexture2d.js +2 -10
- package/src/og/layer/GeoVideo.js +2 -10
- package/src/og/layer/KML.js +55 -33
- package/src/og/layer/Layer.js +24 -32
- package/src/og/layer/Material.js +1 -1
- package/src/og/layer/Vector.js +94 -48
- package/src/og/layer/WMS.js +33 -18
- package/src/og/layer/XYZ.js +4 -5
- package/src/og/light/LightSource.js +19 -12
- package/src/og/math/Mat3.js +24 -12
- package/src/og/math/Mat4.js +603 -603
- package/src/og/math/Plane.js +19 -18
- package/src/og/math/Ray.js +17 -12
- package/src/og/math/Vec2.js +24 -14
- package/src/og/math/Vec3.js +60 -30
- package/src/og/math/coder.js +7 -7
- package/src/og/proj/EPSG3857.js +3 -3
- package/src/og/proj/EPSG4326.js +3 -3
- package/src/og/proj/Proj.js +2 -4
- package/src/og/quadTree/Node.js +3 -3
- package/src/og/renderer/Renderer.js +106 -124
- package/src/og/renderer/RendererEvents.js +45 -23
- package/src/og/scene/BaseNode.js +2 -3
- package/src/og/scene/Planet.js +51 -90
- package/src/og/scene/RenderNode.js +15 -8
- package/src/og/segment/Segment.js +60 -156
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +245 -342
- package/src/og/shaders/geoObject.js +211 -0
- package/src/og/shaders/pointCloud.js +41 -41
- package/src/og/shaders/shape.js +12 -18
- package/src/og/shaders/skybox.js +36 -36
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +108 -36
- package/src/og/shapes/Icosphere.js +25 -10
- package/src/og/shapes/Sphere.js +8 -11
- package/src/og/utils/FontAtlas.js +6 -2
- package/src/og/utils/GeoImageCreator.js +5 -1
- package/src/og/utils/TextureAtlas.js +18 -20
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +2 -2
- package/src/og/webgl/Handler.js +215 -162
- package/src/og/webgl/Multisample.js +44 -16
- package/src/og/webgl/Program.js +78 -33
- package/src/og/webgl/callbacks.js +3 -3
- package/types/Clock.d.ts +0 -94
- package/types/Deferred.d.ts +0 -6
- package/types/Events.d.ts +0 -77
- package/types/Extent.d.ts +0 -166
- package/types/Globe.d.ts +0 -82
- package/types/ImageCanvas.d.ts +0 -123
- package/types/Lock.d.ts +0 -12
- package/types/LonLat.d.ts +0 -108
- package/types/Popup.d.ts +0 -42
- package/types/QueueArray.d.ts +0 -19
- package/types/Rectangle.d.ts +0 -80
- package/types/Stack.d.ts +0 -19
- package/types/ajax.d.ts +0 -24
- package/types/arial.d.ts +0 -48
- package/types/astro/astro.d.ts +0 -38
- package/types/astro/earth.d.ts +0 -7
- package/types/astro/jd.d.ts +0 -254
- package/types/bv/Box.d.ts +0 -30
- package/types/bv/Sphere.d.ts +0 -38
- package/types/bv/index.d.ts +0 -3
- package/types/camera/Camera.d.ts +0 -312
- package/types/camera/Frustum.d.ts +0 -133
- package/types/camera/PlanetCamera.d.ts +0 -218
- package/types/camera/index.d.ts +0 -3
- package/types/cons.d.ts +0 -40
- package/types/control/CompassButton.d.ts +0 -17
- package/types/control/Control.d.ts +0 -104
- package/types/control/DebugInfo.d.ts +0 -15
- package/types/control/EarthCoordinates.d.ts +0 -47
- package/types/control/EarthNavigation.d.ts +0 -42
- package/types/control/GeoImageDragControl.d.ts +0 -6
- package/types/control/KeyboardNavigation.d.ts +0 -21
- package/types/control/LayerSwitcher.d.ts +0 -21
- package/types/control/Lighting.d.ts +0 -16
- package/types/control/MouseNavigation.d.ts +0 -47
- package/types/control/ScaleControl.d.ts +0 -22
- package/types/control/ShowFps.d.ts +0 -11
- package/types/control/SimpleNavigation.d.ts +0 -25
- package/types/control/Sun.d.ts +0 -50
- package/types/control/ToggleWireframe.d.ts +0 -12
- package/types/control/TouchNavigation.d.ts +0 -48
- package/types/control/ZoomControl.d.ts +0 -27
- package/types/control/index.d.ts +0 -17
- package/types/ellipsoid/Ellipsoid.d.ts +0 -146
- package/types/ellipsoid/index.d.ts +0 -3
- package/types/ellipsoid/wgs84.d.ts +0 -6
- package/types/entity/BaseBillboard.d.ts +0 -208
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -78
- package/types/entity/Entity.d.ts +0 -333
- package/types/entity/EntityCollection.d.ts +0 -311
- package/types/entity/Geometry.d.ts +0 -74
- package/types/entity/GeometryHandler.d.ts +0 -76
- package/types/entity/Label.d.ts +0 -189
- package/types/entity/LabelHandler.d.ts +0 -29
- package/types/entity/PointCloud.d.ts +0 -174
- package/types/entity/PointCloudHandler.d.ts +0 -38
- package/types/entity/Polyline.d.ts +0 -306
- package/types/entity/PolylineHandler.d.ts +0 -18
- package/types/entity/Ray.d.ts +0 -124
- package/types/entity/RayHandler.d.ts +0 -67
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/entity/Strip.d.ts +0 -119
- package/types/entity/StripHandler.d.ts +0 -38
- package/types/entity/index.d.ts +0 -8
- package/types/index.core.d.ts +0 -65
- package/types/index.d.ts +0 -45
- package/types/index.webgl.d.ts +0 -7
- package/types/input/KeyboardHandler.d.ts +0 -10
- package/types/input/MouseHandler.d.ts +0 -5
- package/types/input/TouchHandler.d.ts +0 -5
- package/types/input/input.d.ts +0 -34
- package/types/layer/BaseGeoImage.d.ts +0 -94
- package/types/layer/CanvasTiles.d.ts +0 -68
- package/types/layer/GeoImage.d.ts +0 -52
- package/types/layer/GeoTexture2d.d.ts +0 -8
- package/types/layer/GeoVideo.d.ts +0 -55
- package/types/layer/KML.d.ts +0 -63
- package/types/layer/Layer.d.ts +0 -325
- package/types/layer/Material.d.ts +0 -45
- package/types/layer/Vector.d.ts +0 -208
- package/types/layer/WMS.d.ts +0 -63
- package/types/layer/XYZ.d.ts +0 -120
- package/types/layer/index.d.ts +0 -10
- package/types/light/LightSource.d.ts +0 -178
- package/types/math/Line2.d.ts +0 -11
- package/types/math/Line3.d.ts +0 -10
- package/types/math/Mat3.d.ts +0 -65
- package/types/math/Mat4.d.ts +0 -176
- package/types/math/Plane.d.ts +0 -18
- package/types/math/Quat.d.ts +0 -379
- package/types/math/Ray.d.ts +0 -82
- package/types/math/Vec2.d.ts +0 -309
- package/types/math/Vec3.d.ts +0 -460
- package/types/math/Vec4.d.ts +0 -162
- package/types/math/coder.d.ts +0 -43
- package/types/math/index.d.ts +0 -11
- package/types/math.d.ts +0 -261
- package/types/mercator.d.ts +0 -92
- package/types/proj/EPSG3857.d.ts +0 -6
- package/types/proj/EPSG4326.d.ts +0 -6
- package/types/proj/Proj.d.ts +0 -42
- package/types/quadTree/EntityCollectionNode.d.ts +0 -34
- package/types/quadTree/Node.d.ts +0 -61
- package/types/quadTree/quadTree.d.ts +0 -40
- package/types/renderer/Renderer.d.ts +0 -298
- package/types/renderer/RendererEvents.d.ts +0 -233
- package/types/res/images.d.ts +0 -3
- package/types/scene/Axes.d.ts +0 -11
- package/types/scene/BaseNode.d.ts +0 -60
- package/types/scene/Planet.d.ts +0 -577
- package/types/scene/RenderNode.d.ts +0 -142
- package/types/scene/SkyBox.d.ts +0 -10
- package/types/scene/index.d.ts +0 -4
- package/types/segment/Segment.d.ts +0 -279
- package/types/segment/SegmentLonLat.d.ts +0 -16
- package/types/segment/segmentHelper.d.ts +0 -13
- package/types/shaders/billboard.d.ts +0 -3
- package/types/shaders/depth.d.ts +0 -2
- package/types/shaders/drawnode.d.ts +0 -7
- package/types/shaders/label.d.ts +0 -4
- package/types/shaders/pointCloud.d.ts +0 -2
- package/types/shaders/polyline.d.ts +0 -3
- package/types/shaders/ray.d.ts +0 -2
- package/types/shaders/screenFrame.d.ts +0 -2
- package/types/shaders/shape.d.ts +0 -4
- package/types/shaders/skybox.d.ts +0 -2
- package/types/shaders/toneMapping.d.ts +0 -2
- package/types/shapes/BaseShape.d.ts +0 -250
- package/types/shapes/Sphere.d.ts +0 -41
- package/types/terrain/BilTerrain.d.ts +0 -7
- package/types/terrain/EmptyTerrain.d.ts +0 -72
- package/types/terrain/Geoid.d.ts +0 -26
- package/types/terrain/GlobusTerrain.d.ts +0 -116
- package/types/terrain/MapboxTerrain.d.ts +0 -7
- package/types/terrain/index.d.ts +0 -5
- package/types/utils/FontAtlas.d.ts +0 -14
- package/types/utils/GeoImageCreator.d.ts +0 -30
- package/types/utils/ImagesCacheManager.d.ts +0 -10
- package/types/utils/Loader.d.ts +0 -25
- package/types/utils/NormalMapCreator.d.ts +0 -39
- package/types/utils/PlainSegmentWorker.d.ts +0 -10
- package/types/utils/TerrainWorker.d.ts +0 -9
- package/types/utils/TextureAtlas.d.ts +0 -111
- package/types/utils/VectorTileCreator.d.ts +0 -16
- package/types/utils/colorTable.d.ts +0 -143
- package/types/utils/earcut.d.ts +0 -6
- package/types/utils/shared.d.ts +0 -231
- package/types/webgl/Framebuffer.d.ts +0 -135
- package/types/webgl/Handler.d.ts +0 -388
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -155
- package/types/webgl/ProgramController.d.ts +0 -89
- package/types/webgl/callbacks.d.ts +0 -1
- package/types/webgl/index.d.ts +0 -6
- 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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
uniform vec4
|
|
65
|
-
uniform
|
|
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[
|
|
93
|
+
uniform sampler2D samplerArr[SLICE_SIZE];
|
|
68
94
|
uniform int samplerCount;
|
|
69
|
-
varying vec2 vTextureCoord;
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
|
181
|
-
#define MAX_OVERLAYS_PLUS_ONE 6
|
|
190
|
+
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
182
191
|
|
|
183
|
-
uniform vec3
|
|
184
|
-
uniform vec3
|
|
185
|
-
uniform vec4
|
|
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[
|
|
194
|
-
uniform
|
|
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[
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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
|
|
367
|
-
#define MAX_OVERLAYS_PLUS_ONE 6
|
|
346
|
+
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
368
347
|
|
|
369
|
-
uniform vec3
|
|
370
|
-
uniform vec3
|
|
371
|
-
uniform vec4
|
|
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[
|
|
380
|
-
uniform
|
|
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[
|
|
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
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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
|
-
|
|
375
|
+
layout(location = 0) out vec4 fragColor;
|
|
401
376
|
|
|
402
|
-
|
|
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
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
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
|
-
|
|
528
|
-
uniform vec4
|
|
529
|
-
uniform vec4
|
|
530
|
-
uniform
|
|
531
|
-
uniform sampler2D
|
|
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
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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[
|
|
647
|
-
uniform
|
|
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 )
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
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 )
|
|
684
|
-
|
|
685
|
-
|
|
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 )
|
|
689
|
-
|
|
690
|
-
|
|
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 )
|
|
694
|
-
|
|
695
|
-
|
|
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 )
|
|
699
|
-
|
|
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[
|
|
759
|
-
uniform
|
|
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
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
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
|
}
|