@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,125 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { calculateOffsetUniforms } from './helpers.js';
|
|
4
|
+
/**
|
|
5
|
+
* ShaderInitializer
|
|
6
|
+
*
|
|
7
|
+
* Manages the shader initialization and the projection data setup of every
|
|
8
|
+
* renderer
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export class ShaderInitializer {
|
|
13
|
+
constructor(renderers) {
|
|
14
|
+
Object.defineProperty(this, "renderers", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: void 0
|
|
19
|
+
});
|
|
20
|
+
this.renderers = renderers;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Makes every renderer ensure its shader
|
|
24
|
+
*/
|
|
25
|
+
ensureShaders(shaderData) {
|
|
26
|
+
const { featureDrawer, tentativeRenderer, quadShader, strokeRenderer, pointShapeRenderer, pointInstanceRenderer, sdfLineRenderer, polygonBatchRenderer, sdfPolygonRenderer, } = this.renderers;
|
|
27
|
+
if (featureDrawer) {
|
|
28
|
+
featureDrawer.ensureShader(shaderData);
|
|
29
|
+
}
|
|
30
|
+
if (tentativeRenderer) {
|
|
31
|
+
tentativeRenderer.ensureShader(shaderData);
|
|
32
|
+
}
|
|
33
|
+
if (quadShader) {
|
|
34
|
+
quadShader.ensureShader(shaderData);
|
|
35
|
+
}
|
|
36
|
+
if (strokeRenderer) {
|
|
37
|
+
strokeRenderer.ensureShader(shaderData);
|
|
38
|
+
}
|
|
39
|
+
if (pointShapeRenderer) {
|
|
40
|
+
pointShapeRenderer.ensureShader(shaderData);
|
|
41
|
+
}
|
|
42
|
+
if (pointInstanceRenderer) {
|
|
43
|
+
pointInstanceRenderer.ensureShader(shaderData);
|
|
44
|
+
}
|
|
45
|
+
if (sdfLineRenderer) {
|
|
46
|
+
sdfLineRenderer.ensureShader(shaderData);
|
|
47
|
+
}
|
|
48
|
+
if (polygonBatchRenderer) {
|
|
49
|
+
polygonBatchRenderer.ensureShader(shaderData);
|
|
50
|
+
}
|
|
51
|
+
if (sdfPolygonRenderer) {
|
|
52
|
+
sdfPolygonRenderer.ensureShader(shaderData);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sets the projection data on the renderers that need it
|
|
57
|
+
*/
|
|
58
|
+
setProjectionData(projectionData) {
|
|
59
|
+
const { pointShapeRenderer, pointInstanceRenderer } = this.renderers;
|
|
60
|
+
if (pointShapeRenderer) {
|
|
61
|
+
pointShapeRenderer.setProjectionData(projectionData);
|
|
62
|
+
}
|
|
63
|
+
if (pointInstanceRenderer) {
|
|
64
|
+
pointInstanceRenderer.setProjectionData(projectionData);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Sets the uniforms for offset mode on every renderer
|
|
69
|
+
* Computes projectionCenter at 64-bit precision on the CPU side and passes it to each renderer
|
|
70
|
+
* The uniforms for globe mode are set directly from ProjectionData
|
|
71
|
+
*/
|
|
72
|
+
setOffsetUniforms(centerLngLat, mainMatrix) {
|
|
73
|
+
this.applyOffsetUniforms(calculateOffsetUniforms(centerLngLat, mainMatrix));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sets uniforms for offset mode that are already computed on every renderer
|
|
77
|
+
*
|
|
78
|
+
* The rendering of one copy of the world (the view across the antimeridian) computes its
|
|
79
|
+
* uniforms once per frame and applies them for each slot.
|
|
80
|
+
*/
|
|
81
|
+
applyOffsetUniforms(uniforms) {
|
|
82
|
+
const { featureDrawer, tentativeRenderer, quadShader, strokeRenderer, pointShapeRenderer, pointInstanceRenderer, sdfLineRenderer, polygonBatchRenderer, sdfPolygonRenderer, } = this.renderers;
|
|
83
|
+
if (featureDrawer) {
|
|
84
|
+
featureDrawer.setOffsetUniforms(uniforms);
|
|
85
|
+
}
|
|
86
|
+
if (tentativeRenderer) {
|
|
87
|
+
tentativeRenderer.setOffsetUniforms(uniforms);
|
|
88
|
+
}
|
|
89
|
+
if (quadShader) {
|
|
90
|
+
quadShader.setOffsetUniforms(uniforms);
|
|
91
|
+
}
|
|
92
|
+
if (strokeRenderer) {
|
|
93
|
+
strokeRenderer.setOffsetUniforms(uniforms);
|
|
94
|
+
}
|
|
95
|
+
if (pointShapeRenderer) {
|
|
96
|
+
pointShapeRenderer.setOffsetUniforms(uniforms);
|
|
97
|
+
}
|
|
98
|
+
if (pointInstanceRenderer) {
|
|
99
|
+
pointInstanceRenderer.setOffsetUniforms(uniforms);
|
|
100
|
+
}
|
|
101
|
+
if (sdfLineRenderer) {
|
|
102
|
+
sdfLineRenderer.setOffsetUniforms(uniforms);
|
|
103
|
+
}
|
|
104
|
+
if (polygonBatchRenderer) {
|
|
105
|
+
polygonBatchRenderer.setOffsetUniforms(uniforms);
|
|
106
|
+
}
|
|
107
|
+
if (sdfPolygonRenderer) {
|
|
108
|
+
sdfPolygonRenderer.setOffsetUniforms(uniforms);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Increments the frame count of SDFLineRenderer
|
|
113
|
+
*/
|
|
114
|
+
incrementSdfLineFrame() {
|
|
115
|
+
if (this.renderers.sdfLineRenderer) {
|
|
116
|
+
this.renderers.sdfLineRenderer.incrementFrame();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Creates a ShaderInitializer
|
|
122
|
+
*/
|
|
123
|
+
export function createShaderInitializer(renderers) {
|
|
124
|
+
return new ShaderInitializer(renderers);
|
|
125
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProjectionUniformManager
|
|
3
|
+
*
|
|
4
|
+
* A class that unifies the management of projection-related uniforms.
|
|
5
|
+
* It centralizes the uniform location lookup and setup that was duplicated in
|
|
6
|
+
* each renderer.
|
|
7
|
+
*/
|
|
8
|
+
import type { ProjectionData } from 'maplibre-gl';
|
|
9
|
+
import type { TerrainContext } from '../terrain/context.js';
|
|
10
|
+
import type { OffsetUniforms } from './helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* The locations of the projection and terrain uniforms of one program, as
|
|
13
|
+
* {@link ProjectionUniformManager} looks them up. A location is null when the program does
|
|
14
|
+
* not declare the uniform.
|
|
15
|
+
*/
|
|
16
|
+
export interface ProjectionUniformLocations {
|
|
17
|
+
/** `u_projection_matrix`: the projection matrix of the frame */
|
|
18
|
+
matrix: WebGLUniformLocation | null;
|
|
19
|
+
/** `u_center_lnglat`: the view center in degrees, rounded to Float32 (offset mode) */
|
|
20
|
+
centerLngLat: WebGLUniformLocation | null;
|
|
21
|
+
/** `u_projection_center`: the view center in clip space (offset mode) */
|
|
22
|
+
projectionCenter: WebGLUniformLocation | null;
|
|
23
|
+
/** `u_units_per_degree`: Mercator units per degree at the center (offset mode) */
|
|
24
|
+
unitsPerDegree: WebGLUniformLocation | null;
|
|
25
|
+
/** `u_units_per_degree2`: the latitude correction of the above (offset mode) */
|
|
26
|
+
unitsPerDegree2: WebGLUniformLocation | null;
|
|
27
|
+
/** `u_use_offset_mode`: 1 to project relative to the center, 0 otherwise */
|
|
28
|
+
useOffsetMode: WebGLUniformLocation | null;
|
|
29
|
+
/**
|
|
30
|
+
* The gap between the reference coordinates of a retained batch and the linearization
|
|
31
|
+
* center (immediate mode uses [0, 0])
|
|
32
|
+
*/
|
|
33
|
+
originShift: WebGLUniformLocation | null;
|
|
34
|
+
/** Globe: the Mercator coordinates of the tile (from maplibre's prelude) */
|
|
35
|
+
mercatorCoords: WebGLUniformLocation | null;
|
|
36
|
+
/** Globe: the clipping plane (from maplibre's prelude) */
|
|
37
|
+
clippingPlane: WebGLUniformLocation | null;
|
|
38
|
+
/** Globe: the transition between Mercator (0) and globe (1) */
|
|
39
|
+
transition: WebGLUniformLocation | null;
|
|
40
|
+
/** Globe: the fallback matrix (from maplibre's prelude) */
|
|
41
|
+
fallbackMatrix: WebGLUniformLocation | null;
|
|
42
|
+
/** Terrain: the Mercator coordinates of the view center */
|
|
43
|
+
centerMercator: WebGLUniformLocation | null;
|
|
44
|
+
/** Terrain: 1 while the terrain is drawn, 0 otherwise */
|
|
45
|
+
terrainOn: WebGLUniformLocation | null;
|
|
46
|
+
/** Terrain: the sampler of the DEM atlas */
|
|
47
|
+
demAtlas: WebGLUniformLocation | null;
|
|
48
|
+
/** Terrain: the Mercator rectangle the DEM atlas covers */
|
|
49
|
+
demAtlasRect: WebGLUniformLocation | null;
|
|
50
|
+
/** Terrain: the size of the DEM atlas */
|
|
51
|
+
demAtlasSize: WebGLUniformLocation | null;
|
|
52
|
+
/** Terrain: the parameters of the elevation lookup */
|
|
53
|
+
elevationParams: WebGLUniformLocation | null;
|
|
54
|
+
/** Terrain shading: the light direction (polygon fills only) */
|
|
55
|
+
lightDir: WebGLUniformLocation | null;
|
|
56
|
+
/** Terrain shading: the strength of the shading (polygon fills only) */
|
|
57
|
+
shadeStrength: WebGLUniformLocation | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Looks up and sets the projection and terrain uniforms of a program, for a custom renderer
|
|
61
|
+
* that uses {@link OFFSET_MODE_GLSL}.
|
|
62
|
+
*
|
|
63
|
+
* A class that manages the projection-related uniforms in one place
|
|
64
|
+
*/
|
|
65
|
+
export declare class ProjectionUniformManager {
|
|
66
|
+
private gl;
|
|
67
|
+
private locations;
|
|
68
|
+
private memo;
|
|
69
|
+
/**
|
|
70
|
+
* Whether this is a renderer that draws things stuck to the ground surface
|
|
71
|
+
* (polygons and lines)
|
|
72
|
+
*
|
|
73
|
+
* Only renderers with true stop applying the elevation on a frame that draws
|
|
74
|
+
* polygons and lines flat (the zoomed-out band; surfacesFlattened in
|
|
75
|
+
* `terrain/context.ts`). Symbols such as points, handles and text quads
|
|
76
|
+
* are determined by a single vertex and do not interpolate in between, so
|
|
77
|
+
* they do not create cliffs. Stopping the elevation would only put them out
|
|
78
|
+
* of step with hit testing (the anchor projection).
|
|
79
|
+
*/
|
|
80
|
+
private readonly surface;
|
|
81
|
+
/**
|
|
82
|
+
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
83
|
+
*
|
|
84
|
+
* The renderers of a CustomLayer pass their instance's context at construction. A renderer
|
|
85
|
+
* of an extension implementation, which may be shared between draw instances, calls
|
|
86
|
+
* `setTerrain(context.terrain)` with the context it receives in each draw call.
|
|
87
|
+
*/
|
|
88
|
+
private terrain;
|
|
89
|
+
constructor(gl: WebGL2RenderingContext, options?: {
|
|
90
|
+
surface?: boolean;
|
|
91
|
+
terrain?: TerrainContext | null;
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* Sets the terrain state the next uniforms are taken from (null draws without terrain)
|
|
95
|
+
*/
|
|
96
|
+
setTerrain(terrain: TerrainContext | null): void;
|
|
97
|
+
/**
|
|
98
|
+
* Obtains the uniform locations from a program
|
|
99
|
+
*
|
|
100
|
+
* Rebuilding the program also resets the uniform values, so the record is
|
|
101
|
+
* discarded as well.
|
|
102
|
+
*/
|
|
103
|
+
getLocations(program: WebGLProgram): ProjectionUniformLocations;
|
|
104
|
+
/**
|
|
105
|
+
* Obtains the current locations (getLocations() must be called first)
|
|
106
|
+
*/
|
|
107
|
+
getCurrentLocations(): ProjectionUniformLocations | null;
|
|
108
|
+
/**
|
|
109
|
+
* Sets the projection uniforms
|
|
110
|
+
*
|
|
111
|
+
* A uniform whose value is the same as last time is not rewritten. Retained
|
|
112
|
+
* mode passes through here for every chunk, but the only thing that changes
|
|
113
|
+
* between chunks is u_origin_shift; the matrix and the camera-related values
|
|
114
|
+
* are invariant within a frame (see frame.ts).
|
|
115
|
+
*
|
|
116
|
+
* @param projectionData MapLibre's ProjectionData
|
|
117
|
+
* @param zoom The current zoom level
|
|
118
|
+
* @param offsetUniforms The uniforms for offset mode (null is allowed)
|
|
119
|
+
* @param originShift The gap between the reference coordinates of the vertex offsets and
|
|
120
|
+
* the linearization center (the default is [0,0])
|
|
121
|
+
*/
|
|
122
|
+
setUniforms(projectionData: ProjectionData, zoom: number, offsetUniforms: OffsetUniforms | null, originShift?: [number, number]): void;
|
|
123
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { INACTIVE_TERRAIN_STATE, TERRAIN_ATLAS_TEXTURE_UNIT, } from '../terrain/state.js';
|
|
4
|
+
import { getRenderFrame } from './frame.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a record in the not-yet-written state
|
|
7
|
+
*/
|
|
8
|
+
function createMemo() {
|
|
9
|
+
return {
|
|
10
|
+
frame: -1,
|
|
11
|
+
mainMatrix: null,
|
|
12
|
+
globeSource: null,
|
|
13
|
+
useOffsetMode: Number.NaN,
|
|
14
|
+
originShiftX: Number.NaN,
|
|
15
|
+
originShiftY: Number.NaN,
|
|
16
|
+
centerSource: null,
|
|
17
|
+
offsetSource: null,
|
|
18
|
+
terrainSource: null,
|
|
19
|
+
terrainOn: Number.NaN,
|
|
20
|
+
terrainCenterSource: null,
|
|
21
|
+
shadeLight: null,
|
|
22
|
+
shadeStrength: Number.NaN,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Looks up and sets the projection and terrain uniforms of a program, for a custom renderer
|
|
27
|
+
* that uses {@link OFFSET_MODE_GLSL}.
|
|
28
|
+
*
|
|
29
|
+
* A class that manages the projection-related uniforms in one place
|
|
30
|
+
*/
|
|
31
|
+
export class ProjectionUniformManager {
|
|
32
|
+
constructor(gl, options = {}) {
|
|
33
|
+
Object.defineProperty(this, "gl", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: void 0
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "locations", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: null
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(this, "memo", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: createMemo()
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Whether this is a renderer that draws things stuck to the ground surface
|
|
53
|
+
* (polygons and lines)
|
|
54
|
+
*
|
|
55
|
+
* Only renderers with true stop applying the elevation on a frame that draws
|
|
56
|
+
* polygons and lines flat (the zoomed-out band; surfacesFlattened in
|
|
57
|
+
* `terrain/context.ts`). Symbols such as points, handles and text quads
|
|
58
|
+
* are determined by a single vertex and do not interpolate in between, so
|
|
59
|
+
* they do not create cliffs. Stopping the elevation would only put them out
|
|
60
|
+
* of step with hit testing (the anchor projection).
|
|
61
|
+
*/
|
|
62
|
+
Object.defineProperty(this, "surface", {
|
|
63
|
+
enumerable: true,
|
|
64
|
+
configurable: true,
|
|
65
|
+
writable: true,
|
|
66
|
+
value: void 0
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
70
|
+
*
|
|
71
|
+
* The renderers of a CustomLayer pass their instance's context at construction. A renderer
|
|
72
|
+
* of an extension implementation, which may be shared between draw instances, calls
|
|
73
|
+
* `setTerrain(context.terrain)` with the context it receives in each draw call.
|
|
74
|
+
*/
|
|
75
|
+
Object.defineProperty(this, "terrain", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
configurable: true,
|
|
78
|
+
writable: true,
|
|
79
|
+
value: void 0
|
|
80
|
+
});
|
|
81
|
+
this.gl = gl;
|
|
82
|
+
this.surface = options.surface === true;
|
|
83
|
+
this.terrain = options.terrain ?? null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sets the terrain state the next uniforms are taken from (null draws without terrain)
|
|
87
|
+
*/
|
|
88
|
+
setTerrain(terrain) {
|
|
89
|
+
this.terrain = terrain;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Obtains the uniform locations from a program
|
|
93
|
+
*
|
|
94
|
+
* Rebuilding the program also resets the uniform values, so the record is
|
|
95
|
+
* discarded as well.
|
|
96
|
+
*/
|
|
97
|
+
getLocations(program) {
|
|
98
|
+
const gl = this.gl;
|
|
99
|
+
this.memo = createMemo();
|
|
100
|
+
this.locations = {
|
|
101
|
+
// The basic projection
|
|
102
|
+
matrix: gl.getUniformLocation(program, 'u_projection_matrix'),
|
|
103
|
+
// For offset mode
|
|
104
|
+
centerLngLat: gl.getUniformLocation(program, 'u_center_lnglat'),
|
|
105
|
+
projectionCenter: gl.getUniformLocation(program, 'u_projection_center'),
|
|
106
|
+
unitsPerDegree: gl.getUniformLocation(program, 'u_units_per_degree'),
|
|
107
|
+
unitsPerDegree2: gl.getUniformLocation(program, 'u_units_per_degree2'),
|
|
108
|
+
useOffsetMode: gl.getUniformLocation(program, 'u_use_offset_mode'),
|
|
109
|
+
originShift: gl.getUniformLocation(program, 'u_origin_shift'),
|
|
110
|
+
// For globe mode
|
|
111
|
+
mercatorCoords: gl.getUniformLocation(program, 'u_projection_tile_mercator_coords'),
|
|
112
|
+
clippingPlane: gl.getUniformLocation(program, 'u_projection_clipping_plane'),
|
|
113
|
+
transition: gl.getUniformLocation(program, 'u_projection_transition'),
|
|
114
|
+
fallbackMatrix: gl.getUniformLocation(program, 'u_projection_fallback_matrix'),
|
|
115
|
+
// For terrain
|
|
116
|
+
centerMercator: gl.getUniformLocation(program, 'u_center_mercator'),
|
|
117
|
+
terrainOn: gl.getUniformLocation(program, 'u_terrain_on'),
|
|
118
|
+
demAtlas: gl.getUniformLocation(program, 'u_dem_atlas'),
|
|
119
|
+
demAtlasRect: gl.getUniformLocation(program, 'u_dem_atlas_rect'),
|
|
120
|
+
demAtlasSize: gl.getUniformLocation(program, 'u_dem_atlas_size'),
|
|
121
|
+
elevationParams: gl.getUniformLocation(program, 'u_elevation_params'),
|
|
122
|
+
// For terrain shading (null in shaders that do not declare them, and nothing is written)
|
|
123
|
+
lightDir: gl.getUniformLocation(program, 'u_light_dir'),
|
|
124
|
+
shadeStrength: gl.getUniformLocation(program, 'u_shade_strength'),
|
|
125
|
+
};
|
|
126
|
+
return this.locations;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Obtains the current locations (getLocations() must be called first)
|
|
130
|
+
*/
|
|
131
|
+
getCurrentLocations() {
|
|
132
|
+
return this.locations;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Sets the projection uniforms
|
|
136
|
+
*
|
|
137
|
+
* A uniform whose value is the same as last time is not rewritten. Retained
|
|
138
|
+
* mode passes through here for every chunk, but the only thing that changes
|
|
139
|
+
* between chunks is u_origin_shift; the matrix and the camera-related values
|
|
140
|
+
* are invariant within a frame (see frame.ts).
|
|
141
|
+
*
|
|
142
|
+
* @param projectionData MapLibre's ProjectionData
|
|
143
|
+
* @param zoom The current zoom level
|
|
144
|
+
* @param offsetUniforms The uniforms for offset mode (null is allowed)
|
|
145
|
+
* @param originShift The gap between the reference coordinates of the vertex offsets and
|
|
146
|
+
* the linearization center (the default is [0,0])
|
|
147
|
+
*/
|
|
148
|
+
setUniforms(projectionData, zoom, offsetUniforms, originShift = [0, 0]) {
|
|
149
|
+
if (!this.locations)
|
|
150
|
+
return;
|
|
151
|
+
const gl = this.gl;
|
|
152
|
+
const locs = this.locations;
|
|
153
|
+
const memo = this.memo;
|
|
154
|
+
// Rewrite everything when the frame changes (insurance against a design where the
|
|
155
|
+
// contents change while the reference stays the same)
|
|
156
|
+
const frame = getRenderFrame();
|
|
157
|
+
const staleFrame = memo.frame !== frame;
|
|
158
|
+
// Use offset mode at high zoom levels (zoom >= 12)
|
|
159
|
+
const useOffsetMode = zoom >= 12 ? 1.0 : 0.0;
|
|
160
|
+
// Projection matrix
|
|
161
|
+
if (locs.matrix && (staleFrame || memo.mainMatrix !== projectionData.mainMatrix)) {
|
|
162
|
+
gl.uniformMatrix4fv(locs.matrix, false, projectionData.mainMatrix);
|
|
163
|
+
memo.mainMatrix = projectionData.mainMatrix;
|
|
164
|
+
}
|
|
165
|
+
// The offset mode flag
|
|
166
|
+
if (locs.useOffsetMode && (staleFrame || memo.useOffsetMode !== useOffsetMode)) {
|
|
167
|
+
gl.uniform1f(locs.useOffsetMode, useOffsetMode);
|
|
168
|
+
memo.useOffsetMode = useOffsetMode;
|
|
169
|
+
}
|
|
170
|
+
// The gap of the reference coordinates is always set (defaults to [0,0])
|
|
171
|
+
// This keeps a previous value from lingering when the same program is reused from a
|
|
172
|
+
// retained batch to immediate mode
|
|
173
|
+
// (only this one changes per chunk, so in practice it is written almost every time)
|
|
174
|
+
if (locs.originShift &&
|
|
175
|
+
(staleFrame || memo.originShiftX !== originShift[0] || memo.originShiftY !== originShift[1])) {
|
|
176
|
+
gl.uniform2f(locs.originShift, originShift[0], originShift[1]);
|
|
177
|
+
memo.originShiftX = originShift[0];
|
|
178
|
+
memo.originShiftY = originShift[1];
|
|
179
|
+
}
|
|
180
|
+
// centerLngLat is always set (because the relative coordinates are computed on the CPU
|
|
181
|
+
// side, it is required even at zoom < 12 so that the shader's fallback path can restore
|
|
182
|
+
// the absolute coordinates)
|
|
183
|
+
if (locs.centerLngLat && (staleFrame || memo.centerSource !== offsetUniforms)) {
|
|
184
|
+
if (offsetUniforms) {
|
|
185
|
+
gl.uniform2fv(locs.centerLngLat, offsetUniforms.centerLngLat);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
gl.uniform2fv(locs.centerLngLat, [0, 0]);
|
|
189
|
+
}
|
|
190
|
+
memo.centerSource = offsetUniforms;
|
|
191
|
+
}
|
|
192
|
+
// The uniforms specific to offset mode (used only when zoom >= 12)
|
|
193
|
+
// If the source is the same, the written values are the same too (null means the default
|
|
194
|
+
// values were written)
|
|
195
|
+
const offsetSource = offsetUniforms && useOffsetMode > 0 ? offsetUniforms : null;
|
|
196
|
+
if (staleFrame || memo.offsetSource !== offsetSource) {
|
|
197
|
+
if (offsetSource) {
|
|
198
|
+
if (locs.projectionCenter) {
|
|
199
|
+
gl.uniform4fv(locs.projectionCenter, offsetSource.projectionCenter);
|
|
200
|
+
}
|
|
201
|
+
if (locs.unitsPerDegree) {
|
|
202
|
+
gl.uniform3fv(locs.unitsPerDegree, offsetSource.unitsPerDegree);
|
|
203
|
+
}
|
|
204
|
+
if (locs.unitsPerDegree2) {
|
|
205
|
+
gl.uniform3fv(locs.unitsPerDegree2, offsetSource.unitsPerDegree2);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// Default values when not in offset mode
|
|
210
|
+
if (locs.projectionCenter) {
|
|
211
|
+
gl.uniform4fv(locs.projectionCenter, [0, 0, 0, 0]);
|
|
212
|
+
}
|
|
213
|
+
if (locs.unitsPerDegree) {
|
|
214
|
+
gl.uniform3fv(locs.unitsPerDegree, [1, 1, 1]);
|
|
215
|
+
}
|
|
216
|
+
if (locs.unitsPerDegree2) {
|
|
217
|
+
gl.uniform3fv(locs.unitsPerDegree2, [0, 0, 0]);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
memo.offsetSource = offsetSource;
|
|
221
|
+
}
|
|
222
|
+
// The uniforms for globe mode (taken from projectionData)
|
|
223
|
+
if (staleFrame || memo.globeSource !== projectionData) {
|
|
224
|
+
if (locs.mercatorCoords && projectionData.tileMercatorCoords) {
|
|
225
|
+
gl.uniform4fv(locs.mercatorCoords, projectionData.tileMercatorCoords);
|
|
226
|
+
}
|
|
227
|
+
if (locs.clippingPlane && projectionData.clippingPlane) {
|
|
228
|
+
gl.uniform4fv(locs.clippingPlane, projectionData.clippingPlane);
|
|
229
|
+
}
|
|
230
|
+
if (locs.transition) {
|
|
231
|
+
gl.uniform1f(locs.transition, projectionData.projectionTransition ?? 0);
|
|
232
|
+
}
|
|
233
|
+
if (locs.fallbackMatrix && projectionData.fallbackMatrix) {
|
|
234
|
+
gl.uniformMatrix4fv(locs.fallbackMatrix, false, projectionData.fallbackMatrix);
|
|
235
|
+
}
|
|
236
|
+
memo.globeSource = projectionData;
|
|
237
|
+
}
|
|
238
|
+
// The uniforms for terrain (taken from the frame state; when terrain is disabled,
|
|
239
|
+
// u_terrain_on = 0 makes the vertex computation exactly identical to before)
|
|
240
|
+
//
|
|
241
|
+
// The atlas origin is handed over as a value relative to the center Mercator
|
|
242
|
+
// coordinates. Sending absolute Mercator coordinates (values in 0-1 that use up the
|
|
243
|
+
// significant digits) as Float32 cannot express differences smaller than one atlas
|
|
244
|
+
// texel, which makes the elevation come out in steps.
|
|
245
|
+
const context = this.terrain;
|
|
246
|
+
const terrain = context?.renderState ?? INACTIVE_TERRAIN_STATE;
|
|
247
|
+
const suppressed = context?.elevationSuppressed === true;
|
|
248
|
+
const flattened = this.surface && context?.surfacesFlattened === true;
|
|
249
|
+
const terrainOn = terrain.active && !suppressed && !flattened ? 1 : 0;
|
|
250
|
+
if (staleFrame ||
|
|
251
|
+
memo.terrainSource !== terrain ||
|
|
252
|
+
memo.terrainOn !== terrainOn ||
|
|
253
|
+
memo.terrainCenterSource !== offsetUniforms) {
|
|
254
|
+
const centerMercX = offsetUniforms?.centerMercator[0] ?? 0;
|
|
255
|
+
const centerMercY = offsetUniforms?.centerMercator[1] ?? 0;
|
|
256
|
+
if (locs.terrainOn)
|
|
257
|
+
gl.uniform1f(locs.terrainOn, terrainOn);
|
|
258
|
+
if (locs.demAtlas)
|
|
259
|
+
gl.uniform1i(locs.demAtlas, TERRAIN_ATLAS_TEXTURE_UNIT);
|
|
260
|
+
if (locs.centerMercator)
|
|
261
|
+
gl.uniform2f(locs.centerMercator, centerMercX, centerMercY);
|
|
262
|
+
if (locs.demAtlasRect) {
|
|
263
|
+
gl.uniform4f(locs.demAtlasRect, terrain.atlasRect[0] - centerMercX, terrain.atlasRect[1] - centerMercY, terrain.atlasRect[2], terrain.atlasRect[3]);
|
|
264
|
+
}
|
|
265
|
+
if (locs.demAtlasSize) {
|
|
266
|
+
gl.uniform2f(locs.demAtlasSize, terrain.atlasSize[0], terrain.atlasSize[1]);
|
|
267
|
+
}
|
|
268
|
+
if (locs.elevationParams) {
|
|
269
|
+
gl.uniform2f(locs.elevationParams, terrain.elevationScale, terrain.liftMeters);
|
|
270
|
+
}
|
|
271
|
+
memo.terrainSource = terrain;
|
|
272
|
+
memo.terrainOn = terrainOn;
|
|
273
|
+
memo.terrainCenterSource = offsetUniforms;
|
|
274
|
+
}
|
|
275
|
+
// The uniforms of the terrain shading (declared only by the shaders of the polygon fill)
|
|
276
|
+
//
|
|
277
|
+
// The strength is set to 0 when there is no terrain and when drawing as a shape on the
|
|
278
|
+
// screen (things drawn with the elevation stopped, such as a rubber band). It is not set
|
|
279
|
+
// to 0 on a frame that draws polygons and lines flat (the zoomed-out band). Stopping the
|
|
280
|
+
// vertex displacement is a measure to avoid cliffs, and erasing the shading there as
|
|
281
|
+
// well would make the appearance of the fill jump at the boundary where the paths swap
|
|
282
|
+
// over (which is the very reason this shading was introduced).
|
|
283
|
+
if (locs.lightDir !== null || locs.shadeStrength !== null) {
|
|
284
|
+
const light = context?.shadeLight ?? null;
|
|
285
|
+
const shadeStrength = light !== null && terrain.active && !suppressed ? light.strength : 0;
|
|
286
|
+
if (staleFrame || memo.shadeLight !== light || memo.shadeStrength !== shadeStrength) {
|
|
287
|
+
if (locs.lightDir) {
|
|
288
|
+
const d = light?.direction ?? [0, 0, 1];
|
|
289
|
+
gl.uniform3fv(locs.lightDir, [d[0], d[1], d[2]]);
|
|
290
|
+
}
|
|
291
|
+
if (locs.shadeStrength)
|
|
292
|
+
gl.uniform1f(locs.shadeStrength, shadeStrength);
|
|
293
|
+
memo.shadeLight = light;
|
|
294
|
+
memo.shadeStrength = shadeStrength;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
memo.frame = frame;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subdivision of a textured quad (the degraded path)
|
|
3
|
+
*
|
|
4
|
+
* On frames where the analytic drape (`terrain/drape/quad.ts`) cannot be used,
|
|
5
|
+
* the quad is split to a fineness close to the grid of the terrain mesh. The
|
|
6
|
+
* resulting vertices are lifted by the shared GLSL
|
|
7
|
+
* (`terrain_elevation_from_offset` in `OFFSET_MODE_GLSL`), which looks up the
|
|
8
|
+
* elevation from the DEM atlas, so unlike a billboard with only four corners
|
|
9
|
+
* the terrain never pokes through from the inside.
|
|
10
|
+
*
|
|
11
|
+
* The step is aimed at half the node spacing of the terrain mesh. In theory,
|
|
12
|
+
* splitting to match the nodes themselves would be best, but a quad is a
|
|
13
|
+
* rotated rectangle, so cutting it along the grid produces trapezoids. With a
|
|
14
|
+
* half step, the amount by which a chord dips below the terrain inside a cell
|
|
15
|
+
* drops to about 1/4 of the node-aligned case and falls within the depth bias
|
|
16
|
+
* (`TERRAIN_DEPTH_BIAS`) applied to the whole frame.
|
|
17
|
+
*
|
|
18
|
+
* There is an upper limit on the total number of cells. This is so that the
|
|
19
|
+
* cost does not diverge even for a huge quad that covers a whole country;
|
|
20
|
+
* when the limit is hit, the caller reports the coarsening factor via
|
|
21
|
+
* `reportTerrainCoarsening` and the depth bias grows by the same amount (it
|
|
22
|
+
* rides directly on the same mechanism as the subdivision of polygons and
|
|
23
|
+
* lines).
|
|
24
|
+
*/
|
|
25
|
+
/** The maximum number of divisions per side */
|
|
26
|
+
export declare const QUAD_GRID_MAX_DIVISIONS = 128;
|
|
27
|
+
/** The upper limit on the total number of cells */
|
|
28
|
+
export declare const QUAD_GRID_MAX_CELLS = 16384;
|
|
29
|
+
/** The number of divisions of the subdivision */
|
|
30
|
+
export interface QuadGridSize {
|
|
31
|
+
/** The number of divisions in the u direction (top-left -> top-right) */
|
|
32
|
+
readonly nx: number;
|
|
33
|
+
/** The number of divisions in the v direction (top-left -> bottom-left) */
|
|
34
|
+
readonly ny: number;
|
|
35
|
+
/**
|
|
36
|
+
* The coarseness of the actual step relative to the terrain mesh node spacing
|
|
37
|
+
* (1 = same as the nodes)
|
|
38
|
+
*/
|
|
39
|
+
readonly coarsening: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Decides the number of divisions
|
|
43
|
+
*
|
|
44
|
+
* @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
|
|
45
|
+
* bottom-right, bottom-left)
|
|
46
|
+
* @param stepGrid The node spacing of the terrain mesh (Mercator). No subdivision if 0 or less
|
|
47
|
+
* @param stepRatio The target step relative to `stepGrid` (half of it on terrain; the globe
|
|
48
|
+
* passes 1 to cut at its cell, `view/globe-subdivision.ts`)
|
|
49
|
+
*/
|
|
50
|
+
export declare function computeQuadGridSize(quad: ArrayLike<number>, stepGrid: number, stepRatio?: number): QuadGridSize;
|
|
51
|
+
/**
|
|
52
|
+
* The subdivided grid (absolute coordinates; subtracting the per-frame center
|
|
53
|
+
* is done by the caller)
|
|
54
|
+
*/
|
|
55
|
+
export interface QuadGridGeometry {
|
|
56
|
+
/** The WGS84 coordinates of the vertices (a sequence of [lng, lat]; kept at 64-bit) */
|
|
57
|
+
readonly lngLat: Float64Array;
|
|
58
|
+
/** The texture coordinates of the vertices */
|
|
59
|
+
readonly texCoords: Float32Array;
|
|
60
|
+
/** The triangle indices */
|
|
61
|
+
readonly indices: Uint16Array;
|
|
62
|
+
/** The number of vertices */
|
|
63
|
+
readonly vertexCount: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Builds a grid by subdividing the four corners
|
|
67
|
+
*
|
|
68
|
+
* The interpolation is done on the Mercator plane. The interpolation of the
|
|
69
|
+
* texture coordinates when the GPU draws the four-corner billboard is also
|
|
70
|
+
* linear on the Mercator plane, so the appearance does not change when
|
|
71
|
+
* subdivided (interpolating on the lng/lat plane would introduce a slight
|
|
72
|
+
* stretch in the latitude direction).
|
|
73
|
+
*
|
|
74
|
+
* @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
|
|
75
|
+
* bottom-right, bottom-left)
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildQuadGrid(quad: ArrayLike<number>, nx: number, ny: number): QuadGridGeometry;
|