@sakuzu/maplibre-gl-draw 1.0.0
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/CHANGELOG.md +43 -0
- package/LICENSE +661 -0
- package/README.ja.md +248 -0
- package/README.md +255 -0
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/api/api.d.ts +1259 -0
- package/dist/api/api.js +86 -0
- package/dist/api/context.d.ts +173 -0
- package/dist/api/context.js +193 -0
- package/dist/api/display-api.d.ts +1 -0
- package/dist/api/display-api.js +23 -0
- package/dist/api/event-api.d.ts +13 -0
- package/dist/api/event-api.js +17 -0
- package/dist/api/extension-api.d.ts +46 -0
- package/dist/api/extension-api.js +85 -0
- package/dist/api/feature-api.d.ts +11 -0
- package/dist/api/feature-api.js +101 -0
- package/dist/api/geometry/apply.d.ts +51 -0
- package/dist/api/geometry/apply.js +114 -0
- package/dist/api/geometry/boolean.d.ts +28 -0
- package/dist/api/geometry/boolean.js +65 -0
- package/dist/api/geometry/buffer.d.ts +11 -0
- package/dist/api/geometry/buffer.js +105 -0
- package/dist/api/geometry/split.d.ts +16 -0
- package/dist/api/geometry/split.js +75 -0
- package/dist/api/geometry/targets.d.ts +76 -0
- package/dist/api/geometry/targets.js +158 -0
- package/dist/api/geometry/types.d.ts +31 -0
- package/dist/api/geometry/types.js +3 -0
- package/dist/api/geometry-operations.d.ts +162 -0
- package/dist/api/geometry-operations.js +94 -0
- package/dist/api/group-api.d.ts +10 -0
- package/dist/api/group-api.js +78 -0
- package/dist/api/import-export/constants.d.ts +29 -0
- package/dist/api/import-export/constants.js +40 -0
- package/dist/api/import-export/embedded-file.d.ts +13 -0
- package/dist/api/import-export/embedded-file.js +31 -0
- package/dist/api/import-export/file-name.d.ts +10 -0
- package/dist/api/import-export/file-name.js +20 -0
- package/dist/api/import-export/format-detection.d.ts +12 -0
- package/dist/api/import-export/format-detection.js +29 -0
- package/dist/api/import-export/geojson-export.d.ts +19 -0
- package/dist/api/import-export/geojson-export.js +262 -0
- package/dist/api/import-export/geojson-import.d.ts +34 -0
- package/dist/api/import-export/geojson-import.js +538 -0
- package/dist/api/import-export/geometry-validation.d.ts +20 -0
- package/dist/api/import-export/geometry-validation.js +107 -0
- package/dist/api/import-export/image-import.d.ts +12 -0
- package/dist/api/import-export/image-import.js +53 -0
- package/dist/api/import-export/index.d.ts +9 -0
- package/dist/api/import-export/index.js +107 -0
- package/dist/api/import-export/native-format.d.ts +15 -0
- package/dist/api/import-export/native-format.js +126 -0
- package/dist/api/import-export/native-validation.d.ts +28 -0
- package/dist/api/import-export/native-validation.js +212 -0
- package/dist/api/import-export/own-property.d.ts +10 -0
- package/dist/api/import-export/own-property.js +19 -0
- package/dist/api/import-export/style-validation.d.ts +27 -0
- package/dist/api/import-export/style-validation.js +49 -0
- package/dist/api/import-export/types.d.ts +26 -0
- package/dist/api/import-export/types.js +3 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.js +3 -0
- package/dist/api/input-api.d.ts +158 -0
- package/dist/api/input-api.js +144 -0
- package/dist/api/instance-api.d.ts +38 -0
- package/dist/api/instance-api.js +136 -0
- package/dist/api/layer-api.d.ts +12 -0
- package/dist/api/layer-api.js +62 -0
- package/dist/api/selection-api.d.ts +7 -0
- package/dist/api/selection-api.js +78 -0
- package/dist/api/snapping-api.d.ts +125 -0
- package/dist/api/snapping-api.js +50 -0
- package/dist/api/topology-api.d.ts +30 -0
- package/dist/api/topology-api.js +16 -0
- package/dist/api/tracing-api.d.ts +31 -0
- package/dist/api/tracing-api.js +16 -0
- package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
- package/dist/dispatcher/hit-test/box-strategies.js +275 -0
- package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
- package/dist/dispatcher/hit-test/box-strategy.js +37 -0
- package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
- package/dist/dispatcher/hit-test/globe-shape.js +70 -0
- package/dist/dispatcher/hit-test/index.d.ts +14 -0
- package/dist/dispatcher/hit-test/index.js +9 -0
- package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
- package/dist/dispatcher/hit-test/local-frame.js +112 -0
- package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
- package/dist/dispatcher/hit-test/segment-grid.js +79 -0
- package/dist/dispatcher/hit-test/service.d.ts +120 -0
- package/dist/dispatcher/hit-test/service.js +333 -0
- package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
- package/dist/dispatcher/hit-test/strategies/base.js +66 -0
- package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
- package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
- package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
- package/dist/dispatcher/hit-test/strategies/image.js +115 -0
- package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
- package/dist/dispatcher/hit-test/strategies/index.js +10 -0
- package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
- package/dist/dispatcher/hit-test/strategies/line.js +30 -0
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
- package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
- package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
- package/dist/dispatcher/hit-test/strategies/point.js +29 -0
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
- package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
- package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
- package/dist/dispatcher/hit-test/topmost.js +157 -0
- package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
- package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
- package/dist/dispatcher/index.d.ts +15 -0
- package/dist/dispatcher/index.js +3 -0
- package/dist/dispatcher/input-router.d.ts +1 -0
- package/dist/dispatcher/input-router.js +288 -0
- package/dist/dispatcher/normalizer.d.ts +1 -0
- package/dist/dispatcher/normalizer.js +513 -0
- package/dist/dispatcher/types.d.ts +144 -0
- package/dist/dispatcher/types.js +15 -0
- package/dist/display/chunk-set.d.ts +24 -0
- package/dist/display/chunk-set.js +533 -0
- package/dist/display/chunk.d.ts +1 -0
- package/dist/display/chunk.js +104 -0
- package/dist/display/columnar/index.d.ts +12 -0
- package/dist/display/columnar/index.js +13 -0
- package/dist/display/columnar/prepare.d.ts +42 -0
- package/dist/display/columnar/prepare.js +116 -0
- package/dist/display/columnar/source.d.ts +1 -0
- package/dist/display/columnar/source.js +531 -0
- package/dist/display/columnar/table.d.ts +1 -0
- package/dist/display/columnar/table.js +471 -0
- package/dist/display/columnar/types.d.ts +223 -0
- package/dist/display/columnar/types.js +3 -0
- package/dist/display/dataset.d.ts +2 -0
- package/dist/display/dataset.js +891 -0
- package/dist/display/index.d.ts +13 -0
- package/dist/display/index.js +3 -0
- package/dist/display/interaction.d.ts +1 -0
- package/dist/display/interaction.js +90 -0
- package/dist/display/manager.d.ts +1 -0
- package/dist/display/manager.js +440 -0
- package/dist/display/packed-rtree.d.ts +1 -0
- package/dist/display/packed-rtree.js +244 -0
- package/dist/display/partition.d.ts +1 -0
- package/dist/display/partition.js +226 -0
- package/dist/display/provider.d.ts +1 -0
- package/dist/display/provider.js +342 -0
- package/dist/display/retained.d.ts +40 -0
- package/dist/display/retained.js +898 -0
- package/dist/display/selection.d.ts +13 -0
- package/dist/display/selection.js +226 -0
- package/dist/display/source.d.ts +1 -0
- package/dist/display/source.js +119 -0
- package/dist/display/spatial.d.ts +1 -0
- package/dist/display/spatial.js +71 -0
- package/dist/display/style.d.ts +1 -0
- package/dist/display/style.js +126 -0
- package/dist/display/thinning.d.ts +65 -0
- package/dist/display/thinning.js +910 -0
- package/dist/display/triangulation.d.ts +1 -0
- package/dist/display/triangulation.js +0 -0
- package/dist/display/types.d.ts +561 -0
- package/dist/display/types.js +43 -0
- package/dist/extension/feature-handler.d.ts +182 -0
- package/dist/extension/feature-handler.js +3 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +3 -0
- package/dist/extension/renderers.d.ts +208 -0
- package/dist/extension/renderers.js +3 -0
- package/dist/geometry/angle.d.ts +47 -0
- package/dist/geometry/angle.js +44 -0
- package/dist/geometry/bbox.d.ts +48 -0
- package/dist/geometry/bbox.js +83 -0
- package/dist/geometry/boolean.d.ts +162 -0
- package/dist/geometry/boolean.js +331 -0
- package/dist/geometry/buffer.d.ts +72 -0
- package/dist/geometry/buffer.js +218 -0
- package/dist/geometry/circle.d.ts +55 -0
- package/dist/geometry/circle.js +107 -0
- package/dist/geometry/coords.d.ts +97 -0
- package/dist/geometry/coords.js +149 -0
- package/dist/geometry/distance.d.ts +79 -0
- package/dist/geometry/distance.js +111 -0
- package/dist/geometry/errors.d.ts +74 -0
- package/dist/geometry/errors.js +104 -0
- package/dist/geometry/index.d.ts +28 -0
- package/dist/geometry/index.js +38 -0
- package/dist/geometry/measure.d.ts +81 -0
- package/dist/geometry/measure.js +236 -0
- package/dist/geometry/predicates.d.ts +62 -0
- package/dist/geometry/predicates.js +132 -0
- package/dist/geometry/simplify.d.ts +74 -0
- package/dist/geometry/simplify.js +159 -0
- package/dist/geometry/split.d.ts +68 -0
- package/dist/geometry/split.js +430 -0
- package/dist/geometry/types.d.ts +95 -0
- package/dist/geometry/types.js +3 -0
- package/dist/geometry/units.d.ts +35 -0
- package/dist/geometry/units.js +41 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +20 -0
- package/dist/maplibre-gl-draw.d.ts +47 -0
- package/dist/maplibre-gl-draw.js +407 -0
- package/dist/messages.d.ts +64 -0
- package/dist/messages.js +36 -0
- package/dist/modes/cursor.d.ts +1 -0
- package/dist/modes/cursor.js +72 -0
- package/dist/modes/draw/circle.d.ts +1 -0
- package/dist/modes/draw/circle.js +222 -0
- package/dist/modes/draw/commit-layer.d.ts +26 -0
- package/dist/modes/draw/commit-layer.js +31 -0
- package/dist/modes/draw/freehand.d.ts +1 -0
- package/dist/modes/draw/freehand.js +264 -0
- package/dist/modes/draw/image.d.ts +1 -0
- package/dist/modes/draw/image.js +60 -0
- package/dist/modes/draw/index.d.ts +9 -0
- package/dist/modes/draw/index.js +11 -0
- package/dist/modes/draw/line.d.ts +1 -0
- package/dist/modes/draw/line.js +363 -0
- package/dist/modes/draw/point.d.ts +1 -0
- package/dist/modes/draw/point.js +87 -0
- package/dist/modes/draw/polygon.d.ts +1 -0
- package/dist/modes/draw/polygon.js +378 -0
- package/dist/modes/draw/trace-support.d.ts +79 -0
- package/dist/modes/draw/trace-support.js +161 -0
- package/dist/modes/handler.d.ts +285 -0
- package/dist/modes/handler.js +3 -0
- package/dist/modes/index.d.ts +7 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/manager.d.ts +15 -0
- package/dist/modes/manager.js +196 -0
- package/dist/modes/select/box-selection.d.ts +52 -0
- package/dist/modes/select/box-selection.js +140 -0
- package/dist/modes/select/click-handler.d.ts +32 -0
- package/dist/modes/select/click-handler.js +166 -0
- package/dist/modes/select/cursor-handler.d.ts +15 -0
- package/dist/modes/select/cursor-handler.js +59 -0
- package/dist/modes/select/drag/auxiliary.d.ts +26 -0
- package/dist/modes/select/drag/auxiliary.js +56 -0
- package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
- package/dist/modes/select/drag/intermediate-writes.js +171 -0
- package/dist/modes/select/drag/move.d.ts +24 -0
- package/dist/modes/select/drag/move.js +59 -0
- package/dist/modes/select/drag/operation.d.ts +30 -0
- package/dist/modes/select/drag/operation.js +18 -0
- package/dist/modes/select/drag/radius.d.ts +15 -0
- package/dist/modes/select/drag/radius.js +49 -0
- package/dist/modes/select/drag/transform.d.ts +17 -0
- package/dist/modes/select/drag/transform.js +155 -0
- package/dist/modes/select/drag/vertex.d.ts +17 -0
- package/dist/modes/select/drag/vertex.js +163 -0
- package/dist/modes/select/drag-handler.d.ts +1 -0
- package/dist/modes/select/drag-handler.js +254 -0
- package/dist/modes/select/hit-helpers.d.ts +40 -0
- package/dist/modes/select/hit-helpers.js +51 -0
- package/dist/modes/select/mode.d.ts +1 -0
- package/dist/modes/select/mode.js +397 -0
- package/dist/modes/select/shortcut-handler.d.ts +40 -0
- package/dist/modes/select/shortcut-handler.js +128 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.js +3 -0
- package/dist/operations/layer-operations.d.ts +1 -0
- package/dist/operations/layer-operations.js +350 -0
- package/dist/operations/resize.d.ts +71 -0
- package/dist/operations/resize.js +252 -0
- package/dist/operations/rotate.d.ts +17 -0
- package/dist/operations/rotate.js +166 -0
- package/dist/operations/selection-operations.d.ts +20 -0
- package/dist/operations/selection-operations.js +159 -0
- package/dist/operations/shared-vertex.d.ts +1 -0
- package/dist/operations/shared-vertex.js +210 -0
- package/dist/operations/trace-graph.d.ts +96 -0
- package/dist/operations/trace-graph.js +283 -0
- package/dist/operations/vertex.d.ts +1 -0
- package/dist/operations/vertex.js +538 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mutation-hooks.d.ts +28 -0
- package/dist/plugins/mutation-hooks.js +84 -0
- package/dist/plugins/plugin-context.d.ts +1 -0
- package/dist/plugins/plugin-context.js +367 -0
- package/dist/plugins/plugin-manager.d.ts +103 -0
- package/dist/plugins/plugin-manager.js +316 -0
- package/dist/plugins/plugin.d.ts +529 -0
- package/dist/plugins/plugin.js +3 -0
- package/dist/shared/config/constants.d.ts +66 -0
- package/dist/shared/config/constants.js +60 -0
- package/dist/shared/config/feature-style.d.ts +155 -0
- package/dist/shared/config/feature-style.js +154 -0
- package/dist/shared/config/index.d.ts +17 -0
- package/dist/shared/config/index.js +8 -0
- package/dist/shared/config/rendering.d.ts +107 -0
- package/dist/shared/config/rendering.js +33 -0
- package/dist/shared/config/selection-highlight.d.ts +29 -0
- package/dist/shared/config/selection-highlight.js +35 -0
- package/dist/shared/config/selection.d.ts +273 -0
- package/dist/shared/config/selection.js +266 -0
- package/dist/shared/config/topology.d.ts +33 -0
- package/dist/shared/config/topology.js +17 -0
- package/dist/shared/config/trace.d.ts +40 -0
- package/dist/shared/config/trace.js +17 -0
- package/dist/shared/math/angle.d.ts +21 -0
- package/dist/shared/math/angle.js +34 -0
- package/dist/shared/math/circle.d.ts +6 -0
- package/dist/shared/math/circle.js +10 -0
- package/dist/shared/math/constants.d.ts +48 -0
- package/dist/shared/math/constants.js +59 -0
- package/dist/shared/math/distance.d.ts +78 -0
- package/dist/shared/math/distance.js +147 -0
- package/dist/shared/math/globe-subdivision.d.ts +62 -0
- package/dist/shared/math/globe-subdivision.js +99 -0
- package/dist/shared/math/index.d.ts +17 -0
- package/dist/shared/math/index.js +21 -0
- package/dist/shared/math/intersection.d.ts +63 -0
- package/dist/shared/math/intersection.js +236 -0
- package/dist/shared/math/longitude.d.ts +20 -0
- package/dist/shared/math/longitude.js +31 -0
- package/dist/shared/math/mercator-plane.d.ts +27 -0
- package/dist/shared/math/mercator-plane.js +26 -0
- package/dist/shared/math/obb.d.ts +65 -0
- package/dist/shared/math/obb.js +107 -0
- package/dist/shared/math/rotation.d.ts +93 -0
- package/dist/shared/math/rotation.js +186 -0
- package/dist/shared/math/segment-grid.d.ts +69 -0
- package/dist/shared/math/segment-grid.js +159 -0
- package/dist/shared/math/transform.d.ts +140 -0
- package/dist/shared/math/transform.js +189 -0
- package/dist/shared/types/events.d.ts +128 -0
- package/dist/shared/types/events.js +3 -0
- package/dist/shared/types/model.d.ts +950 -0
- package/dist/shared/types/model.js +3 -0
- package/dist/shared/types/selection-box.d.ts +23 -0
- package/dist/shared/types/selection-box.js +3 -0
- package/dist/shared/types/style.d.ts +68 -0
- package/dist/shared/types/style.js +3 -0
- package/dist/shared/utils/color.d.ts +49 -0
- package/dist/shared/utils/color.js +180 -0
- package/dist/shared/utils/coordinates.d.ts +52 -0
- package/dist/shared/utils/coordinates.js +75 -0
- package/dist/shared/utils/embedded-image.d.ts +34 -0
- package/dist/shared/utils/embedded-image.js +161 -0
- package/dist/shared/utils/event-emitter.d.ts +262 -0
- package/dist/shared/utils/event-emitter.js +44 -0
- package/dist/shared/utils/feature-bbox.d.ts +8 -0
- package/dist/shared/utils/feature-bbox.js +207 -0
- package/dist/shared/utils/feature-segments.d.ts +23 -0
- package/dist/shared/utils/feature-segments.js +179 -0
- package/dist/shared/utils/id.d.ts +1 -0
- package/dist/shared/utils/id.js +35 -0
- package/dist/shared/utils/image.d.ts +34 -0
- package/dist/shared/utils/image.js +106 -0
- package/dist/shared/utils/index.d.ts +15 -0
- package/dist/shared/utils/index.js +24 -0
- package/dist/shared/utils/map.d.ts +26 -0
- package/dist/shared/utils/map.js +35 -0
- package/dist/shared/utils/name-generator.d.ts +197 -0
- package/dist/shared/utils/name-generator.js +337 -0
- package/dist/shared/utils/pixel-ratio.d.ts +111 -0
- package/dist/shared/utils/pixel-ratio.js +85 -0
- package/dist/shared/utils/property.d.ts +88 -0
- package/dist/shared/utils/property.js +140 -0
- package/dist/shared/utils/vertex-ref.d.ts +23 -0
- package/dist/shared/utils/vertex-ref.js +20 -0
- package/dist/snapping/custom-targets.d.ts +1 -0
- package/dist/snapping/custom-targets.js +21 -0
- package/dist/snapping/geometry.d.ts +1 -0
- package/dist/snapping/geometry.js +61 -0
- package/dist/snapping/index.d.ts +14 -0
- package/dist/snapping/index.js +4 -0
- package/dist/snapping/indicator.d.ts +19 -0
- package/dist/snapping/indicator.js +145 -0
- package/dist/snapping/providers/display.d.ts +72 -0
- package/dist/snapping/providers/display.js +268 -0
- package/dist/snapping/providers/guide.d.ts +69 -0
- package/dist/snapping/providers/guide.js +187 -0
- package/dist/snapping/providers/intersection.d.ts +1 -0
- package/dist/snapping/providers/intersection.js +92 -0
- package/dist/snapping/providers/shared.d.ts +39 -0
- package/dist/snapping/providers/shared.js +146 -0
- package/dist/snapping/providers/store.d.ts +1 -0
- package/dist/snapping/providers/store.js +132 -0
- package/dist/snapping/service.d.ts +1 -0
- package/dist/snapping/service.js +272 -0
- package/dist/snapping/types.d.ts +267 -0
- package/dist/snapping/types.js +66 -0
- package/dist/store/change-merger.d.ts +1 -0
- package/dist/store/change-merger.js +102 -0
- package/dist/store/draw-store.d.ts +1 -0
- package/dist/store/draw-store.js +396 -0
- package/dist/store/event-bridge.d.ts +1 -0
- package/dist/store/event-bridge.js +161 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.js +4 -0
- package/dist/store/local-visibility.d.ts +21 -0
- package/dist/store/local-visibility.js +27 -0
- package/dist/store/lock.d.ts +67 -0
- package/dist/store/lock.js +54 -0
- package/dist/store/memory/change-bus.d.ts +60 -0
- package/dist/store/memory/change-bus.js +232 -0
- package/dist/store/memory/file-store.d.ts +15 -0
- package/dist/store/memory/file-store.js +33 -0
- package/dist/store/memory/frozen.d.ts +21 -0
- package/dist/store/memory/frozen.js +51 -0
- package/dist/store/memory/ui-state.d.ts +51 -0
- package/dist/store/memory/ui-state.js +223 -0
- package/dist/store/memory.d.ts +26 -0
- package/dist/store/memory.js +708 -0
- package/dist/store/spatial/index.d.ts +6 -0
- package/dist/store/spatial/index.js +4 -0
- package/dist/store/spatial/spatial-index.d.ts +90 -0
- package/dist/store/spatial/spatial-index.js +148 -0
- package/dist/store/spatial/store-spatial-index.d.ts +60 -0
- package/dist/store/spatial/store-spatial-index.js +125 -0
- package/dist/store/store.d.ts +417 -0
- package/dist/store/store.js +3 -0
- package/dist/store/types.d.ts +8 -0
- package/dist/store/types.js +3 -0
- package/dist/store/writable-layer.d.ts +35 -0
- package/dist/store/writable-layer.js +20 -0
- package/dist/view/cache/buffer.d.ts +28 -0
- package/dist/view/cache/buffer.js +176 -0
- package/dist/view/cache/earcut.d.ts +1 -0
- package/dist/view/cache/earcut.js +122 -0
- package/dist/view/cache/style-rule.d.ts +1 -0
- package/dist/view/cache/style-rule.js +97 -0
- package/dist/view/cache/terrain-fill.d.ts +30 -0
- package/dist/view/cache/terrain-fill.js +60 -0
- package/dist/view/cache/texture.d.ts +14 -0
- package/dist/view/cache/texture.js +292 -0
- package/dist/view/coordinator.d.ts +27 -0
- package/dist/view/coordinator.js +72 -0
- package/dist/view/feature-companion.d.ts +173 -0
- package/dist/view/feature-companion.js +108 -0
- package/dist/view/globe-subdivision.d.ts +78 -0
- package/dist/view/globe-subdivision.js +128 -0
- package/dist/view/index.d.ts +47 -0
- package/dist/view/index.js +20 -0
- package/dist/view/layer/attach.d.ts +20 -0
- package/dist/view/layer/attach.js +47 -0
- package/dist/view/layer/blend.d.ts +57 -0
- package/dist/view/layer/blend.js +14 -0
- package/dist/view/layer/custom-layer.d.ts +1 -0
- package/dist/view/layer/custom-layer.js +509 -0
- package/dist/view/layer/depth-state.d.ts +14 -0
- package/dist/view/layer/depth-state.js +44 -0
- package/dist/view/layer/display-list.d.ts +1 -0
- package/dist/view/layer/display-list.js +111 -0
- package/dist/view/layer/drape-planner.d.ts +139 -0
- package/dist/view/layer/drape-planner.js +726 -0
- package/dist/view/layer/frame-render.d.ts +57 -0
- package/dist/view/layer/frame-render.js +209 -0
- package/dist/view/layer/frame-state.d.ts +147 -0
- package/dist/view/layer/frame-state.js +484 -0
- package/dist/view/layer/gl-state.d.ts +77 -0
- package/dist/view/layer/gl-state.js +132 -0
- package/dist/view/layer/index.d.ts +6 -0
- package/dist/view/layer/index.js +5 -0
- package/dist/view/layer/render-scope.d.ts +30 -0
- package/dist/view/layer/render-scope.js +28 -0
- package/dist/view/layer/render.d.ts +87 -0
- package/dist/view/layer/render.js +187 -0
- package/dist/view/layer/renderers.d.ts +81 -0
- package/dist/view/layer/renderers.js +142 -0
- package/dist/view/layer/slot-manager.d.ts +26 -0
- package/dist/view/layer/slot-manager.js +133 -0
- package/dist/view/layer/slots.d.ts +33 -0
- package/dist/view/layer/slots.js +50 -0
- package/dist/view/layer/store-retained-bbox.d.ts +36 -0
- package/dist/view/layer/store-retained-bbox.js +188 -0
- package/dist/view/layer/store-retained-chunk.d.ts +97 -0
- package/dist/view/layer/store-retained-chunk.js +94 -0
- package/dist/view/layer/store-retained-classify.d.ts +34 -0
- package/dist/view/layer/store-retained-classify.js +88 -0
- package/dist/view/layer/store-retained-collect.d.ts +24 -0
- package/dist/view/layer/store-retained-collect.js +121 -0
- package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
- package/dist/view/layer/store-retained-coord-patch.js +168 -0
- package/dist/view/layer/store-retained-immediate.d.ts +63 -0
- package/dist/view/layer/store-retained-immediate.js +49 -0
- package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
- package/dist/view/layer/store-retained-invalidation.js +192 -0
- package/dist/view/layer/store-retained.d.ts +198 -0
- package/dist/view/layer/store-retained.js +430 -0
- package/dist/view/layer/terrain-resolver.d.ts +1 -0
- package/dist/view/layer/terrain-resolver.js +174 -0
- package/dist/view/renderers/batch-manager.d.ts +61 -0
- package/dist/view/renderers/batch-manager.js +718 -0
- package/dist/view/renderers/draw-factors.d.ts +60 -0
- package/dist/view/renderers/draw-factors.js +35 -0
- package/dist/view/renderers/drawer.d.ts +1 -0
- package/dist/view/renderers/drawer.js +346 -0
- package/dist/view/renderers/image.d.ts +1 -0
- package/dist/view/renderers/image.js +255 -0
- package/dist/view/renderers/line/dash.d.ts +31 -0
- package/dist/view/renderers/line/dash.js +152 -0
- package/dist/view/renderers/line/line-geometry.d.ts +39 -0
- package/dist/view/renderers/line/line-geometry.js +460 -0
- package/dist/view/renderers/line/line-gl.d.ts +1 -0
- package/dist/view/renderers/line/line-gl.js +236 -0
- package/dist/view/renderers/line/line-shader.d.ts +1 -0
- package/dist/view/renderers/line/line-shader.js +364 -0
- package/dist/view/renderers/line/line-types.d.ts +43 -0
- package/dist/view/renderers/line/line-types.js +3 -0
- package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
- package/dist/view/renderers/line/line-uniforms.js +390 -0
- package/dist/view/renderers/line/sdf-line.d.ts +92 -0
- package/dist/view/renderers/line/sdf-line.js +567 -0
- package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
- package/dist/view/renderers/point/billboard-depth.js +56 -0
- package/dist/view/renderers/point/point-instance.d.ts +124 -0
- package/dist/view/renderers/point/point-instance.js +738 -0
- package/dist/view/renderers/point/point-sdf.d.ts +58 -0
- package/dist/view/renderers/point/point-sdf.js +170 -0
- package/dist/view/renderers/point/point-shape.d.ts +99 -0
- package/dist/view/renderers/point/point-shape.js +504 -0
- package/dist/view/renderers/point/point-style.d.ts +1 -0
- package/dist/view/renderers/point/point-style.js +46 -0
- package/dist/view/renderers/polygon/batch.d.ts +26 -0
- package/dist/view/renderers/polygon/batch.js +336 -0
- package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
- package/dist/view/renderers/polygon/earcut-input.js +55 -0
- package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
- package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
- package/dist/view/renderers/polygon/fill.d.ts +74 -0
- package/dist/view/renderers/polygon/fill.js +251 -0
- package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
- package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
- package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
- package/dist/view/renderers/polygon/terrain-cull.js +14 -0
- package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
- package/dist/view/renderers/polygon/triangulator.js +3 -0
- package/dist/view/renderers/retained.d.ts +43 -0
- package/dist/view/renderers/retained.js +3 -0
- package/dist/view/renderers/stroke.d.ts +121 -0
- package/dist/view/renderers/stroke.js +621 -0
- package/dist/view/shaders/frame.d.ts +8 -0
- package/dist/view/shaders/frame.js +37 -0
- package/dist/view/shaders/helpers.d.ts +238 -0
- package/dist/view/shaders/helpers.js +611 -0
- package/dist/view/shaders/initializer.d.ts +27 -0
- package/dist/view/shaders/initializer.js +125 -0
- package/dist/view/shaders/projection.d.ts +123 -0
- package/dist/view/shaders/projection.js +299 -0
- package/dist/view/shaders/quad-grid.d.ts +77 -0
- package/dist/view/shaders/quad-grid.js +128 -0
- package/dist/view/shaders/quad.d.ts +189 -0
- package/dist/view/shaders/quad.js +582 -0
- package/dist/view/shaders/retained-origin.d.ts +50 -0
- package/dist/view/shaders/retained-origin.js +67 -0
- package/dist/view/shaders/terrain-shade.d.ts +23 -0
- package/dist/view/shaders/terrain-shade.js +93 -0
- package/dist/view/style-rule.d.ts +166 -0
- package/dist/view/style-rule.js +300 -0
- package/dist/view/terrain/anchor.d.ts +135 -0
- package/dist/view/terrain/anchor.js +226 -0
- package/dist/view/terrain/context.d.ts +132 -0
- package/dist/view/terrain/context.js +437 -0
- package/dist/view/terrain/dem-atlas.d.ts +97 -0
- package/dist/view/terrain/dem-atlas.js +534 -0
- package/dist/view/terrain/detect.d.ts +126 -0
- package/dist/view/terrain/detect.js +198 -0
- package/dist/view/terrain/drape/bin-store.d.ts +179 -0
- package/dist/view/terrain/drape/bin-store.js +529 -0
- package/dist/view/terrain/drape/binning.d.ts +259 -0
- package/dist/view/terrain/drape/binning.js +604 -0
- package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
- package/dist/view/terrain/drape/edge-constrain.js +175 -0
- package/dist/view/terrain/drape/geometry.d.ts +95 -0
- package/dist/view/terrain/drape/geometry.js +260 -0
- package/dist/view/terrain/drape/mesh.d.ts +50 -0
- package/dist/view/terrain/drape/mesh.js +86 -0
- package/dist/view/terrain/drape/pass.d.ts +122 -0
- package/dist/view/terrain/drape/pass.js +379 -0
- package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
- package/dist/view/terrain/drape/quad-glyphs.js +117 -0
- package/dist/view/terrain/drape/quad.d.ts +249 -0
- package/dist/view/terrain/drape/quad.js +835 -0
- package/dist/view/terrain/drape/renderer.d.ts +184 -0
- package/dist/view/terrain/drape/renderer.js +706 -0
- package/dist/view/terrain/drape/shared.d.ts +80 -0
- package/dist/view/terrain/drape/shared.js +173 -0
- package/dist/view/terrain/drape/stitch.d.ts +155 -0
- package/dist/view/terrain/drape/stitch.js +228 -0
- package/dist/view/terrain/ground.d.ts +72 -0
- package/dist/view/terrain/ground.js +151 -0
- package/dist/view/terrain/metrics.d.ts +180 -0
- package/dist/view/terrain/metrics.js +231 -0
- package/dist/view/terrain/occlusion.d.ts +11 -0
- package/dist/view/terrain/occlusion.js +129 -0
- package/dist/view/terrain/polygon.d.ts +86 -0
- package/dist/view/terrain/polygon.js +301 -0
- package/dist/view/terrain/shade.d.ts +48 -0
- package/dist/view/terrain/shade.js +45 -0
- package/dist/view/terrain/state.d.ts +99 -0
- package/dist/view/terrain/state.js +186 -0
- package/dist/view/terrain/tessellation.d.ts +265 -0
- package/dist/view/terrain/tessellation.js +924 -0
- package/dist/view/terrain/tiling.d.ts +56 -0
- package/dist/view/terrain/tiling.js +155 -0
- package/dist/view/terrain/upstream-terrain.d.ts +82 -0
- package/dist/view/terrain/upstream-terrain.js +116 -0
- package/dist/view/ui/auxiliary-handles.d.ts +151 -0
- package/dist/view/ui/auxiliary-handles.js +22 -0
- package/dist/view/ui/bounds.d.ts +53 -0
- package/dist/view/ui/bounds.js +149 -0
- package/dist/view/ui/box-selection.d.ts +1 -0
- package/dist/view/ui/box-selection.js +83 -0
- package/dist/view/ui/handle-test.d.ts +1 -0
- package/dist/view/ui/handle-test.js +437 -0
- package/dist/view/ui/handle-thinning.d.ts +122 -0
- package/dist/view/ui/handle-thinning.js +430 -0
- package/dist/view/ui/handles.d.ts +25 -0
- package/dist/view/ui/handles.js +673 -0
- package/dist/view/ui/helper.d.ts +19 -0
- package/dist/view/ui/helper.js +76 -0
- package/dist/view/ui/index.d.ts +15 -0
- package/dist/view/ui/index.js +15 -0
- package/dist/view/ui/selection-scope.d.ts +25 -0
- package/dist/view/ui/selection-scope.js +34 -0
- package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
- package/dist/view/ui/selection-ui/bounding-box.js +240 -0
- package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
- package/dist/view/ui/selection-ui/extension-registry.js +78 -0
- package/dist/view/ui/selection-ui/index.d.ts +12 -0
- package/dist/view/ui/selection-ui/index.js +12 -0
- package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
- package/dist/view/ui/selection-ui/renderer.js +227 -0
- package/dist/view/ui/selection-ui/types.d.ts +55 -0
- package/dist/view/ui/selection-ui/types.js +3 -0
- package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
- package/dist/view/ui/selection-ui-drawer.js +329 -0
- package/dist/view/ui/tentative.d.ts +1 -0
- package/dist/view/ui/tentative.js +320 -0
- package/dist/view/viewport.d.ts +119 -0
- package/dist/view/viewport.js +254 -0
- package/package.json +113 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { ProjectionData } from 'maplibre-gl';
|
|
2
|
+
import type { Coordinate } from '../../../store/types.js';
|
|
3
|
+
import type { OffsetUniforms, ShaderData } from '../../shaders/helpers.js';
|
|
4
|
+
import { TerrainContext } from '../../terrain/context.js';
|
|
5
|
+
/**
|
|
6
|
+
* The fill renderer core uses for polygons, shared with custom feature renderers.
|
|
7
|
+
*
|
|
8
|
+
* Takes `[lng, lat]` rings in degrees, triangulates them (holes included) and converts them
|
|
9
|
+
* to clip space on the GPU relative to the view center, for float precision. Call
|
|
10
|
+
* `ensureShader` with the shader data of the frame and `setOffsetUniforms` before drawing.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FillShaderManager {
|
|
13
|
+
private gl;
|
|
14
|
+
private program;
|
|
15
|
+
private variantName;
|
|
16
|
+
private projectionUniformManager;
|
|
17
|
+
private colorLoc;
|
|
18
|
+
private offsetUniforms;
|
|
19
|
+
private vao;
|
|
20
|
+
private vertexBuffer;
|
|
21
|
+
private indexBuffer;
|
|
22
|
+
/**
|
|
23
|
+
* @param terrain The terrain state of the draw instance (an inactive one draws flat)
|
|
24
|
+
*/
|
|
25
|
+
constructor(gl: WebGL2RenderingContext, terrain?: TerrainContext);
|
|
26
|
+
/**
|
|
27
|
+
* Sets the vertex attributes and the index buffer on the VAO
|
|
28
|
+
*
|
|
29
|
+
* The ELEMENT_ARRAY_BUFFER binding is part of the VAO state, so it is bundled while
|
|
30
|
+
* the VAO is bound.
|
|
31
|
+
*/
|
|
32
|
+
private setupVAO;
|
|
33
|
+
/**
|
|
34
|
+
* Ensures the shader (recreating it when necessary)
|
|
35
|
+
*/
|
|
36
|
+
ensureShader(shaderData: ShaderData): void;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the uniforms for offset mode
|
|
39
|
+
* Uses the projectionCenter computed at high precision on the CPU side
|
|
40
|
+
*/
|
|
41
|
+
setOffsetUniforms(uniforms: OffsetUniforms): void;
|
|
42
|
+
/**
|
|
43
|
+
* Creates the shader program (offset mode)
|
|
44
|
+
*/
|
|
45
|
+
private createShaderProgram;
|
|
46
|
+
/**
|
|
47
|
+
* Sets the projection uniforms (supporting offset mode + globe mode)
|
|
48
|
+
* @param projectionData MapLibre's ProjectionData
|
|
49
|
+
* @param zoom The current zoom level (used for switching offset mode)
|
|
50
|
+
*/
|
|
51
|
+
private setProjectionUniforms;
|
|
52
|
+
/**
|
|
53
|
+
* Fill-renders a single-ring polygon
|
|
54
|
+
*
|
|
55
|
+
* Use drawPolygonRings for a polygon that has holes.
|
|
56
|
+
*
|
|
57
|
+
* @param coords The coordinate array (WGS84)
|
|
58
|
+
* @param color The fill color
|
|
59
|
+
* @param projectionData MapLibre's ProjectionData
|
|
60
|
+
* @param zoom The current zoom level
|
|
61
|
+
*/
|
|
62
|
+
drawPolygon(coords: Coordinate[], color: [number, number, number, number], projectionData: ProjectionData, zoom: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Fill-renders a polygon given as an array of rings (supports holes)
|
|
65
|
+
*
|
|
66
|
+
* Sends the WGS84 coordinates to the GPU as they are and converts them in the shader
|
|
67
|
+
*
|
|
68
|
+
* @param rings The array of rings ([0] is the outer ring, [1..] are inner rings, WGS84)
|
|
69
|
+
* @param color The fill color
|
|
70
|
+
* @param projectionData MapLibre's ProjectionData
|
|
71
|
+
* @param zoom The current zoom level
|
|
72
|
+
*/
|
|
73
|
+
drawPolygonRings(rings: Coordinate[][], color: [number, number, number, number], projectionData: ProjectionData, zoom: number): void;
|
|
74
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* FillShaderManager
|
|
5
|
+
*
|
|
6
|
+
* A shader manager that manages the fill rendering of polygons
|
|
7
|
+
* Performs the WGS84 to clip space conversion on the GPU (offset mode)
|
|
8
|
+
*/
|
|
9
|
+
import earcut from 'earcut';
|
|
10
|
+
import { calculateLngLatOffset, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from '../../shaders/helpers.js';
|
|
11
|
+
import { ProjectionUniformManager } from '../../shaders/projection.js';
|
|
12
|
+
import { TERRAIN_SHADE_FRAGMENT_GLSL, TERRAIN_SHADE_VERTEX_GLSL, } from '../../shaders/terrain-shade.js';
|
|
13
|
+
import { TerrainContext } from '../../terrain/context.js';
|
|
14
|
+
import { buildEarcutInput } from './earcut-input.js';
|
|
15
|
+
/**
|
|
16
|
+
* The fill renderer core uses for polygons, shared with custom feature renderers.
|
|
17
|
+
*
|
|
18
|
+
* Takes `[lng, lat]` rings in degrees, triangulates them (holes included) and converts them
|
|
19
|
+
* to clip space on the GPU relative to the view center, for float precision. Call
|
|
20
|
+
* `ensureShader` with the shader data of the frame and `setOffsetUniforms` before drawing.
|
|
21
|
+
*/
|
|
22
|
+
export class FillShaderManager {
|
|
23
|
+
/**
|
|
24
|
+
* @param terrain The terrain state of the draw instance (an inactive one draws flat)
|
|
25
|
+
*/
|
|
26
|
+
constructor(gl, terrain = new TerrainContext()) {
|
|
27
|
+
Object.defineProperty(this, "gl", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(this, "program", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: null
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "variantName", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: ''
|
|
44
|
+
});
|
|
45
|
+
// Projection uniform management
|
|
46
|
+
Object.defineProperty(this, "projectionUniformManager", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: void 0
|
|
51
|
+
});
|
|
52
|
+
// Uniform locations (renderer specific)
|
|
53
|
+
Object.defineProperty(this, "colorLoc", {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: null
|
|
58
|
+
});
|
|
59
|
+
// Uniform values for offset mode
|
|
60
|
+
Object.defineProperty(this, "offsetUniforms", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
configurable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
value: null
|
|
65
|
+
});
|
|
66
|
+
// The VAO and buffers reused for drawing (attributes are set up only once at construction)
|
|
67
|
+
Object.defineProperty(this, "vao", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
configurable: true,
|
|
70
|
+
writable: true,
|
|
71
|
+
value: null
|
|
72
|
+
});
|
|
73
|
+
Object.defineProperty(this, "vertexBuffer", {
|
|
74
|
+
enumerable: true,
|
|
75
|
+
configurable: true,
|
|
76
|
+
writable: true,
|
|
77
|
+
value: null
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(this, "indexBuffer", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
configurable: true,
|
|
82
|
+
writable: true,
|
|
83
|
+
value: null
|
|
84
|
+
});
|
|
85
|
+
this.gl = gl;
|
|
86
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl, { surface: true, terrain });
|
|
87
|
+
this.vertexBuffer = gl.createBuffer();
|
|
88
|
+
this.indexBuffer = gl.createBuffer();
|
|
89
|
+
this.vao = gl.createVertexArray();
|
|
90
|
+
this.setupVAO();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sets the vertex attributes and the index buffer on the VAO
|
|
94
|
+
*
|
|
95
|
+
* The ELEMENT_ARRAY_BUFFER binding is part of the VAO state, so it is bundled while
|
|
96
|
+
* the VAO is bound.
|
|
97
|
+
*/
|
|
98
|
+
setupVAO() {
|
|
99
|
+
const gl = this.gl;
|
|
100
|
+
gl.bindVertexArray(this.vao);
|
|
101
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
102
|
+
gl.enableVertexAttribArray(0);
|
|
103
|
+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
|
|
104
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
|
105
|
+
gl.bindVertexArray(null);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Ensures the shader (recreating it when necessary)
|
|
109
|
+
*/
|
|
110
|
+
ensureShader(shaderData) {
|
|
111
|
+
if (this.variantName !== shaderData.variantName) {
|
|
112
|
+
if (this.program) {
|
|
113
|
+
this.gl.deleteProgram(this.program);
|
|
114
|
+
}
|
|
115
|
+
this.program = this.createShaderProgram(shaderData.vertexShaderPrelude, shaderData.define);
|
|
116
|
+
this.variantName = shaderData.variantName;
|
|
117
|
+
// Get the projection uniform locations
|
|
118
|
+
this.projectionUniformManager.getLocations(this.program);
|
|
119
|
+
// Get the renderer specific uniform locations
|
|
120
|
+
this.colorLoc = this.gl.getUniformLocation(this.program, 'u_color');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sets the uniforms for offset mode
|
|
125
|
+
* Uses the projectionCenter computed at high precision on the CPU side
|
|
126
|
+
*/
|
|
127
|
+
setOffsetUniforms(uniforms) {
|
|
128
|
+
this.offsetUniforms = uniforms;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Creates the shader program (offset mode)
|
|
132
|
+
*/
|
|
133
|
+
createShaderProgram(prelude, define) {
|
|
134
|
+
// u_projection_transition is defined only in the prelude of globe mode
|
|
135
|
+
const projTransitionUniform = getProjectionTransitionUniform(prelude);
|
|
136
|
+
// High precision version: uses relative coordinates computed at 64-bit precision on
|
|
137
|
+
// the CPU side
|
|
138
|
+
const vertexSource = `#version 300 es
|
|
139
|
+
${prelude}
|
|
140
|
+
${define}
|
|
141
|
+
${projTransitionUniform}${OFFSET_MODE_GLSL}${TERRAIN_SHADE_VERTEX_GLSL}
|
|
142
|
+
layout(location = 0) in vec2 a_pos; // relative coords (64-bit precision on the CPU)
|
|
143
|
+
void main() {
|
|
144
|
+
// High precision version: uses relative coords computed at 64-bit precision on the CPU
|
|
145
|
+
gl_Position = project_position_to_clipspace_from_offset(a_pos, u_projection_matrix);
|
|
146
|
+
emitShadeOffset(a_pos);
|
|
147
|
+
}`;
|
|
148
|
+
// The fill gets the same terrain shading as the ground (factor 1.0 when there is no terrain)
|
|
149
|
+
const fragmentSource = `#version 300 es
|
|
150
|
+
precision highp float;
|
|
151
|
+
uniform vec4 u_color;
|
|
152
|
+
out vec4 fragColor;
|
|
153
|
+
${TERRAIN_SHADE_FRAGMENT_GLSL}
|
|
154
|
+
void main() {
|
|
155
|
+
fragColor = vec4(u_color.rgb * terrainFillShade(), u_color.a);
|
|
156
|
+
}`;
|
|
157
|
+
return createProgram(this.gl, vertexSource, fragmentSource);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Sets the projection uniforms (supporting offset mode + globe mode)
|
|
161
|
+
* @param projectionData MapLibre's ProjectionData
|
|
162
|
+
* @param zoom The current zoom level (used for switching offset mode)
|
|
163
|
+
*/
|
|
164
|
+
setProjectionUniforms(projectionData, zoom) {
|
|
165
|
+
this.projectionUniformManager.setUniforms(projectionData, zoom, this.offsetUniforms);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Fill-renders a single-ring polygon
|
|
169
|
+
*
|
|
170
|
+
* Use drawPolygonRings for a polygon that has holes.
|
|
171
|
+
*
|
|
172
|
+
* @param coords The coordinate array (WGS84)
|
|
173
|
+
* @param color The fill color
|
|
174
|
+
* @param projectionData MapLibre's ProjectionData
|
|
175
|
+
* @param zoom The current zoom level
|
|
176
|
+
*/
|
|
177
|
+
drawPolygon(coords, color, projectionData, zoom) {
|
|
178
|
+
this.drawPolygonRings([coords], color, projectionData, zoom);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Fill-renders a polygon given as an array of rings (supports holes)
|
|
182
|
+
*
|
|
183
|
+
* Sends the WGS84 coordinates to the GPU as they are and converts them in the shader
|
|
184
|
+
*
|
|
185
|
+
* @param rings The array of rings ([0] is the outer ring, [1..] are inner rings, WGS84)
|
|
186
|
+
* @param color The fill color
|
|
187
|
+
* @param projectionData MapLibre's ProjectionData
|
|
188
|
+
* @param zoom The current zoom level
|
|
189
|
+
*/
|
|
190
|
+
drawPolygonRings(rings, color, projectionData, zoom) {
|
|
191
|
+
if (!this.program)
|
|
192
|
+
return;
|
|
193
|
+
const gl = this.gl;
|
|
194
|
+
// Flatten all rings to build the earcut input (inner rings are treated as holes)
|
|
195
|
+
const { flatCoords, holeIndices, rings: openRings } = buildEarcutInput(rings);
|
|
196
|
+
if (openRings.length === 0)
|
|
197
|
+
return;
|
|
198
|
+
// Triangulate with earcut (run on absolute coordinates)
|
|
199
|
+
const indices = earcut(flatCoords, holeIndices);
|
|
200
|
+
if (indices.length === 0)
|
|
201
|
+
return;
|
|
202
|
+
// Compute relative coordinates on the CPU side (offset mode: computed at 64-bit precision)
|
|
203
|
+
const centerLngLat = this.offsetUniforms?.centerLngLat ?? [0, 0];
|
|
204
|
+
// Vertices hold only the relative coordinates of each point; the triangle
|
|
205
|
+
// composition is expressed with indices
|
|
206
|
+
const pointCount = flatCoords.length / 2;
|
|
207
|
+
const vertexData = new Float32Array(flatCoords.length);
|
|
208
|
+
for (let i = 0; i < pointCount; i++) {
|
|
209
|
+
// Compute the offset from the center at 64-bit precision
|
|
210
|
+
const offset = calculateLngLatOffset([flatCoords[i * 2], flatCoords[i * 2 + 1]], centerLngLat);
|
|
211
|
+
vertexData[i * 2] = offset[0];
|
|
212
|
+
vertexData[i * 2 + 1] = offset[1];
|
|
213
|
+
}
|
|
214
|
+
const indexData = new Uint32Array(indices);
|
|
215
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
216
|
+
gl.bufferData(gl.ARRAY_BUFFER, vertexData, gl.DYNAMIC_DRAW);
|
|
217
|
+
gl.bindVertexArray(this.vao);
|
|
218
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.DYNAMIC_DRAW);
|
|
219
|
+
gl.useProgram(this.program);
|
|
220
|
+
// Set the projection uniforms
|
|
221
|
+
this.setProjectionUniforms(projectionData, zoom);
|
|
222
|
+
if (this.colorLoc) {
|
|
223
|
+
gl.uniform4fv(this.colorLoc, color);
|
|
224
|
+
}
|
|
225
|
+
gl.drawElements(gl.TRIANGLES, indexData.length, gl.UNSIGNED_INT, 0);
|
|
226
|
+
gl.bindVertexArray(null);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Releases the resources
|
|
230
|
+
*
|
|
231
|
+
* @internal
|
|
232
|
+
*/
|
|
233
|
+
dispose() {
|
|
234
|
+
if (this.program) {
|
|
235
|
+
this.gl.deleteProgram(this.program);
|
|
236
|
+
this.program = null;
|
|
237
|
+
}
|
|
238
|
+
if (this.vao) {
|
|
239
|
+
this.gl.deleteVertexArray(this.vao);
|
|
240
|
+
this.vao = null;
|
|
241
|
+
}
|
|
242
|
+
if (this.vertexBuffer) {
|
|
243
|
+
this.gl.deleteBuffer(this.vertexBuffer);
|
|
244
|
+
this.vertexBuffer = null;
|
|
245
|
+
}
|
|
246
|
+
if (this.indexBuffer) {
|
|
247
|
+
this.gl.deleteBuffer(this.indexBuffer);
|
|
248
|
+
this.indexBuffer = null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { PolygonTriangulator } from './triangulator.js';
|
|
2
|
+
/** The color type */
|
|
3
|
+
export type Color = [number, number, number, number];
|
|
4
|
+
/** The polygon style */
|
|
5
|
+
export interface SDFPolygonStyle {
|
|
6
|
+
fillColor: Color;
|
|
7
|
+
fillOpacity: number;
|
|
8
|
+
strokeColor: Color;
|
|
9
|
+
/**
|
|
10
|
+
* The pixel width of the outline (relative to createdZoom)
|
|
11
|
+
*
|
|
12
|
+
* Positive value: scales with the zoom as `strokeWidth * 2^(zoom - createdZoom)`.
|
|
13
|
+
* Negative value: a fixed width of `-strokeWidth` pixels (createdZoom and the zoom at
|
|
14
|
+
* draw time are ignored). This is a convention for drawing features that have no
|
|
15
|
+
* createdZoom mixed into the same batch as features with a variable width (which
|
|
16
|
+
* preserves the z-order).
|
|
17
|
+
* 0: the outline is not drawn.
|
|
18
|
+
*/
|
|
19
|
+
strokeWidth: number;
|
|
20
|
+
strokeOpacity: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A retained-mode polygon batch (GPU resources)
|
|
24
|
+
*
|
|
25
|
+
* It shares no resources with the shared vertex buffer and shared VAO of immediate mode.
|
|
26
|
+
*/
|
|
27
|
+
export interface RetainedPolygonBatch {
|
|
28
|
+
/** The VAO with the attributes already set up (dedicated to this batch) */
|
|
29
|
+
readonly vao: WebGLVertexArrayObject;
|
|
30
|
+
/** The vertex buffer (dedicated to this batch) */
|
|
31
|
+
readonly vertexBuffer: WebGLBuffer;
|
|
32
|
+
/** The index buffer (dedicated to this batch) */
|
|
33
|
+
readonly indexBuffer: WebGLBuffer;
|
|
34
|
+
/** The number of indices */
|
|
35
|
+
readonly indexCount: number;
|
|
36
|
+
/** The origin of the relative coordinates (already rounded to Float32) */
|
|
37
|
+
readonly origin: [number, number];
|
|
38
|
+
/**
|
|
39
|
+
* The fixed zoom used to compute the line width of the outline
|
|
40
|
+
*
|
|
41
|
+
* When it is null, the zoom at draw time is passed to u_zoom.
|
|
42
|
+
*/
|
|
43
|
+
readonly widthZoom: number | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The options for building a retained-mode polygon batch
|
|
47
|
+
*/
|
|
48
|
+
export interface RetainedPolygonBuildOptions {
|
|
49
|
+
/** The origin of the relative coordinates (the first coordinate of the first polygon
|
|
50
|
+
* when omitted) */
|
|
51
|
+
origin?: [number, number];
|
|
52
|
+
/** The fixed zoom used to compute the line width of the outline (the zoom at draw time
|
|
53
|
+
* when omitted) */
|
|
54
|
+
widthZoom?: number;
|
|
55
|
+
/**
|
|
56
|
+
* The supplier of triangulations (earcut is called on the spot when omitted)
|
|
57
|
+
*
|
|
58
|
+
* A polygon whose triangulation is not ready is built with the fill omitted (the
|
|
59
|
+
* outline is still drawn).
|
|
60
|
+
*/
|
|
61
|
+
triangulator?: PolygonTriangulator;
|
|
62
|
+
}
|