/** WebGPU vertex and fragment shaders for dependency-arrow markers. */ declare const _default: "\nstruct GeometryLayerUniforms {\n sizeScale: f32,\n sizeUnits: i32,\n interpolationMode: i32,\n markerAnchor: i32,\n};\n\n@group(0) @binding(auto) var geometryLayer: GeometryLayerUniforms;\n\nstruct GeometryLayerAttributes {\n @location(0) positions: vec2,\n @location(1) instanceSourcePositions: vec3,\n @location(2) instanceTargetPositions: vec3,\n @location(3) instanceRatios: f32,\n @location(4) instanceArcHeights: f32,\n @location(5) instanceSizes: vec2,\n @location(6) instanceColors: vec4,\n @location(7) instancePickingColors: vec4,\n};\n\nstruct GeometryLayerVaryings {\n @builtin(position) position: vec4,\n @location(0) color: vec4,\n @location(1) markerPosition: vec2,\n @location(2) @interpolate(flat) pixelSize: vec2,\n @location(3) @interpolate(flat) pickingColor: vec3,\n};\n\nfn geometry_layer_paraboloid(\n distance: f32,\n sourceZ: f32,\n targetZ: f32,\n ratio: f32,\n arcHeight: f32\n) -> f32 {\n let deltaZ = targetZ - sourceZ;\n let height = distance * arcHeight;\n if (height == 0.0) {\n return mix(sourceZ, targetZ, ratio);\n }\n let unitZ = deltaZ / height;\n let descending = deltaZ <= 0.0;\n let startZ = select(sourceZ, targetZ, descending);\n let arcRatio = select(ratio, 1.0 - ratio, descending);\n return sqrt(max(arcRatio * (unitZ * unitZ + 1.0 - arcRatio), 0.0)) * height + startZ;\n}\n\nfn geometry_layer_interpolate(\n source: vec3,\n destination: vec3,\n ratio: f32,\n arcHeight: f32,\n arcTilt: f32\n) -> vec3 {\n if (geometryLayer.interpolationMode != 1) {\n return mix(source, destination, ratio);\n }\n\n let distance = length(source.xy - destination.xy);\n let height = geometry_layer_paraboloid(distance, source.z, destination.z, ratio, arcHeight);\n let tiltAngle = radians(arcTilt);\n let delta = destination.xy - source.xy;\n let direction = select(vec2(1.0, 0.0), normalize(delta), length(delta) > 0.0);\n let tilt = vec2(-direction.y, direction.x) * height * sin(tiltAngle);\n return vec3(mix(source.xy, destination.xy, ratio) + tilt, height * cos(tiltAngle));\n}\n\n@vertex\nfn vertexMain(attributes: GeometryLayerAttributes) -> GeometryLayerVaryings {\n geometry.worldPosition = attributes.instanceSourcePositions;\n geometry.worldPositionAlt = attributes.instanceTargetPositions;\n geometry.pickingColor = attributes.instancePickingColors.rgb;\n\n let source = project_position_vec3_f64(\n attributes.instanceSourcePositions,\n vec3(0.0)\n );\n let destination = project_position_vec3_f64(\n attributes.instanceTargetPositions,\n vec3(0.0)\n );\n let current = geometry_layer_interpolate(\n source,\n destination,\n attributes.instanceRatios,\n attributes.instanceArcHeights,\n 0.0\n );\n let adjacentRatio = select(\n attributes.instanceRatios - 0.01,\n attributes.instanceRatios + 0.01,\n attributes.instanceRatios < 0.01\n );\n let adjacent = geometry_layer_interpolate(\n source,\n destination,\n adjacentRatio,\n attributes.instanceArcHeights,\n 0.0\n );\n let normal = select(current.xy - adjacent.xy, adjacent.xy - current.xy, attributes.instanceRatios < 0.01);\n let markerPosition = select(\n vec2((attributes.positions.x - 1.0) * 0.5, attributes.positions.y * 0.5),\n attributes.positions * 0.5,\n geometryLayer.markerAnchor == 1\n );\n let scaledSize = attributes.instanceSizes * geometryLayer.sizeScale;\n let unrotatedOffset = markerPosition * scaledSize;\n let angle = atan2(normal.y, normal.x);\n let cosine = cos(angle);\n let sine = sin(angle);\n let rotatedOffset = vec2(\n unrotatedOffset.x * cosine - unrotatedOffset.y * sine,\n unrotatedOffset.x * sine + unrotatedOffset.y * cosine\n );\n let offset = select(\n rotatedOffset,\n project_pixel_size_vec2(rotatedOffset),\n geometryLayer.sizeUnits == UNIT_PIXELS\n );\n geometry.position = vec4(current + vec3(offset, 0.0), 1.0);\n\n var varyings: GeometryLayerVaryings;\n varyings.position = project_common_position_to_clipspace(geometry.position);\n varyings.markerPosition = (attributes.positions + vec2(1.0)) * 0.5;\n varyings.pixelSize = select(\n project_size_vec2(scaledSize),\n scaledSize,\n geometryLayer.sizeUnits == UNIT_PIXELS\n );\n varyings.color = vec4(attributes.instanceColors.rgb, attributes.instanceColors.a * layer.opacity);\n varyings.pickingColor = attributes.instancePickingColors.rgb;\n return varyings;\n}\n\n@fragment\nfn fragmentMain(varyings: GeometryLayerVaryings) -> @location(0) vec4 {\n let width = max(varyings.pixelSize.x, 1.0);\n let profile = 1.0 - abs(1.0 - varyings.markerPosition.y * 2.0);\n let signedDistance = (profile - varyings.markerPosition.x) * width;\n let edgeRadius = fwidth(signedDistance);\n let mask = smoothstep(-edgeRadius, edgeRadius, signedDistance);\n if (mask == 0.0) {\n discard;\n }\n\n if (picking.isActive > 0.5) {\n if (!picking_isColorValid(varyings.pickingColor)) {\n discard;\n }\n return vec4(picking_normalizeColor(varyings.pickingColor), 1.0);\n }\n\n var fragColor = vec4(varyings.color.rgb, varyings.color.a * mask);\n if (picking.isHighlightActive > 0.5) {\n let highlightedColor = picking_normalizeColor(picking.highlightedObjectColor);\n let objectColor = picking_normalizeColor(varyings.pickingColor);\n if (picking_isColorZero(abs(objectColor - highlightedColor))) {\n let highlightAlpha = picking.highlightColor.a;\n let blendedAlpha = highlightAlpha + fragColor.a * (1.0 - highlightAlpha);\n if (blendedAlpha > 0.0) {\n fragColor = vec4(\n mix(fragColor.rgb, picking.highlightColor.rgb, highlightAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n }\n }\n return deckgl_premultiplied_alpha(fragColor);\n}\n"; export default _default; //# sourceMappingURL=geometry-layer.wgsl.d.ts.map