@deck.gl-community/layers 9.2.8 → 9.3.0-beta.2
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/dist/index.cjs +384 -49
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/path-outline-layer/outline.d.ts +1 -1
- package/dist/path-outline-layer/outline.d.ts.map +1 -1
- package/dist/path-outline-layer/outline.js +2 -4
- package/dist/path-outline-layer/outline.js.map +1 -1
- package/dist/path-outline-layer/path-outline-layer.d.ts +2 -6
- package/dist/path-outline-layer/path-outline-layer.d.ts.map +1 -1
- package/dist/path-outline-layer/path-outline-layer.js +77 -51
- package/dist/path-outline-layer/path-outline-layer.js.map +1 -1
- package/dist/skybox-layer/cubemap-utils.d.ts +15 -0
- package/dist/skybox-layer/cubemap-utils.d.ts.map +1 -0
- package/dist/skybox-layer/cubemap-utils.js +64 -0
- package/dist/skybox-layer/cubemap-utils.js.map +1 -0
- package/dist/skybox-layer/skybox-layer.d.ts +58 -0
- package/dist/skybox-layer/skybox-layer.d.ts.map +1 -0
- package/dist/skybox-layer/skybox-layer.js +248 -0
- package/dist/skybox-layer/skybox-layer.js.map +1 -0
- package/package.json +13 -11
- package/src/index.ts +3 -0
- package/src/path-outline-layer/outline.ts +2 -4
- package/src/path-outline-layer/path-outline-layer.ts +91 -58
- package/src/skybox-layer/cubemap-utils.ts +105 -0
- package/src/skybox-layer/skybox-layer.ts +344 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/path-outline-layer/path-outline-layer.ts", "../src/path-outline-layer/outline.ts", "../src/path-marker-layer/path-marker-layer.ts", "../src/path-marker-layer/arrow-2d-geometry.ts", "../src/path-marker-layer/create-path-markers.ts", "../src/path-marker-layer/polyline.ts"],
|
|
4
|
-
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {PathOutlineLayerProps} from './path-outline-layer/path-outline-layer';\nexport {PathOutlineLayer} from './path-outline-layer/path-outline-layer';\n\nexport type {PathMarkerLayerProps} from './path-marker-layer/path-marker-layer';\nexport {PathMarkerLayer} from './path-marker-layer/path-marker-layer';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PathLayerProps} from '@deck.gl/layers';\nimport {PathLayer} from '@deck.gl/layers';\nimport type {DefaultProps, LayerContext} from '@deck.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {Framebuffer} from '@luma.gl/core';\nimport type {RenderPipelineParameters} from '@luma.gl/core';\nimport {outline} from './outline';\n\n/**\n * Unit literal to shader unit number conversion.\n */\nexport const UNIT = {\n common: 0,\n meters: 1,\n pixels: 2\n};\n\n// TODO - this should be built into assembleShaders\nfunction injectShaderCode({source, code = ''}) {\n const INJECT_CODE = /}[^{}]*$/;\n return source.replace(INJECT_CODE, code.concat('\\n}\\n'));\n}\n\nconst VS_CODE = `\\\n outline_setUV(gl_Position);\n outline_setZLevel(instanceZLevel);\n`;\n\nconst FS_CODE = `\\\n fragColor = outline_filterColor(fragColor);\n`;\n\nconst OUTLINE_SHADOWMAP_PARAMETERS: RenderPipelineParameters = {\n blend: true,\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendColorOperation: 'max',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one',\n blendAlphaOperation: 'max',\n depthWriteEnabled: false,\n depthCompare: 'always'\n};\n\nconst OUTLINE_RENDER_PARAMETERS: RenderPipelineParameters = {\n blend: false,\n depthWriteEnabled: false,\n depthCompare: 'always'\n};\n\nexport type PathOutlineLayerProps<DataT> = PathLayerProps<DataT> & {\n dashJustified?: boolean;\n getDashArray?: [number, number] | ((d: DataT) => [number, number] | null);\n getZLevel?: (d: DataT, index: number) => number;\n};\n\nconst defaultProps: DefaultProps<PathOutlineLayerProps<any>> = {\n getZLevel: () => 0\n};\n\nexport class PathOutlineLayer<DataT = any, ExtraPropsT = Record<string, unknown>> extends PathLayer<\n DataT,\n ExtraPropsT & Required<PathOutlineLayerProps<DataT>>\n> {\n static layerName = 'PathOutlineLayer';\n static defaultProps = defaultProps;\n\n state: {\n model?: any;\n pathTesselator: any;\n outlineFramebuffer: Framebuffer;\n } = undefined!;\n\n // Override getShaders to inject the outline module\n getShaders() {\n const shaders = super.getShaders();\n return Object.assign({}, shaders, {\n modules: shaders.modules.concat([outline]),\n vs: injectShaderCode({source: shaders.vs, code: VS_CODE}),\n fs: injectShaderCode({source: shaders.fs, code: FS_CODE})\n });\n }\n\n // @ts-expect-error PathLayer is missing LayerContext arg\n initializeState(context: LayerContext) {\n super.initializeState();\n\n // Create an outline \"shadow\" map\n // TODO - we should create a single outlineMap for all layers\n const outlineFramebuffer = context.device.createFramebuffer({\n colorAttachments: ['rgba8unorm']\n });\n\n this.setState({\n outlineFramebuffer\n });\n\n // Create an attribute manager\n // @ts-expect-error check whether this.getAttributeManager works here\n this.state.attributeManager.addInstanced({\n instanceZLevel: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getZLevel'\n }\n });\n }\n\n // Override draw to add render module\n draw({moduleParameters = {}, parameters, uniforms, context}) {\n // Need to calculate same uniforms as base layer\n const {\n jointRounded,\n capRounded,\n billboard,\n miterLimit,\n widthUnits,\n widthScale,\n widthMinPixels,\n widthMaxPixels\n } = this.props;\n\n uniforms = Object.assign({}, uniforms, {\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n billboard,\n widthUnits: UNIT[widthUnits],\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels\n });\n\n // Render the outline shadowmap (based on segment z orders)\n const {outlineFramebuffer} = this.state;\n\n if (context?.viewport) {\n const viewportWidth = Math.max(1, Math.ceil(context.viewport.width));\n const viewportHeight = Math.max(1, Math.ceil(context.viewport.height));\n\n outlineFramebuffer.resize({width: viewportWidth, height: viewportHeight});\n } else {\n outlineFramebuffer.resize();\n }\n\n const shadowmapTexture = outlineFramebuffer.colorAttachments[0]?.texture;\n\n if (!shadowmapTexture) {\n return;\n }\n // TODO(v9): resize, see 'sf' example.\n // outlineFramebuffer.resize();\n // TODO(v9) clear FBO\n // outlineFramebuffer.clear({ color: true, depth: true, stencil: true });\n\n this.state.model.updateModuleSettings({\n outlineEnabled: true,\n outlineRenderShadowmap: true,\n outlineShadowmap: shadowmapTexture\n });\n\n this.state.model.draw({\n uniforms: Object.assign({}, uniforms, {\n jointType: 0,\n widthScale: this.props.widthScale * 1.3\n }),\n parameters: OUTLINE_SHADOWMAP_PARAMETERS,\n framebuffer: outlineFramebuffer\n });\n\n // Now use the outline shadowmap to render the lines (with outlines)\n this.state.model.updateModuleSettings({\n outlineEnabled: true,\n outlineRenderShadowmap: false,\n outlineShadowmap: shadowmapTexture\n });\n this.state.model.draw({\n uniforms: Object.assign({}, uniforms, {\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n widthScale: this.props.widthScale\n }),\n parameters: OUTLINE_RENDER_PARAMETERS\n });\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\n/* eslint-disable camelcase */\nconst INITIAL_STATE: Record<string, any> = {\n outlineEnabled: false,\n outlineRenderShadowmap: false,\n outlineShadowmap: null\n};\n\nfunction getUniforms({outlineEnabled, outlineRenderShadowmap, outlineShadowmap} = INITIAL_STATE) {\n const uniforms: Record<string, any> = {};\n if (outlineEnabled !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uEnabled = outlineEnabled;\n }\n if (outlineRenderShadowmap !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uRenderOutlines = outlineRenderShadowmap;\n }\n if (outlineShadowmap !== undefined) {\n uniforms.outline_uShadowmap = outlineShadowmap;\n }\n return uniforms;\n}\n\nconst vs = `\\\n#version 300 es\nin float instanceZLevel;\nout float outline_vzLevel;\nout vec4 outline_vPosition;\n\n// Set the z level for the outline shadowmap rendering\nvoid outline_setZLevel(float zLevel) {\n outline_vzLevel = zLevel;\n}\n\n// Store an adjusted position for texture2DProj\nvoid outline_setUV(vec4 position) {\n // mat4(\n // 0.5, 0.0, 0.0, 0.0,\n // 0.0, 0.5, 0.0, 0.0,\n // 0.0, 0.0, 0.5, 0.0,\n // 0.5, 0.5, 0.5, 1.0\n // ) * position;\n outline_vPosition = vec4(position.xyz * 0.5 + position.w * 0.5, position.w);\n}\n`;\n\nconst fs = `\\\nuniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nin float outline_vzLevel;\n// in vec2 outline_vUV;\nin vec4 outline_vPosition;\n\nout vec4 fragColor;\n\nconst float OUTLINE_Z_LEVEL_ERROR = 0.01;\n\n// Return a darker color in shadowmap\nvec4 outline_filterShadowColor(vec4 color) {\n return vec4(outline_vzLevel / 255., outline_vzLevel / 255., outline_vzLevel / 255., 1.);\n}\n\n// Return a darker color if in shadowmap\nvec4 outline_filterDarkenColor(vec4 color) {\n if (outline_uEnabled) {\n float maxZLevel;\n if (outline_vPosition.q > 0.0) {\n maxZLevel = texture2DProj(outline_uShadowmap, outline_vPosition).r * 255.;\n } else {\n discard;\n }\n if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {\n vec4(color.rgb * 0.5, color.a);\n } else {\n discard;\n }\n }\n return color;\n}\n\n// if enabled and rendering outlines - Render depth to shadowmap\n// if enabled and rendering colors - Return a darker color if in shadowmap\n// if disabled, just return color\nvec4 outline_filterColor(vec4 color) {\n if (outline_uEnabled) {\n return outline_uRenderOutlines ?\n outline_filterShadowColor(color) :\n outline_filterDarkenColor(color);\n }\n return color;\n}\n`;\n\nexport const outline = {\n name: 'outline',\n vs,\n fs,\n getUniforms\n} as const satisfies ShaderModule;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {DefaultProps} from '@deck.gl/core';\nimport {CompositeLayer, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport {ScatterplotLayer} from '@deck.gl/layers';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {PathOutlineLayer, PathOutlineLayerProps} from '../path-outline-layer/path-outline-layer';\nimport {Arrow2DGeometry} from './arrow-2d-geometry';\n\nimport {createPathMarkers} from './create-path-markers';\nimport {getClosestPointOnPolyline} from './polyline';\nimport {Vector3} from '@math.gl/core';\n\nconst DISTANCE_FOR_MULTI_ARROWS = 0.1;\nconst ARROW_HEAD_SIZE = 0.2;\nconst ARROW_TAIL_WIDTH = 0.05;\n// const ARROW_CENTER_ADJUST = -0.8;\n\nconst DEFAULT_MARKER_LAYER = SimpleMeshLayer;\n\nexport type PathMarkerLayerProps<DataT> = PathOutlineLayerProps<DataT> & {\n getDirection?: (x) => any;\n getMarkerColor?: (x) => number[];\n getMarkerPercentages?: (x: any, info: any) => number[];\n highlightPoint?: any;\n highlightIndex?: number;\n MarkerLayer?: any;\n markerLayerProps?: any;\n sizeScale?: number;\n fp64?: boolean;\n nebulaLayer?: any;\n};\n\nconst DEFAULT_MARKER_LAYER_PROPS = {\n mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH})\n};\n\nconst defaultProps: DefaultProps<PathMarkerLayerProps<any>> = Object.assign(\n {},\n PathOutlineLayer.defaultProps,\n {\n MarkerLayer: DEFAULT_MARKER_LAYER,\n markerLayerProps: DEFAULT_MARKER_LAYER_PROPS,\n\n sizeScale: 100,\n fp64: false,\n\n highlightIndex: -1,\n highlightPoint: null,\n\n getPath: (x) => x.path,\n getColor: (x) => x.color,\n getMarkerColor: (x) => [0, 0, 0, 255],\n getDirection: (x) => x.direction,\n getMarkerPercentages: (object, {lineLength}) =>\n lineLength > DISTANCE_FOR_MULTI_ARROWS ? [0.25, 0.5, 0.75] : [0.5]\n }\n);\n\nexport class PathMarkerLayer<\n DataT = any,\n ExtraPropsT = Record<string, unknown>\n> extends CompositeLayer<ExtraPropsT & Required<PathMarkerLayerProps<DataT>>> {\n static layerName = 'PathMarkerLayer';\n static defaultProps = defaultProps;\n\n state: {\n closestPoint: Vector3 | null;\n closestPoints?: {position: Vector3}[];\n markers: any[];\n mesh: Arrow2DGeometry;\n } = undefined!;\n\n initializeState() {\n this.state = {\n markers: [],\n mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH}),\n closestPoint: null,\n closestPoints: []\n };\n }\n\n projectFlat(xyz, viewport, coordinateSystem, coordinateOrigin) {\n if (coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n const [dx, dy] = viewport.metersToLngLatDelta(xyz);\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n } else if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS) {\n const [dx, dy] = xyz;\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n }\n\n return viewport.projectFlat(xyz);\n }\n\n updateState({props, oldProps, changeFlags}) {\n if (changeFlags.dataChanged || changeFlags.updateTriggersChanged) {\n const {\n data,\n getPath,\n getDirection,\n getMarkerColor,\n getMarkerPercentages,\n coordinateSystem,\n coordinateOrigin\n } = this.props;\n\n const {viewport} = this.context;\n const projectFlat = (o) => this.projectFlat(o, viewport, coordinateSystem, coordinateOrigin);\n this.state.markers = createPathMarkers({\n data,\n getPath,\n getDirection,\n getColor: getMarkerColor,\n getMarkerPercentages,\n projectFlat\n });\n this._recalculateClosestPoint();\n }\n if (changeFlags.propsChanged) {\n if (props.point !== oldProps.point) {\n this._recalculateClosestPoint();\n }\n }\n }\n\n _recalculateClosestPoint() {\n const {highlightPoint, highlightIndex} = this.props;\n if (highlightPoint && highlightIndex >= 0) {\n const object = this.props.data[highlightIndex];\n const points = this.props.getPath(object, null as any);\n const {point} = getClosestPointOnPolyline({points, p: highlightPoint});\n this.state.closestPoints = [{position: point}];\n } else {\n this.state.closestPoints = [];\n }\n }\n\n getPickingInfo({info}) {\n return Object.assign(info, {\n // override object with picked feature\n object: (info.object && info.object.path) || info.object\n });\n }\n\n renderLayers() {\n return [\n new PathOutlineLayer(\n this.props,\n this.getSubLayerProps({\n id: 'paths',\n // Note: data has to be passed explicitly like this to avoid being empty\n data: this.props.data\n })\n ),\n new this.props.MarkerLayer(\n this.getSubLayerProps(\n Object.assign({}, this.props.markerLayerProps, {\n id: 'markers',\n data: this.state.markers,\n getOrientation: (x) => [0, -x.angle, 0],\n getColor: (x) => x.color,\n sizeScale: this.props.sizeScale,\n fp64: this.props.fp64,\n pickable: false,\n parameters: {\n blend: false,\n depthTest: false\n }\n })\n )\n ),\n this.state.closestPoints &&\n new ScatterplotLayer({\n id: `${this.props.id}-highlight`,\n data: this.state.closestPoints,\n fp64: this.props.fp64\n })\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\nexport class Arrow2DGeometry extends Geometry {\n constructor(opts = {}) {\n super(\n Object.assign({}, opts, {\n attributes: getArrowAttributes(opts),\n topology: 'triangle-list' as const\n })\n );\n }\n}\n\nfunction getArrowAttributes({length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05}) {\n const texCoords = [\n // HEAD\n 0.5,\n 1.0,\n 0,\n 0.5 - headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 + headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0\n ];\n\n const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1];\n\n // Center and scale\n const positions = new Array(texCoords.length);\n for (let i = 0; i < texCoords.length / 3; i++) {\n const i3 = i * 3;\n positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length;\n positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length;\n positions[i3 + 2] = 0;\n }\n return {\n positions: {size: 3, value: new Float32Array(positions)},\n normals: {size: 3, value: new Float32Array(normals)},\n texCoords: {size: 2, value: new Float32Array(texCoords)}\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector2} from '@math.gl/core';\n\n/** GeoJSON style position coordinate vector */\nexport type Position = [number, number] | [number, number, number];\n\n/** [red, green, blue, alpha] in premultiplied alpha format */\nexport type Color = [number, number, number, number];\n\nexport interface PathMarker {\n position: Position;\n angle: number;\n color: Color;\n object: unknown;\n}\n\nfunction getLineLength(vPoints) {\n // calculate total length\n let lineLength = 0;\n for (let i = 0; i < vPoints.length - 1; i++) {\n lineLength += vPoints[i].distance(vPoints[i + 1]);\n }\n return lineLength;\n}\n\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_DIRECTION = {forward: true, backward: false};\n\nexport function createPathMarkers({\n data,\n getPath = (x, context) => x.path,\n getDirection = (x) => x.direction,\n getColor = (x) => DEFAULT_COLOR,\n getMarkerPercentages = (x, info) => [0.5],\n projectFlat\n}): PathMarker[] {\n const markers: PathMarker[] = [];\n\n for (const object of data) {\n const path = getPath(object, null);\n const direction = getDirection(object) || DEFAULT_DIRECTION;\n const color = getColor(object);\n\n const vPoints = path.map((p) => new Vector2(p));\n const vPointsReverse = vPoints.slice(0).reverse();\n\n // calculate total length\n const lineLength = getLineLength(vPoints);\n\n // Ask for where to put markers\n const percentages = getMarkerPercentages(object, {lineLength});\n\n // Create the markers\n for (const percentage of percentages) {\n if (direction.forward) {\n const marker = createMarkerAlongPath({\n path: vPoints,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n });\n markers.push(marker);\n }\n\n if (direction.backward) {\n const marker = createMarkerAlongPath({\n path: vPointsReverse,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n });\n markers.push(marker);\n }\n }\n }\n\n return markers;\n}\n\nfunction createMarkerAlongPath({\n path,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n}): PathMarker {\n const distanceAlong = lineLength * percentage;\n let currentDistance = 0;\n let previousDistance = 0;\n let i = 0;\n for (i = 0; i < path.length - 1; i++) {\n currentDistance += path[i].distance(path[i + 1]);\n if (currentDistance > distanceAlong) {\n break;\n }\n previousDistance = currentDistance;\n }\n\n // If reached the end of the loop without exiting early,\n // undo the final increment to avoid a null-pointer exception\n if (i === path.length - 1) {\n i -= 1;\n }\n\n const vDirection = path[i + 1].clone().subtract(path[i]).normalize();\n const along = distanceAlong - previousDistance;\n const vCenter = vDirection.clone().multiply(new Vector2(along, along)).add(path[i]);\n\n const vDirection2 = new Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i]));\n\n const angle = (vDirection2.verticalAngle() * 180) / Math.PI;\n\n return {position: [vCenter.x, vCenter.y, 0], angle, color, object};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector3, clamp} from '@math.gl/core';\n\n// Return the closest point on a line segment\nexport function getClosestPointOnLine({p, p1, p2, clampToLine = true}) {\n const lineVector = new Vector3(p2).subtract(p1);\n const pointVector = new Vector3(p).subtract(p1);\n let dotProduct = lineVector.dot(pointVector);\n if (clampToLine) {\n dotProduct = clamp(dotProduct, 0, 1);\n }\n\n return lineVector.lerp(p1, p2, dotProduct);\n}\n\n// Return the closest point on a line segment\nexport function getClosestPointOnPolyline({p, points}) {\n p = new Vector3(p);\n let pClosest: Vector3 | null = null;\n let distanceSquared = Infinity;\n let index = -1;\n for (let i = 0; i < points.length - 1; ++i) {\n const p1 = points[i];\n const p2 = points[i + 1];\n const pClosestOnLine = getClosestPointOnLine({p, p1, p2});\n const distanceToLineSquared = p.distanceSquared(pClosestOnLine);\n if (distanceToLineSquared < distanceSquared) {\n distanceSquared = distanceToLineSquared;\n pClosest = pClosestOnLine;\n index = i;\n }\n }\n return {\n point: pClosest,\n index,\n p1: points[index],\n p2: points[index + 1],\n distanceSquared,\n distance: Math.sqrt(distanceSquared)\n };\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACKA,oBAAwB;AAExB,uBAAiB;;;ACAjB,IAAM,gBAAqC;EACzC,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;;AAGpB,SAAS,YAAY,EAAC,gBAAgB,wBAAwB,iBAAgB,IAAI,eAAa;AAC7F,QAAM,WAAgC,CAAA;AACtC,MAAI,mBAAmB,QAAW;AAEhC,aAAS,mBAAmB;EAC9B;AACA,MAAI,2BAA2B,QAAW;AAExC,aAAS,0BAA0B;EACrC;AACA,MAAI,qBAAqB,QAAW;AAClC,aAAS,qBAAqB;EAChC;AACA,SAAO;AACT;AAEA,IAAM,KAAK;;;;;;;;;;;;;;;;;;;;;AAuBX,IAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDJ,IAAM,UAAU;EACrB,MAAM;EACN;EACA;EACA;;;;AD1FK,IAAM,OAAO;EAClB,QAAQ;EACR,QAAQ;EACR,QAAQ;;AAIV,SAAS,iBAAiB,EAAC,QAAQ,OAAO,GAAE,GAAC;AAC3C,QAAM,cAAc;AACpB,SAAO,OAAO,QAAQ,aAAa,KAAK,OAAO,OAAO,CAAC;AACzD;AAEA,IAAM,UAAU;;;AAKhB,IAAM,UAAU;;AAIhB,IAAM,+BAAyD;EAC7D,OAAO;EACP,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;;AAGhB,IAAM,4BAAsD;EAC1D,OAAO;EACP,mBAAmB;EACnB,cAAc;;AAShB,IAAM,eAAyD;EAC7D,WAAW,MAAM;;AAGb,IAAO,mBAAP,cAAoF,wBAGzF;EAIC,QAII;;EAGJ,aAAU;AACR,UAAM,UAAU,MAAM,WAAU;AAChC,WAAO,OAAO,OAAO,CAAA,GAAI,SAAS;MAChC,SAAS,QAAQ,QAAQ,OAAO,CAAC,OAAO,CAAC;MACzC,IAAI,iBAAiB,EAAC,QAAQ,QAAQ,IAAI,MAAM,QAAO,CAAC;MACxD,IAAI,iBAAiB,EAAC,QAAQ,QAAQ,IAAI,MAAM,QAAO,CAAC;KACzD;EACH;;EAGA,gBAAgB,SAAqB;AACnC,UAAM,gBAAe;AAIrB,UAAM,qBAAqB,QAAQ,OAAO,kBAAkB;MAC1D,kBAAkB,CAAC,YAAY;KAChC;AAED,SAAK,SAAS;MACZ;KACD;AAID,SAAK,MAAM,iBAAiB,aAAa;MACvC,gBAAgB;QACd,MAAM;QACN,MAAI;QACJ,UAAU;;KAEb;EACH;;EAGA,KAAK,EAAC,mBAAmB,CAAA,GAAI,YAAY,UAAU,QAAO,GAAC;AAjH7D;AAmHI,UAAM,EACJ,cACA,YACA,WACA,YACA,YACA,YACA,gBACA,eAAc,IACZ,KAAK;AAET,eAAW,OAAO,OAAO,CAAA,GAAI,UAAU;MACrC,WAAW,OAAO,YAAY;MAC9B,SAAS,OAAO,UAAU;MAC1B;MACA,YAAY,KAAK,UAAU;MAC3B;MACA;MACA;MACA;KACD;AAGD,UAAM,EAAC,mBAAkB,IAAI,KAAK;AAElC,QAAI,mCAAS,UAAU;AACrB,YAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,SAAS,KAAK,CAAC;AACnE,YAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,SAAS,MAAM,CAAC;AAErE,yBAAmB,OAAO,EAAC,OAAO,eAAe,QAAQ,eAAc,CAAC;IAC1E,OAAO;AACL,yBAAmB,OAAM;IAC3B;AAEA,UAAM,oBAAmB,wBAAmB,iBAAiB,CAAC,MAArC,mBAAwC;AAEjE,QAAI,CAAC,kBAAkB;AACrB;IACF;AAMA,SAAK,MAAM,MAAM,qBAAqB;MACpC,gBAAgB;MAChB,wBAAwB;MACxB,kBAAkB;KACnB;AAED,SAAK,MAAM,MAAM,KAAK;MACpB,UAAU,OAAO,OAAO,CAAA,GAAI,UAAU;QACpC,WAAW;QACX,YAAY,KAAK,MAAM,aAAa;OACrC;MACD,YAAY;MACZ,aAAa;KACd;AAGD,SAAK,MAAM,MAAM,qBAAqB;MACpC,gBAAgB;MAChB,wBAAwB;MACxB,kBAAkB;KACnB;AACD,SAAK,MAAM,MAAM,KAAK;MACpB,UAAU,OAAO,OAAO,CAAA,GAAI,UAAU;QACpC,WAAW,OAAO,YAAY;QAC9B,SAAS,OAAO,UAAU;QAC1B,YAAY,KAAK,MAAM;OACxB;MACD,YAAY;KACb;EACH;;AAxHA,cAJW,kBAIJ,aAAY;AACnB,cALW,kBAKJ,gBAAe;;;AEhExB,IAAAA,eAAgD;AAChD,IAAAC,iBAA+B;AAC/B,yBAA8B;;;ACH9B,oBAAuB;AAEjB,IAAO,kBAAP,cAA+B,uBAAQ;EAC3C,YAAY,OAAO,CAAA,GAAE;AACnB,UACE,OAAO,OAAO,CAAA,GAAI,MAAM;MACtB,YAAY,mBAAmB,IAAI;MACnC,UAAU;KACX,CAAC;EAEN;;AAGF,SAAS,mBAAmB,EAAC,SAAS,GAAG,WAAW,KAAK,YAAY,MAAM,YAAY,KAAI,GAAC;AAC1F,QAAM,YAAY;;IAEhB;IACA;IACA;IACA,MAAM,WAAW;IACjB,IAAM;IACN;IACA,MAAM,WAAW;IACjB,IAAM;IACN;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB,IAAM;IACN;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB,IAAM;IACN;IACA,MAAM,YAAY;IAClB,IAAM;IACN;;AAGF,QAAM,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAGhG,QAAM,YAAY,IAAI,MAAM,UAAU,MAAM;AAC5C,WAAS,IAAI,GAAG,IAAI,UAAU,SAAS,GAAG,KAAK;AAC7C,UAAM,KAAK,IAAI;AACf,cAAU,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,IAAI,OAAO;AAChD,cAAU,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,IAAI,OAAO;AAChD,cAAU,KAAK,CAAC,IAAI;EACtB;AACA,SAAO;IACL,WAAW,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,SAAS,EAAC;IACvD,SAAS,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,OAAO,EAAC;IACnD,WAAW,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,SAAS,EAAC;;AAE3D;;;AC5DA,kBAAsB;AAetB,SAAS,cAAc,SAAO;AAE5B,MAAI,aAAa;AACjB,WAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,KAAK;AAC3C,kBAAc,QAAQ,CAAC,EAAE,SAAS,QAAQ,IAAI,CAAC,CAAC;EAClD;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AACnC,IAAM,oBAAoB,EAAC,SAAS,MAAM,UAAU,MAAK;AAEnD,SAAU,kBAAkB,EAChC,MACA,UAAU,CAAC,GAAG,YAAY,EAAE,MAC5B,eAAe,CAAC,MAAM,EAAE,WACxB,WAAW,CAAC,MAAM,eAClB,uBAAuB,CAAC,GAAG,SAAS,CAAC,GAAG,GACxC,YAAW,GACZ;AACC,QAAM,UAAwB,CAAA;AAE9B,aAAW,UAAU,MAAM;AACzB,UAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,UAAM,YAAY,aAAa,MAAM,KAAK;AAC1C,UAAM,QAAQ,SAAS,MAAM;AAE7B,UAAM,UAAU,KAAK,IAAI,CAAC,MAAM,IAAI,oBAAQ,CAAC,CAAC;AAC9C,UAAM,iBAAiB,QAAQ,MAAM,CAAC,EAAE,QAAO;AAG/C,UAAM,aAAa,cAAc,OAAO;AAGxC,UAAM,cAAc,qBAAqB,QAAQ,EAAC,WAAU,CAAC;AAG7D,eAAW,cAAc,aAAa;AACpC,UAAI,UAAU,SAAS;AACrB,cAAM,SAAS,sBAAsB;UACnC,MAAM;UACN;UACA;UACA;UACA;UACA;SACD;AACD,gBAAQ,KAAK,MAAM;MACrB;AAEA,UAAI,UAAU,UAAU;AACtB,cAAM,SAAS,sBAAsB;UACnC,MAAM;UACN;UACA;UACA;UACA;UACA;SACD;AACD,gBAAQ,KAAK,MAAM;MACrB;IACF;EACF;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,EAC7B,MACA,YACA,YACA,OACA,QACA,YAAW,GACZ;AACC,QAAM,gBAAgB,aAAa;AACnC,MAAI,kBAAkB;AACtB,MAAI,mBAAmB;AACvB,MAAI,IAAI;AACR,OAAK,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACpC,uBAAmB,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC;AAC/C,QAAI,kBAAkB,eAAe;AACnC;IACF;AACA,uBAAmB;EACrB;AAIA,MAAI,MAAM,KAAK,SAAS,GAAG;AACzB,SAAK;EACP;AAEA,QAAM,aAAa,KAAK,IAAI,CAAC,EAAE,MAAK,EAAG,SAAS,KAAK,CAAC,CAAC,EAAE,UAAS;AAClE,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,UAAU,WAAW,MAAK,EAAG,SAAS,IAAI,oBAAQ,OAAO,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;AAElF,QAAM,cAAc,IAAI,oBAAQ,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC;AAEvF,QAAM,QAAS,YAAY,cAAa,IAAK,MAAO,KAAK;AAEzD,SAAO,EAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,OAAO,OAAM;AACnE;;;ACrHA,IAAAC,eAA6B;AAGvB,SAAU,sBAAsB,EAAC,GAAG,IAAI,IAAI,cAAc,KAAI,GAAC;AACnE,QAAM,aAAa,IAAI,qBAAQ,EAAE,EAAE,SAAS,EAAE;AAC9C,QAAM,cAAc,IAAI,qBAAQ,CAAC,EAAE,SAAS,EAAE;AAC9C,MAAI,aAAa,WAAW,IAAI,WAAW;AAC3C,MAAI,aAAa;AACf,qBAAa,oBAAM,YAAY,GAAG,CAAC;EACrC;AAEA,SAAO,WAAW,KAAK,IAAI,IAAI,UAAU;AAC3C;AAGM,SAAU,0BAA0B,EAAC,GAAG,OAAM,GAAC;AACnD,MAAI,IAAI,qBAAQ,CAAC;AACjB,MAAI,WAA2B;AAC/B,MAAI,kBAAkB;AACtB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,EAAE,GAAG;AAC1C,UAAM,KAAK,OAAO,CAAC;AACnB,UAAM,KAAK,OAAO,IAAI,CAAC;AACvB,UAAM,iBAAiB,sBAAsB,EAAC,GAAG,IAAI,GAAE,CAAC;AACxD,UAAM,wBAAwB,EAAE,gBAAgB,cAAc;AAC9D,QAAI,wBAAwB,iBAAiB;AAC3C,wBAAkB;AAClB,iBAAW;AACX,cAAQ;IACV;EACF;AACA,SAAO;IACL,OAAO;IACP;IACA,IAAI,OAAO,KAAK;IAChB,IAAI,OAAO,QAAQ,CAAC;IACpB;IACA,UAAU,KAAK,KAAK,eAAe;;AAEvC;;;AH5BA,IAAM,4BAA4B;AAClC,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AAGzB,IAAM,uBAAuB;AAe7B,IAAM,6BAA6B;EACjC,MAAM,IAAI,gBAAgB,EAAC,UAAU,iBAAiB,WAAW,iBAAgB,CAAC;;AAGpF,IAAMC,gBAAwD,OAAO,OACnE,CAAA,GACA,iBAAiB,cACjB;EACE,aAAa;EACb,kBAAkB;EAElB,WAAW;EACX,MAAM;EAEN,gBAAgB;EAChB,gBAAgB;EAEhB,SAAS,CAAC,MAAM,EAAE;EAClB,UAAU,CAAC,MAAM,EAAE;EACnB,gBAAgB,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG;EACpC,cAAc,CAAC,MAAM,EAAE;EACvB,sBAAsB,CAAC,QAAQ,EAAC,WAAU,MACxC,aAAa,4BAA4B,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG;CACpE;AAGG,IAAO,kBAAP,cAGI,4BAAmE;EAI3E,QAKI;EAEJ,kBAAe;AACb,SAAK,QAAQ;MACX,SAAS,CAAA;MACT,MAAM,IAAI,gBAAgB,EAAC,UAAU,iBAAiB,WAAW,iBAAgB,CAAC;MAClF,cAAc;MACd,eAAe,CAAA;;EAEnB;EAEA,YAAY,KAAK,UAAU,kBAAkB,kBAAgB;AAC3D,QAAI,qBAAqB,+BAAkB,eAAe;AACxD,YAAM,CAAC,IAAI,EAAE,IAAI,SAAS,oBAAoB,GAAG;AACjD,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,aAAO,SAAS,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC9C,WAAW,qBAAqB,+BAAkB,gBAAgB;AAChE,YAAM,CAAC,IAAI,EAAE,IAAI;AACjB,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,aAAO,SAAS,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC9C;AAEA,WAAO,SAAS,YAAY,GAAG;EACjC;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,QAAI,YAAY,eAAe,YAAY,uBAAuB;AAChE,YAAM,EACJ,MACA,SACA,cACA,gBACA,sBACA,kBACA,iBAAgB,IACd,KAAK;AAET,YAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,YAAM,cAAc,CAAC,MAAM,KAAK,YAAY,GAAG,UAAU,kBAAkB,gBAAgB;AAC3F,WAAK,MAAM,UAAU,kBAAkB;QACrC;QACA;QACA;QACA,UAAU;QACV;QACA;OACD;AACD,WAAK,yBAAwB;IAC/B;AACA,QAAI,YAAY,cAAc;AAC5B,UAAI,MAAM,UAAU,SAAS,OAAO;AAClC,aAAK,yBAAwB;MAC/B;IACF;EACF;EAEA,2BAAwB;AACtB,UAAM,EAAC,gBAAgB,eAAc,IAAI,KAAK;AAC9C,QAAI,kBAAkB,kBAAkB,GAAG;AACzC,YAAM,SAAS,KAAK,MAAM,KAAK,cAAc;AAC7C,YAAM,SAAS,KAAK,MAAM,QAAQ,QAAQ,IAAW;AACrD,YAAM,EAAC,MAAK,IAAI,0BAA0B,EAAC,QAAQ,GAAG,eAAc,CAAC;AACrE,WAAK,MAAM,gBAAgB,CAAC,EAAC,UAAU,MAAK,CAAC;IAC/C,OAAO;AACL,WAAK,MAAM,gBAAgB,CAAA;IAC7B;EACF;EAEA,eAAe,EAAC,KAAI,GAAC;AACnB,WAAO,OAAO,OAAO,MAAM;;MAEzB,QAAS,KAAK,UAAU,KAAK,OAAO,QAAS,KAAK;KACnD;EACH;EAEA,eAAY;AACV,WAAO;MACL,IAAI,iBACF,KAAK,OACL,KAAK,iBAAiB;QACpB,IAAI;;QAEJ,MAAM,KAAK,MAAM;OAClB,CAAC;MAEJ,IAAI,KAAK,MAAM,YACb,KAAK,iBACH,OAAO,OAAO,CAAA,GAAI,KAAK,MAAM,kBAAkB;QAC7C,IAAI;QACJ,MAAM,KAAK,MAAM;QACjB,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QACtC,UAAU,CAAC,MAAM,EAAE;QACnB,WAAW,KAAK,MAAM;QACtB,MAAM,KAAK,MAAM;QACjB,UAAU;QACV,YAAY;UACV,OAAO;UACP,WAAW;;OAEd,CAAC,CACH;MAEH,KAAK,MAAM,iBACT,IAAI,gCAAiB;QACnB,IAAI,GAAG,KAAK,MAAM;QAClB,MAAM,KAAK,MAAM;QACjB,MAAM,KAAK,MAAM;OAClB;;EAEP;;AArHA,cAJW,iBAIJ,aAAY;AACnB,cALW,iBAKJ,gBAAeA;",
|
|
6
|
-
"names": ["import_core", "import_layers", "import_core", "defaultProps"]
|
|
3
|
+
"sources": ["../src/index.ts", "../src/path-outline-layer/path-outline-layer.ts", "../src/path-outline-layer/outline.ts", "../src/path-marker-layer/path-marker-layer.ts", "../src/path-marker-layer/arrow-2d-geometry.ts", "../src/path-marker-layer/create-path-markers.ts", "../src/path-marker-layer/polyline.ts", "../src/skybox-layer/skybox-layer.ts", "../src/skybox-layer/cubemap-utils.ts"],
|
|
4
|
+
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {PathOutlineLayerProps} from './path-outline-layer/path-outline-layer';\nexport {PathOutlineLayer} from './path-outline-layer/path-outline-layer';\n\nexport type {PathMarkerLayerProps} from './path-marker-layer/path-marker-layer';\nexport {PathMarkerLayer} from './path-marker-layer/path-marker-layer';\n\nexport type {SkyboxLayerProps} from './skybox-layer/skybox-layer';\nexport {SkyboxLayer} from './skybox-layer/skybox-layer';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PathLayerProps} from '@deck.gl/layers';\nimport {PathLayer} from '@deck.gl/layers';\nimport type {DefaultProps, LayerContext} from '@deck.gl/core';\nimport {Framebuffer} from '@luma.gl/core';\nimport type {RenderPipelineParameters, Texture} from '@luma.gl/core';\nimport {outline} from './outline';\n\n/**\n * Unit literal to shader unit number conversion.\n */\nexport const UNIT = {\n common: 0,\n meters: 1,\n pixels: 2\n};\n\n// TODO - this should be built into assembleShaders\nfunction injectShaderCode({source, code = ''}) {\n const INJECT_CODE = /}[^{}]*$/;\n return source.replace(INJECT_CODE, code.concat('\\n}\\n'));\n}\n\nconst VS_CODE = `\\\n outline_setUV(gl_Position);\n outline_setZLevel(instanceZLevel);\n`;\n\nconst FS_CODE = `\\\n fragColor = outline_filterColor(fragColor);\n`;\n\nconst OUTLINE_SHADOWMAP_PARAMETERS: RenderPipelineParameters = {\n blend: true,\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendColorOperation: 'max',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one',\n blendAlphaOperation: 'max',\n depthWriteEnabled: false,\n depthCompare: 'always'\n};\n\nconst OUTLINE_RENDER_PARAMETERS: RenderPipelineParameters = {\n blend: false,\n depthWriteEnabled: false,\n depthCompare: 'always'\n};\n\nexport type PathOutlineLayerProps<DataT> = PathLayerProps<DataT> & {\n dashJustified?: boolean;\n getDashArray?: [number, number] | ((d: DataT) => [number, number] | null);\n getZLevel?: (d: DataT, index: number) => number;\n};\n\nconst defaultProps: DefaultProps<PathOutlineLayerProps<any>> = {\n getZLevel: () => 0\n};\n\nexport class PathOutlineLayer<DataT = any, ExtraPropsT = Record<string, unknown>> extends PathLayer<\n DataT,\n ExtraPropsT & Required<PathOutlineLayerProps<DataT>>\n> {\n static layerName = 'PathOutlineLayer';\n static defaultProps = defaultProps;\n\n state: {\n model?: any;\n pathTesselator: any;\n outlineFramebuffer: Framebuffer;\n } = undefined!;\n\n // Override getShaders to inject the outline module\n getShaders() {\n const shaders = super.getShaders();\n return Object.assign({}, shaders, {\n modules: shaders.modules.concat([outline]),\n vs: injectShaderCode({source: shaders.vs, code: VS_CODE}),\n fs: injectShaderCode({source: shaders.fs, code: FS_CODE})\n });\n }\n\n // @ts-expect-error PathLayer is missing LayerContext arg\n initializeState(context: LayerContext) {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n\n if (!attributeManager) {\n throw new Error('PathOutlineLayer requires an attribute manager during initialization.');\n }\n\n // Create an outline \"shadow\" map\n // TODO - we should create a single outlineMap for all layers\n const outlineFramebuffer = context.device.createFramebuffer({\n colorAttachments: [\n context.device.createTexture({\n format: 'rgba8unorm',\n width: 1,\n height: 1,\n mipLevels: 1\n })\n ]\n });\n\n attributeManager.addInstanced({\n instanceZLevel: {\n size: 1,\n type: 'uint8',\n accessor: 'getZLevel'\n }\n });\n\n this.setState({\n outlineFramebuffer,\n model: this._getModel()\n });\n }\n\n finalizeState(context: LayerContext) {\n this.state.outlineFramebuffer?.destroy();\n super.finalizeState(context);\n }\n\n // Override draw to add render module\n draw() {\n const model = this.state.model;\n const outlineFramebuffer = this.state.outlineFramebuffer;\n\n if (!model || !outlineFramebuffer) {\n return;\n }\n\n const viewport = this.context.viewport;\n const viewportWidth = Math.max(1, Math.ceil(viewport.width));\n const viewportHeight = Math.max(1, Math.ceil(viewport.height));\n\n outlineFramebuffer.resize({width: viewportWidth, height: viewportHeight});\n\n const shadowmapTexture = getFramebufferTexture(outlineFramebuffer);\n\n if (!shadowmapTexture) {\n return;\n }\n\n const {\n jointRounded,\n capRounded,\n billboard,\n miterLimit,\n widthUnits,\n widthScale,\n widthMinPixels,\n widthMaxPixels\n } = this.props;\n\n const basePathProps = {\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n billboard,\n widthUnits: UNIT[widthUnits],\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels\n };\n\n // Render the outline shadowmap (based on segment z orders)\n this.setShaderModuleProps({\n outline: {\n outlineEnabled: true,\n outlineRenderShadowmap: true,\n outlineShadowmap: shadowmapTexture\n }\n });\n model.shaderInputs.setProps({\n path: {\n ...basePathProps,\n jointType: 0,\n widthScale: widthScale * 1.3\n }\n });\n model.setParameters(OUTLINE_SHADOWMAP_PARAMETERS);\n const shadowRenderPass = this.context.device.beginRenderPass({\n id: `${this.props.id}-outline-shadowmap`,\n framebuffer: outlineFramebuffer,\n parameters: {viewport: [0, 0, viewportWidth, viewportHeight]},\n clearColor: [0, 0, 0, 0],\n clearDepth: 1,\n clearStencil: 0\n });\n model.draw(shadowRenderPass);\n shadowRenderPass.end();\n\n // Now use the outline shadowmap to render the lines (with outlines)\n this.setShaderModuleProps({\n outline: {\n outlineEnabled: true,\n outlineRenderShadowmap: false,\n outlineShadowmap: shadowmapTexture\n }\n });\n model.shaderInputs.setProps({\n path: basePathProps\n });\n model.setParameters(OUTLINE_RENDER_PARAMETERS);\n model.draw(this.context.renderPass);\n }\n}\n\nfunction getFramebufferTexture(framebuffer: Framebuffer): Texture | null {\n const colorAttachment = framebuffer.colorAttachments[0];\n\n if (!colorAttachment) {\n return null;\n }\n\n return 'texture' in colorAttachment ? colorAttachment.texture : colorAttachment;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\n/* eslint-disable camelcase */\nconst INITIAL_STATE: Record<string, any> = {\n outlineEnabled: false,\n outlineRenderShadowmap: false,\n outlineShadowmap: null\n};\n\nfunction getUniforms({outlineEnabled, outlineRenderShadowmap, outlineShadowmap} = INITIAL_STATE) {\n const uniforms: Record<string, any> = {};\n if (outlineEnabled !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uEnabled = outlineEnabled;\n }\n if (outlineRenderShadowmap !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uRenderOutlines = outlineRenderShadowmap;\n }\n if (outlineShadowmap !== undefined) {\n uniforms.outline_uShadowmap = outlineShadowmap;\n }\n return uniforms;\n}\n\nconst vs = `\\\n#version 300 es\nin float instanceZLevel;\nout float outline_vzLevel;\nout vec4 outline_vPosition;\n\n// Set the z level for the outline shadowmap rendering\nvoid outline_setZLevel(float zLevel) {\n outline_vzLevel = zLevel;\n}\n\n// Store an adjusted position for texture2DProj\nvoid outline_setUV(vec4 position) {\n // mat4(\n // 0.5, 0.0, 0.0, 0.0,\n // 0.0, 0.5, 0.0, 0.0,\n // 0.0, 0.0, 0.5, 0.0,\n // 0.5, 0.5, 0.5, 1.0\n // ) * position;\n outline_vPosition = vec4(position.xyz * 0.5 + position.w * 0.5, position.w);\n}\n`;\n\nconst fs = `\\\nuniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nin float outline_vzLevel;\n// in vec2 outline_vUV;\nin vec4 outline_vPosition;\n\nconst float OUTLINE_Z_LEVEL_ERROR = 0.01;\n\n// Return a darker color in shadowmap\nvec4 outline_filterShadowColor(vec4 color) {\n return vec4(outline_vzLevel / 255., outline_vzLevel / 255., outline_vzLevel / 255., 1.);\n}\n\n// Return a darker color if in shadowmap\nvec4 outline_filterDarkenColor(vec4 color) {\n if (outline_uEnabled) {\n float maxZLevel;\n if (outline_vPosition.q > 0.0) {\n maxZLevel = textureProj(outline_uShadowmap, outline_vPosition).r * 255.;\n } else {\n discard;\n }\n if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {\n return vec4(color.rgb * 0.5, color.a);\n } else {\n discard;\n }\n }\n return color;\n}\n\n// if enabled and rendering outlines - Render depth to shadowmap\n// if enabled and rendering colors - Return a darker color if in shadowmap\n// if disabled, just return color\nvec4 outline_filterColor(vec4 color) {\n if (outline_uEnabled) {\n return outline_uRenderOutlines ?\n outline_filterShadowColor(color) :\n outline_filterDarkenColor(color);\n }\n return color;\n}\n`;\n\nexport const outline = {\n name: 'outline',\n vs,\n fs,\n getUniforms\n} as const satisfies ShaderModule;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {DefaultProps} from '@deck.gl/core';\nimport {CompositeLayer, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport {ScatterplotLayer} from '@deck.gl/layers';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {PathOutlineLayer, PathOutlineLayerProps} from '../path-outline-layer/path-outline-layer';\nimport {Arrow2DGeometry} from './arrow-2d-geometry';\n\nimport {createPathMarkers} from './create-path-markers';\nimport {getClosestPointOnPolyline} from './polyline';\nimport {Vector3} from '@math.gl/core';\n\nconst DISTANCE_FOR_MULTI_ARROWS = 0.1;\nconst ARROW_HEAD_SIZE = 0.2;\nconst ARROW_TAIL_WIDTH = 0.05;\n// const ARROW_CENTER_ADJUST = -0.8;\n\nconst DEFAULT_MARKER_LAYER = SimpleMeshLayer;\n\nexport type PathMarkerLayerProps<DataT> = PathOutlineLayerProps<DataT> & {\n getDirection?: (x) => any;\n getMarkerColor?: (x) => number[];\n getMarkerPercentages?: (x: any, info: any) => number[];\n highlightPoint?: any;\n highlightIndex?: number;\n MarkerLayer?: any;\n markerLayerProps?: any;\n sizeScale?: number;\n fp64?: boolean;\n nebulaLayer?: any;\n};\n\nconst DEFAULT_MARKER_LAYER_PROPS = {\n mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH})\n};\n\nconst defaultProps: DefaultProps<PathMarkerLayerProps<any>> = Object.assign(\n {},\n PathOutlineLayer.defaultProps,\n {\n MarkerLayer: DEFAULT_MARKER_LAYER,\n markerLayerProps: DEFAULT_MARKER_LAYER_PROPS,\n\n sizeScale: 100,\n fp64: false,\n\n highlightIndex: -1,\n highlightPoint: null,\n\n getPath: (x) => x.path,\n getColor: (x) => x.color,\n getMarkerColor: (x) => [0, 0, 0, 255],\n getDirection: (x) => x.direction,\n getMarkerPercentages: (object, {lineLength}) =>\n lineLength > DISTANCE_FOR_MULTI_ARROWS ? [0.25, 0.5, 0.75] : [0.5]\n }\n);\n\nexport class PathMarkerLayer<\n DataT = any,\n ExtraPropsT = Record<string, unknown>\n> extends CompositeLayer<ExtraPropsT & Required<PathMarkerLayerProps<DataT>>> {\n static layerName = 'PathMarkerLayer';\n static defaultProps = defaultProps;\n\n state: {\n closestPoint: Vector3 | null;\n closestPoints?: {position: Vector3}[];\n markers: any[];\n mesh: Arrow2DGeometry;\n } = undefined!;\n\n initializeState() {\n this.state = {\n markers: [],\n mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH}),\n closestPoint: null,\n closestPoints: []\n };\n }\n\n projectFlat(xyz, viewport, coordinateSystem, coordinateOrigin) {\n if (coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n const [dx, dy] = viewport.metersToLngLatDelta(xyz);\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n } else if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS) {\n const [dx, dy] = xyz;\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n }\n\n return viewport.projectFlat(xyz);\n }\n\n updateState({props, oldProps, changeFlags}) {\n if (changeFlags.dataChanged || changeFlags.updateTriggersChanged) {\n const {\n data,\n getPath,\n getDirection,\n getMarkerColor,\n getMarkerPercentages,\n coordinateSystem,\n coordinateOrigin\n } = this.props;\n\n const {viewport} = this.context;\n const projectFlat = (o) => this.projectFlat(o, viewport, coordinateSystem, coordinateOrigin);\n this.state.markers = createPathMarkers({\n data,\n getPath,\n getDirection,\n getColor: getMarkerColor,\n getMarkerPercentages,\n projectFlat\n });\n this._recalculateClosestPoint();\n }\n if (changeFlags.propsChanged) {\n if (props.point !== oldProps.point) {\n this._recalculateClosestPoint();\n }\n }\n }\n\n _recalculateClosestPoint() {\n const {highlightPoint, highlightIndex} = this.props;\n if (highlightPoint && highlightIndex >= 0) {\n const object = this.props.data[highlightIndex];\n const points = this.props.getPath(object, null as any);\n const {point} = getClosestPointOnPolyline({points, p: highlightPoint});\n this.state.closestPoints = [{position: point}];\n } else {\n this.state.closestPoints = [];\n }\n }\n\n getPickingInfo({info}) {\n return Object.assign(info, {\n // override object with picked feature\n object: (info.object && info.object.path) || info.object\n });\n }\n\n renderLayers() {\n return [\n new PathOutlineLayer(\n this.props,\n this.getSubLayerProps({\n id: 'paths',\n // Note: data has to be passed explicitly like this to avoid being empty\n data: this.props.data\n })\n ),\n new this.props.MarkerLayer(\n this.getSubLayerProps(\n Object.assign({}, this.props.markerLayerProps, {\n id: 'markers',\n data: this.state.markers,\n getOrientation: (x) => [0, -x.angle, 0],\n getColor: (x) => x.color,\n sizeScale: this.props.sizeScale,\n fp64: this.props.fp64,\n pickable: false,\n parameters: {\n blend: false,\n depthTest: false\n }\n })\n )\n ),\n this.state.closestPoints &&\n new ScatterplotLayer({\n id: `${this.props.id}-highlight`,\n data: this.state.closestPoints,\n fp64: this.props.fp64\n })\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\nexport class Arrow2DGeometry extends Geometry {\n constructor(opts = {}) {\n super(\n Object.assign({}, opts, {\n attributes: getArrowAttributes(opts),\n topology: 'triangle-list' as const\n })\n );\n }\n}\n\nfunction getArrowAttributes({length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05}) {\n const texCoords = [\n // HEAD\n 0.5,\n 1.0,\n 0,\n 0.5 - headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 + headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0\n ];\n\n const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1];\n\n // Center and scale\n const positions = new Array(texCoords.length);\n for (let i = 0; i < texCoords.length / 3; i++) {\n const i3 = i * 3;\n positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length;\n positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length;\n positions[i3 + 2] = 0;\n }\n return {\n positions: {size: 3, value: new Float32Array(positions)},\n normals: {size: 3, value: new Float32Array(normals)},\n texCoords: {size: 2, value: new Float32Array(texCoords)}\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector2} from '@math.gl/core';\n\n/** GeoJSON style position coordinate vector */\nexport type Position = [number, number] | [number, number, number];\n\n/** [red, green, blue, alpha] in premultiplied alpha format */\nexport type Color = [number, number, number, number];\n\nexport interface PathMarker {\n position: Position;\n angle: number;\n color: Color;\n object: unknown;\n}\n\nfunction getLineLength(vPoints) {\n // calculate total length\n let lineLength = 0;\n for (let i = 0; i < vPoints.length - 1; i++) {\n lineLength += vPoints[i].distance(vPoints[i + 1]);\n }\n return lineLength;\n}\n\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_DIRECTION = {forward: true, backward: false};\n\nexport function createPathMarkers({\n data,\n getPath = (x, context) => x.path,\n getDirection = (x) => x.direction,\n getColor = (x) => DEFAULT_COLOR,\n getMarkerPercentages = (x, info) => [0.5],\n projectFlat\n}): PathMarker[] {\n const markers: PathMarker[] = [];\n\n for (const object of data) {\n const path = getPath(object, null);\n const direction = getDirection(object) || DEFAULT_DIRECTION;\n const color = getColor(object);\n\n const vPoints = path.map((p) => new Vector2(p));\n const vPointsReverse = vPoints.slice(0).reverse();\n\n // calculate total length\n const lineLength = getLineLength(vPoints);\n\n // Ask for where to put markers\n const percentages = getMarkerPercentages(object, {lineLength});\n\n // Create the markers\n for (const percentage of percentages) {\n if (direction.forward) {\n const marker = createMarkerAlongPath({\n path: vPoints,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n });\n markers.push(marker);\n }\n\n if (direction.backward) {\n const marker = createMarkerAlongPath({\n path: vPointsReverse,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n });\n markers.push(marker);\n }\n }\n }\n\n return markers;\n}\n\nfunction createMarkerAlongPath({\n path,\n percentage,\n lineLength,\n color,\n object,\n projectFlat\n}): PathMarker {\n const distanceAlong = lineLength * percentage;\n let currentDistance = 0;\n let previousDistance = 0;\n let i = 0;\n for (i = 0; i < path.length - 1; i++) {\n currentDistance += path[i].distance(path[i + 1]);\n if (currentDistance > distanceAlong) {\n break;\n }\n previousDistance = currentDistance;\n }\n\n // If reached the end of the loop without exiting early,\n // undo the final increment to avoid a null-pointer exception\n if (i === path.length - 1) {\n i -= 1;\n }\n\n const vDirection = path[i + 1].clone().subtract(path[i]).normalize();\n const along = distanceAlong - previousDistance;\n const vCenter = vDirection.clone().multiply(new Vector2(along, along)).add(path[i]);\n\n const vDirection2 = new Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i]));\n\n const angle = (vDirection2.verticalAngle() * 180) / Math.PI;\n\n return {position: [vCenter.x, vCenter.y, 0], angle, color, object};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector3, clamp} from '@math.gl/core';\n\n// Return the closest point on a line segment\nexport function getClosestPointOnLine({p, p1, p2, clampToLine = true}) {\n const lineVector = new Vector3(p2).subtract(p1);\n const pointVector = new Vector3(p).subtract(p1);\n let dotProduct = lineVector.dot(pointVector);\n if (clampToLine) {\n dotProduct = clamp(dotProduct, 0, 1);\n }\n\n return lineVector.lerp(p1, p2, dotProduct);\n}\n\n// Return the closest point on a line segment\nexport function getClosestPointOnPolyline({p, points}) {\n p = new Vector3(p);\n let pClosest: Vector3 | null = null;\n let distanceSquared = Infinity;\n let index = -1;\n for (let i = 0; i < points.length - 1; ++i) {\n const p1 = points[i];\n const p2 = points[i + 1];\n const pClosestOnLine = getClosestPointOnLine({p, p1, p2});\n const distanceToLineSquared = p.distanceSquared(pClosestOnLine);\n if (distanceToLineSquared < distanceSquared) {\n distanceSquared = distanceToLineSquared;\n pClosest = pClosestOnLine;\n index = i;\n }\n }\n return {\n point: pClosest,\n index,\n p1: points[index],\n p2: points[index + 1],\n distanceSquared,\n distance: Math.sqrt(distanceSquared)\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {load} from '@loaders.gl/core';\nimport {\n TextureCubeLoader,\n type TextureCubeLoaderOptions,\n type TextureCubeManifest\n} from '@loaders.gl/textures';\nimport {Layer} from '@deck.gl/core';\nimport type {DefaultProps, LayerProps, UpdateParameters, Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport type {Device, RenderPipelineParameters} from '@luma.gl/core';\nimport {CubeGeometry, DynamicTexture, Model, ShaderInputs} from '@luma.gl/engine';\nimport type {TextureCubeData} from '@luma.gl/engine';\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport {convertLoadedCubemapToTextureData, createCubemapLoadOptions} from './cubemap-utils';\n\ntype AppUniforms = {\n /** World transform for the unit cube used to draw the skybox. */\n modelMatrix: any;\n /** View transform with translation removed so the skybox stays camera-centered. */\n viewMatrix: any;\n /** Projection transform for the active viewport. */\n projectionMatrix: any;\n};\n\nconst app: ShaderModule<AppUniforms, AppUniforms> = {\n name: 'app',\n uniformTypes: {\n modelMatrix: 'mat4x4<f32>',\n viewMatrix: 'mat4x4<f32>',\n projectionMatrix: 'mat4x4<f32>'\n }\n} as any;\n\nconst SKYBOX_PARAMETERS: RenderPipelineParameters = {\n cullMode: 'front',\n depthWriteEnabled: false,\n depthCompare: 'less-equal'\n};\n\nconst SKYBOX_SCALE = new Matrix4().scale([2, 2, 2]);\n\nconst defaultProps: DefaultProps<SkyboxLayerProps> = {\n cubemap: null,\n loadOptions: null,\n orientation: 'default'\n};\n\ntype _SkyboxLayerProps = {\n /** Cubemap manifest URL or manifest object to load and render. */\n cubemap: string | TextureCubeManifest | null;\n /** Optional loaders.gl texture-cube load options. */\n loadOptions?: TextureCubeLoaderOptions | null;\n /**\n * Declares how the cubemap faces are oriented relative to deck.gl's Z-up\n * world. Use `y-up` for cubemaps authored for Y-up scenes, such as the\n * Tycho star map faces from the luma.gl globe showcase.\n */\n orientation?: 'default' | 'y-up';\n};\n\nexport type SkyboxLayerProps = _SkyboxLayerProps & LayerProps;\n\ntype LoadedCubemapTexture = {\n type: 'cube';\n data: unknown[];\n};\n\ntype SkyboxLayerState = {\n /** Active GPU cubemap texture, if one has been loaded successfully. */\n cubemapTexture: DynamicTexture | null;\n /** Monotonic load token used to discard stale async cubemap loads. */\n loadCount: number;\n /** Backing model that renders the cube geometry. */\n model?: Model;\n /** Shader input manager for the skybox uniforms. */\n shaderInputs?: ShaderInputs<any>;\n};\n\n/**\n * Renders a camera-centered cubemap background for `MapView`, `GlobeView`,\n * `FirstPersonView`, and other 3D-capable deck.gl views.\n */\nexport class SkyboxLayer<\n ExtraProps extends Record<string, unknown> = Record<string, unknown>\n> extends Layer<Required<_SkyboxLayerProps> & ExtraProps> {\n static defaultProps = defaultProps;\n static layerName = 'SkyboxLayer';\n\n state: SkyboxLayerState = undefined!;\n\n /** Initializes the cube model and starts loading the cubemap texture. */\n initializeState(): void {\n const attributeManager = this.getAttributeManager();\n attributeManager?.remove(['instancePickingColors']);\n\n const shaderInputs = new ShaderInputs(\n createShaderInputModules(this.context.defaultShaderModules),\n {\n disableWarnings: true\n }\n );\n const model = this._getModel(shaderInputs);\n\n this.setState({\n cubemapTexture: null,\n loadCount: 0,\n model,\n shaderInputs\n });\n\n this._loadCubemap().catch(() => {});\n }\n\n /** Reloads the cubemap when its source manifest or load options change. */\n updateState({props, oldProps}: UpdateParameters<this>): void {\n if (props.cubemap !== oldProps.cubemap || props.loadOptions !== oldProps.loadOptions) {\n this._loadCubemap().catch(() => {});\n }\n }\n\n /** Releases GPU resources owned by the layer. */\n finalizeState(): void {\n this.state.cubemapTexture?.destroy();\n this.state.model?.destroy();\n }\n\n /** Draws the skybox cube for the current viewport. */\n draw(): void {\n const {model, cubemapTexture, shaderInputs} = this.state;\n if (!model || !cubemapTexture || !shaderInputs) {\n return;\n }\n\n const viewport = this.context.viewport;\n shaderInputs.setProps({\n app: {\n modelMatrix: getSkyboxModelMatrix(this.props.orientation),\n viewMatrix: getSkyboxViewMatrix(viewport),\n projectionMatrix: viewport.projectionMatrix\n }\n });\n\n model.draw(this.context.renderPass);\n }\n\n /** Creates the luma.gl model used to render the skybox cube. */\n protected _getModel(shaderInputs: ShaderInputs<any>): Model {\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager()?.getBufferLayouts() || [],\n geometry: new CubeGeometry({indices: true}),\n shaderInputs,\n isInstanced: false,\n parameters: SKYBOX_PARAMETERS\n });\n }\n\n /** Returns the WGSL/GLSL shader pair used by the layer. */\n getShaders() {\n return {\n source: SKYBOX_WGSL,\n vs: SKYBOX_VS,\n fs: SKYBOX_FS\n };\n }\n\n /** Starts an asynchronous cubemap load for the current props. */\n private async _loadCubemap(): Promise<void> {\n const {cubemap, loadOptions} = this.props;\n const nextLoadCount = this.state.loadCount + 1;\n this.setState({loadCount: nextLoadCount});\n\n if (!cubemap) {\n this._setCubemapTexture(null);\n return;\n }\n\n try {\n const loadedTexture = await loadCubemapSource(cubemap, loadOptions);\n if (this.state.loadCount !== nextLoadCount || !this.state.model) {\n return;\n }\n\n const cubemapData = convertLoadedCubemapToTextureData(loadedTexture);\n this._setCubemapTexture(createCubemapTexture(this.context.device, cubemapData));\n } catch (error) {\n if (this.state.loadCount === nextLoadCount) {\n this.raiseError(error as Error, 'SkyboxLayer failed to load cubemap');\n }\n }\n }\n\n /** Swaps the active GPU cubemap texture and updates model bindings. */\n private _setCubemapTexture(texture: DynamicTexture | null): void {\n const {cubemapTexture, model} = this.state;\n if (cubemapTexture === texture) {\n return;\n }\n\n cubemapTexture?.destroy();\n this.setState({cubemapTexture: texture});\n\n if (texture && model) {\n model.setBindings({cubeTexture: texture});\n }\n\n this.setNeedsRedraw();\n }\n}\n\n/** Loads a cubemap manifest or manifest URL through loaders.gl. */\nasync function loadCubemapSource(\n cubemap: string | TextureCubeManifest,\n loadOptions?: TextureCubeLoaderOptions | null\n): Promise<LoadedCubemapTexture> {\n const normalizedLoadOptions = createCubemapLoadOptions(cubemap, loadOptions);\n\n if (typeof cubemap === 'string') {\n return (await load(cubemap, TextureCubeLoader, normalizedLoadOptions)) as LoadedCubemapTexture;\n }\n\n return (await TextureCubeLoader.parseText(\n JSON.stringify(cubemap),\n normalizedLoadOptions\n )) as LoadedCubemapTexture;\n}\n\n/** Creates the runtime `DynamicTexture` instance used by the skybox model. */\nfunction createCubemapTexture(device: Device, data: TextureCubeData): DynamicTexture {\n return new DynamicTexture(device, {\n dimension: 'cube',\n data,\n mipmaps: true,\n sampler: {\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'clamp-to-edge',\n magFilter: 'linear',\n minFilter: 'linear',\n mipmapFilter: 'linear'\n }\n });\n}\n\n/** Removes camera translation from the active view matrix for skybox rendering. */\nfunction getSkyboxViewMatrix(viewport: Viewport): Matrix4 {\n const viewMatrix = new Matrix4(viewport.viewMatrixUncentered || viewport.viewMatrix);\n viewMatrix[12] = 0;\n viewMatrix[13] = 0;\n viewMatrix[14] = 0;\n return viewMatrix;\n}\n\n/** Returns the skybox cube transform for the requested cubemap orientation. */\nfunction getSkyboxModelMatrix(orientation: 'default' | 'y-up' = 'default'): Matrix4 {\n if (orientation === 'y-up') {\n return new Matrix4().rotateX(Math.PI / 2).scale([2, 2, 2]);\n }\n\n return new Matrix4(SKYBOX_SCALE);\n}\n\n/** Converts the current shader module list into a name-indexed dictionary. */\nfunction createShaderInputModules(defaultShaderModules: ShaderModule[]): {\n [moduleName: string]: ShaderModule;\n} {\n return Object.fromEntries([app, ...defaultShaderModules].map((module) => [module.name, module]));\n}\n\nconst SKYBOX_WGSL = /* wgsl */ `\nstruct appUniforms {\n modelMatrix: mat4x4<f32>,\n viewMatrix: mat4x4<f32>,\n projectionMatrix: mat4x4<f32>,\n};\n\n@group(0) @binding(auto) var<uniform> app : appUniforms;\n@group(0) @binding(auto) var cubeTexture : texture_cube<f32>;\n@group(0) @binding(auto) var cubeTextureSampler : sampler;\n\nstruct VertexInputs {\n @location(0) positions : vec3<f32>,\n};\n\nstruct VertexOutputs {\n @builtin(position) position : vec4<f32>,\n @location(0) direction : vec3<f32>,\n};\n\n@vertex\nfn vertexMain(inputs: VertexInputs) -> VertexOutputs {\n var outputs : VertexOutputs;\n let clipPosition =\n app.projectionMatrix *\n app.viewMatrix *\n app.modelMatrix *\n vec4<f32>(inputs.positions, 1.0);\n outputs.position = vec4<f32>(clipPosition.x, clipPosition.y, clipPosition.w, clipPosition.w);\n outputs.direction = inputs.positions;\n return outputs;\n}\n\n@fragment\nfn fragmentMain(inputs: VertexOutputs) -> @location(0) vec4<f32> {\n return textureSample(cubeTexture, cubeTextureSampler, normalize(inputs.direction));\n}\n`;\n\nconst SKYBOX_VS = /* glsl */ `#version 300 es\nin vec3 positions;\n\nuniform appUniforms {\n mat4 modelMatrix;\n mat4 viewMatrix;\n mat4 projectionMatrix;\n} app;\n\nout vec3 vDirection;\n\nvoid main(void) {\n vec4 clipPosition =\n app.projectionMatrix * app.viewMatrix * app.modelMatrix * vec4(positions, 1.0);\n gl_Position = clipPosition.xyww;\n vDirection = positions;\n}\n`;\n\nconst SKYBOX_FS = /* glsl */ `#version 300 es\nprecision highp float;\n\nuniform samplerCube cubeTexture;\n\nin vec3 vDirection;\nout vec4 fragColor;\n\nvoid main(void) {\n fragColor = texture(cubeTexture, normalize(vDirection));\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureCubeManifest, TextureCubeLoaderOptions} from '@loaders.gl/textures';\nimport type {TextureCubeData, TextureCubeFace} from '@luma.gl/engine';\n\nconst CUBE_FACES: TextureCubeFace[] = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];\n\ntype LoadedTextureLevel = {\n /** Browser-native bitmap representation for a mip level. */\n imageBitmap?: ImageBitmap;\n /** Explicit WebGPU texture format name. */\n textureFormat?: string;\n /** Legacy format field returned by some loaders.gl code paths. */\n format?: string;\n /** Raw pixel data for CPU-side texture uploads. */\n data?: Uint8Array;\n /** Width in pixels for raw pixel data uploads. */\n width?: number;\n /** Height in pixels for raw pixel data uploads. */\n height?: number;\n};\n\ntype LoadedCubemapTexture = {\n type: 'cube';\n data: unknown[];\n};\n\n/**\n * Normalizes loaders.gl cubemap load options so in-memory manifests can still\n * resolve relative face URLs through `core.baseUrl`.\n */\nexport function createCubemapLoadOptions(\n cubemap: string | TextureCubeManifest,\n loadOptions?: TextureCubeLoaderOptions | null\n): TextureCubeLoaderOptions | undefined {\n if (!loadOptions) {\n return undefined;\n }\n\n if (typeof cubemap === 'string' || loadOptions.core?.baseUrl || !loadOptions.baseUrl) {\n return loadOptions;\n }\n\n return {\n ...loadOptions,\n core: {\n ...loadOptions.core,\n baseUrl: loadOptions.baseUrl\n }\n };\n}\n\n/** Converts a loaders.gl cubemap result into luma.gl `TextureCubeData`. */\nexport function convertLoadedCubemapToTextureData(texture: LoadedCubemapTexture): TextureCubeData {\n if (texture.type !== 'cube' || !Array.isArray(texture.data) || texture.data.length !== 6) {\n throw new Error('SkyboxLayer expected a cubemap texture with six faces.');\n }\n\n return Object.fromEntries(\n CUBE_FACES.map((face, index) => [face, normalizeTextureSlice(texture.data[index], face)])\n ) as TextureCubeData;\n}\n\n/** Normalizes a cubemap face that may contain one or more mip levels. */\nfunction normalizeTextureSlice(faceData: unknown, face: TextureCubeFace): any {\n if (Array.isArray(faceData)) {\n if (faceData.length === 0) {\n throw new Error(`SkyboxLayer received an empty mip chain for face ${face}.`);\n }\n return faceData.map((level, mipLevel) => normalizeTextureLevel(level, face, mipLevel));\n }\n\n return normalizeTextureLevel(faceData, face, 0);\n}\n\n/** Normalizes a single cubemap face mip level into luma.gl upload data. */\nfunction normalizeTextureLevel(faceData: unknown, face: TextureCubeFace, mipLevel: number) {\n if (typeof ImageBitmap !== 'undefined' && faceData instanceof ImageBitmap) {\n return faceData;\n }\n\n const level = faceData as LoadedTextureLevel | null | undefined;\n\n if (level?.imageBitmap) {\n return level.imageBitmap;\n }\n\n if (level && ArrayBuffer.isView(level.data) && level.width && level.height) {\n return {\n data: level.data,\n width: level.width,\n height: level.height,\n format:\n typeof level.textureFormat === 'string'\n ? level.textureFormat\n : typeof level.format === 'string'\n ? level.format\n : 'rgba8unorm'\n };\n }\n\n throw new Error(`SkyboxLayer could not normalize cubemap face ${face} mip ${mipLevel}.`);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACKA,oBAAwB;;;ACExB,IAAM,gBAAqC;EACzC,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;;AAGpB,SAAS,YAAY,EAAC,gBAAgB,wBAAwB,iBAAgB,IAAI,eAAa;AAC7F,QAAM,WAAgC,CAAA;AACtC,MAAI,mBAAmB,QAAW;AAEhC,aAAS,mBAAmB;EAC9B;AACA,MAAI,2BAA2B,QAAW;AAExC,aAAS,0BAA0B;EACrC;AACA,MAAI,qBAAqB,QAAW;AAClC,aAAS,qBAAqB;EAChC;AACA,SAAO;AACT;AAEA,IAAM,KAAK;;;;;;;;;;;;;;;;;;;;;AAuBX,IAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CJ,IAAM,UAAU;EACrB,MAAM;EACN;EACA;EACA;;;;ADzFK,IAAM,OAAO;EAClB,QAAQ;EACR,QAAQ;EACR,QAAQ;;AAIV,SAAS,iBAAiB,EAAC,QAAQ,OAAO,GAAE,GAAC;AAC3C,QAAM,cAAc;AACpB,SAAO,OAAO,QAAQ,aAAa,KAAK,OAAO,OAAO,CAAC;AACzD;AAEA,IAAM,UAAU;;;AAKhB,IAAM,UAAU;;AAIhB,IAAM,+BAAyD;EAC7D,OAAO;EACP,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;;AAGhB,IAAM,4BAAsD;EAC1D,OAAO;EACP,mBAAmB;EACnB,cAAc;;AAShB,IAAM,eAAyD;EAC7D,WAAW,MAAM;;AAGb,IAAO,mBAAP,cAAoF,wBAGzF;EAIC,QAII;;EAGJ,aAAU;AACR,UAAM,UAAU,MAAM,WAAU;AAChC,WAAO,OAAO,OAAO,CAAA,GAAI,SAAS;MAChC,SAAS,QAAQ,QAAQ,OAAO,CAAC,OAAO,CAAC;MACzC,IAAI,iBAAiB,EAAC,QAAQ,QAAQ,IAAI,MAAM,QAAO,CAAC;MACxD,IAAI,iBAAiB,EAAC,QAAQ,QAAQ,IAAI,MAAM,QAAO,CAAC;KACzD;EACH;;EAGA,gBAAgB,SAAqB;AACnC,UAAM,gBAAe;AAErB,UAAM,mBAAmB,KAAK,oBAAmB;AAEjD,QAAI,CAAC,kBAAkB;AACrB,YAAM,IAAI,MAAM,uEAAuE;IACzF;AAIA,UAAM,qBAAqB,QAAQ,OAAO,kBAAkB;MAC1D,kBAAkB;QAChB,QAAQ,OAAO,cAAc;UAC3B,QAAQ;UACR,OAAO;UACP,QAAQ;UACR,WAAW;SACZ;;KAEJ;AAED,qBAAiB,aAAa;MAC5B,gBAAgB;QACd,MAAM;QACN,MAAM;QACN,UAAU;;KAEb;AAED,SAAK,SAAS;MACZ;MACA,OAAO,KAAK,UAAS;KACtB;EACH;EAEA,cAAc,SAAqB;AA3HrC;AA4HI,eAAK,MAAM,uBAAX,mBAA+B;AAC/B,UAAM,cAAc,OAAO;EAC7B;;EAGA,OAAI;AACF,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,qBAAqB,KAAK,MAAM;AAEtC,QAAI,CAAC,SAAS,CAAC,oBAAoB;AACjC;IACF;AAEA,UAAM,WAAW,KAAK,QAAQ;AAC9B,UAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,KAAK,SAAS,KAAK,CAAC;AAC3D,UAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,SAAS,MAAM,CAAC;AAE7D,uBAAmB,OAAO,EAAC,OAAO,eAAe,QAAQ,eAAc,CAAC;AAExE,UAAM,mBAAmB,sBAAsB,kBAAkB;AAEjE,QAAI,CAAC,kBAAkB;AACrB;IACF;AAEA,UAAM,EACJ,cACA,YACA,WACA,YACA,YACA,YACA,gBACA,eAAc,IACZ,KAAK;AAET,UAAM,gBAAgB;MACpB,WAAW,OAAO,YAAY;MAC9B,SAAS,OAAO,UAAU;MAC1B;MACA,YAAY,KAAK,UAAU;MAC3B;MACA;MACA;MACA;;AAIF,SAAK,qBAAqB;MACxB,SAAS;QACP,gBAAgB;QAChB,wBAAwB;QACxB,kBAAkB;;KAErB;AACD,UAAM,aAAa,SAAS;MAC1B,MAAM;QACJ,GAAG;QACH,WAAW;QACX,YAAY,aAAa;;KAE5B;AACD,UAAM,cAAc,4BAA4B;AAChD,UAAM,mBAAmB,KAAK,QAAQ,OAAO,gBAAgB;MAC3D,IAAI,GAAG,KAAK,MAAM;MAClB,aAAa;MACb,YAAY,EAAC,UAAU,CAAC,GAAG,GAAG,eAAe,cAAc,EAAC;MAC5D,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;MACvB,YAAY;MACZ,cAAc;KACf;AACD,UAAM,KAAK,gBAAgB;AAC3B,qBAAiB,IAAG;AAGpB,SAAK,qBAAqB;MACxB,SAAS;QACP,gBAAgB;QAChB,wBAAwB;QACxB,kBAAkB;;KAErB;AACD,UAAM,aAAa,SAAS;MAC1B,MAAM;KACP;AACD,UAAM,cAAc,yBAAyB;AAC7C,UAAM,KAAK,KAAK,QAAQ,UAAU;EACpC;;AAhJA,cAJW,kBAIJ,aAAY;AACnB,cALW,kBAKJ,gBAAe;AAkJxB,SAAS,sBAAsB,aAAwB;AACrD,QAAM,kBAAkB,YAAY,iBAAiB,CAAC;AAEtD,MAAI,CAAC,iBAAiB;AACpB,WAAO;EACT;AAEA,SAAO,aAAa,kBAAkB,gBAAgB,UAAU;AAClE;;;AEzNA,IAAAA,eAAgD;AAChD,IAAAC,iBAA+B;AAC/B,yBAA8B;;;ACH9B,oBAAuB;AAEjB,IAAO,kBAAP,cAA+B,uBAAQ;EAC3C,YAAY,OAAO,CAAA,GAAE;AACnB,UACE,OAAO,OAAO,CAAA,GAAI,MAAM;MACtB,YAAY,mBAAmB,IAAI;MACnC,UAAU;KACX,CAAC;EAEN;;AAGF,SAAS,mBAAmB,EAAC,SAAS,GAAG,WAAW,KAAK,YAAY,MAAM,YAAY,KAAI,GAAC;AAC1F,QAAM,YAAY;;IAEhB;IACA;IACA;IACA,MAAM,WAAW;IACjB,IAAM;IACN;IACA,MAAM,WAAW;IACjB,IAAM;IACN;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB,IAAM;IACN;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB;IACA;IACA,MAAM,YAAY;IAClB,IAAM;IACN;IACA,MAAM,YAAY;IAClB,IAAM;IACN;;AAGF,QAAM,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAGhG,QAAM,YAAY,IAAI,MAAM,UAAU,MAAM;AAC5C,WAAS,IAAI,GAAG,IAAI,UAAU,SAAS,GAAG,KAAK;AAC7C,UAAM,KAAK,IAAI;AACf,cAAU,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,IAAI,OAAO;AAChD,cAAU,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,IAAI,OAAO;AAChD,cAAU,KAAK,CAAC,IAAI;EACtB;AACA,SAAO;IACL,WAAW,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,SAAS,EAAC;IACvD,SAAS,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,OAAO,EAAC;IACnD,WAAW,EAAC,MAAM,GAAG,OAAO,IAAI,aAAa,SAAS,EAAC;;AAE3D;;;AC5DA,kBAAsB;AAetB,SAAS,cAAc,SAAO;AAE5B,MAAI,aAAa;AACjB,WAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,KAAK;AAC3C,kBAAc,QAAQ,CAAC,EAAE,SAAS,QAAQ,IAAI,CAAC,CAAC;EAClD;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AACnC,IAAM,oBAAoB,EAAC,SAAS,MAAM,UAAU,MAAK;AAEnD,SAAU,kBAAkB,EAChC,MACA,UAAU,CAAC,GAAG,YAAY,EAAE,MAC5B,eAAe,CAAC,MAAM,EAAE,WACxB,WAAW,CAAC,MAAM,eAClB,uBAAuB,CAAC,GAAG,SAAS,CAAC,GAAG,GACxC,YAAW,GACZ;AACC,QAAM,UAAwB,CAAA;AAE9B,aAAW,UAAU,MAAM;AACzB,UAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,UAAM,YAAY,aAAa,MAAM,KAAK;AAC1C,UAAM,QAAQ,SAAS,MAAM;AAE7B,UAAM,UAAU,KAAK,IAAI,CAAC,MAAM,IAAI,oBAAQ,CAAC,CAAC;AAC9C,UAAM,iBAAiB,QAAQ,MAAM,CAAC,EAAE,QAAO;AAG/C,UAAM,aAAa,cAAc,OAAO;AAGxC,UAAM,cAAc,qBAAqB,QAAQ,EAAC,WAAU,CAAC;AAG7D,eAAW,cAAc,aAAa;AACpC,UAAI,UAAU,SAAS;AACrB,cAAM,SAAS,sBAAsB;UACnC,MAAM;UACN;UACA;UACA;UACA;UACA;SACD;AACD,gBAAQ,KAAK,MAAM;MACrB;AAEA,UAAI,UAAU,UAAU;AACtB,cAAM,SAAS,sBAAsB;UACnC,MAAM;UACN;UACA;UACA;UACA;UACA;SACD;AACD,gBAAQ,KAAK,MAAM;MACrB;IACF;EACF;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,EAC7B,MACA,YACA,YACA,OACA,QACA,YAAW,GACZ;AACC,QAAM,gBAAgB,aAAa;AACnC,MAAI,kBAAkB;AACtB,MAAI,mBAAmB;AACvB,MAAI,IAAI;AACR,OAAK,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACpC,uBAAmB,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC;AAC/C,QAAI,kBAAkB,eAAe;AACnC;IACF;AACA,uBAAmB;EACrB;AAIA,MAAI,MAAM,KAAK,SAAS,GAAG;AACzB,SAAK;EACP;AAEA,QAAM,aAAa,KAAK,IAAI,CAAC,EAAE,MAAK,EAAG,SAAS,KAAK,CAAC,CAAC,EAAE,UAAS;AAClE,QAAM,QAAQ,gBAAgB;AAC9B,QAAM,UAAU,WAAW,MAAK,EAAG,SAAS,IAAI,oBAAQ,OAAO,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;AAElF,QAAM,cAAc,IAAI,oBAAQ,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC;AAEvF,QAAM,QAAS,YAAY,cAAa,IAAK,MAAO,KAAK;AAEzD,SAAO,EAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,OAAO,OAAM;AACnE;;;ACrHA,IAAAC,eAA6B;AAGvB,SAAU,sBAAsB,EAAC,GAAG,IAAI,IAAI,cAAc,KAAI,GAAC;AACnE,QAAM,aAAa,IAAI,qBAAQ,EAAE,EAAE,SAAS,EAAE;AAC9C,QAAM,cAAc,IAAI,qBAAQ,CAAC,EAAE,SAAS,EAAE;AAC9C,MAAI,aAAa,WAAW,IAAI,WAAW;AAC3C,MAAI,aAAa;AACf,qBAAa,oBAAM,YAAY,GAAG,CAAC;EACrC;AAEA,SAAO,WAAW,KAAK,IAAI,IAAI,UAAU;AAC3C;AAGM,SAAU,0BAA0B,EAAC,GAAG,OAAM,GAAC;AACnD,MAAI,IAAI,qBAAQ,CAAC;AACjB,MAAI,WAA2B;AAC/B,MAAI,kBAAkB;AACtB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,EAAE,GAAG;AAC1C,UAAM,KAAK,OAAO,CAAC;AACnB,UAAM,KAAK,OAAO,IAAI,CAAC;AACvB,UAAM,iBAAiB,sBAAsB,EAAC,GAAG,IAAI,GAAE,CAAC;AACxD,UAAM,wBAAwB,EAAE,gBAAgB,cAAc;AAC9D,QAAI,wBAAwB,iBAAiB;AAC3C,wBAAkB;AAClB,iBAAW;AACX,cAAQ;IACV;EACF;AACA,SAAO;IACL,OAAO;IACP;IACA,IAAI,OAAO,KAAK;IAChB,IAAI,OAAO,QAAQ,CAAC;IACpB;IACA,UAAU,KAAK,KAAK,eAAe;;AAEvC;;;AH5BA,IAAM,4BAA4B;AAClC,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AAGzB,IAAM,uBAAuB;AAe7B,IAAM,6BAA6B;EACjC,MAAM,IAAI,gBAAgB,EAAC,UAAU,iBAAiB,WAAW,iBAAgB,CAAC;;AAGpF,IAAMC,gBAAwD,OAAO,OACnE,CAAA,GACA,iBAAiB,cACjB;EACE,aAAa;EACb,kBAAkB;EAElB,WAAW;EACX,MAAM;EAEN,gBAAgB;EAChB,gBAAgB;EAEhB,SAAS,CAAC,MAAM,EAAE;EAClB,UAAU,CAAC,MAAM,EAAE;EACnB,gBAAgB,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG;EACpC,cAAc,CAAC,MAAM,EAAE;EACvB,sBAAsB,CAAC,QAAQ,EAAC,WAAU,MACxC,aAAa,4BAA4B,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG;CACpE;AAGG,IAAO,kBAAP,cAGI,4BAAmE;EAI3E,QAKI;EAEJ,kBAAe;AACb,SAAK,QAAQ;MACX,SAAS,CAAA;MACT,MAAM,IAAI,gBAAgB,EAAC,UAAU,iBAAiB,WAAW,iBAAgB,CAAC;MAClF,cAAc;MACd,eAAe,CAAA;;EAEnB;EAEA,YAAY,KAAK,UAAU,kBAAkB,kBAAgB;AAC3D,QAAI,qBAAqB,+BAAkB,eAAe;AACxD,YAAM,CAAC,IAAI,EAAE,IAAI,SAAS,oBAAoB,GAAG;AACjD,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,aAAO,SAAS,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC9C,WAAW,qBAAqB,+BAAkB,gBAAgB;AAChE,YAAM,CAAC,IAAI,EAAE,IAAI;AACjB,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,aAAO,SAAS,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC9C;AAEA,WAAO,SAAS,YAAY,GAAG;EACjC;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,QAAI,YAAY,eAAe,YAAY,uBAAuB;AAChE,YAAM,EACJ,MACA,SACA,cACA,gBACA,sBACA,kBACA,iBAAgB,IACd,KAAK;AAET,YAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,YAAM,cAAc,CAAC,MAAM,KAAK,YAAY,GAAG,UAAU,kBAAkB,gBAAgB;AAC3F,WAAK,MAAM,UAAU,kBAAkB;QACrC;QACA;QACA;QACA,UAAU;QACV;QACA;OACD;AACD,WAAK,yBAAwB;IAC/B;AACA,QAAI,YAAY,cAAc;AAC5B,UAAI,MAAM,UAAU,SAAS,OAAO;AAClC,aAAK,yBAAwB;MAC/B;IACF;EACF;EAEA,2BAAwB;AACtB,UAAM,EAAC,gBAAgB,eAAc,IAAI,KAAK;AAC9C,QAAI,kBAAkB,kBAAkB,GAAG;AACzC,YAAM,SAAS,KAAK,MAAM,KAAK,cAAc;AAC7C,YAAM,SAAS,KAAK,MAAM,QAAQ,QAAQ,IAAW;AACrD,YAAM,EAAC,MAAK,IAAI,0BAA0B,EAAC,QAAQ,GAAG,eAAc,CAAC;AACrE,WAAK,MAAM,gBAAgB,CAAC,EAAC,UAAU,MAAK,CAAC;IAC/C,OAAO;AACL,WAAK,MAAM,gBAAgB,CAAA;IAC7B;EACF;EAEA,eAAe,EAAC,KAAI,GAAC;AACnB,WAAO,OAAO,OAAO,MAAM;;MAEzB,QAAS,KAAK,UAAU,KAAK,OAAO,QAAS,KAAK;KACnD;EACH;EAEA,eAAY;AACV,WAAO;MACL,IAAI,iBACF,KAAK,OACL,KAAK,iBAAiB;QACpB,IAAI;;QAEJ,MAAM,KAAK,MAAM;OAClB,CAAC;MAEJ,IAAI,KAAK,MAAM,YACb,KAAK,iBACH,OAAO,OAAO,CAAA,GAAI,KAAK,MAAM,kBAAkB;QAC7C,IAAI;QACJ,MAAM,KAAK,MAAM;QACjB,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QACtC,UAAU,CAAC,MAAM,EAAE;QACnB,WAAW,KAAK,MAAM;QACtB,MAAM,KAAK,MAAM;QACjB,UAAU;QACV,YAAY;UACV,OAAO;UACP,WAAW;;OAEd,CAAC,CACH;MAEH,KAAK,MAAM,iBACT,IAAI,gCAAiB;QACnB,IAAI,GAAG,KAAK,MAAM;QAClB,MAAM,KAAK,MAAM;QACjB,MAAM,KAAK,MAAM;OAClB;;EAEP;;AArHA,cAJW,iBAIJ,aAAY;AACnB,cALW,iBAKJ,gBAAeA;;;AI9DxB,IAAAC,eAAmB;AACnB,sBAIO;AACP,IAAAA,eAAoB;AAEpB,IAAAA,eAAsB;AAEtB,IAAAC,iBAAgE;;;ACPhE,IAAM,aAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AA0BnE,SAAU,yBACd,SACA,aAA6C;AAnC/C;AAqCE,MAAI,CAAC,aAAa;AAChB,WAAO;EACT;AAEA,MAAI,OAAO,YAAY,cAAY,iBAAY,SAAZ,mBAAkB,YAAW,CAAC,YAAY,SAAS;AACpF,WAAO;EACT;AAEA,SAAO;IACL,GAAG;IACH,MAAM;MACJ,GAAG,YAAY;MACf,SAAS,YAAY;;;AAG3B;AAGM,SAAU,kCAAkC,SAA6B;AAC7E,MAAI,QAAQ,SAAS,UAAU,CAAC,MAAM,QAAQ,QAAQ,IAAI,KAAK,QAAQ,KAAK,WAAW,GAAG;AACxF,UAAM,IAAI,MAAM,wDAAwD;EAC1E;AAEA,SAAO,OAAO,YACZ,WAAW,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,sBAAsB,QAAQ,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAE7F;AAGA,SAAS,sBAAsB,UAAmB,MAAqB;AACrE,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oDAAoD,OAAO;IAC7E;AACA,WAAO,SAAS,IAAI,CAAC,OAAO,aAAa,sBAAsB,OAAO,MAAM,QAAQ,CAAC;EACvF;AAEA,SAAO,sBAAsB,UAAU,MAAM,CAAC;AAChD;AAGA,SAAS,sBAAsB,UAAmB,MAAuB,UAAgB;AACvF,MAAI,OAAO,gBAAgB,eAAe,oBAAoB,aAAa;AACzE,WAAO;EACT;AAEA,QAAM,QAAQ;AAEd,MAAI,+BAAO,aAAa;AACtB,WAAO,MAAM;EACf;AAEA,MAAI,SAAS,YAAY,OAAO,MAAM,IAAI,KAAK,MAAM,SAAS,MAAM,QAAQ;AAC1E,WAAO;MACL,MAAM,MAAM;MACZ,OAAO,MAAM;MACb,QAAQ,MAAM;MACd,QACE,OAAO,MAAM,kBAAkB,WAC3B,MAAM,gBACN,OAAO,MAAM,WAAW,WACtB,MAAM,SACN;;EAEZ;AAEA,QAAM,IAAI,MAAM,gDAAgD,YAAY,WAAW;AACzF;;;AD5EA,IAAM,MAA8C;EAClD,MAAM;EACN,cAAc;IACZ,aAAa;IACb,YAAY;IACZ,kBAAkB;;;AAItB,IAAM,oBAA8C;EAClD,UAAU;EACV,mBAAmB;EACnB,cAAc;;AAGhB,IAAM,eAAe,IAAI,qBAAO,EAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;AAElD,IAAMC,gBAA+C;EACnD,SAAS;EACT,aAAa;EACb,aAAa;;AAsCT,IAAO,cAAP,cAEI,mBAA+C;EAIvD,QAA0B;;EAG1B,kBAAe;AACb,UAAM,mBAAmB,KAAK,oBAAmB;AACjD,yDAAkB,OAAO,CAAC,uBAAuB;AAEjD,UAAM,eAAe,IAAI,4BACvB,yBAAyB,KAAK,QAAQ,oBAAoB,GAC1D;MACE,iBAAiB;KAClB;AAEH,UAAM,QAAQ,KAAK,UAAU,YAAY;AAEzC,SAAK,SAAS;MACZ,gBAAgB;MAChB,WAAW;MACX;MACA;KACD;AAED,SAAK,aAAY,EAAG,MAAM,MAAK;IAAE,CAAC;EACpC;;EAGA,YAAY,EAAC,OAAO,SAAQ,GAAyB;AACnD,QAAI,MAAM,YAAY,SAAS,WAAW,MAAM,gBAAgB,SAAS,aAAa;AACpF,WAAK,aAAY,EAAG,MAAM,MAAK;MAAE,CAAC;IACpC;EACF;;EAGA,gBAAa;AA7Hf;AA8HI,eAAK,MAAM,mBAAX,mBAA2B;AAC3B,eAAK,MAAM,UAAX,mBAAkB;EACpB;;EAGA,OAAI;AACF,UAAM,EAAC,OAAO,gBAAgB,aAAY,IAAI,KAAK;AACnD,QAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,cAAc;AAC9C;IACF;AAEA,UAAM,WAAW,KAAK,QAAQ;AAC9B,iBAAa,SAAS;MACpB,KAAK;QACH,aAAa,qBAAqB,KAAK,MAAM,WAAW;QACxD,YAAY,oBAAoB,QAAQ;QACxC,kBAAkB,SAAS;;KAE9B;AAED,UAAM,KAAK,KAAK,QAAQ,UAAU;EACpC;;EAGU,UAAU,cAA+B;AAtJrD;AAuJI,WAAO,IAAI,qBAAM,KAAK,QAAQ,QAAQ;MACpC,GAAG,KAAK,WAAU;MAClB,IAAI,KAAK,MAAM;MACf,gBAAc,UAAK,oBAAmB,MAAxB,mBAA4B,uBAAsB,CAAA;MAChE,UAAU,IAAI,4BAAa,EAAC,SAAS,KAAI,CAAC;MAC1C;MACA,aAAa;MACb,YAAY;KACb;EACH;;EAGA,aAAU;AACR,WAAO;MACL,QAAQ;MACR,IAAI;MACJ,IAAI;;EAER;;EAGQ,MAAM,eAAY;AACxB,UAAM,EAAC,SAAS,YAAW,IAAI,KAAK;AACpC,UAAM,gBAAgB,KAAK,MAAM,YAAY;AAC7C,SAAK,SAAS,EAAC,WAAW,cAAa,CAAC;AAExC,QAAI,CAAC,SAAS;AACZ,WAAK,mBAAmB,IAAI;AAC5B;IACF;AAEA,QAAI;AACF,YAAM,gBAAgB,MAAM,kBAAkB,SAAS,WAAW;AAClE,UAAI,KAAK,MAAM,cAAc,iBAAiB,CAAC,KAAK,MAAM,OAAO;AAC/D;MACF;AAEA,YAAM,cAAc,kCAAkC,aAAa;AACnE,WAAK,mBAAmB,qBAAqB,KAAK,QAAQ,QAAQ,WAAW,CAAC;IAChF,SAAS,OAAP;AACA,UAAI,KAAK,MAAM,cAAc,eAAe;AAC1C,aAAK,WAAW,OAAgB,oCAAoC;MACtE;IACF;EACF;;EAGQ,mBAAmB,SAA8B;AACvD,UAAM,EAAC,gBAAgB,MAAK,IAAI,KAAK;AACrC,QAAI,mBAAmB,SAAS;AAC9B;IACF;AAEA,qDAAgB;AAChB,SAAK,SAAS,EAAC,gBAAgB,QAAO,CAAC;AAEvC,QAAI,WAAW,OAAO;AACpB,YAAM,YAAY,EAAC,aAAa,QAAO,CAAC;IAC1C;AAEA,SAAK,eAAc;EACrB;;AA3HA,cAHW,aAGJ,gBAAeA;AACtB,cAJW,aAIJ,aAAY;AA8HrB,eAAe,kBACb,SACA,aAA6C;AAE7C,QAAM,wBAAwB,yBAAyB,SAAS,WAAW;AAE3E,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAQ,UAAM,mBAAK,SAAS,mCAAmB,qBAAqB;EACtE;AAEA,SAAQ,MAAM,kCAAkB,UAC9B,KAAK,UAAU,OAAO,GACtB,qBAAqB;AAEzB;AAGA,SAAS,qBAAqB,QAAgB,MAAqB;AACjE,SAAO,IAAI,8BAAe,QAAQ;IAChC,WAAW;IACX;IACA,SAAS;IACT,SAAS;MACP,cAAc;MACd,cAAc;MACd,cAAc;MACd,WAAW;MACX,WAAW;MACX,cAAc;;GAEjB;AACH;AAGA,SAAS,oBAAoB,UAAkB;AAC7C,QAAM,aAAa,IAAI,qBAAQ,SAAS,wBAAwB,SAAS,UAAU;AACnF,aAAW,EAAE,IAAI;AACjB,aAAW,EAAE,IAAI;AACjB,aAAW,EAAE,IAAI;AACjB,SAAO;AACT;AAGA,SAAS,qBAAqB,cAAkC,WAAS;AACvE,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,IAAI,qBAAO,EAAG,QAAQ,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;EAC3D;AAEA,SAAO,IAAI,qBAAQ,YAAY;AACjC;AAGA,SAAS,yBAAyB,sBAAoC;AAGpE,SAAO,OAAO,YAAY,CAAC,KAAK,GAAG,oBAAoB,EAAE,IAAI,CAACC,YAAW,CAACA,QAAO,MAAMA,OAAM,CAAC,CAAC;AACjG;AAEA,IAAM;;EAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuC/B,IAAM;;EAAuB;;;;;;;;;;;;;;;;;;;AAmB7B,IAAM;;EAAuB;;;;;;;;;;;;;",
|
|
6
|
+
"names": ["import_core", "import_layers", "import_core", "defaultProps", "import_core", "import_engine", "defaultProps", "module"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export type { PathOutlineLayerProps } from "./path-outline-layer/path-outline-la
|
|
|
2
2
|
export { PathOutlineLayer } from "./path-outline-layer/path-outline-layer.js";
|
|
3
3
|
export type { PathMarkerLayerProps } from "./path-marker-layer/path-marker-layer.js";
|
|
4
4
|
export { PathMarkerLayer } from "./path-marker-layer/path-marker-layer.js";
|
|
5
|
+
export type { SkyboxLayerProps } from "./skybox-layer/skybox-layer.js";
|
|
6
|
+
export { SkyboxLayer } from "./skybox-layer/skybox-layer.js";
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,qBAAqB,EAAC,mDAAgD;AACnF,OAAO,EAAC,gBAAgB,EAAC,mDAAgD;AAEzE,YAAY,EAAC,oBAAoB,EAAC,iDAA8C;AAChF,OAAO,EAAC,eAAe,EAAC,iDAA8C"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,qBAAqB,EAAC,mDAAgD;AACnF,OAAO,EAAC,gBAAgB,EAAC,mDAAgD;AAEzE,YAAY,EAAC,oBAAoB,EAAC,iDAA8C;AAChF,OAAO,EAAC,eAAe,EAAC,iDAA8C;AAEtE,YAAY,EAAC,gBAAgB,EAAC,uCAAoC;AAClE,OAAO,EAAC,WAAW,EAAC,uCAAoC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,5 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
export { PathOutlineLayer } from "./path-outline-layer/path-outline-layer.js";
|
|
5
5
|
export { PathMarkerLayer } from "./path-marker-layer/path-marker-layer.js";
|
|
6
|
+
export { SkyboxLayer } from "./skybox-layer/skybox-layer.js";
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,gBAAgB,EAAC,mDAAgD;AAGzE,OAAO,EAAC,eAAe,EAAC,iDAA8C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,gBAAgB,EAAC,mDAAgD;AAGzE,OAAO,EAAC,eAAe,EAAC,iDAA8C;AAGtE,OAAO,EAAC,WAAW,EAAC,uCAAoC"}
|
|
@@ -2,7 +2,7 @@ declare function getUniforms({ outlineEnabled, outlineRenderShadowmap, outlineSh
|
|
|
2
2
|
export declare const outline: {
|
|
3
3
|
readonly name: "outline";
|
|
4
4
|
readonly vs: "#version 300 es\nin float instanceZLevel;\nout float outline_vzLevel;\nout vec4 outline_vPosition;\n\n// Set the z level for the outline shadowmap rendering\nvoid outline_setZLevel(float zLevel) {\n outline_vzLevel = zLevel;\n}\n\n// Store an adjusted position for texture2DProj\nvoid outline_setUV(vec4 position) {\n // mat4(\n // 0.5, 0.0, 0.0, 0.0,\n // 0.0, 0.5, 0.0, 0.0,\n // 0.0, 0.0, 0.5, 0.0,\n // 0.5, 0.5, 0.5, 1.0\n // ) * position;\n outline_vPosition = vec4(position.xyz * 0.5 + position.w * 0.5, position.w);\n}\n";
|
|
5
|
-
readonly fs: "uniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nin float outline_vzLevel;\n// in vec2 outline_vUV;\nin vec4 outline_vPosition;\n\
|
|
5
|
+
readonly fs: "uniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nin float outline_vzLevel;\n// in vec2 outline_vUV;\nin vec4 outline_vPosition;\n\nconst float OUTLINE_Z_LEVEL_ERROR = 0.01;\n\n// Return a darker color in shadowmap\nvec4 outline_filterShadowColor(vec4 color) {\n return vec4(outline_vzLevel / 255., outline_vzLevel / 255., outline_vzLevel / 255., 1.);\n}\n\n// Return a darker color if in shadowmap\nvec4 outline_filterDarkenColor(vec4 color) {\n if (outline_uEnabled) {\n float maxZLevel;\n if (outline_vPosition.q > 0.0) {\n maxZLevel = textureProj(outline_uShadowmap, outline_vPosition).r * 255.;\n } else {\n discard;\n }\n if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {\n return vec4(color.rgb * 0.5, color.a);\n } else {\n discard;\n }\n }\n return color;\n}\n\n// if enabled and rendering outlines - Render depth to shadowmap\n// if enabled and rendering colors - Return a darker color if in shadowmap\n// if disabled, just return color\nvec4 outline_filterColor(vec4 color) {\n if (outline_uEnabled) {\n return outline_uRenderOutlines ?\n outline_filterShadowColor(color) :\n outline_filterDarkenColor(color);\n }\n return color;\n}\n";
|
|
6
6
|
readonly getUniforms: typeof getUniforms;
|
|
7
7
|
};
|
|
8
8
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/path-outline-layer/outline.ts"],"names":[],"mappings":"AAaA,iBAAS,WAAW,CAAC,EAAC,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAC,sBAAgB,uBAc9F;
|
|
1
|
+
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/path-outline-layer/outline.ts"],"names":[],"mappings":"AAaA,iBAAS,WAAW,CAAC,EAAC,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAC,sBAAgB,uBAc9F;AAwED,eAAO,MAAM,OAAO;;;;;CAKa,CAAC"}
|
|
@@ -53,8 +53,6 @@ in float outline_vzLevel;
|
|
|
53
53
|
// in vec2 outline_vUV;
|
|
54
54
|
in vec4 outline_vPosition;
|
|
55
55
|
|
|
56
|
-
out vec4 fragColor;
|
|
57
|
-
|
|
58
56
|
const float OUTLINE_Z_LEVEL_ERROR = 0.01;
|
|
59
57
|
|
|
60
58
|
// Return a darker color in shadowmap
|
|
@@ -67,12 +65,12 @@ vec4 outline_filterDarkenColor(vec4 color) {
|
|
|
67
65
|
if (outline_uEnabled) {
|
|
68
66
|
float maxZLevel;
|
|
69
67
|
if (outline_vPosition.q > 0.0) {
|
|
70
|
-
maxZLevel =
|
|
68
|
+
maxZLevel = textureProj(outline_uShadowmap, outline_vPosition).r * 255.;
|
|
71
69
|
} else {
|
|
72
70
|
discard;
|
|
73
71
|
}
|
|
74
72
|
if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {
|
|
75
|
-
vec4(color.rgb * 0.5, color.a);
|
|
73
|
+
return vec4(color.rgb * 0.5, color.a);
|
|
76
74
|
} else {
|
|
77
75
|
discard;
|
|
78
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/path-outline-layer/outline.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAIpC,8BAA8B;AAC9B,MAAM,aAAa,GAAwB;IACzC,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;IAC7B,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,SAAS,WAAW,CAAC,EAAC,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAC,GAAG,aAAa;IAC7F,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,eAAe;QACf,QAAQ,CAAC,gBAAgB,GAAG,cAAc,CAAC;IAC7C,CAAC;IACD,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACzC,eAAe;QACf,QAAQ,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;IAC5D,CAAC;IACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,QAAQ,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBV,CAAC;AAEF,MAAM,EAAE,GAAG
|
|
1
|
+
{"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/path-outline-layer/outline.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAIpC,8BAA8B;AAC9B,MAAM,aAAa,GAAwB;IACzC,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;IAC7B,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,SAAS,WAAW,CAAC,EAAC,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAC,GAAG,aAAa;IAC7F,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,eAAe;QACf,QAAQ,CAAC,gBAAgB,GAAG,cAAc,CAAC;IAC7C,CAAC;IACD,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACzC,eAAe;QACf,QAAQ,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;IAC5D,CAAC;IACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,QAAQ,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBV,CAAC;AAEF,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CV,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,EAAE;IACF,EAAE;IACF,WAAW;CACoB,CAAC"}
|
|
@@ -25,11 +25,7 @@ export declare class PathOutlineLayer<DataT = any, ExtraPropsT = Record<string,
|
|
|
25
25
|
};
|
|
26
26
|
getShaders(): any;
|
|
27
27
|
initializeState(context: LayerContext): void;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
parameters: any;
|
|
31
|
-
uniforms: any;
|
|
32
|
-
context: any;
|
|
33
|
-
}): void;
|
|
28
|
+
finalizeState(context: LayerContext): void;
|
|
29
|
+
draw(): void;
|
|
34
30
|
}
|
|
35
31
|
//# sourceMappingURL=path-outline-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-outline-layer.d.ts","sourceRoot":"","sources":["../../src/path-outline-layer/path-outline-layer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"path-outline-layer.d.ts","sourceRoot":"","sources":["../../src/path-outline-layer/path-outline-layer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAI1C;;GAEG;AACH,eAAO,MAAM,IAAI;;;;CAIhB,CAAC;AAmCF,MAAM,MAAM,qBAAqB,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG;IACjE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1E,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACjD,CAAC;AAMF,qBAAa,gBAAgB,CAAC,KAAK,GAAG,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,SAAS,CACjG,KAAK,EACL,WAAW,GAAG,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CACrD;IACC,MAAM,CAAC,SAAS,SAAsB;IACtC,MAAM,CAAC,YAAY,2CAAgB;IAEnC,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,cAAc,EAAE,GAAG,CAAC;QACpB,kBAAkB,EAAE,WAAW,CAAC;KACjC,CAAc;IAGf,UAAU;IAUV,eAAe,CAAC,OAAO,EAAE,YAAY;IAoCrC,aAAa,CAAC,OAAO,EAAE,YAAY;IAMnC,IAAI;CAmFL"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { PathLayer } from '@deck.gl/layers';
|
|
5
|
-
import { GL } from '@luma.gl/constants';
|
|
6
5
|
import { outline } from "./outline.js";
|
|
7
6
|
/**
|
|
8
7
|
* Unit literal to shader unit number conversion.
|
|
@@ -59,29 +58,55 @@ export class PathOutlineLayer extends PathLayer {
|
|
|
59
58
|
// @ts-expect-error PathLayer is missing LayerContext arg
|
|
60
59
|
initializeState(context) {
|
|
61
60
|
super.initializeState();
|
|
61
|
+
const attributeManager = this.getAttributeManager();
|
|
62
|
+
if (!attributeManager) {
|
|
63
|
+
throw new Error('PathOutlineLayer requires an attribute manager during initialization.');
|
|
64
|
+
}
|
|
62
65
|
// Create an outline "shadow" map
|
|
63
66
|
// TODO - we should create a single outlineMap for all layers
|
|
64
67
|
const outlineFramebuffer = context.device.createFramebuffer({
|
|
65
|
-
colorAttachments: [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
colorAttachments: [
|
|
69
|
+
context.device.createTexture({
|
|
70
|
+
format: 'rgba8unorm',
|
|
71
|
+
width: 1,
|
|
72
|
+
height: 1,
|
|
73
|
+
mipLevels: 1
|
|
74
|
+
})
|
|
75
|
+
]
|
|
69
76
|
});
|
|
70
|
-
|
|
71
|
-
// @ts-expect-error check whether this.getAttributeManager works here
|
|
72
|
-
this.state.attributeManager.addInstanced({
|
|
77
|
+
attributeManager.addInstanced({
|
|
73
78
|
instanceZLevel: {
|
|
74
79
|
size: 1,
|
|
75
|
-
type:
|
|
80
|
+
type: 'uint8',
|
|
76
81
|
accessor: 'getZLevel'
|
|
77
82
|
}
|
|
78
83
|
});
|
|
84
|
+
this.setState({
|
|
85
|
+
outlineFramebuffer,
|
|
86
|
+
model: this._getModel()
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
finalizeState(context) {
|
|
90
|
+
this.state.outlineFramebuffer?.destroy();
|
|
91
|
+
super.finalizeState(context);
|
|
79
92
|
}
|
|
80
93
|
// Override draw to add render module
|
|
81
|
-
draw(
|
|
82
|
-
|
|
94
|
+
draw() {
|
|
95
|
+
const model = this.state.model;
|
|
96
|
+
const outlineFramebuffer = this.state.outlineFramebuffer;
|
|
97
|
+
if (!model || !outlineFramebuffer) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const viewport = this.context.viewport;
|
|
101
|
+
const viewportWidth = Math.max(1, Math.ceil(viewport.width));
|
|
102
|
+
const viewportHeight = Math.max(1, Math.ceil(viewport.height));
|
|
103
|
+
outlineFramebuffer.resize({ width: viewportWidth, height: viewportHeight });
|
|
104
|
+
const shadowmapTexture = getFramebufferTexture(outlineFramebuffer);
|
|
105
|
+
if (!shadowmapTexture) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
83
108
|
const { jointRounded, capRounded, billboard, miterLimit, widthUnits, widthScale, widthMinPixels, widthMaxPixels } = this.props;
|
|
84
|
-
|
|
109
|
+
const basePathProps = {
|
|
85
110
|
jointType: Number(jointRounded),
|
|
86
111
|
capType: Number(capRounded),
|
|
87
112
|
billboard,
|
|
@@ -90,52 +115,53 @@ export class PathOutlineLayer extends PathLayer {
|
|
|
90
115
|
miterLimit,
|
|
91
116
|
widthMinPixels,
|
|
92
117
|
widthMaxPixels
|
|
93
|
-
}
|
|
118
|
+
};
|
|
94
119
|
// Render the outline shadowmap (based on segment z orders)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
else {
|
|
102
|
-
outlineFramebuffer.resize();
|
|
103
|
-
}
|
|
104
|
-
const shadowmapTexture = outlineFramebuffer.colorAttachments[0]?.texture;
|
|
105
|
-
if (!shadowmapTexture) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
// TODO(v9): resize, see 'sf' example.
|
|
109
|
-
// outlineFramebuffer.resize();
|
|
110
|
-
// TODO(v9) clear FBO
|
|
111
|
-
// outlineFramebuffer.clear({ color: true, depth: true, stencil: true });
|
|
112
|
-
this.state.model.updateModuleSettings({
|
|
113
|
-
outlineEnabled: true,
|
|
114
|
-
outlineRenderShadowmap: true,
|
|
115
|
-
outlineShadowmap: shadowmapTexture
|
|
120
|
+
this.setShaderModuleProps({
|
|
121
|
+
outline: {
|
|
122
|
+
outlineEnabled: true,
|
|
123
|
+
outlineRenderShadowmap: true,
|
|
124
|
+
outlineShadowmap: shadowmapTexture
|
|
125
|
+
}
|
|
116
126
|
});
|
|
117
|
-
|
|
118
|
-
|
|
127
|
+
model.shaderInputs.setProps({
|
|
128
|
+
path: {
|
|
129
|
+
...basePathProps,
|
|
119
130
|
jointType: 0,
|
|
120
|
-
widthScale:
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
131
|
+
widthScale: widthScale * 1.3
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
model.setParameters(OUTLINE_SHADOWMAP_PARAMETERS);
|
|
135
|
+
const shadowRenderPass = this.context.device.beginRenderPass({
|
|
136
|
+
id: `${this.props.id}-outline-shadowmap`,
|
|
137
|
+
framebuffer: outlineFramebuffer,
|
|
138
|
+
parameters: { viewport: [0, 0, viewportWidth, viewportHeight] },
|
|
139
|
+
clearColor: [0, 0, 0, 0],
|
|
140
|
+
clearDepth: 1,
|
|
141
|
+
clearStencil: 0
|
|
124
142
|
});
|
|
143
|
+
model.draw(shadowRenderPass);
|
|
144
|
+
shadowRenderPass.end();
|
|
125
145
|
// Now use the outline shadowmap to render the lines (with outlines)
|
|
126
|
-
this.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
146
|
+
this.setShaderModuleProps({
|
|
147
|
+
outline: {
|
|
148
|
+
outlineEnabled: true,
|
|
149
|
+
outlineRenderShadowmap: false,
|
|
150
|
+
outlineShadowmap: shadowmapTexture
|
|
151
|
+
}
|
|
130
152
|
});
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
jointType: Number(jointRounded),
|
|
134
|
-
capType: Number(capRounded),
|
|
135
|
-
widthScale: this.props.widthScale
|
|
136
|
-
}),
|
|
137
|
-
parameters: OUTLINE_RENDER_PARAMETERS
|
|
153
|
+
model.shaderInputs.setProps({
|
|
154
|
+
path: basePathProps
|
|
138
155
|
});
|
|
156
|
+
model.setParameters(OUTLINE_RENDER_PARAMETERS);
|
|
157
|
+
model.draw(this.context.renderPass);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function getFramebufferTexture(framebuffer) {
|
|
161
|
+
const colorAttachment = framebuffer.colorAttachments[0];
|
|
162
|
+
if (!colorAttachment) {
|
|
163
|
+
return null;
|
|
139
164
|
}
|
|
165
|
+
return 'texture' in colorAttachment ? colorAttachment.texture : colorAttachment;
|
|
140
166
|
}
|
|
141
167
|
//# sourceMappingURL=path-outline-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-outline-layer.js","sourceRoot":"","sources":["../../src/path-outline-layer/path-outline-layer.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"path-outline-layer.js","sourceRoot":"","sources":["../../src/path-outline-layer/path-outline-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TextureCubeManifest, TextureCubeLoaderOptions } from '@loaders.gl/textures';
|
|
2
|
+
import type { TextureCubeData } from '@luma.gl/engine';
|
|
3
|
+
type LoadedCubemapTexture = {
|
|
4
|
+
type: 'cube';
|
|
5
|
+
data: unknown[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Normalizes loaders.gl cubemap load options so in-memory manifests can still
|
|
9
|
+
* resolve relative face URLs through `core.baseUrl`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createCubemapLoadOptions(cubemap: string | TextureCubeManifest, loadOptions?: TextureCubeLoaderOptions | null): TextureCubeLoaderOptions | undefined;
|
|
12
|
+
/** Converts a loaders.gl cubemap result into luma.gl `TextureCubeData`. */
|
|
13
|
+
export declare function convertLoadedCubemapToTextureData(texture: LoadedCubemapTexture): TextureCubeData;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=cubemap-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cubemap-utils.d.ts","sourceRoot":"","sources":["../../src/skybox-layer/cubemap-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAC,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAmBtE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EACrC,WAAW,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAC5C,wBAAwB,GAAG,SAAS,CAgBtC;AAED,2EAA2E;AAC3E,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CAQhG"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const CUBE_FACES = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes loaders.gl cubemap load options so in-memory manifests can still
|
|
7
|
+
* resolve relative face URLs through `core.baseUrl`.
|
|
8
|
+
*/
|
|
9
|
+
export function createCubemapLoadOptions(cubemap, loadOptions) {
|
|
10
|
+
if (!loadOptions) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (typeof cubemap === 'string' || loadOptions.core?.baseUrl || !loadOptions.baseUrl) {
|
|
14
|
+
return loadOptions;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
...loadOptions,
|
|
18
|
+
core: {
|
|
19
|
+
...loadOptions.core,
|
|
20
|
+
baseUrl: loadOptions.baseUrl
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Converts a loaders.gl cubemap result into luma.gl `TextureCubeData`. */
|
|
25
|
+
export function convertLoadedCubemapToTextureData(texture) {
|
|
26
|
+
if (texture.type !== 'cube' || !Array.isArray(texture.data) || texture.data.length !== 6) {
|
|
27
|
+
throw new Error('SkyboxLayer expected a cubemap texture with six faces.');
|
|
28
|
+
}
|
|
29
|
+
return Object.fromEntries(CUBE_FACES.map((face, index) => [face, normalizeTextureSlice(texture.data[index], face)]));
|
|
30
|
+
}
|
|
31
|
+
/** Normalizes a cubemap face that may contain one or more mip levels. */
|
|
32
|
+
function normalizeTextureSlice(faceData, face) {
|
|
33
|
+
if (Array.isArray(faceData)) {
|
|
34
|
+
if (faceData.length === 0) {
|
|
35
|
+
throw new Error(`SkyboxLayer received an empty mip chain for face ${face}.`);
|
|
36
|
+
}
|
|
37
|
+
return faceData.map((level, mipLevel) => normalizeTextureLevel(level, face, mipLevel));
|
|
38
|
+
}
|
|
39
|
+
return normalizeTextureLevel(faceData, face, 0);
|
|
40
|
+
}
|
|
41
|
+
/** Normalizes a single cubemap face mip level into luma.gl upload data. */
|
|
42
|
+
function normalizeTextureLevel(faceData, face, mipLevel) {
|
|
43
|
+
if (typeof ImageBitmap !== 'undefined' && faceData instanceof ImageBitmap) {
|
|
44
|
+
return faceData;
|
|
45
|
+
}
|
|
46
|
+
const level = faceData;
|
|
47
|
+
if (level?.imageBitmap) {
|
|
48
|
+
return level.imageBitmap;
|
|
49
|
+
}
|
|
50
|
+
if (level && ArrayBuffer.isView(level.data) && level.width && level.height) {
|
|
51
|
+
return {
|
|
52
|
+
data: level.data,
|
|
53
|
+
width: level.width,
|
|
54
|
+
height: level.height,
|
|
55
|
+
format: typeof level.textureFormat === 'string'
|
|
56
|
+
? level.textureFormat
|
|
57
|
+
: typeof level.format === 'string'
|
|
58
|
+
? level.format
|
|
59
|
+
: 'rgba8unorm'
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`SkyboxLayer could not normalize cubemap face ${face} mip ${mipLevel}.`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=cubemap-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cubemap-utils.js","sourceRoot":"","sources":["../../src/skybox-layer/cubemap-utils.ts"],"names":[],"mappings":"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"}
|