@arcgis/core 5.2.0-next.48 → 5.2.0-next.49
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/applications/Components/OrientedImageryViewer/PanoramicViewer/utils.d.ts +33 -0
- package/applications/Components/OrientedImageryViewer/PanoramicViewer/utils.js +2 -0
- package/arcgisGlobal.d.ts +2 -0
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/031ccf2e1583beebdf24.js +1 -0
- package/assets/esri/core/workers/chunks/0474af7687466d8befd2.js +1 -0
- package/assets/esri/core/workers/chunks/{f9b2727b41943d83d4ca.js → 0a413d917f3d19440fc1.js} +1 -1
- package/assets/esri/core/workers/chunks/0b2ca406761c63529a6a.js +1 -0
- package/assets/esri/core/workers/chunks/{c369d4266f38e9ea6592.js → 1119a33245138e7b3914.js} +1 -1
- package/assets/esri/core/workers/chunks/{6fbcf1b85461c6c6c127.js → 172571397c66f992d08c.js} +1 -1
- package/assets/esri/core/workers/chunks/18edf2846d7546285e5e.js +1 -0
- package/assets/esri/core/workers/chunks/{7759a489205a874e13bb.js → 1b0557fcb058fc450230.js} +1 -1
- package/assets/esri/core/workers/chunks/{7d0ff52748fd4eb0334d.js → 1bc45872d22d61dbd7d1.js} +1 -1
- package/assets/esri/core/workers/chunks/{835643f716f7058a2722.js → 1cf8fb704c48ac3d3b15.js} +1 -1
- package/assets/esri/core/workers/chunks/25cb56c3b538d00e7693.js +1 -0
- package/assets/esri/core/workers/chunks/{2c0d92c0e3511775401a.js → 35cbf00f0c37a86517af.js} +1 -1
- package/assets/esri/core/workers/chunks/382d9491c2a56c1925fe.js +1 -0
- package/assets/esri/core/workers/chunks/3af2b9d6d5466cb2b957.js +256 -0
- package/assets/esri/core/workers/chunks/{c3766d98f0a70897647f.js → 3bc2943035391b44d4cf.js} +1 -1
- package/assets/esri/core/workers/chunks/{bd8b180c61a80e60568c.js → 40f7bb0ebd918d76f078.js} +1 -1
- package/assets/esri/core/workers/chunks/43b39abd49c4a8ce891f.js +1 -0
- package/assets/esri/core/workers/chunks/{821176ee3be724621bb0.js → 461c2de938bf4c9b1442.js} +1 -1
- package/assets/esri/core/workers/chunks/4ee7232ea41fa41c5ed4.js +29 -0
- package/assets/esri/core/workers/chunks/50674ba5f24129d61d89.js +1 -0
- package/assets/esri/core/workers/chunks/547a2fe53139f705f95e.js +1 -0
- package/assets/esri/core/workers/chunks/5ce09c4d06e98b1e9251.js +1 -0
- package/assets/esri/core/workers/chunks/{4d9433f127aef76f3449.js → 5dbd28fce73751d2d1aa.js} +1 -1
- package/assets/esri/core/workers/chunks/5ec8b02e097cf6718462.js +1 -0
- package/assets/esri/core/workers/chunks/5f54d927dc77e92cf145.js +1 -0
- package/assets/esri/core/workers/chunks/63e3d338751240479335.js +1 -0
- package/assets/esri/core/workers/chunks/6ccd5fa5e35dc70fcd5d.js +1 -0
- package/assets/esri/core/workers/chunks/6e520ef645c5edcd499a.js +1 -0
- package/assets/esri/core/workers/chunks/{68d898037feb0aee3138.js → 78add8e6b54b51eaa299.js} +1 -1
- package/assets/esri/core/workers/chunks/7b61f56d0f766421eaef.js +1 -0
- package/assets/esri/core/workers/chunks/7f2f2a92dce3f68e579b.js +1 -0
- package/assets/esri/core/workers/chunks/{e7e3ea7af928b49b226c.js → 801a664f21e0218bc705.js} +1 -1
- package/assets/esri/core/workers/chunks/8d21e2dabc5165f1c8ca.js +1 -0
- package/assets/esri/core/workers/chunks/9008090a5d8431ddfa22.js +1 -0
- package/assets/esri/core/workers/chunks/{71ce1009dadcae8f8094.js → 95b3b8fe45ef4ac6b277.js} +1 -1
- package/assets/esri/core/workers/chunks/{78918035144c3c76df71.js → 96cec8a02ca96175d602.js} +1 -1
- package/assets/esri/core/workers/chunks/{bab71e1b8b93d09d4809.js → 99eccf9ce53582cfa5b5.js} +1 -1
- package/assets/esri/core/workers/chunks/9b7cb96acea388d86fa4.js +1 -0
- package/assets/esri/core/workers/chunks/{ff2c4f648f77850922d5.js → 9e474465d069cb9e94f5.js} +1 -1
- package/assets/esri/core/workers/chunks/{ae9f9e975d7a9d442fa5.js → ab5aa4280ed0cb7fcbe9.js} +1 -1
- package/assets/esri/core/workers/chunks/b49952541d189b4b9f7e.js +1 -0
- package/assets/esri/core/workers/chunks/{fed6c75485601cd3afa1.js → baac90da0703891d59c4.js} +1 -1
- package/assets/esri/core/workers/chunks/bb552089b34d6811fb03.js +1 -0
- package/assets/esri/core/workers/chunks/{b30237361d87cf982e41.js → d1af0bd611a3dc549858.js} +64 -59
- package/assets/esri/core/workers/chunks/d2cb3d5ef0a9285afb78.js +1 -0
- package/assets/esri/core/workers/chunks/d560ed96dde5ca3a5583.js +1 -0
- package/assets/esri/core/workers/chunks/dc1787d88b11ed985159.js +1 -0
- package/assets/esri/core/workers/chunks/{399e23d777a043efa9f1.js → dd95f50dac3f33cdb6d2.js} +1 -1
- package/assets/esri/core/workers/chunks/ddb92c815d17c67a45e6.js +1 -0
- package/assets/esri/core/workers/chunks/{52efa4ded11c1e71f04f.js → e2e2162adbfb9b46bede.js} +1 -1
- package/assets/esri/core/workers/chunks/e4353f0792f45aa6a62f.js +1 -0
- package/assets/esri/core/workers/chunks/eac8cae89da9ce2f4946.js +1 -0
- package/assets/esri/core/workers/chunks/edf87407dd20685c82ab.js +1 -0
- package/assets/esri/core/workers/chunks/{be6caade351e89f84251.js → ee7c8a7f384ea6393487.js} +107 -82
- package/assets/esri/core/workers/chunks/f1299b4fc760ccca1518.js +1 -0
- package/assets/esri/core/workers/chunks/f244632f7934a4b72c91.js +1 -0
- package/assets/esri/core/workers/chunks/fc639c730115e07a4a1a.js +1 -0
- package/assets/esri/libs/dxtEncoder/dxt_encoder.wasm +0 -0
- package/chunks/Component.glsl.js +104 -67
- package/chunks/LineMarker.glsl.js +31 -31
- package/chunks/RibbonLine.glsl.js +60 -49
- package/chunks/dxt_encoder.js +1 -1
- package/chunks/vec3.js +1 -1
- package/config.js +1 -1
- package/core/has.js +1 -1
- package/geometry/support/aaBoundingBox.js +1 -1
- package/geometry/support/buffer/math/vec3.js +1 -1
- package/geometry/support/frustum.js +1 -1
- package/geometry/support/meshUtils/extent.js +1 -1
- package/geometry/support/meshUtils/vertexSpaceConversion.js +1 -1
- package/kernel.js +1 -1
- package/layers/orientedImagery/transformations/imageToWorld.js +1 -1
- package/layers/orientedImagery/transformations/utils.js +1 -1
- package/package.json +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
- package/symbols/cim/CIMSymbolHelper.js +1 -1
- package/symbols/cim/TextRasterizer.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/symbols/cim/richTextUtils.js +2 -0
- package/views/2d/engine/webgl/TextureManager.js +1 -1
- package/views/2d/engine/webgl/definitions.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
- package/views/2d/engine/webgl/util/DimensionMatcher.js +1 -1
- package/views/2d/layers/FeatureLikeLayerView2D.js +1 -1
- package/views/2d/layers/features/schema/processor/symbols/SymbolSchema.js +1 -1
- package/views/2d/layers/support/annodime/DimensionInfo.js +1 -1
- package/views/2d/layers/support/annodime/dimensionUtils.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightReshapeTool3D.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedConfiguration.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedEditTool.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedSubTool.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedSubVisualization.js +1 -1
- package/views/3d/analysis/Viewshed/ViewshedTool.js +1 -1
- package/views/3d/analysis/ViewshedAnalysisView3D.js +1 -1
- package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillController.js +1 -1
- package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillVisualization.js +1 -1
- package/views/3d/focusAreaUtils.js +1 -1
- package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/objectResourceUtils.js +1 -1
- package/views/3d/layers/graphics/wosrLoader.js +1 -1
- package/views/3d/layers/i3s/meshUtils.js +1 -1
- package/views/3d/webgl/RenderCamera.js +1 -1
- package/views/3d/webgl/RenderNode.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/Component.glsl.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/TextureBackedBuffer.glsl.js +2 -2
- package/views/3d/webgl-engine/core/shaderLibrary/TextureBackedBufferFields.glsl.js +2 -2
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js +36 -25
- package/views/3d/webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js +17 -10
- package/views/3d/webgl-engine/lib/BoundingInfo.js +1 -1
- package/views/3d/webgl-engine/lib/Object3D.js +1 -1
- package/views/3d/webgl-engine/lib/PolygonIntersections2D.js +1 -1
- package/views/3d/webgl-engine/lib/RayIntersections.js +1 -1
- package/views/3d/webgl-engine/lib/RenderGeometry.js +1 -1
- package/views/3d/webgl-engine/lib/depthRangeUtils.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodLevel.js +1 -1
- package/views/3d/webgl-engine/lib/screenPolygonOverlapUtils.js +1 -1
- package/views/3d/webgl-engine/lib/screenPolygonTriangleIntersections.js +1 -1
- package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/shaders/AnimatedLine.glsl.js +8 -5
- package/views/3d/webgl-engine/shaders/RibbonLine.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineLayouts.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTextureBuffer.glsl.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/interactive/snapping/featureSources/FeatureServiceSnappingSource.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceSnappingSourceWorkerHandle.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceTiledFetcher.js +1 -1
- package/views/selection/SelectionOperation.js +1 -1
- package/views/support/DefaultsFromMap.js +1 -1
- package/views/support/LayerViewManager.js +1 -1
- package/views/support/TextureCompressionWorker.js +1 -1
- package/views/webgl/RenderingContext.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
- package/widgets/OrientedImageryViewer/services/SuperimposeService.js +1 -1
- package/widgets/OrientedImageryViewer/support/superimposeUtils.js +1 -1
- package/widgets/PanoramicViewer/support/PanoramicTileNode.d.ts +63 -0
- package/widgets/PanoramicViewer/support/PanoramicTileNode.js +1 -1
- package/widgets/PanoramicViewer/support/PanoramicTilePyramid.d.ts +66 -0
- package/widgets/PanoramicViewer/support/PanoramicTilePyramid.js +1 -1
- package/widgets/PanoramicViewer/utils.js +1 -1
- package/widgets/Sketch/VisibleElements.d.ts +0 -10
- package/widgets/Sketch.js +1 -1
- package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
- package/widgets/support/SelectionToolbar.js +1 -1
- package/widgets/support/Selector3D/selectorUtils.js +2 -0
- package/assets/esri/core/workers/chunks/0e64e20fedfe01a1985f.js +0 -1
- package/assets/esri/core/workers/chunks/0f674c625f24ac73e25a.js +0 -1
- package/assets/esri/core/workers/chunks/15351354afcbf840a23d.js +0 -29
- package/assets/esri/core/workers/chunks/1843a762f7051f61af43.js +0 -1
- package/assets/esri/core/workers/chunks/1d1f5578c7d8619f7a46.js +0 -1
- package/assets/esri/core/workers/chunks/2015f4def2ef201bdab8.js +0 -1
- package/assets/esri/core/workers/chunks/20c363a113dc068de9e0.js +0 -1
- package/assets/esri/core/workers/chunks/24d936d459c538187af6.js +0 -1
- package/assets/esri/core/workers/chunks/272c8ab189217240d05f.js +0 -1
- package/assets/esri/core/workers/chunks/2e121eac97ae72a8b49a.js +0 -1
- package/assets/esri/core/workers/chunks/327899182a4dace428eb.js +0 -1
- package/assets/esri/core/workers/chunks/32ca15d928d51b380068.js +0 -1
- package/assets/esri/core/workers/chunks/3e1a7e4c674057807e3a.js +0 -1
- package/assets/esri/core/workers/chunks/4e2baa60c5d5197b2271.js +0 -1
- package/assets/esri/core/workers/chunks/519c0b51b1ba42fb71d7.js +0 -1
- package/assets/esri/core/workers/chunks/57fa3c0e7892c2eef3ee.js +0 -261
- package/assets/esri/core/workers/chunks/68b615bbd27fadcfcb66.js +0 -1
- package/assets/esri/core/workers/chunks/69d740ab18510156f5d6.js +0 -1
- package/assets/esri/core/workers/chunks/8d21f3d6edbcd7b335d0.js +0 -1
- package/assets/esri/core/workers/chunks/9a97f6cda2f36941efae.js +0 -1
- package/assets/esri/core/workers/chunks/9ceeae787dc7c194d60e.js +0 -1
- package/assets/esri/core/workers/chunks/a90f7b1c6c69b6033b4c.js +0 -1
- package/assets/esri/core/workers/chunks/b32bdf5730953c2fb16b.js +0 -1
- package/assets/esri/core/workers/chunks/b5d23efa584c74955d5b.js +0 -1
- package/assets/esri/core/workers/chunks/b83f2bbd634f57a5e8f9.js +0 -1
- package/assets/esri/core/workers/chunks/bb8e9b8343b83dd1ba3c.js +0 -1
- package/assets/esri/core/workers/chunks/bef1990159c0e49e7d27.js +0 -1
- package/assets/esri/core/workers/chunks/bf287f0e2ecb4532dc00.js +0 -1
- package/assets/esri/core/workers/chunks/c5e36544b2d1792e4c5f.js +0 -1
- package/assets/esri/core/workers/chunks/cba3316910ff088f4d77.js +0 -1
- package/assets/esri/core/workers/chunks/de9573871f64c01e9f01.js +0 -1
- package/assets/esri/core/workers/chunks/e232459f0b00110e07ac.js +0 -1
- package/assets/esri/core/workers/chunks/ee6bb6cd16f99421c76b.js +0 -1
- package/assets/esri/core/workers/chunks/fd2ba6f76645ba503cbb.js +0 -1
- package/views/3d/analysis/Viewshed/ViewshedTool2.js +0 -2
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{markerTextureSize as e,markerSymbolSize as r,markerTipThicknessFactor as i}from"../views/3d/support/engineContent/marker.js";import{SliceDraw as
|
|
2
|
+
import{markerTextureSize as e,markerSymbolSize as r,markerTipThicknessFactor as i}from"../views/3d/support/engineContent/marker.js";import{SliceDraw as t}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{RibbonVertexPosition as o}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{OutputHighlight as a}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{MarkerSizing as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{positionOutsideClipSpace as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{ColorConversion as l}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{NoPerspectiveWrite as c,NoPerspectiveRead as p}from"../views/3d/webgl-engine/core/shaderLibrary/util/NoPerspective.glsl.js";import{addProjViewLocalOrigin as d,addViewNormal as v,addPixelRatio as m}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2BindUniform as h}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float4BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Float4BindUniform.js";import{Float4PassUniform as f}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatBindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/FloatBindUniform.js";import{glsl as w,If as y}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as b}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DPassUniform as x}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{alphaCutoff as S}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{outputColorHighlightOLID as z}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as P}from"../views/webgl/ShaderBuilder.js";function j(j){const L=new P,{space:C,anchor:V,hasTip:k,hasScreenSizePerspective:D}=j,M=2===C,$=1===C;L.attributes.add("position","vec3"),L.attributes.add(j.hasVVSize?"sizeFeatureAttribute":"size","float"),j.hasVVOpacity&&L.attributes.add("opacityFeatureAttribute","float"),L.attributes.add(j.hasVVColor?"colorFeatureAttribute":"color",j.hasVVColor?"float":"vec4"),L.vertex.inputs.add("position",()=>"position"),j.hasVVSize?L.vertex.inputs.add("sizeFeatureAttribute",()=>"sizeFeatureAttribute"):L.vertex.inputs.add("size",()=>"size"),j.hasVVOpacity&&L.vertex.inputs.add("opacityFeatureAttribute",()=>"opacityFeatureAttribute"),j.hasVVColor?L.vertex.inputs.add("colorFeatureAttribute",()=>"colorFeatureAttribute"):L.vertex.inputs.add("color",()=>"color"),L.include(o,j),L.include(s,j);const{vertex:F,fragment:W,varyings:A}=L;d(F,j),L.attributes.add("previousDelta","vec4"),L.attributes.add("uv0","vec2"),A.add("vColor","vec4"),A.add("vpos","vec3",{invariant:!0}),A.add("vUV","vec2"),A.add("vSize","float"),k&&A.add("vLineWidth","float"),F.uniforms.add(new h("nearFar",({camera:e})=>e.nearFar),new u("viewport",({camera:e})=>e.fullViewport)).code.add(w`vec4 projectAndScale(vec4 pos) {
|
|
3
3
|
vec4 posNdc = proj * pos;
|
|
4
4
|
posNdc.xy *= viewport.zw / posNdc.w;
|
|
5
5
|
return posNdc;
|
|
6
|
-
}`),
|
|
6
|
+
}`),F.code.add(w`void clip(vec4 pos, inout vec4 prev) {
|
|
7
7
|
float vnp = nearFar[0] * 0.99;
|
|
8
8
|
if (prev.z > -nearFar[0]) {
|
|
9
9
|
float interpolation = (-vnp - pos.z) / (prev.z - pos.z);
|
|
10
10
|
prev = mix(pos, prev, interpolation);
|
|
11
11
|
}
|
|
12
|
-
}`)
|
|
12
|
+
}`),M?(L.attributes.add("normal","vec3"),v(F),F.constants.add("tiltThreshold","float",.7),F.code.add(w`vec3 perpendicular(vec3 v) {
|
|
13
13
|
vec3 n = (viewNormal * vec4(normal.xyz, 1.0)).xyz;
|
|
14
14
|
vec3 n2 = cross(v, n);
|
|
15
15
|
vec3 forward = vec3(0.0, 0.0, 1.0);
|
|
16
16
|
float tiltDot = dot(forward, n);
|
|
17
17
|
return abs(tiltDot) < tiltThreshold ? n : n2;
|
|
18
|
-
}`)):
|
|
18
|
+
}`)):F.code.add(w`vec2 perpendicular(vec2 v) {
|
|
19
19
|
return vec2(v.y, -v.x);
|
|
20
|
-
}`);const
|
|
21
|
-
${
|
|
22
|
-
${
|
|
20
|
+
}`);const O=M?"vec3":"vec2";return F.code.add(w`
|
|
21
|
+
${O} normalizedSegment(${O} pos, ${O} prev) {
|
|
22
|
+
${O} segment = pos - prev;
|
|
23
23
|
float segmentLen = length(segment);
|
|
24
24
|
|
|
25
25
|
// normalize or zero if too short
|
|
26
|
-
return (segmentLen > 0.001) ? segment / segmentLen : ${
|
|
26
|
+
return (segmentLen > 0.001) ? segment / segmentLen : ${M?"vec3(0.0, 0.0, 0.0)":"vec2(0.0, 0.0)"};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
${
|
|
30
|
-
${
|
|
29
|
+
${O} displace(${O} pos, ${O} prev, float displacementLen) {
|
|
30
|
+
${O} segment = normalizedSegment(pos, prev);
|
|
31
31
|
|
|
32
|
-
${
|
|
33
|
-
${
|
|
32
|
+
${O} displacementDirU = perpendicular(segment);
|
|
33
|
+
${O} displacementDirV = segment;
|
|
34
34
|
|
|
35
|
-
${1===
|
|
35
|
+
${1===V?"pos -= 0.5 * displacementLen * displacementDirV;":""}
|
|
36
36
|
|
|
37
37
|
return pos + displacementLen * (uv0.x * displacementDirU + uv0.y * displacementDirV);
|
|
38
38
|
}
|
|
39
|
-
`)
|
|
39
|
+
`),$&&(F.uniforms.add(new b("inverseProjectionMatrix",({camera:e})=>e.inverseProjectionMatrix)),F.code.add(w`vec3 inverseProject(vec4 posScreen) {
|
|
40
40
|
posScreen.xy = (posScreen.xy / viewport.zw) * posScreen.w;
|
|
41
41
|
return (inverseProjectionMatrix * posScreen).xyz;
|
|
42
|
-
}`),
|
|
42
|
+
}`),F.code.add(w`bool rayIntersectPlane(vec3 rayDir, vec3 planeOrigin, vec3 planeNormal, out vec3 intersection) {
|
|
43
43
|
float cos = dot(rayDir, planeNormal);
|
|
44
44
|
float t = dot(planeOrigin, planeNormal) / cos;
|
|
45
45
|
intersection = t * rayDir;
|
|
46
46
|
return abs(cos) > 0.001 && t > 0.0;
|
|
47
|
-
}`),
|
|
47
|
+
}`),F.uniforms.add(new g("perScreenPixelRatio",({camera:e})=>e.perScreenPixelRatio)),F.code.add(w`
|
|
48
48
|
vec4 toFront(vec4 displacedPosScreen, vec3 posLeft, vec3 posRight, vec3 prev, float lineWidth) {
|
|
49
49
|
// Project displaced position back to camera space
|
|
50
50
|
vec3 displacedPos = inverseProject(displacedPosScreen);
|
|
@@ -54,7 +54,7 @@ return abs(cos) > 0.001 && t > 0.0;
|
|
|
54
54
|
vec3 planeNormal = normalize(cross(posLeft - posRight, posLeft - prev));
|
|
55
55
|
vec3 planeOrigin = posLeft;
|
|
56
56
|
|
|
57
|
-
${
|
|
57
|
+
${y(j.hasCap,"if(prev.z > posLeft.z) {\n vec2 diff = posLeft.xy - posRight.xy;\n planeOrigin.xy += perpendicular(diff) / 2.0;\n }")};
|
|
58
58
|
|
|
59
59
|
// Move the plane towards the camera by a margin dependent on the line width (approximated in world space). This tolerance corrects for the
|
|
60
60
|
// non-planarity in most cases, but sharp joins can place the prev vertices at arbitrary positions so markers can still clip.
|
|
@@ -73,26 +73,26 @@ return abs(cos) > 0.001 && t > 0.0;
|
|
|
73
73
|
displacedPos *= minDepth / length(displacedPos);
|
|
74
74
|
return vec4(displacedPos.xyz, 1.0);
|
|
75
75
|
}
|
|
76
|
-
`)),m(
|
|
76
|
+
`)),m(F),L.include(c),F.main.add(w`
|
|
77
77
|
// Check for special value of uv0.y which is used by the Renderer when graphics
|
|
78
78
|
// are removed before the VBO is recompacted. If this is the case, then we just
|
|
79
79
|
// project outside of clip space.
|
|
80
80
|
if (uv0.y == 0.0) {
|
|
81
81
|
// Project out of clip space
|
|
82
|
-
gl_Position = ${
|
|
82
|
+
gl_Position = ${n};
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
85
85
|
vec4 pos = view * vec4(position, 1.0);
|
|
86
86
|
vec4 prev = view * vec4(position + previousDelta.xyz * previousDelta.w, 1.0);
|
|
87
87
|
|
|
88
|
-
float lineWidth = getLineWidth(${
|
|
88
|
+
float lineWidth = getLineWidth(${y(D,"pos.xyz")});
|
|
89
89
|
float screenMarkerSize = getScreenMarkerSize(lineWidth);
|
|
90
90
|
|
|
91
91
|
clip(pos, prev);
|
|
92
92
|
|
|
93
|
-
${
|
|
93
|
+
${M?w`${y(j.hideOnShortSegments,w`
|
|
94
94
|
if (areWorldMarkersHidden(pos.xyz, prev.xyz)) {
|
|
95
|
-
gl_Position = ${
|
|
95
|
+
gl_Position = ${n};
|
|
96
96
|
return;
|
|
97
97
|
}`)}
|
|
98
98
|
pos.xyz = displace(pos.xyz, prev.xyz, getWorldMarkerSize(pos.xyz));
|
|
@@ -102,7 +102,7 @@ return abs(cos) > 0.001 && t > 0.0;
|
|
|
102
102
|
vec4 displacedPosScreen = posScreen;
|
|
103
103
|
|
|
104
104
|
displacedPosScreen.xy = displace(posScreen.xy, prevScreen.xy, screenMarkerSize);
|
|
105
|
-
${
|
|
105
|
+
${y($,w`
|
|
106
106
|
vec2 displacementDirU = perpendicular(normalizedSegment(posScreen.xy, prevScreen.xy));
|
|
107
107
|
|
|
108
108
|
// We need three points of the ribbon line in camera space to calculate the plane it lies in
|
|
@@ -117,8 +117,8 @@ return abs(cos) > 0.001 && t > 0.0;
|
|
|
117
117
|
|
|
118
118
|
// Convert texture coordinate into [0,1]
|
|
119
119
|
vUV = (uv0 + 1.0) / 2.0;
|
|
120
|
-
${
|
|
121
|
-
${
|
|
120
|
+
${y(!M,"vUV = noPerspectiveWrite(vUV, displacedPosScreen.w);")}
|
|
121
|
+
${y(k,"vLineWidth = noPerspectiveWrite(lineWidth, displacedPosScreen.w);")}
|
|
122
122
|
|
|
123
123
|
vSize = screenMarkerSize;
|
|
124
124
|
vColor = getColor();
|
|
@@ -127,13 +127,13 @@ return abs(cos) > 0.001 && t > 0.0;
|
|
|
127
127
|
vpos = pos.xyz;
|
|
128
128
|
|
|
129
129
|
gl_Position = displacedPosScreen;
|
|
130
|
-
}`),
|
|
130
|
+
}`),W.include(t,j),L.include(z,j),W.include(l),W.include(S),W.uniforms.add(new f("intrinsicColor",({color:e})=>e),new x("tex",({markerTexture:e})=>e)).constants.add("texelSize","float",1/e).code.add(w`float markerAlpha(vec2 samplePos) {
|
|
131
131
|
samplePos += vec2(0.5, -0.5) * texelSize;
|
|
132
132
|
float sdf = texture(tex, samplePos).r;
|
|
133
133
|
float pixelDistance = sdf * vSize;
|
|
134
134
|
pixelDistance -= 0.5;
|
|
135
135
|
return clamp(0.5 - pixelDistance, 0.0, 1.0);
|
|
136
|
-
}`),
|
|
136
|
+
}`),k&&(L.include(p),W.constants.add("relativeMarkerSize","float",r/e).constants.add("relativeTipLineWidth","float",i).code.add(w`
|
|
137
137
|
float tipAlpha(vec2 samplePos) {
|
|
138
138
|
// Convert coordinates s.t. they are in pixels and relative to the tip of an arrow marker
|
|
139
139
|
samplePos -= vec2(0.5, 0.5 + 0.5 * relativeMarkerSize);
|
|
@@ -142,18 +142,18 @@ return clamp(0.5 - pixelDistance, 0.0, 1.0);
|
|
|
142
142
|
float halfMarkerSize = 0.5 * relativeMarkerSize * vSize;
|
|
143
143
|
float halfTipLineWidth = 0.5 * max(1.0, relativeTipLineWidth * noPerspectiveRead(vLineWidth));
|
|
144
144
|
|
|
145
|
-
${
|
|
145
|
+
${y(M,"halfTipLineWidth *= fwidth(samplePos.y);")}
|
|
146
146
|
|
|
147
147
|
float distance = max(abs(samplePos.x) - halfMarkerSize, abs(samplePos.y) - halfTipLineWidth);
|
|
148
148
|
return clamp(0.5 - distance, 0.0, 1.0);
|
|
149
149
|
}
|
|
150
|
-
`)),L.include(a,j),L.include(p),
|
|
150
|
+
`)),L.include(a,j),L.include(p),W.main.add(w`
|
|
151
151
|
discardBySlice(vpos);
|
|
152
152
|
|
|
153
153
|
vec4 finalColor = intrinsicColor * vColor;
|
|
154
154
|
|
|
155
155
|
// Cancel out perspective correct interpolation if in screen space or draped
|
|
156
|
-
vec2 samplePos = ${
|
|
157
|
-
finalColor.a *= ${
|
|
156
|
+
vec2 samplePos = ${y(!M,"noPerspectiveRead(vUV)","vUV")};
|
|
157
|
+
finalColor.a *= ${k?"max(markerAlpha(samplePos), tipAlpha(samplePos))":"markerAlpha(samplePos)"};
|
|
158
158
|
if(finalColor.a < alphaCutoff) discard; // We also want to discard in the opaque color pass
|
|
159
159
|
outputColorHighlightOLID(applySlice(finalColor, vpos), finalColor.rgb);`),L}const L=Object.freeze(Object.defineProperty({__proto__:null,build:j},Symbol.toStringTag,{value:"Module"}));export{L,j as b};
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{SliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{
|
|
2
|
+
import{SliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{RibbonVertexPosition as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{LineStipple as i,computePixelSize as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{positionOutsideClipSpace as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{ColorConversion as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{NoPerspectiveWrite as l,NoPerspectiveRead as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/NoPerspective.glsl.js";import{addProjViewLocalOrigin as c,addPixelRatio as p}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 v}from"../views/3d/webgl-engine/core/shaderModules/Float4BindUniform.js";import{Float4PassUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatBindUniform as f}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,If as u}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as D}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{alphaCutoff as x}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{AnimatedLine as L}from"../views/3d/webgl-engine/shaders/AnimatedLine.glsl.js";import{outputColorHighlightOLID as b}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{getTextureBackedBufferModule as w}from"../views/3d/webgl-engine/shaders/RibbonLineTextureBuffer.glsl.js";import{ShaderBuilder as y}from"../views/webgl/ShaderBuilder.js";const C=1;function P(C){const P=new y,{attributes:z,varyings:F,vertex:j,fragment:A}=P,{applyMarkerOffset:W,draped:I,output:R,capType:V,stippleEnabled:T,falloffEnabled:O,roundJoins:E,wireframe:N,innerColorEnabled:J,hasAnimation:_,hasScreenSizePerspective:M,worldSizedImagePattern:$}=C,U=w(C).createBuilder(P,C);j.inputs.add("position",()=>U.getTextureAttribute("position")),C.hasVVSize?j.inputs.add("sizeFeatureAttribute",()=>U.getTextureAttribute("sizeFeatureAttribute")):j.inputs.add("size",()=>U.getTextureAttribute("size")),C.hasVVOpacity&&j.inputs.add("opacityFeatureAttribute",()=>U.getTextureAttribute("opacityFeatureAttribute")),C.hasVVColor?j.inputs.add("colorFeatureAttribute",()=>U.getTextureAttribute("colorFeatureAttribute")):j.inputs.add("color",()=>U.getTextureAttribute("color")),A.include(o),P.include(t,C),P.include(i,C);const B={animation:C.animation,hasAnimation:C.hasAnimation,timeStampsExpr:U.getTextureAttribute("timeStamps")};P.include(L,B),11===R?(P.varyings.add("objectAndLayerIdColorVarying","vec4"),j.code.add(S`
|
|
3
|
+
vec4 getOlidColor() {
|
|
4
|
+
return ${U.getTextureAttribute("olidColor")};
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
void forwardObjectAndLayerIdColor() {
|
|
8
|
+
objectAndLayerIdColorVarying = getOlidColor();
|
|
9
|
+
}
|
|
10
|
+
`),A.code.add(S`void outputObjectAndLayerIdColor() {
|
|
11
|
+
fragColor = objectAndLayerIdColorVarying;
|
|
12
|
+
}`)):(j.code.add(S`void forwardObjectAndLayerIdColor() {}`),A.code.add(S`void outputObjectAndLayerIdColor() {}`));const H=W&&!I;H&&(j.uniforms.add(new h("markerScale",e=>e.markerScale)),P.include(r,{space:2,hasScreenSizePerspective:M})),c(j,C),j.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 v("viewport",e=>e.camera.fullViewport)),j.constants.add("LARGE_HALF_FLOAT","float",65500),j.constants.add("EPS","float",.001),j.constants.add("NUM_JOIN_SUBDIVISIONS","float",C.numJoinSubdivisions),z.add("textureElementIndex","uint"),z.add("lineParameters","vec2"),F.add("vColor","vec4"),F.add("vpos","vec3",{invariant:!0}),F.add("vLineDistance","float"),F.add("vLineWidth","float"),T||(F.add("vIsInsideJoin","int"),F.add("vStretchFactor","float"),F.add("vJoinCenterLineSDFs","vec2"),F.add("vSubdivisionFactor","float"));const k=T;k&&F.add("vLineSizeInv","float");const G=2===V,X=T&&G,Y=O||X;Y&&F.add("vLineDistanceNorm","float"),G&&(F.add("vSegmentSDF","float"),F.add("vReverseSegmentSDF","float")),j.code.add(S`vec3 perpendicular(vec3 v) {
|
|
3
13
|
return vec3(v.y, -v.x, 0.0);
|
|
4
14
|
}
|
|
5
15
|
float interp(float ncp, vec4 a, vec4 b) {
|
|
@@ -10,12 +20,12 @@ float s = sin(a);
|
|
|
10
20
|
float c = cos(a);
|
|
11
21
|
mat2 m = mat2(c, -s, s, c);
|
|
12
22
|
return vec3(m * v.xy, v.z);
|
|
13
|
-
}`),
|
|
23
|
+
}`),j.code.add(S`vec4 projectAndScale(vec4 pos) {
|
|
14
24
|
vec4 posNdc = proj * pos;
|
|
15
25
|
posNdc.xy *= viewport.zw / posNdc.w;
|
|
16
26
|
posNdc.z /= posNdc.w;
|
|
17
27
|
return posNdc;
|
|
18
|
-
}`),
|
|
28
|
+
}`),j.code.add(S`void clip(
|
|
19
29
|
inout vec4 pos,
|
|
20
30
|
inout vec4 prev,
|
|
21
31
|
inout vec4 next,
|
|
@@ -46,20 +56,21 @@ if (next.z > -nearFar[0]) {
|
|
|
46
56
|
next = mix(next, pos, interp(vnp, next, pos));
|
|
47
57
|
}
|
|
48
58
|
}
|
|
49
|
-
}`),
|
|
50
|
-
vec3 position = ${
|
|
59
|
+
}`),p(j),j.constants.add("aaWidth","float",T?0:1),j.main.add(S`
|
|
60
|
+
vec3 position = ${U.getTextureAttribute("position")};
|
|
61
|
+
float u0 = ${U.getTextureAttribute("u0")};
|
|
51
62
|
|
|
52
63
|
// unpack values from vertex type
|
|
53
64
|
bool isStartVertex = abs(abs(lineParameters.y) - 3.0) == 1.0;
|
|
54
|
-
vec3 prevPosition = ${
|
|
55
|
-
vec3 nextPosition = ${
|
|
65
|
+
vec3 prevPosition = ${U.getTextureAttribute("position",-1)};
|
|
66
|
+
vec3 nextPosition = ${U.getTextureAttribute("position",1)};
|
|
56
67
|
|
|
57
68
|
float coverage = 1.0;
|
|
58
69
|
|
|
59
70
|
// Check for special value of lineParameters.y which is used by the Renderer when graphics are removed before the
|
|
60
71
|
// VBO is recompacted. If this is the case, then we just project outside of clip space.
|
|
61
72
|
if (lineParameters.y == 0.0) {
|
|
62
|
-
gl_Position = ${
|
|
73
|
+
gl_Position = ${a};
|
|
63
74
|
}
|
|
64
75
|
else {
|
|
65
76
|
vec4 pos = view * vec4(position, 1.0);
|
|
@@ -67,11 +78,11 @@ next = mix(next, pos, interp(vnp, next, pos));
|
|
|
67
78
|
vec4 next = view * vec4(nextPosition, 1.0);
|
|
68
79
|
|
|
69
80
|
bool isJoin = abs(lineParameters.y) < 3.0;
|
|
70
|
-
`),H&&
|
|
81
|
+
`),H&&j.main.add(S`vec4 other = isStartVertex ? next : prev;
|
|
71
82
|
bool markersHidden = areWorldMarkersHidden(pos.xyz, other.xyz);
|
|
72
83
|
if (!isJoin && !markersHidden) {
|
|
73
84
|
pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
74
|
-
}`),
|
|
85
|
+
}`),P.include(l),j.main.add(S`
|
|
75
86
|
clip(pos, prev, next, isStartVertex);
|
|
76
87
|
|
|
77
88
|
vec3 clippedPos = pos.xyz;
|
|
@@ -87,18 +98,18 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
|
87
98
|
float leftLen = length(left);
|
|
88
99
|
float rightLen = length(right);
|
|
89
100
|
|
|
90
|
-
float lineSize = getSize(${u(
|
|
91
|
-
${u(
|
|
92
|
-
${u(
|
|
101
|
+
float lineSize = getSize(${u(M,"clippedPos")});
|
|
102
|
+
${u(T&&M,"float patternLineSize = getSize(clippedCenter);")}
|
|
103
|
+
${u(T&&!M,"float patternLineSize = lineSize;")}
|
|
93
104
|
|
|
94
|
-
${u($,
|
|
105
|
+
${u($,S`
|
|
95
106
|
lineSize += aaWidth;
|
|
96
107
|
float lineWidth = lineSize * pixelRatio * worldToScreenRatio;
|
|
97
108
|
if (lineWidth < 1.0) {
|
|
98
109
|
coverage = lineWidth;
|
|
99
110
|
lineWidth = 1.0;
|
|
100
111
|
}
|
|
101
|
-
`,
|
|
112
|
+
`,S`
|
|
102
113
|
if (lineSize < 1.0) {
|
|
103
114
|
coverage = lineSize; // convert sub-pixel coverage to alpha
|
|
104
115
|
lineSize = 1.0;
|
|
@@ -109,23 +120,23 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
|
109
120
|
`)}
|
|
110
121
|
|
|
111
122
|
vLineWidth = noPerspectiveWrite(lineWidth, pos.w);
|
|
112
|
-
${k?
|
|
113
|
-
`);(
|
|
123
|
+
${k?S`vLineSizeInv = noPerspectiveWrite(1.0 / lineSize, pos.w);`:""}
|
|
124
|
+
`);(T||G)&&j.main.add(S`
|
|
114
125
|
float isEndVertex = float(!isStartVertex);
|
|
115
126
|
vec3 segmentOrigin = mix(pos.xyz, prev.xyz, isEndVertex);
|
|
116
127
|
vec3 segment = mix(right, left, isEndVertex);
|
|
117
|
-
${G?
|
|
118
|
-
`),
|
|
128
|
+
${G?S`vec3 segmentEnd = mix(next.xyz, pos.xyz, isEndVertex);`:""}
|
|
129
|
+
`),j.main.add(S`left = (leftLen > EPS) ? left/leftLen : vec3(0.0, 0.0, 0.0);
|
|
119
130
|
right = (rightLen > EPS) ? right/rightLen : vec3(0.0, 0.0, 0.0);
|
|
120
131
|
vec3 segmentDirection = isStartVertex ? right : left;
|
|
121
132
|
vec3 capDisplacementDir = vec3(0.0, 0.0, 0.0);
|
|
122
133
|
vec3 joinDisplacementDir = vec3(0.0, 0.0, 0.0);
|
|
123
134
|
float displacementLen = lineWidth;
|
|
124
135
|
float miterDisplacementLen = lineWidth;
|
|
125
|
-
float innerDisplacementLen = lineWidth;`),
|
|
136
|
+
float innerDisplacementLen = lineWidth;`),T||j.main.add(S`vIsInsideJoin = 0;
|
|
126
137
|
vStretchFactor = 1.0;
|
|
127
138
|
vSubdivisionFactor = 0.0;
|
|
128
|
-
vJoinCenterLineSDFs = vec2(LARGE_HALF_FLOAT);`),
|
|
139
|
+
vJoinCenterLineSDFs = vec2(LARGE_HALF_FLOAT);`),j.main.add(S`float subdivisionFactor = 0.0;
|
|
129
140
|
bool isOutside = false;
|
|
130
141
|
if (isJoin) {
|
|
131
142
|
isOutside = (left.x * right.y - left.y * right.x) * lineParameters.y > 0.0;
|
|
@@ -140,7 +151,7 @@ if (!isOutside) {
|
|
|
140
151
|
displacementLen = innerDisplacementLen;
|
|
141
152
|
}
|
|
142
153
|
}
|
|
143
|
-
subdivisionFactor = lineParameters.x;`),
|
|
154
|
+
subdivisionFactor = lineParameters.x;`),T||j.main.add(S`if(subdivisionFactor > 0.0) {
|
|
144
155
|
vIsInsideJoin = 1;
|
|
145
156
|
}
|
|
146
157
|
vSubdivisionFactor = isOutside ? subdivisionFactor : 0.5;
|
|
@@ -158,23 +169,23 @@ float bevelTriangleHeight = innerDisplacementLen + lineWidth * cos(theta * 0.5);
|
|
|
158
169
|
float triangleHeight = NUM_JOIN_SUBDIVISIONS > 0.0 ? subdividedTriangleHeight : bevelTriangleHeight;
|
|
159
170
|
vStretchFactor = noPerspectiveWrite(max(triangleHeight / (2.0 * lineWidth), 1.0), pos.w);
|
|
160
171
|
}
|
|
161
|
-
}`),
|
|
172
|
+
}`),j.main.add(S`if (isOutside && (displacementLen > miterLimit * lineWidth)) {`),E?j.main.add(S`
|
|
162
173
|
vec3 startDir = leftLen < EPS ? right : left;
|
|
163
174
|
startDir = perpendicular(startDir);
|
|
164
175
|
|
|
165
176
|
vec3 endDir = rightLen < EPS ? left : right;
|
|
166
177
|
endDir = perpendicular(endDir);
|
|
167
178
|
|
|
168
|
-
float factor = ${
|
|
179
|
+
float factor = ${T?S`min(1.0, subdivisionFactor * ((NUM_JOIN_SUBDIVISIONS + 1.0) / NUM_JOIN_SUBDIVISIONS))`:S`subdivisionFactor`};
|
|
169
180
|
|
|
170
181
|
float rotationAngle = acos(clamp(dot(startDir.xy, endDir.xy), -1.0, 1.0));
|
|
171
182
|
joinDisplacementDir = rotateZ(startDir, -sign(lineParameters.y) * factor * rotationAngle);
|
|
172
|
-
`):
|
|
183
|
+
`):j.main.add(S`
|
|
173
184
|
vec3 startDir = perpendicular(leftLen < EPS ? right : left);
|
|
174
185
|
vec3 endDir = perpendicular(rightLen < EPS ? left : right);
|
|
175
186
|
|
|
176
|
-
${u(
|
|
177
|
-
`);const Z=0!==V;return
|
|
187
|
+
${u(T,S`joinDisplacementDir = (isStartVertex || subdivisionFactor > 0.0) ? endDir : startDir;`,S`joinDisplacementDir = mix(startDir, endDir, subdivisionFactor);`)}
|
|
188
|
+
`);const Z=0!==V;return j.main.add(S`
|
|
178
189
|
displacementLen = lineWidth;
|
|
179
190
|
}
|
|
180
191
|
} else {
|
|
@@ -182,9 +193,9 @@ vStretchFactor = noPerspectiveWrite(max(triangleHeight / (2.0 * lineWidth), 1.0)
|
|
|
182
193
|
joinDisplacementDir = isStartVertex ? right : left;
|
|
183
194
|
joinDisplacementDir = perpendicular(joinDisplacementDir);
|
|
184
195
|
|
|
185
|
-
${Z?
|
|
196
|
+
${Z?S`capDisplacementDir = vec3((isStartVertex ? -right : left).xy, 0.0);`:""}
|
|
186
197
|
}
|
|
187
|
-
`),
|
|
198
|
+
`),j.main.add(S`
|
|
188
199
|
// Displacement (in pixels) caused by join/or cap
|
|
189
200
|
vec2 dposXY = (joinDisplacementDir.xy * sign(lineParameters.y) + capDisplacementDir.xy) * displacementLen;
|
|
190
201
|
|
|
@@ -200,10 +211,10 @@ vStretchFactor = noPerspectiveWrite(max(triangleHeight / (2.0 * lineWidth), 1.0)
|
|
|
200
211
|
float lineDistNorm = noPerspectiveWrite(sign(lineParameters.y), pos.w);
|
|
201
212
|
|
|
202
213
|
vLineDistance = lineWidth * lineDistNorm;
|
|
203
|
-
${Y?
|
|
214
|
+
${Y?S`vLineDistanceNorm = lineDistNorm;`:""}
|
|
204
215
|
|
|
205
216
|
pos.xyz += dpos;
|
|
206
|
-
`),
|
|
217
|
+
`),T||j.main.add(S`if (isJoin) {
|
|
207
218
|
vec2 joinCenterToVertex = dposXY;
|
|
208
219
|
vec2 leftCenterlineDir = left.xy;
|
|
209
220
|
vec2 rightCenterlineDir = right.xy;
|
|
@@ -218,19 +229,19 @@ dot(vec2(leftCenterlineDir.y, -leftCenterlineDir.x), joinCenterToVertex)
|
|
|
218
229
|
),
|
|
219
230
|
pos.w
|
|
220
231
|
);
|
|
221
|
-
}`),G&&
|
|
232
|
+
}`),G&&j.main.add(S`vec2 segmentDir = normalize(segment.xy);
|
|
222
233
|
vSegmentSDF = noPerspectiveWrite((isJoin && isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentOrigin.xy, segmentDir)), pos.w);
|
|
223
|
-
vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),
|
|
224
|
-
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),
|
|
234
|
+
vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),T&&(I?j.uniforms.add(new f("worldToScreenRatio",e=>1/e.screenToPCSRatio)):j.main.add(S`vec3 segmentCenter = mix((nextPosition + position) * 0.5, (position + prevPosition) * 0.5, isEndVertex);
|
|
235
|
+
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),j.main.add(S`float segmentLengthScreenDouble = length(segment.xy);
|
|
225
236
|
float segmentLengthScreen = segmentLengthScreenDouble * 0.5;
|
|
226
237
|
float discreteWorldToScreenRatio = discretizeWorldToScreenRatio(worldToScreenRatio);
|
|
227
238
|
float segmentLengthRender = length(mix(nextPosition - position, position - prevPosition, isEndVertex));
|
|
228
|
-
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),I?
|
|
229
|
-
float startPseudoScreen = u0 * discreteWorldToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):
|
|
230
|
-
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),
|
|
239
|
+
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),I?j.main.add(S`float segmentLengthPseudoScreen = segmentLengthScreen / pixelRatio * discreteWorldToScreenRatio / worldToScreenRatio;
|
|
240
|
+
float startPseudoScreen = u0 * discreteWorldToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):j.main.add(S`float startPseudoScreen = mix(u0, u0 - segmentLengthRender, isEndVertex) * discreteWorldToScreenRatio;
|
|
241
|
+
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),j.uniforms.add(new h("stipplePatternPixelSize",e=>n(e))),j.main.add(S`
|
|
231
242
|
float patternLength = patternLineSize * stipplePatternPixelSize;
|
|
232
243
|
|
|
233
|
-
${u($,
|
|
244
|
+
${u($,S`
|
|
234
245
|
float uu = mix(u0, u0 - segmentLengthRender, isEndVertex);
|
|
235
246
|
vStippleDistanceLimits = vec2(uu, uu + segmentLengthRender);
|
|
236
247
|
vStipplePatternStretch = 1.0;
|
|
@@ -238,7 +249,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
238
249
|
// The v-coordinate used in case of an image pattern.
|
|
239
250
|
bool isLeft = sign(lineParameters.y) < 0.0;
|
|
240
251
|
vStippleV = isLeft ? 0.0 : 1.0;
|
|
241
|
-
`,
|
|
252
|
+
`,S`
|
|
242
253
|
// Compute the coordinates at both start and end of the line segment, because we need both to clamp to in the
|
|
243
254
|
// fragment shader
|
|
244
255
|
vStippleDistanceLimits = computeStippleDistanceLimits(startPseudoScreen, segmentLengthPseudoScreen, segmentLengthScreen, patternLength);
|
|
@@ -269,7 +280,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
269
280
|
isStartVertex ?
|
|
270
281
|
vec2(-1e34, vStippleDistanceLimits.y) :
|
|
271
282
|
vec2(vStippleDistanceLimits.x, 1e34);
|
|
272
|
-
`)),
|
|
283
|
+
`)),j.main.add(S`
|
|
273
284
|
// Convert back into NDC
|
|
274
285
|
pos.xy = (pos.xy / viewport.zw) * pos.w;
|
|
275
286
|
pos.z = pos.z * pos.w;
|
|
@@ -277,35 +288,35 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
277
288
|
vColor = getColor();
|
|
278
289
|
vColor.a = noPerspectiveWrite(vColor.a * coverage, pos.w);
|
|
279
290
|
|
|
280
|
-
${
|
|
291
|
+
${N&&!I?"pos.z -= EPS * pos.w;":""}
|
|
281
292
|
|
|
282
293
|
// transform final position to camera space for slicing
|
|
283
294
|
vpos = (inverseProjectionMatrix * pos).xyz;
|
|
284
295
|
gl_Position = pos;
|
|
285
296
|
forwardObjectAndLayerIdColor();
|
|
286
|
-
}`),
|
|
297
|
+
}`),P.fragment.include(e,C),P.include(b,C),A.include(s),A.main.add(S`discardBySlice(vpos);`),P.include(d),A.include(x),A.main.add(S`
|
|
287
298
|
float lineWidth = noPerspectiveRead(vLineWidth);
|
|
288
299
|
float lineDistance = noPerspectiveRead(vLineDistance);
|
|
289
|
-
${u(Y,
|
|
290
|
-
`),
|
|
300
|
+
${u(Y,S`float lineDistanceNorm = noPerspectiveRead(vLineDistanceNorm);`)}
|
|
301
|
+
`),N?A.main.add(S`vec4 finalColor = vec4(1.0, 0.0, 1.0, 1.0);`):(G&&A.main.add(S`float sdf = noPerspectiveRead(min(vSegmentSDF, vReverseSegmentSDF));
|
|
291
302
|
vec2 fragmentPosition = vec2(min(sdf, 0.0), lineDistance);
|
|
292
303
|
float fragmentRadius = length(fragmentPosition);
|
|
293
304
|
float fragmentCapSDF = (fragmentRadius - lineWidth) * 0.5;
|
|
294
305
|
float capCoverage = clamp(0.5 - fragmentCapSDF, 0.0, 1.0);
|
|
295
306
|
if (capCoverage < alphaCutoff) {
|
|
296
307
|
discard;
|
|
297
|
-
}`),X?
|
|
308
|
+
}`),X?A.main.add(S`vec2 stipplePosition = vec2(
|
|
298
309
|
min(getStippleSDF() * 2.0 - 1.0, 0.0),
|
|
299
310
|
lineDistanceNorm
|
|
300
311
|
);
|
|
301
312
|
float stippleRadius = length(stipplePosition * lineWidth);
|
|
302
313
|
float stippleCapSDF = (stippleRadius - lineWidth) * 0.5;
|
|
303
314
|
float stippleCoverage = clamp(0.5 - stippleCapSDF, 0.0, 1.0);
|
|
304
|
-
float stippleAlpha = step(alphaCutoff, stippleCoverage);`):
|
|
305
|
-
color.a = noPerspectiveRead(color.a);`),
|
|
315
|
+
float stippleAlpha = step(alphaCutoff, stippleCoverage);`):A.main.add(S`float stippleAlpha = getStippleAlpha(lineWidth);`),11!==R&&A.main.add(S`discardByStippleAlpha(stippleAlpha, alphaCutoff);`),P.include(d),A.uniforms.add(new g("intrinsicColor",e=>e.color)).main.add(S`vec4 color = intrinsicColor * vColor;
|
|
316
|
+
color.a = noPerspectiveRead(color.a);`),J&&A.uniforms.add(new g("innerColor",e=>e.innerColor??e.color),new h("innerWidth",(e,t)=>e.innerWidth*t.camera.pixelRatio)).main.add(S`float distToInner = abs(lineDistance) - innerWidth;
|
|
306
317
|
float innerAA = clamp(0.5 - distToInner, 0.0, 1.0);
|
|
307
318
|
float innerAlpha = innerColor.a + color.a * (1.0 - innerColor.a);
|
|
308
|
-
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),
|
|
319
|
+
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),A.main.add(S`vec4 finalColor = blendStipple(color, stippleAlpha);`),O&&(A.uniforms.add(new h("falloff",e=>e.falloff)),A.main.add(S`finalColor.a *= pow(max(0.0, 1.0 - abs(lineDistanceNorm)), falloff);`)),T||A.main.add(S`float stretchFactor = vIsInsideJoin == 1 ? noPerspectiveRead(vStretchFactor) : 1.0;
|
|
309
320
|
float featherWidth = 2.0;
|
|
310
321
|
float featherStartDistance = max(lineWidth - featherWidth / stretchFactor, 0.0);
|
|
311
322
|
float straightFeatherStartDistance = max(lineWidth - featherWidth, 0.0);
|
|
@@ -315,4 +326,4 @@ vec2 joinCenterSDFs = noPerspectiveRead(vJoinCenterLineSDFs);
|
|
|
315
326
|
float joinCenterDistance = abs(vSubdivisionFactor > 0.5 ? joinCenterSDFs.x : joinCenterSDFs.y);
|
|
316
327
|
float straightFeather = (joinCenterDistance - straightFeatherStartDistance) / (lineWidth - straightFeatherStartDistance);
|
|
317
328
|
feather = vIsInsideJoin == 1 ? max(feather, straightFeather) : feather;
|
|
318
|
-
finalColor.a *= 1.0 - clamp(feather, 0.0, 1.0);`),
|
|
329
|
+
finalColor.a *= 1.0 - clamp(feather, 0.0, 1.0);`),_&&A.main.add("finalColor = animate(finalColor);")),A.main.add(S`outputColorHighlightOLID(applySlice(finalColor, vpos), finalColor.rgb);`),P}const z=Object.freeze(Object.defineProperty({__proto__:null,build:P,ribbonlineNumRoundJoinSubdivisions:C},Symbol.toStringTag,{value:"Module"}));export{z as R,P as b,C as r};
|