@arcgis/core 4.33.0-next.20250317 → 4.33.0-next.20250319
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/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0b7331613f91a3258352.js +1 -0
- package/assets/esri/core/workers/chunks/2219d970ece5676ca6ee.js +1 -0
- package/assets/esri/core/workers/chunks/3fc18638f8799b85001d.js +1 -0
- package/assets/esri/core/workers/chunks/630a9afdf0523c27ddb6.js +1 -0
- package/assets/esri/core/workers/chunks/657ae4a0461d45044b28.js +1 -0
- package/assets/esri/core/workers/chunks/{23aa7254fffe67e3f1bc.js → 6a97bdd46715fc12e1b4.js} +239 -160
- package/assets/esri/core/workers/chunks/8063e35dacf8f99471d8.js +1 -0
- package/assets/esri/core/workers/chunks/8e20ec4e8e2cfc582fe7.js +319 -0
- package/assets/esri/core/workers/chunks/c528a2ca3b1b73df5a5d.js +1 -0
- package/assets/esri/core/workers/chunks/d787474e78360c925fd9.js +1 -0
- package/assets/esri/core/workers/chunks/{7ded83eb64eff069b761.js → d8b903b4147b090576f2.js} +1 -1
- package/assets/esri/core/workers/chunks/e4290719c8afc2a4ee8c.js +1 -0
- package/assets/esri/core/workers/chunks/e5e1f8ac53c70427a60b.js +1 -0
- package/assets/esri/core/workers/chunks/fc9758006a7135c7d9c3.js +1 -0
- package/assets/esri/core/workers/chunks/fef46b841e8369b30227.js +1 -0
- package/assets/esri/libs/dxtEncoder/dxt_encoder.wasm +0 -0
- package/assets/esri/themes/base/widgets/_FeatureFormUtilityNetworkAssociationLayers.scss +20 -0
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/chunks/HUDMaterial.glsl.js +80 -75
- package/chunks/RibbonLine.glsl.js +37 -37
- package/chunks/ShadowCastAccumulate.glsl.js +5 -21
- package/chunks/ShadowHighlight.glsl.js +8 -30
- package/chunks/Terrain.glsl.js +33 -34
- package/copyright.txt +29 -0
- package/core/has.js +1 -1
- package/core/typedArrayUtil.js +1 -1
- package/geometry/support/HalfFloatArray.js +5 -0
- package/geometry/support/buffer/BufferView.js +1 -1
- package/geometry/support/buffer/types.js +1 -1
- package/geometry/support/densifyUtils.js +1 -1
- package/interfaces.d.ts +18 -40
- package/layers/support/rasterFunctions/pixelUtils.js +1 -1
- package/package.json +2 -1
- package/renderers/support/RasterSymbolizer.js +1 -1
- package/support/revision.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/GradientStrokeShader.js +1 -1
- package/views/2d/layers/graphics/GraphicStoreItem.js +1 -1
- package/views/2d/layers/graphics/densificationConstants.js +1 -1
- package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
- package/views/3d/interactive/visualElements/LineVisualElement.js +1 -1
- package/views/3d/layers/ImageryTileLayerView3D.js +1 -1
- package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DObjectSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DTextSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Labeler.js +1 -1
- package/views/3d/layers/graphics/pipeline/rendering/LodRenderer.js +1 -1
- package/views/3d/layers/i3s/I3SClientNodeLoader.js +1 -1
- package/views/3d/support/buffer/InterleavedLayout.js +1 -1
- package/views/3d/support/buffer/glUtil.js +1 -1
- package/views/3d/terrain/PatchGeometry.js +1 -1
- package/views/3d/terrain/PatchGeometryFactory.js +1 -1
- package/views/3d/terrain/TerrainAttributes.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/webgl-engine/core/FBOCache.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js +2 -9
- package/views/3d/webgl-engine/core/shaderLibrary/hud/HUD.glsl.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js +4 -3
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js +125 -40
- package/views/3d/webgl-engine/lib/AttributeArray.js +1 -1
- package/views/3d/webgl-engine/lib/DefaultVertexAttributeLocations.js +1 -1
- package/views/3d/webgl-engine/lib/DefaultVertexBufferLayouts.js +1 -1
- package/views/3d/webgl-engine/lib/Geometry.js +1 -1
- package/views/3d/webgl-engine/lib/GeometryUtil.js +1 -1
- package/views/3d/webgl-engine/lib/TextTextureAtlas.js +1 -1
- package/views/3d/webgl-engine/lib/VertexAttribute.js +1 -1
- package/views/3d/webgl-engine/lib/glUtil3D.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/InstanceData.js +1 -1
- package/views/3d/webgl-engine/materials/CheckerBoardMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultLayouts.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/HeatmapDensityMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/ImageMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/LineCalloutMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathTechnique.js +1 -1
- package/views/3d/webgl-engine/materials/PatternMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/SlicePlaneMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/internal/bufferWriterUtils.js +1 -1
- package/views/3d/webgl-engine/shaders/HUDMaterial.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/ReadShadowMapConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/ShadowCastAccumulate.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/Terrain.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/TerrainTechniqueConfiguration.js +1 -1
- package/widgets/Editor/AddAssociationWorkflow.js +1 -1
- package/widgets/Editor/CreateFeaturesWorkflow.js +1 -1
- package/widgets/Editor/UpdateWorkflow.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/FeatureForm/FeatureFormUtilityNetworkAssociations/UtilityNetworkAssociationItemList.js +1 -1
- package/widgets/FeatureForm/UtilityNetworkAssociationAddAssociationViewModel.js +1 -1
- package/widgets/Features/FeaturesDrillIn.js +1 -1
- package/widgets/Features.js +1 -1
- package/widgets/Print/PrintViewModel.js +1 -1
- package/widgets/Print/TemplateOptions.js +1 -1
- package/widgets/support/LabeledSwitch.js +1 -1
- package/widgets/support/Selector2D/selectorUtils.js +1 -1
- package/assets/esri/core/workers/chunks/048121d433aa9175348c.js +0 -1
- package/assets/esri/core/workers/chunks/0f4a2bdf5bb2f4303b7f.js +0 -1
- package/assets/esri/core/workers/chunks/147e412de9972da16a1d.js +0 -1
- package/assets/esri/core/workers/chunks/1545bd7d6ac7800c71b6.js +0 -1
- package/assets/esri/core/workers/chunks/2b21152c7e2d9c170ed7.js +0 -1
- package/assets/esri/core/workers/chunks/385dd6466fd967ce3ae9.js +0 -1
- package/assets/esri/core/workers/chunks/8d636075e5aa053940fc.js +0 -1
- package/assets/esri/core/workers/chunks/c43c273725b1a33712ec.js +0 -314
- package/assets/esri/core/workers/chunks/c8cd9a3175f516624842.js +0 -1
- package/assets/esri/core/workers/chunks/d630e64463687090db92.js +0 -1
- package/assets/esri/core/workers/chunks/dd6f18bbab50be139d20.js +0 -1
- package/assets/esri/core/workers/chunks/de6864e120243cf0bee8.js +0 -1
|
@@ -2,56 +2,59 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{set as e,copy as o}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ZEROS as r,fromValues as
|
|
5
|
+
import{set as e,copy as o}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ZEROS as r,fromValues as t}from"../core/libs/gl-matrix-2/factories/vec4f64.js";import{earth as l}from"../geometry/support/Ellipsoid.js";import{ShaderOutput as a}from"../views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js";import{RejectBySlice as s}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{ObjectAndLayerIdColor as n}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js";import{AlignPixel as c}from"../views/3d/webgl-engine/core/shaderLibrary/hud/AlignPixel.glsl.js";import{HUD as d}from"../views/3d/webgl-engine/core/shaderLibrary/hud/HUD.glsl.js";import{HUDOcclusionPass as u}from"../views/3d/webgl-engine/core/shaderLibrary/hud/HUDOcclusionPass.glsl.js";import{HUDVisibility as f}from"../views/3d/webgl-engine/core/shaderLibrary/hud/HUDVisibility.glsl.js";import{OutputHighlight as p}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{VisualVariables as m}from"../views/3d/webgl-engine/core/shaderLibrary/shading/VisualVariables.glsl.js";import{ColorConversion as g}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{RgbaFloatEncoding as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{ScreenSizePerspective as b,addScreenSizePerspective as h,addScreenSizePerspectiveAlignment as x}from"../views/3d/webgl-engine/core/shaderLibrary/util/ScreenSizePerspective.glsl.js";import{addPixelRatio as w}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2PassUniform as C}from"../views/3d/webgl-engine/core/shaderModules/Float2PassUniform.js";import{Float4BindUniform as P}from"../views/3d/webgl-engine/core/shaderModules/Float4BindUniform.js";import{Float4DrawUniform as z}from"../views/3d/webgl-engine/core/shaderModules/Float4DrawUniform.js";import{Float4PassUniform as S}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatBindUniform as j}from"../views/3d/webgl-engine/core/shaderModules/FloatBindUniform.js";import{FloatPassUniform as y}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as A,If as O}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DBindUniform as $}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as F}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{OITPass as T}from"../views/3d/webgl-engine/lib/OITPass.js";import{VertexAttribute as D}from"../views/3d/webgl-engine/lib/VertexAttribute.js";import{ShaderBuilder as E}from"../views/webgl/ShaderBuilder.js";import{alphaCutoff as L}from"../webscene/support/AlphaCutoff.js";const B={occludedFadeFactor:1};function U(o){const i=new E,{signedDistanceFieldEnabled:B,occlusionTestEnabled:U,horizonCullingEnabled:R,pixelSnappingEnabled:I,hasScreenSizePerspective:q,debugDrawLabelBorder:k,vvSize:G,vvColor:N,hasRotation:Z,occludedFragmentFade:J,sampleSignedDistanceFieldTexelCenter:K}=o;i.include(d,o),i.vertex.include(s,o);const{occlusionPass:Q,output:W,oitPass:X}=o;if(Q)return i.include(u,o),i;const{vertex:Y,fragment:ee}=i;i.include(b),i.include(m,o),i.include(n,o),i.include(f),ee.include(v),ee.include(g),i.varyings.add("vcolor","vec4"),i.varyings.add("vtc","vec2"),i.varyings.add("vsize","vec2");const oe=W===a.Highlight,ie=oe&&U;ie&&i.varyings.add("voccluded","float"),Y.uniforms.add(new P("viewport",(e=>e.camera.fullViewport)),new C("screenOffset",((o,i)=>e(V,2*o.screenOffset[0]*i.camera.pixelRatio,2*o.screenOffset[1]*i.camera.pixelRatio))),new C("anchorPosition",(e=>H(e))),new S("materialColor",(e=>e.color)),new y("materialRotation",(e=>e.rotation)),new F("tex",(e=>e.texture))),w(Y),B&&(Y.uniforms.add(new S("outlineColor",(e=>e.outlineColor))),ee.uniforms.add(new S("outlineColor",(e=>M(e)?e.outlineColor:r)),new y("outlineSize",(e=>M(e)?e.outlineSize:0)))),R&&Y.uniforms.add(new z("pointDistanceSphere",((e,o)=>{const i=o.camera.eye,r=e.origin;return t(r[0]-i[0],r[1]-i[1],r[2]-i[2],l.radius)}))),I&&Y.include(c),q&&(h(Y),x(Y)),k&&i.varyings.add("debugBorderCoords","vec4"),i.attributes.add(D.UVI,"vec2"),i.attributes.add(D.COLOR,"vec4"),i.attributes.add(D.SIZE,"vec2"),i.attributes.add(D.ROTATION,"float"),i.attributes.add(D.FEATUREATTRIBUTE,"vec4"),Y.code.add(R?A`bool behindHorizon(vec3 posModel) {
|
|
6
6
|
vec3 camToEarthCenter = pointDistanceSphere.xyz - localOrigin;
|
|
7
7
|
vec3 camToPos = pointDistanceSphere.xyz + posModel;
|
|
8
8
|
float earthRadius = pointDistanceSphere.w;
|
|
9
9
|
float a = dot(camToPos, camToPos);
|
|
10
10
|
float b = dot(camToPos, camToEarthCenter);
|
|
11
11
|
float c = dot(camToEarthCenter, camToEarthCenter) - earthRadius * earthRadius;
|
|
12
|
-
return
|
|
13
|
-
}`:A`bool behindHorizon(vec3 posModel) { return false; }`),
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
return b > 0.0 && b < a && b * b > a * c;
|
|
13
|
+
}`:A`bool behindHorizon(vec3 posModel) { return false; }`),Y.main.add(A`
|
|
14
|
+
ProjectHUDAux projectAux;
|
|
15
|
+
vec4 posProj = projectPositionHUD(projectAux);
|
|
16
|
+
forwardObjectAndLayerIdColor();
|
|
17
|
+
|
|
18
|
+
if (rejectBySlice(projectAux.posModel)) {
|
|
19
|
+
// Project outside of clip plane
|
|
20
|
+
gl_Position = vec4(1e038, 1e038, 1e038, 1.0);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
if (behindHorizon(projectAux.posModel)) {
|
|
25
|
+
// Project outside of clip plane
|
|
26
|
+
gl_Position = vec4(1e038, 1e038, 1e038, 1.0);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
vec2
|
|
51
|
-
vec2 uv =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
${
|
|
30
|
+
vec2 inputSize;
|
|
31
|
+
${O(q,A`
|
|
32
|
+
inputSize = screenSizePerspectiveScaleVec2(size, projectAux.absCosAngle, projectAux.distanceToCamera, screenSizePerspective);
|
|
33
|
+
vec2 screenOffsetScaled = screenSizePerspectiveScaleVec2(screenOffset, projectAux.absCosAngle, projectAux.distanceToCamera, screenSizePerspectiveAlignment);`,A`
|
|
34
|
+
inputSize = size;
|
|
35
|
+
vec2 screenOffsetScaled = screenOffset;`)}
|
|
36
|
+
${O(G,A`inputSize *= vvScale(featureAttribute).xx;`)}
|
|
37
|
+
|
|
38
|
+
vec2 combinedSize = inputSize * pixelRatio;
|
|
39
|
+
vec4 quadOffset = vec4(0.0);
|
|
40
|
+
|
|
41
|
+
${O(U,A`
|
|
42
|
+
bool visible = testHUDVisibility(posProj);
|
|
43
|
+
if (!visible) {
|
|
44
|
+
vtc = vec2(0.0);
|
|
45
|
+
${O(k,"debugBorderCoords = vec4(0.5, 0.5, 1.5 / combinedSize);")}
|
|
46
|
+
return;
|
|
47
|
+
}`)}
|
|
48
|
+
${O(ie,A`voccluded = visible ? 0.0 : 1.0;`)}
|
|
49
|
+
`);const re=A`
|
|
50
|
+
vec2 uvi1 = vec2(uvi.x < 0.0 ? 1.0 : 0.0, uvi.y < 0.0 ? 1.0 : 0.0);
|
|
51
|
+
vec2 uv = abs(uvi + uvi1);
|
|
52
|
+
vec2 texSize = vec2(textureSize(tex, 0));
|
|
53
|
+
uv.x = uv.x >= ${_} ? 1.0 : uv.x / texSize.x;
|
|
54
|
+
uv.y = uv.y >= ${_} ? 1.0 : uv.y / texSize.y;
|
|
55
|
+
quadOffset.xy = (uvi1 - anchorPosition) * 2.0 * combinedSize;
|
|
56
|
+
|
|
57
|
+
${O(Z,A`
|
|
55
58
|
float angle = radians(materialRotation + rotation);
|
|
56
59
|
float cosAngle = cos(angle);
|
|
57
60
|
float sinAngle = sin(angle);
|
|
@@ -61,42 +64,44 @@ return b > 0.0 && b < a && b * b > a * c;
|
|
|
61
64
|
`)}
|
|
62
65
|
|
|
63
66
|
quadOffset.xy = (quadOffset.xy + screenOffsetScaled) / viewport.zw * posProj.w;
|
|
64
|
-
`,
|
|
67
|
+
`,te=I?B?A`posProj = alignToPixelOrigin(posProj, viewport.zw) + quadOffset;`:A`posProj += quadOffset;
|
|
65
68
|
if (inputSize.x == size.x) {
|
|
66
69
|
posProj = alignToPixelOrigin(posProj, viewport.zw);
|
|
67
|
-
}`:A`posProj += quadOffset;`;
|
|
68
|
-
${
|
|
69
|
-
${
|
|
70
|
+
}`:A`posProj += quadOffset;`;Y.main.add(A`
|
|
71
|
+
${re}
|
|
72
|
+
${N?"vcolor = interpolateVVColor(featureAttribute.y) * materialColor;":"vcolor = color / 255.0 * materialColor;"}
|
|
70
73
|
|
|
71
|
-
${O(
|
|
74
|
+
${O(W===a.ObjectAndLayerIdColor,A`vcolor.a = 1.0;`)}
|
|
72
75
|
|
|
73
|
-
bool alphaDiscard = vcolor.a < ${A.float(
|
|
74
|
-
${O(
|
|
76
|
+
bool alphaDiscard = vcolor.a < ${A.float(L)};
|
|
77
|
+
${O(B,`alphaDiscard = alphaDiscard && outlineColor.a < ${A.float(L)};`)}
|
|
75
78
|
if (alphaDiscard) {
|
|
76
79
|
// "early discard" if both symbol color (= fill) and outline color (if applicable) are transparent
|
|
77
80
|
gl_Position = vec4(1e38, 1e38, 1e38, 1.0);
|
|
78
81
|
return;
|
|
79
82
|
} else {
|
|
80
|
-
${
|
|
83
|
+
${te}
|
|
81
84
|
gl_Position = posProj;
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
vtc = uv;
|
|
85
88
|
|
|
86
|
-
${O(
|
|
89
|
+
${O(k,A`debugBorderCoords = vec4(uv01, 1.5 / combinedSize);`)}
|
|
87
90
|
vsize = inputSize;
|
|
88
|
-
`),
|
|
89
|
-
${O(
|
|
91
|
+
`),ee.uniforms.add(new F("tex",(e=>e.texture))),J&&(ee.uniforms.add(new $("depthMap",(e=>e.mainDepth))),ee.uniforms.add(new j("occludedOpacity",(e=>e.hudOccludedFragmentOpacity))));const le=k?A`(isBorder > 0.0 ? 0.0 : ${A.float(L)})`:A.float(L),ae=A`
|
|
92
|
+
${O(k,A`float isBorder = float(any(lessThan(debugBorderCoords.xy, debugBorderCoords.zw)) || any(greaterThan(debugBorderCoords.xy, 1.0 - debugBorderCoords.zw)));`)}
|
|
93
|
+
|
|
94
|
+
vec2 samplePos = vtc;
|
|
90
95
|
|
|
91
|
-
${O(
|
|
96
|
+
${O(K,A`
|
|
92
97
|
float txSize = float(textureSize(tex, 0).x);
|
|
93
98
|
float texelSize = 1.0 / txSize;
|
|
94
99
|
|
|
95
100
|
// Calculate how much we have to add/subtract to/from each texel to reach the size of an onscreen pixel
|
|
96
101
|
vec2 scaleFactor = (vsize - txSize) * texelSize;
|
|
97
|
-
|
|
102
|
+
samplePos += (vec2(1.0, -1.0) * texelSize) * scaleFactor;`)}
|
|
98
103
|
|
|
99
|
-
${
|
|
104
|
+
${B?A`
|
|
100
105
|
vec4 fillPixelColor = vcolor;
|
|
101
106
|
|
|
102
107
|
// Get distance and map it into [-0.5, 0.5]
|
|
@@ -118,8 +123,8 @@ posProj = alignToPixelOrigin(posProj, viewport.zw);
|
|
|
118
123
|
outlinePixelColor.a *= outlineAlphaFactor;
|
|
119
124
|
|
|
120
125
|
if (
|
|
121
|
-
outlineAlphaFactor + fillAlphaFactor < ${
|
|
122
|
-
fillPixelColor.a + outlinePixelColor.a < ${A.float(
|
|
126
|
+
outlineAlphaFactor + fillAlphaFactor < ${le} ||
|
|
127
|
+
fillPixelColor.a + outlinePixelColor.a < ${A.float(L)}
|
|
123
128
|
) {
|
|
124
129
|
discard;
|
|
125
130
|
}
|
|
@@ -129,39 +134,39 @@ posProj = alignToPixelOrigin(posProj, viewport.zw);
|
|
|
129
134
|
vec3 compositeColor = vec3(outlinePixelColor) * outlinePixelColor.a +
|
|
130
135
|
vec3(fillPixelColor) * fillPixelColor.a * (1.0 - outlinePixelColor.a);
|
|
131
136
|
|
|
132
|
-
${O(!
|
|
137
|
+
${O(!oe,A`fragColor = vec4(compositeColor, compositeAlpha);`)}
|
|
133
138
|
} else {
|
|
134
|
-
if (fillAlphaFactor < ${
|
|
139
|
+
if (fillAlphaFactor < ${le}) {
|
|
135
140
|
discard;
|
|
136
141
|
}
|
|
137
142
|
|
|
138
|
-
${O(!
|
|
143
|
+
${O(!oe,A`fragColor = premultiplyAlpha(fillPixelColor);`)}
|
|
139
144
|
}
|
|
140
145
|
|
|
141
146
|
// visualize SDF:
|
|
142
147
|
// fragColor = vec4(clamp(-dist/vsize.x*2.0, 0.0, 1.0), clamp(dist/vsize.x*2.0, 0.0, 1.0), 0.0, 1.0);
|
|
143
148
|
`:A`
|
|
144
|
-
vec4 texColor = texture(tex,
|
|
145
|
-
if (texColor.a < ${
|
|
149
|
+
vec4 texColor = texture(tex, samplePos, -0.5);
|
|
150
|
+
if (texColor.a < ${le}) {
|
|
146
151
|
discard;
|
|
147
152
|
}
|
|
148
|
-
${O(!
|
|
153
|
+
${O(!oe,A`fragColor = texColor * premultiplyAlpha(vcolor);`)}
|
|
149
154
|
`}
|
|
150
155
|
|
|
151
|
-
${O(
|
|
156
|
+
${O(J&&!oe,A`
|
|
152
157
|
float zSample = texelFetch(depthMap, ivec2(gl_FragCoord.xy), 0).x;
|
|
153
158
|
if (zSample < gl_FragCoord.z) {
|
|
154
159
|
fragColor *= occludedOpacity;
|
|
155
160
|
}
|
|
156
161
|
`)}
|
|
157
162
|
|
|
158
|
-
${O(!k
|
|
159
|
-
`;switch(
|
|
160
|
-
${
|
|
161
|
-
${O(
|
|
162
|
-
${O(
|
|
163
|
-
${O(
|
|
164
|
-
${
|
|
165
|
-
outputObjectAndLayerIdColor();`);break;case a.Highlight:i.include(
|
|
166
|
-
${
|
|
167
|
-
outputHighlight(${O(
|
|
163
|
+
${O(!oe&&k,A`fragColor = mix(fragColor, vec4(1.0, 0.0, 1.0, 1.0), isBorder * 0.5);`)}
|
|
164
|
+
`;switch(W){case a.Color:case a.ColorEmission:i.outputs.add("fragColor","vec4",0),W===a.ColorEmission&&i.outputs.add("fragEmission","vec4",1),X===T.ColorAlpha&&i.outputs.add("fragAlpha","float",W===a.ColorEmission?2:1),ee.main.add(A`
|
|
165
|
+
${ae}
|
|
166
|
+
${O(X===T.FrontFace,A`fragColor.rgb /= fragColor.a;`)}
|
|
167
|
+
${O(W===a.ColorEmission,A`fragEmission = vec4(0.0);`)}
|
|
168
|
+
${O(X===T.ColorAlpha,A`fragAlpha = fragColor.a;`)}`);break;case a.ObjectAndLayerIdColor:ee.main.add(A`
|
|
169
|
+
${ae}
|
|
170
|
+
outputObjectAndLayerIdColor();`);break;case a.Highlight:i.include(p,o),ee.main.add(A`
|
|
171
|
+
${ae}
|
|
172
|
+
outputHighlight(${O(ie,A`voccluded == 1.0`,A`false`)});`)}return i}function M(e){return e.outlineColor[3]>0&&e.outlineSize>0}function H(e){return e.textureIsSignedDistanceField?R(e.anchorPosition,e.distanceFieldBoundingBox,V):o(V,e.anchorPosition),V}function R(o,i,r){e(r,o[0]*(i[2]-i[0])+i[0],o[1]*(i[3]-i[1])+i[1])}const V=i(),I=32e3,_=A.float(I),q=Object.freeze(Object.defineProperty({__proto__:null,build:U,calculateAnchorPosition:H,fullUV:I,shaderSettings:B},Symbol.toStringTag,{value:"Module"}));export{q as H,U as b,H as c,I as f,B as s};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{ShaderOutput as e}from"../views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js";import{SliceDraw as i}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{ObjectAndLayerIdColor as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js";import{RibbonVertexPosition as n}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{LineStipple as r,computePixelSize as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{terrainDepthTest as l}from"../views/3d/webgl-engine/core/shaderLibrary/shading/TerrainDepthTest.glsl.js";import{ColorConversion as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{addProjViewLocalOrigin as p,addPixelRatio as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2BindUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float4BindUniform as
|
|
5
|
+
import{ShaderOutput as e}from"../views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js";import{SliceDraw as i}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{ObjectAndLayerIdColor as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js";import{RibbonVertexPosition as n}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{LineStipple as r,computePixelSize as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{terrainDepthTest as l}from"../views/3d/webgl-engine/core/shaderLibrary/shading/TerrainDepthTest.glsl.js";import{ColorConversion as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{addProjViewLocalOrigin as p,addPixelRatio as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2BindUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float4BindUniform as f}from"../views/3d/webgl-engine/core/shaderModules/Float4BindUniform.js";import{Float4PassUniform as v}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatBindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/FloatBindUniform.js";import{FloatPassUniform as h}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as S}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as D}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{VertexAttribute as u}from"../views/3d/webgl-engine/lib/VertexAttribute.js";import{LineMarkerSpace as x}from"../views/3d/webgl-engine/shaders/LineMarkerTechniqueConfiguration.js";import{outputColorHighlightOID as L}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOID.glsl.js";import{CapType as w}from"../views/3d/webgl-engine/shaders/RibbonLineTechniqueConfiguration.js";import{ShaderBuilder as b}from"../views/webgl/ShaderBuilder.js";import{alphaCutoff as y}from"../webscene/support/AlphaCutoff.js";const j=1;function P(P){const C=new b,{attributes:F,varyings:R,vertex:A,fragment:z}=C,{applyMarkerOffset:T,draped:V,output:W,capType:O,stippleEnabled:E,falloffEnabled:N,roundJoins:M,wireframe:I,innerColorEnabled:_}=P;C.include(s),C.include(n,P),C.include(r,P),C.include(t,P),C.include(l,P);const k=T&&!V;k&&(A.uniforms.add(new h("markerScale",(e=>e.markerScale))),C.include(a,{space:x.World})),p(A,P),A.uniforms.add(new D("inverseProjectionMatrix",(e=>e.camera.inverseProjectionMatrix)),new m("nearFar",(e=>e.camera.nearFar)),new h("miterLimit",(e=>"miter"!==e.join?0:e.miterLimit)),new f("viewport",(e=>e.camera.fullViewport))),A.constants.add("LARGE_HALF_FLOAT","float",65500),F.add(u.POSITION,"vec3"),F.add(u.PREVPOSITION,"vec3"),F.add(u.NEXTPOSITION,"vec3"),F.add(u.LINEPARAMETERS,"vec2"),F.add(u.U0,"float"),R.add("vColor","vec4"),R.add("vpos","vec3",{invariant:!0}),R.add("vLineDistance","float"),R.add("vLineWidth","float");const B=E;B&&R.add("vLineSizeInv","float");const U=O===w.ROUND,$=E&&U,H=N||$;H&&R.add("vLineDistanceNorm","float"),U&&(R.add("vSegmentSDF","float"),R.add("vReverseSegmentSDF","float")),A.code.add(S`vec2 perpendicular(vec2 v) {
|
|
6
6
|
return vec2(v.y, -v.x);
|
|
7
7
|
}
|
|
8
8
|
float interp(float ncp, vec4 a, vec4 b) {
|
|
@@ -13,11 +13,11 @@ float s = sin(a);
|
|
|
13
13
|
float c = cos(a);
|
|
14
14
|
mat2 m = mat2(c, -s, s, c);
|
|
15
15
|
return m * v;
|
|
16
|
-
}`),
|
|
16
|
+
}`),A.code.add(S`vec4 projectAndScale(vec4 pos) {
|
|
17
17
|
vec4 posNdc = proj * pos;
|
|
18
18
|
posNdc.xy *= viewport.zw / posNdc.w;
|
|
19
19
|
return posNdc;
|
|
20
|
-
}`),
|
|
20
|
+
}`),A.code.add(S`void clipAndTransform(inout vec4 pos, inout vec4 prev, inout vec4 next, in bool isStartVertex) {
|
|
21
21
|
float vnp = nearFar[0] * 0.99;
|
|
22
22
|
if(pos.z > -nearFar[0]) {
|
|
23
23
|
if (!isStartVertex) {
|
|
@@ -47,21 +47,20 @@ forwardViewPosDepth(pos.xyz);
|
|
|
47
47
|
pos = projectAndScale(pos);
|
|
48
48
|
next = projectAndScale(next);
|
|
49
49
|
prev = projectAndScale(prev);
|
|
50
|
-
}`),c(
|
|
51
|
-
// unpack values from
|
|
52
|
-
bool isStartVertex = abs(abs(
|
|
50
|
+
}`),c(A),A.constants.add("aaWidth","float",E?0:1).main.add(S`
|
|
51
|
+
// unpack values from vertex type
|
|
52
|
+
bool isStartVertex = abs(abs(lineParameters.y)-3.0) == 1.0;
|
|
53
53
|
|
|
54
54
|
float coverage = 1.0;
|
|
55
55
|
|
|
56
|
-
// Check for special value of
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
if (uv0.y == 0.0) {
|
|
56
|
+
// Check for special value of lineParameters.y which is used by the Renderer when graphics are removed before the
|
|
57
|
+
// VBO is recompacted. If this is the case, then we just project outside of clip space.
|
|
58
|
+
if (lineParameters.y == 0.0) {
|
|
60
59
|
// Project out of clip space
|
|
61
60
|
gl_Position = vec4(1e038, 1e038, 1e038, 1.0);
|
|
62
61
|
}
|
|
63
62
|
else {
|
|
64
|
-
bool isJoin = abs(
|
|
63
|
+
bool isJoin = abs(lineParameters.y) < 3.0;
|
|
65
64
|
float lineSize = getSize();
|
|
66
65
|
|
|
67
66
|
if (lineSize < 1.0) {
|
|
@@ -77,26 +76,26 @@ prev = projectAndScale(prev);
|
|
|
77
76
|
vec4 pos = view * vec4(position, 1.0);
|
|
78
77
|
vec4 prev = view * vec4(prevPosition, 1.0);
|
|
79
78
|
vec4 next = view * vec4(nextPosition, 1.0);
|
|
80
|
-
`),k&&
|
|
79
|
+
`),k&&A.main.add(S`vec4 other = isStartVertex ? next : prev;
|
|
81
80
|
bool markersHidden = areWorldMarkersHidden(pos, other);
|
|
82
81
|
if(!isJoin && !markersHidden) {
|
|
83
82
|
pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos) * 0.5;
|
|
84
|
-
}`),
|
|
83
|
+
}`),A.main.add(S`clipAndTransform(pos, prev, next, isStartVertex);
|
|
85
84
|
vec2 left = (pos.xy - prev.xy);
|
|
86
85
|
vec2 right = (next.xy - pos.xy);
|
|
87
86
|
float leftLen = length(left);
|
|
88
|
-
float rightLen = length(right);`);(E||U)&&
|
|
87
|
+
float rightLen = length(right);`);(E||U)&&A.main.add(S`
|
|
89
88
|
float isEndVertex = float(!isStartVertex);
|
|
90
89
|
vec2 segmentOrigin = mix(pos.xy, prev.xy, isEndVertex);
|
|
91
90
|
vec2 segment = mix(right, left, isEndVertex);
|
|
92
91
|
${U?S`vec2 segmentEnd = mix(next.xy, pos.xy, isEndVertex);`:""}
|
|
93
|
-
`),
|
|
92
|
+
`),A.main.add(S`left = (leftLen > 0.001) ? left/leftLen : vec2(0.0, 0.0);
|
|
94
93
|
right = (rightLen > 0.001) ? right/rightLen : vec2(0.0, 0.0);
|
|
95
94
|
vec2 capDisplacementDir = vec2(0, 0);
|
|
96
95
|
vec2 joinDisplacementDir = vec2(0, 0);
|
|
97
96
|
float displacementLen = lineWidth;
|
|
98
97
|
if (isJoin) {
|
|
99
|
-
bool isOutside = (left.x * right.y - left.y * right.x) *
|
|
98
|
+
bool isOutside = (left.x * right.y - left.y * right.x) * lineParameters.y > 0.0;
|
|
100
99
|
joinDisplacementDir = normalize(left + right);
|
|
101
100
|
joinDisplacementDir = perpendicular(joinDisplacementDir);
|
|
102
101
|
if (leftLen > 0.001 && rightLen > 0.001) {
|
|
@@ -106,7 +105,8 @@ if (!isOutside) {
|
|
|
106
105
|
displacementLen = min(displacementLen, min(leftLen, rightLen)/abs(nDotSeg));
|
|
107
106
|
}
|
|
108
107
|
}
|
|
109
|
-
|
|
108
|
+
float subdivisionFactor = lineParameters.x;
|
|
109
|
+
if (isOutside && (displacementLen > miterLimit * lineWidth)) {`),M?A.main.add(S`
|
|
110
110
|
vec2 startDir = leftLen < 0.001 ? right : left;
|
|
111
111
|
startDir = perpendicular(startDir);
|
|
112
112
|
|
|
@@ -116,8 +116,8 @@ if (isOutside && (displacementLen > miterLimit * lineWidth)) {`),N?z.main.add(S`
|
|
|
116
116
|
float factor = ${E?S`min(1.0, subdivisionFactor * ${S.float((j+2)/(j+1))})`:S`subdivisionFactor`};
|
|
117
117
|
|
|
118
118
|
float rotationAngle = acos(clamp(dot(startDir, endDir), -1.0, 1.0));
|
|
119
|
-
joinDisplacementDir = rotate(startDir, -sign(
|
|
120
|
-
`):
|
|
119
|
+
joinDisplacementDir = rotate(startDir, -sign(lineParameters.y) * factor * rotationAngle);
|
|
120
|
+
`):A.main.add(S`if (leftLen < 0.001) {
|
|
121
121
|
joinDisplacementDir = right;
|
|
122
122
|
}
|
|
123
123
|
else if (rightLen < 0.001) {
|
|
@@ -126,7 +126,7 @@ joinDisplacementDir = left;
|
|
|
126
126
|
else {
|
|
127
127
|
joinDisplacementDir = (isStartVertex || subdivisionFactor > 0.0) ? right : left;
|
|
128
128
|
}
|
|
129
|
-
joinDisplacementDir = perpendicular(joinDisplacementDir);`);const J=
|
|
129
|
+
joinDisplacementDir = perpendicular(joinDisplacementDir);`);const J=O!==w.BUTT;return A.main.add(S`
|
|
130
130
|
displacementLen = lineWidth;
|
|
131
131
|
}
|
|
132
132
|
} else {
|
|
@@ -136,25 +136,25 @@ joinDisplacementDir = perpendicular(joinDisplacementDir);`);const J=W!==w.BUTT;r
|
|
|
136
136
|
|
|
137
137
|
${J?S`capDisplacementDir = isStartVertex ? -right : left;`:""}
|
|
138
138
|
}
|
|
139
|
-
`),
|
|
139
|
+
`),A.main.add(S`
|
|
140
140
|
// Displacement (in pixels) caused by join/or cap
|
|
141
|
-
vec2 dpos = joinDisplacementDir * sign(
|
|
142
|
-
float lineDistNorm = sign(
|
|
141
|
+
vec2 dpos = joinDisplacementDir * sign(lineParameters.y) * displacementLen + capDisplacementDir * displacementLen;
|
|
142
|
+
float lineDistNorm = sign(lineParameters.y) * pos.w;
|
|
143
143
|
|
|
144
144
|
vLineDistance = lineWidth * lineDistNorm;
|
|
145
145
|
${H?S`vLineDistanceNorm = lineDistNorm;`:""}
|
|
146
146
|
|
|
147
147
|
pos.xy += dpos;
|
|
148
|
-
`),U&&
|
|
148
|
+
`),U&&A.main.add(S`vec2 segmentDir = normalize(segment);
|
|
149
149
|
vSegmentSDF = (isJoin && isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentOrigin, segmentDir) * pos.w) ;
|
|
150
|
-
vReverseSegmentSDF = (isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd, -segmentDir) * pos.w);`),E&&(V?
|
|
151
|
-
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),
|
|
150
|
+
vReverseSegmentSDF = (isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd, -segmentDir) * pos.w);`),E&&(V?A.uniforms.add(new g("worldToScreenRatio",(e=>1/e.screenToPCSRatio))):A.main.add(S`vec3 segmentCenter = mix((nextPosition + position) * 0.5, (position + prevPosition) * 0.5, isEndVertex);
|
|
151
|
+
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),A.main.add(S`float segmentLengthScreenDouble = length(segment);
|
|
152
152
|
float segmentLengthScreen = segmentLengthScreenDouble * 0.5;
|
|
153
153
|
float discreteWorldToScreenRatio = discretizeWorldToScreenRatio(worldToScreenRatio);
|
|
154
154
|
float segmentLengthRender = length(mix(nextPosition - position, position - prevPosition, isEndVertex));
|
|
155
|
-
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),V?
|
|
156
|
-
float startPseudoScreen =
|
|
157
|
-
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),
|
|
155
|
+
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),V?A.main.add(S`float segmentLengthPseudoScreen = segmentLengthScreen / pixelRatio * discreteWorldToScreenRatio / worldToScreenRatio;
|
|
156
|
+
float startPseudoScreen = u0 * discreteWorldToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):A.main.add(S`float startPseudoScreen = mix(u0, u0 - segmentLengthRender, isEndVertex) * discreteWorldToScreenRatio;
|
|
157
|
+
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),A.uniforms.add(new h("stipplePatternPixelSize",(e=>o(e)))),A.main.add(S`float patternLength = lineSize * stipplePatternPixelSize;
|
|
158
158
|
vStippleDistanceLimits = computeStippleDistanceLimits(startPseudoScreen, segmentLengthPseudoScreen, segmentLengthScreen, patternLength);
|
|
159
159
|
vStippleDistance = mix(vStippleDistanceLimits.x, vStippleDistanceLimits.y, isEndVertex);
|
|
160
160
|
if (segmentLengthScreenDouble >= 0.001) {
|
|
@@ -168,21 +168,21 @@ vStippleDistanceLimits = isJoin ?
|
|
|
168
168
|
vStippleDistanceLimits :
|
|
169
169
|
isStartVertex ?
|
|
170
170
|
vec2(-1e34, vStippleDistanceLimits.y) :
|
|
171
|
-
vec2(vStippleDistanceLimits.x, 1e34);`)),
|
|
171
|
+
vec2(vStippleDistanceLimits.x, 1e34);`)),A.main.add(S`
|
|
172
172
|
// Convert back into NDC
|
|
173
173
|
pos.xy = (pos.xy / viewport.zw) * pos.w;
|
|
174
174
|
|
|
175
175
|
vColor = getColor();
|
|
176
176
|
vColor.a *= coverage;
|
|
177
177
|
|
|
178
|
-
${
|
|
178
|
+
${I&&!V?"pos.z -= 0.001 * pos.w;":""}
|
|
179
179
|
|
|
180
180
|
// transform final position to camera space for slicing
|
|
181
181
|
vpos = (inverseProjectionMatrix * pos).xyz;
|
|
182
182
|
gl_Position = pos;
|
|
183
183
|
forwardObjectAndLayerIdColor();
|
|
184
|
-
}`),
|
|
185
|
-
discardByTerrainDepth();`),
|
|
184
|
+
}`),C.fragment.include(i,P),C.include(L,P),z.include(d),z.main.add(S`discardBySlice(vpos);
|
|
185
|
+
discardByTerrainDepth();`),I?z.main.add(S`vec4 finalColor = vec4(1.0, 0.0, 1.0, 1.0);`):(U&&z.main.add(S`
|
|
186
186
|
float sdf = min(vSegmentSDF, vReverseSegmentSDF);
|
|
187
187
|
vec2 fragmentPosition = vec2(
|
|
188
188
|
min(sdf, 0.0),
|
|
@@ -196,7 +196,7 @@ discardByTerrainDepth();`),M?A.main.add(S`vec4 finalColor = vec4(1.0, 0.0, 1.0,
|
|
|
196
196
|
if (capCoverage < ${S.float(y)}) {
|
|
197
197
|
discard;
|
|
198
198
|
}
|
|
199
|
-
`),$?
|
|
199
|
+
`),$?z.main.add(S`
|
|
200
200
|
vec2 stipplePosition = vec2(
|
|
201
201
|
min(getStippleSDF() * 2.0 - 1.0, 0.0),
|
|
202
202
|
vLineDistanceNorm * gl_FragCoord.w
|
|
@@ -205,10 +205,10 @@ discardByTerrainDepth();`),M?A.main.add(S`vec4 finalColor = vec4(1.0, 0.0, 1.0,
|
|
|
205
205
|
float stippleCapSDF = (stippleRadius - vLineWidth) * 0.5; // Divide by 2 to transform from double pixel scale
|
|
206
206
|
float stippleCoverage = clamp(0.5 - stippleCapSDF, 0.0, 1.0);
|
|
207
207
|
float stippleAlpha = step(${S.float(y)}, stippleCoverage);
|
|
208
|
-
`):
|
|
208
|
+
`):z.main.add(S`float stippleAlpha = getStippleAlpha();`),W!==e.ObjectAndLayerIdColor&&z.main.add(S`discardByStippleAlpha(stippleAlpha, ${S.float(y)});`),z.uniforms.add(new v("intrinsicColor",(e=>e.color))),z.main.add(S`vec4 color = intrinsicColor * vColor;`),_&&(z.uniforms.add(new v("innerColor",(e=>e.innerColor??e.color)),new h("innerWidth",((e,i)=>e.innerWidth*i.camera.pixelRatio))),z.main.add(S`float distToInner = abs(vLineDistance * gl_FragCoord.w) - innerWidth;
|
|
209
209
|
float innerAA = clamp(0.5 - distToInner, 0.0, 1.0);
|
|
210
210
|
float innerAlpha = innerColor.a + color.a * (1.0 - innerColor.a);
|
|
211
|
-
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`)),
|
|
211
|
+
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`)),z.main.add(S`vec4 finalColor = blendStipple(color, stippleAlpha);`),N&&(z.uniforms.add(new h("falloff",(e=>e.falloff))),z.main.add(S`finalColor.a *= pow(max(0.0, 1.0 - abs(vLineDistanceNorm * gl_FragCoord.w)), falloff);`)),E||z.main.add(S`float featherStartDistance = max(vLineWidth - 2.0, 0.0);
|
|
212
212
|
float value = abs(vLineDistance) * gl_FragCoord.w;
|
|
213
213
|
float feather = (value - featherStartDistance) / (vLineWidth - featherStartDistance);
|
|
214
|
-
finalColor.a *= 1.0 - clamp(feather, 0.0, 1.0);`)),
|
|
214
|
+
finalColor.a *= 1.0 - clamp(feather, 0.0, 1.0);`)),z.main.add(S`outputColorHighlightOID(finalColor, vpos);`),C}const C=Object.freeze(Object.defineProperty({__proto__:null,build:P,ribbonlineNumRoundJoinSubdivisions:j},Symbol.toStringTag,{value:"Module"}));export{C as R,P as b,j as r};
|
|
@@ -2,28 +2,12 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{invert as e,translate as a}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as
|
|
6
|
-
|
|
7
|
-
if (
|
|
5
|
+
import{invert as e,translate as a}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{ScreenSpacePass as r}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadShadowMapPass as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{glsl as t}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as d}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{ReadShadowMapConfiguration as n}from"../views/3d/webgl-engine/shaders/ReadShadowMapConfiguration.js";import{ShaderBuilder as l}from"../views/webgl/ShaderBuilder.js";const m=255,p=1/m;function w(){const o=new l,{fragment:n}=o;return o.include(r),o.include(s,u),n.uniforms.add(new i("shadowMap",(e=>e.shadowMap.depthTexture)),new i("depthMap",(e=>e.depth?.attachment)),new d("inverseViewMatrix",(o=>e(h,a(h,o.camera.viewMatrix,o.camera.center))))),n.constants.add("sampleValue","float",p),o.outputs.add("sampleCount","float"),n.main.add(t`sampleCount = 0.0;
|
|
6
|
+
vec3 uvzShadow = calculateShadowmapUVZFromDepthMap(uv, shadowMap, depthMap);
|
|
7
|
+
if (uvzShadow.z < 0.0) {
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
vec4 currentPixelPos = vec4(reconstructPosition(gl_FragCoord.xy, currentPixelDepth), 1.0);
|
|
12
|
-
vec4 worldSpacePos = inverseViewMatrix * currentPixelPos;
|
|
13
|
-
mat4 shadowMatrix;
|
|
14
|
-
float linearDepth = -currentPixelDepth;
|
|
15
|
-
int i = chooseCascade(linearDepth, shadowMatrix);
|
|
16
|
-
if (i >= numCascades) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
vec3 lvpos = lightSpacePosition(worldSpacePos.xyz, shadowMatrix);
|
|
20
|
-
if (lvpos.z >= 1.0 || lvpos.x < 0.0 || lvpos.x > 1.0 || lvpos.y < 0.0 || lvpos.y > 1.0) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
ivec2 texSize = textureSize(shadowMap, 0);
|
|
24
|
-
ivec2 uvShadow = ivec2(cascadeCoordinates(i, texSize, lvpos) * vec2(texSize));
|
|
25
|
-
float depthShadow = readShadowMapDepth(uvShadow, shadowMap);
|
|
26
|
-
bool shadow = depthShadow < lvpos.z;
|
|
10
|
+
bool shadow = posIsInShadowF(uvzShadow, shadowMap);
|
|
27
11
|
if (shadow) {
|
|
28
12
|
sampleCount = sampleValue;
|
|
29
|
-
}`),
|
|
13
|
+
}`),o}const h=o(),u=new n,c=Object.freeze(Object.defineProperty({__proto__:null,ShadowCastMaxSamples:m,build:w},Symbol.toStringTag,{value:"Module"}));export{m as S,c as a,w as b};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{invert as e,translate as i}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as
|
|
5
|
+
import{invert as e,translate as i}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{n as r,t}from"./vec32.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{NormalFromDepth as l}from"../views/3d/webgl-engine/core/shaderLibrary/NormalFromDepth.glsl.js";import{ScreenSpacePass as h}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadShadowMapPass as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{RgbaFloatEncoding as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{Float3BindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Float3BindUniform.js";import{Float4PassUniform as d}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatPassUniform as c}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as w}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{UintTexture2DPassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/UintTexture2DPassUniform.js";import{SnapshotSlot as f}from"../views/3d/webgl-engine/lib/ShadowMap.js";import{ReadShadowMapConfiguration as v}from"../views/3d/webgl-engine/shaders/ReadShadowMapConfiguration.js";import{ShaderBuilder as b}from"../views/webgl/ShaderBuilder.js";const x=.025;function M(){const o=new b;o.include(n,j),o.include(h),o.include(l);const a=o.fragment;return a.include(s),a.uniforms.add(new u("shadowMapExcludingHighlight",(e=>e.shadowMap.getSnapshot(f.ExcludeHighlight))),new u("shadowMapHighlight",(e=>e.shadowMap.getSnapshot(f.Highlight))),new u("depthMap",(e=>e.depth?.attachment)),new p("highlightTexture",(e=>e.highlightTexture)),new d("uColor",(e=>e.shadowColor)),new c("opacity",(e=>e.shadowOpacity)),new c("occludedOpacity",(e=>e.occludedShadowOpacity)),new c("terminationFactor",(e=>e.opacityElevation*e.dayNightTerminator)),new g("lightingMainDirectionView",(({lighting:e,camera:i})=>r(y,t(y,e.mainLight.direction,i.viewInverseTransposeMatrix)))),new m("inverseViewMatrix",(({camera:o})=>e(S,i(S,o.viewMatrix,o.center))))),a.main.add(w`
|
|
6
6
|
ivec2 highlightTextureSize = textureSize(highlightTexture, 0);
|
|
7
7
|
ivec2 highlightIUV = ivec2(uv * vec2(highlightTextureSize));
|
|
8
8
|
uvec2 highlightInfo = texelFetch(highlightTexture, highlightIUV, 0).rg;
|
|
@@ -17,44 +17,22 @@ import{invert as e,translate as i}from"../core/libs/gl-matrix-2/math/mat4.js";im
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (
|
|
20
|
+
vec4 currentPixelPos;
|
|
21
|
+
vec3 uvzShadow = calculateShadowmapUVZFromDepthMap_currentPixelPos(uv, shadowMapHighlight, depthMap, currentPixelPos);
|
|
22
|
+
if (uvzShadow.z < 0.0) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
vec4 currentPixelPos = vec4(reconstructPosition(gl_FragCoord.xy, currentPixelDepth), 1.0);
|
|
28
|
-
vec4 worldSpacePos = inverseViewMatrix * currentPixelPos;
|
|
29
|
-
|
|
30
|
-
mat4 shadowMatrix;
|
|
31
|
-
float linearDepth = -currentPixelDepth;
|
|
32
|
-
int i = chooseCascade(linearDepth, shadowMatrix);
|
|
33
|
-
if (i >= numCascades) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// vertex completely outside? -> no shadow
|
|
38
|
-
vec3 lvpos = lightSpacePosition(worldSpacePos.xyz, shadowMatrix);
|
|
39
|
-
if (lvpos.z >= 1.0 || lvpos.x < 0.0 || lvpos.x > 1.0 || lvpos.y < 0.0 || lvpos.y > 1.0) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
ivec2 texSize = textureSize(highlightDepthTex, 0);
|
|
44
|
-
ivec2 uvShadow = ivec2(cascadeCoordinates(i, texSize, lvpos) * vec2(texSize));
|
|
45
|
-
|
|
46
|
-
float depthHighlight = readShadowMapDepth(uvShadow, highlightDepthTex);
|
|
47
|
-
bool shadowHighlight = depthHighlight < lvpos.z;
|
|
26
|
+
bool shadowHighlight = posIsInShadowF(uvzShadow, shadowMapHighlight);
|
|
48
27
|
if (!shadowHighlight) {
|
|
49
28
|
return;
|
|
50
29
|
}
|
|
51
30
|
|
|
52
|
-
|
|
53
|
-
bool shadowDefault = depthDefault < lvpos.z;
|
|
31
|
+
bool shadowDefault = posIsInShadowF(uvzShadow, shadowMapExcludingHighlight);
|
|
54
32
|
|
|
55
33
|
vec3 normal = normalFromDepth(depthMap, currentPixelPos.xyz, gl_FragCoord.xy, uv);
|
|
56
|
-
bool shaded = dot(normal, lightingMainDirectionView) < ${
|
|
34
|
+
bool shaded = dot(normal, lightingMainDirectionView) < ${w.float(x)};
|
|
57
35
|
|
|
58
36
|
float fragOpacity = (shadowDefault || shaded) ? occludedOpacity : opacity;
|
|
59
37
|
fragColor = vec4(uColor.rgb, uColor.a * fragOpacity * terminationFactor);
|
|
60
|
-
`),
|
|
38
|
+
`),o}const S=o(),y=a(),j=new v,F=Object.freeze(Object.defineProperty({__proto__:null,build:M},Symbol.toStringTag,{value:"Module"}));export{F as S,M as b};
|