@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,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retained-mode rendering of the Store features
|
|
3
|
+
*
|
|
4
|
+
* Immediate mode repeats "resolve the style → compute the relative coordinates → build the
|
|
5
|
+
* vertices on the CPU → upload to the GPU" for every feature on every frame. Here a retained
|
|
6
|
+
* batch (a GPU resource) is prepared per layer in advance and a frame only issues the draw calls.
|
|
7
|
+
* The vertex data does not depend on the camera (projection is done with the projectionData and
|
|
8
|
+
* zoom uniforms of each frame), so it only has to be rebuilt when the set of features or the
|
|
9
|
+
* style rules change.
|
|
10
|
+
*
|
|
11
|
+
* **The rendering result (including the z-order) must be identical to immediate mode.**
|
|
12
|
+
* To that end the feature list is cut into runs at exactly the positions where "the BatchManager
|
|
13
|
+
* of immediate mode flushes a batch", and the runs are drawn in order. Kinds that cannot be
|
|
14
|
+
* retained (dashed lines, images, point shapes without instancing support, custom types) are put
|
|
15
|
+
* into their own run and sent through the immediate-mode path.
|
|
16
|
+
*
|
|
17
|
+
* A change that moves only a few vertices, such as a vertex drag, does not rebuild the chunk.
|
|
18
|
+
* The diff of the vertices that moved is queued, and right before drawing only the corresponding
|
|
19
|
+
* texels of the coordinate texture of the line batch are rewritten. Rebuilding a line with many
|
|
20
|
+
* vertices every frame would overflow the frame (see the comments on queueCoordPatch and
|
|
21
|
+
* SDFLineRenderer.patchRetainedBatchCoords for the details).
|
|
22
|
+
*
|
|
23
|
+
* A retained batch itself does not depend on the camera. Drawing every chunk on every frame
|
|
24
|
+
* would, however, push a large amount of off-screen geometry to the GPU when the data is far
|
|
25
|
+
* wider than the viewport. Each chunk therefore keeps a longitude/latitude bbox, and at draw time
|
|
26
|
+
* only the chunks that do not intersect the expanded viewport are skipped. The unit of thinning
|
|
27
|
+
* is the chunk, and the contents of a batch are not rebuilt for it.
|
|
28
|
+
*
|
|
29
|
+
* This file holds the cache that ties the parts together. The parts are
|
|
30
|
+
*
|
|
31
|
+
* - `store-retained-classify.ts`: the classification of a feature into the kind of its run
|
|
32
|
+
* - `store-retained-chunk.ts`: the chunk, and the building and releasing of its batch
|
|
33
|
+
* - `store-retained-collect.ts`: the conversion of features into the data of a batch
|
|
34
|
+
* - `store-retained-bbox.ts`: the bbox of a chunk and the thinning by the viewport
|
|
35
|
+
* - `store-retained-coord-patch.ts`: the incremental update of the vertices of a line chunk
|
|
36
|
+
* - `store-retained-immediate.ts`: the immediate-mode drawing of the chunks that are not retained
|
|
37
|
+
* - `store-retained-invalidation.ts`: the inputs outside the Store changes that discard the cache
|
|
38
|
+
*/
|
|
39
|
+
import type { ProjectionData } from 'maplibre-gl';
|
|
40
|
+
import type { Store } from '../../store/store.js';
|
|
41
|
+
import type { BoundingBox, Layer, StateChanges } from '../../store/types.js';
|
|
42
|
+
import type { FeatureCompanionRegistry } from '../feature-companion.js';
|
|
43
|
+
import type { RetainedRendererSet } from '../renderers/retained.js';
|
|
44
|
+
import { TerrainContext } from '../terrain/context.js';
|
|
45
|
+
import type { SelectionExtensionRegistry } from '../ui/selection-ui/index.js';
|
|
46
|
+
import { type StoreRetainedDrawDeps } from './store-retained-immediate.js';
|
|
47
|
+
export type { ChunkBBox } from './store-retained-bbox.js';
|
|
48
|
+
export { bboxIntersects } from './store-retained-bbox.js';
|
|
49
|
+
export { STORE_CHUNK_TARGET } from './store-retained-chunk.js';
|
|
50
|
+
export type { RunKind } from './store-retained-classify.js';
|
|
51
|
+
export { classifyFeature } from './store-retained-classify.js';
|
|
52
|
+
export type { LineCoordSlot } from './store-retained-coord-patch.js';
|
|
53
|
+
export { computeCoordinateDiff, computeLineCoordSlots } from './store-retained-coord-patch.js';
|
|
54
|
+
export type { StoreImmediateTarget, StoreRetainedDrawDeps } from './store-retained-immediate.js';
|
|
55
|
+
/**
|
|
56
|
+
* Retained batch cache of the Store features
|
|
57
|
+
*
|
|
58
|
+
* It keeps a list of chunks per layer and rebuilds them per chunk or per layer according to the
|
|
59
|
+
* changes of the Store.
|
|
60
|
+
*/
|
|
61
|
+
export declare class StoreRetainedCache {
|
|
62
|
+
private readonly store;
|
|
63
|
+
/** layerId → cache */
|
|
64
|
+
private readonly layers;
|
|
65
|
+
/**
|
|
66
|
+
* The set of retained-mode renderers used most recently
|
|
67
|
+
*
|
|
68
|
+
* GPU resources are also released from outside rendering (from the subscription to the Store),
|
|
69
|
+
* so where to release them is remembered.
|
|
70
|
+
*/
|
|
71
|
+
private renderers;
|
|
72
|
+
/** Feature lists per layer (a memo within the frame) */
|
|
73
|
+
private featuresByLayer;
|
|
74
|
+
/** Snapshots of the inputs that invalidate every chunk */
|
|
75
|
+
private readonly watch;
|
|
76
|
+
/** The terrain state of the draw instance (the generations that invalidate the caches) */
|
|
77
|
+
private readonly terrain;
|
|
78
|
+
/** The selection extension points of the draw instance (extents of the custom types) */
|
|
79
|
+
private readonly extensions;
|
|
80
|
+
/** The number of the current frame (counted by beginFrame) */
|
|
81
|
+
private frame;
|
|
82
|
+
constructor(store: Store, scope?: {
|
|
83
|
+
terrain?: TerrainContext;
|
|
84
|
+
extensions?: SelectionExtensionRegistry;
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Called at the start of a frame
|
|
88
|
+
*
|
|
89
|
+
* It detects a change of the local visibility (the Store updates the same Set in place, so a
|
|
90
|
+
* reference comparison is impossible) and discards the memo within the frame.
|
|
91
|
+
*/
|
|
92
|
+
beginFrame(companions: FeatureCompanionRegistry): void;
|
|
93
|
+
/**
|
|
94
|
+
* Draws a single layer
|
|
95
|
+
*
|
|
96
|
+
* Drawing follows the order of the chunk list (= the draw order of the Store), so the z-order
|
|
97
|
+
* matches immediate mode.
|
|
98
|
+
*
|
|
99
|
+
* When `viewportBounds` is given, the chunks that do not intersect it are skipped. Only a chunk
|
|
100
|
+
* completely out of range is skipped, so the z-order does not change. As long as the expanded
|
|
101
|
+
* viewport (the same range as the ViewportFilter of immediate mode) is passed, what is drawn
|
|
102
|
+
* satisfies "retained mode ⊇ immediate mode" and the appearance matches as well.
|
|
103
|
+
*
|
|
104
|
+
* An immediate chunk is thinned further per feature with `deps.getVisibleIds`. A retained chunk
|
|
105
|
+
* stays at chunk granularity because a batch cannot be split, but an immediate chunk (dashed
|
|
106
|
+
* lines, images, custom types) is drawn one at a time, so drawing even the off-screen features
|
|
107
|
+
* every frame just because the chunk touches the view is avoided. With this, what an immediate
|
|
108
|
+
* chunk draws is the same set as in immediate mode.
|
|
109
|
+
*
|
|
110
|
+
* @param viewportBounds bbox of the expanded viewport (no thinning when omitted)
|
|
111
|
+
*/
|
|
112
|
+
drawLayer(layerId: string, layer: Layer | undefined, projectionData: ProjectionData, zoom: number, deps: StoreRetainedDrawDeps, viewportBounds?: BoundingBox): void;
|
|
113
|
+
/**
|
|
114
|
+
* Applies the changes of the Store
|
|
115
|
+
*
|
|
116
|
+
* The decisions are conservative (rebuilding too much still renders correctly; rebuilding too
|
|
117
|
+
* little leaves a stale picture).
|
|
118
|
+
*/
|
|
119
|
+
applyChanges(changes: StateChanges): void;
|
|
120
|
+
/**
|
|
121
|
+
* Discards the cache of every layer (the GPU resources are released as well)
|
|
122
|
+
*/
|
|
123
|
+
invalidateAll(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Discards the cache of a single layer (the GPU resources are released as well)
|
|
126
|
+
*/
|
|
127
|
+
invalidateLayer(layerId: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Releases every GPU resource (called from onRemove of CustomLayer)
|
|
130
|
+
*
|
|
131
|
+
* @param renderers Where to release them (the ones used in the most recent draw when omitted)
|
|
132
|
+
*/
|
|
133
|
+
dispose(renderers?: RetainedRendererSet): void;
|
|
134
|
+
/**
|
|
135
|
+
* Prepares the cache of a layer and rebuilds the dirty chunks
|
|
136
|
+
*
|
|
137
|
+
* When the classification disagrees with the kind of the chunk (for example when the evaluation
|
|
138
|
+
* of a style rule changed through properties), the whole layer is rebuilt. When it disagrees a
|
|
139
|
+
* second time as well, that frame is drawn in immediate mode and left to the next frame.
|
|
140
|
+
*/
|
|
141
|
+
private ensureLayer;
|
|
142
|
+
/**
|
|
143
|
+
* Rebuilds the dirty chunks
|
|
144
|
+
*
|
|
145
|
+
* An immediate chunk has no retained batch, but the bbox used for thinning is recomputed here
|
|
146
|
+
* (so that the timing of the build matches a retained chunk).
|
|
147
|
+
*
|
|
148
|
+
* @returns Whether there was a disagreement of the classification (true = rebuild the layer)
|
|
149
|
+
*/
|
|
150
|
+
private buildDirtyChunks;
|
|
151
|
+
/**
|
|
152
|
+
* Computes the bbox of a list of feature ids (looked up again from the Store)
|
|
153
|
+
*/
|
|
154
|
+
private computeChunkBBox;
|
|
155
|
+
/**
|
|
156
|
+
* Cuts the feature list of a layer into runs and chunks
|
|
157
|
+
*
|
|
158
|
+
* A run is cut where the classification changes, and within a run it is split into chunks of
|
|
159
|
+
* STORE_CHUNK_TARGET features each. The viewport is not looked at here (the contents of a
|
|
160
|
+
* retained batch must not depend on the camera). Thinning is done per chunk at draw time.
|
|
161
|
+
*/
|
|
162
|
+
private buildLayerCache;
|
|
163
|
+
/**
|
|
164
|
+
* The features of a layer in draw order (visible and not locally hidden)
|
|
165
|
+
*
|
|
166
|
+
* It is never called in a frame where the cache is complete.
|
|
167
|
+
*/
|
|
168
|
+
private getLayerFeatures;
|
|
169
|
+
/**
|
|
170
|
+
* Builds the retained batch of a chunk
|
|
171
|
+
*/
|
|
172
|
+
private buildChunk;
|
|
173
|
+
/**
|
|
174
|
+
* Builds a retained chunk again around the view when its origin leaves a visible error
|
|
175
|
+
*
|
|
176
|
+
* A chunk is cut in draw order, so its extent can be wide; seen at high zoom, the vertices on
|
|
177
|
+
* screen can then be degrees away from the origin. The rule and the tolerance are in
|
|
178
|
+
* `view/shaders/retained-origin.ts`. A chunk that cannot be rebuilt now stays dirty and is
|
|
179
|
+
* drawn in immediate mode (exact) until the next frame.
|
|
180
|
+
*/
|
|
181
|
+
private rebaseForView;
|
|
182
|
+
/**
|
|
183
|
+
* Releases the retained batch of a chunk
|
|
184
|
+
*/
|
|
185
|
+
private disposeChunk;
|
|
186
|
+
/**
|
|
187
|
+
* Queues a vertex movement as a diff patch against the retained batch of its chunk
|
|
188
|
+
*
|
|
189
|
+
* The conditions are in queueCoordPatch. false = the caller rebuilds the chunk.
|
|
190
|
+
*/
|
|
191
|
+
private tryQueueCoordPatch;
|
|
192
|
+
/**
|
|
193
|
+
* Marks the chunk that carries the feature as dirty
|
|
194
|
+
*
|
|
195
|
+
* If there is no corresponding chunk, the whole layer is rebuilt.
|
|
196
|
+
*/
|
|
197
|
+
private markFeatureDirty;
|
|
198
|
+
}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { getDisplayFeatures, isLocallyHidden } from '../../store/local-visibility.js';
|
|
4
|
+
import { layerDrawFactors } from '../renderers/draw-factors.js';
|
|
5
|
+
import { boundsCenter, rebasedRetainedOrigin } from '../shaders/retained-origin.js';
|
|
6
|
+
import { TerrainContext } from '../terrain/context.js';
|
|
7
|
+
import { bboxIntersects, chunkBBoxToBounds, computeFeaturesBBox, } from './store-retained-bbox.js';
|
|
8
|
+
import { buildChunkBatch, createChunkEntry, disposeChunkBatches, STORE_CHUNK_TARGET, } from './store-retained-chunk.js';
|
|
9
|
+
import { classifyFeature, featureOrigin } from './store-retained-classify.js';
|
|
10
|
+
import { flushCoordPatches, queueCoordPatch } from './store-retained-coord-patch.js';
|
|
11
|
+
import { drawFeaturesImmediate } from './store-retained-immediate.js';
|
|
12
|
+
import { isOpacityOnlyLayerChange, RetainedInvalidationWatch, } from './store-retained-invalidation.js';
|
|
13
|
+
export { bboxIntersects } from './store-retained-bbox.js';
|
|
14
|
+
export { STORE_CHUNK_TARGET } from './store-retained-chunk.js';
|
|
15
|
+
export { classifyFeature } from './store-retained-classify.js';
|
|
16
|
+
export { computeCoordinateDiff, computeLineCoordSlots } from './store-retained-coord-patch.js';
|
|
17
|
+
/**
|
|
18
|
+
* Retained batch cache of the Store features
|
|
19
|
+
*
|
|
20
|
+
* It keeps a list of chunks per layer and rebuilds them per chunk or per layer according to the
|
|
21
|
+
* changes of the Store.
|
|
22
|
+
*/
|
|
23
|
+
export class StoreRetainedCache {
|
|
24
|
+
constructor(store, scope = {}) {
|
|
25
|
+
Object.defineProperty(this, "store", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: void 0
|
|
30
|
+
});
|
|
31
|
+
/** layerId → cache */
|
|
32
|
+
Object.defineProperty(this, "layers", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: new Map()
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* The set of retained-mode renderers used most recently
|
|
40
|
+
*
|
|
41
|
+
* GPU resources are also released from outside rendering (from the subscription to the Store),
|
|
42
|
+
* so where to release them is remembered.
|
|
43
|
+
*/
|
|
44
|
+
Object.defineProperty(this, "renderers", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true,
|
|
48
|
+
value: null
|
|
49
|
+
});
|
|
50
|
+
/** Feature lists per layer (a memo within the frame) */
|
|
51
|
+
Object.defineProperty(this, "featuresByLayer", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: null
|
|
56
|
+
});
|
|
57
|
+
/** Snapshots of the inputs that invalidate every chunk */
|
|
58
|
+
Object.defineProperty(this, "watch", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: new RetainedInvalidationWatch()
|
|
63
|
+
});
|
|
64
|
+
/** The terrain state of the draw instance (the generations that invalidate the caches) */
|
|
65
|
+
Object.defineProperty(this, "terrain", {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
value: void 0
|
|
70
|
+
});
|
|
71
|
+
/** The selection extension points of the draw instance (extents of the custom types) */
|
|
72
|
+
Object.defineProperty(this, "extensions", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
configurable: true,
|
|
75
|
+
writable: true,
|
|
76
|
+
value: void 0
|
|
77
|
+
});
|
|
78
|
+
/** The number of the current frame (counted by beginFrame) */
|
|
79
|
+
Object.defineProperty(this, "frame", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
configurable: true,
|
|
82
|
+
writable: true,
|
|
83
|
+
value: 0
|
|
84
|
+
});
|
|
85
|
+
this.store = store;
|
|
86
|
+
this.terrain = scope.terrain ?? new TerrainContext();
|
|
87
|
+
this.extensions = scope.extensions;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Called at the start of a frame
|
|
91
|
+
*
|
|
92
|
+
* It detects a change of the local visibility (the Store updates the same Set in place, so a
|
|
93
|
+
* reference comparison is impossible) and discards the memo within the frame.
|
|
94
|
+
*/
|
|
95
|
+
beginFrame(companions) {
|
|
96
|
+
this.frame++;
|
|
97
|
+
this.featuresByLayer = null;
|
|
98
|
+
// Every watch is advanced on every frame (no short circuit), so each keeps its snapshot
|
|
99
|
+
const hiddenChanged = this.watch.locallyHiddenChanged(this.store.getLocallyHidden());
|
|
100
|
+
const companionsChanged = this.watch.companionsChanged(companions);
|
|
101
|
+
const terrainChanged = this.watch.terrainChanged(this.terrain);
|
|
102
|
+
if (hiddenChanged || companionsChanged || terrainChanged)
|
|
103
|
+
this.invalidateAll();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Draws a single layer
|
|
107
|
+
*
|
|
108
|
+
* Drawing follows the order of the chunk list (= the draw order of the Store), so the z-order
|
|
109
|
+
* matches immediate mode.
|
|
110
|
+
*
|
|
111
|
+
* When `viewportBounds` is given, the chunks that do not intersect it are skipped. Only a chunk
|
|
112
|
+
* completely out of range is skipped, so the z-order does not change. As long as the expanded
|
|
113
|
+
* viewport (the same range as the ViewportFilter of immediate mode) is passed, what is drawn
|
|
114
|
+
* satisfies "retained mode ⊇ immediate mode" and the appearance matches as well.
|
|
115
|
+
*
|
|
116
|
+
* An immediate chunk is thinned further per feature with `deps.getVisibleIds`. A retained chunk
|
|
117
|
+
* stays at chunk granularity because a batch cannot be split, but an immediate chunk (dashed
|
|
118
|
+
* lines, images, custom types) is drawn one at a time, so drawing even the off-screen features
|
|
119
|
+
* every frame just because the chunk touches the view is avoided. With this, what an immediate
|
|
120
|
+
* chunk draws is the same set as in immediate mode.
|
|
121
|
+
*
|
|
122
|
+
* @param viewportBounds bbox of the expanded viewport (no thinning when omitted)
|
|
123
|
+
*/
|
|
124
|
+
drawLayer(layerId, layer, projectionData, zoom, deps, viewportBounds) {
|
|
125
|
+
this.renderers = deps.renderers;
|
|
126
|
+
const cache = this.ensureLayer(layerId, layer, deps);
|
|
127
|
+
const viewport = deps.renderers.viewport();
|
|
128
|
+
// The opacity of the layer is multiplied in at draw time (the batches do not bake it)
|
|
129
|
+
const factors = layerDrawFactors(layer);
|
|
130
|
+
for (const chunk of cache.chunks) {
|
|
131
|
+
// A chunk outside the screen is not drawn (a chunk with no computed bbox is always drawn)
|
|
132
|
+
if (viewportBounds && chunk.bbox && !bboxIntersects(chunk.bbox, viewportBounds))
|
|
133
|
+
continue;
|
|
134
|
+
// A batch whose origin is too far from the view for the zoom is built again around it
|
|
135
|
+
this.rebaseForView(chunk, layer, zoom, deps, viewportBounds);
|
|
136
|
+
// An immediate chunk, and a chunk that could not be built, are drawn in immediate mode
|
|
137
|
+
if (chunk.kind === 'immediate' || chunk.dirty) {
|
|
138
|
+
// Thin per feature as well, but only when the range to thin against is decided.
|
|
139
|
+
// The spatial index query becomes necessary for the first time here.
|
|
140
|
+
const visibleIds = viewportBounds ? deps.getVisibleIds?.() : undefined;
|
|
141
|
+
drawFeaturesImmediate(this.store, chunk.featureIds, layer, projectionData, zoom, deps, visibleIds);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (chunk.polygon) {
|
|
145
|
+
deps.renderers.polygon.drawRetained(chunk.polygon, zoom, projectionData, viewport, factors);
|
|
146
|
+
}
|
|
147
|
+
if (chunk.line) {
|
|
148
|
+
// The vertex diff queued during the drag is written into the coordinate texture here
|
|
149
|
+
flushCoordPatches(chunk, deps.renderers.line);
|
|
150
|
+
deps.renderers.line.drawRetainedBatch(chunk.line, zoom, projectionData, factors);
|
|
151
|
+
}
|
|
152
|
+
if (chunk.point) {
|
|
153
|
+
deps.renderers.point.drawRetained(chunk.point, zoom, projectionData, factors);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Applies the changes of the Store
|
|
159
|
+
*
|
|
160
|
+
* The decisions are conservative (rebuilding too much still renders correctly; rebuilding too
|
|
161
|
+
* little leaves a stale picture).
|
|
162
|
+
*/
|
|
163
|
+
applyChanges(changes) {
|
|
164
|
+
// The visibility and the ordering of a group have no reverse lookup to a layer, so everything
|
|
165
|
+
// is discarded (both are rare operations)
|
|
166
|
+
if (changes.groups || changes.groupReorder) {
|
|
167
|
+
this.invalidateAll();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
for (const feature of changes.features?.created ?? []) {
|
|
171
|
+
this.invalidateLayer(feature.layerId);
|
|
172
|
+
}
|
|
173
|
+
for (const feature of changes.features?.deleted ?? []) {
|
|
174
|
+
this.invalidateLayer(feature.layerId);
|
|
175
|
+
}
|
|
176
|
+
for (const { feature, previous } of changes.features?.updated ?? []) {
|
|
177
|
+
if (previous.layerId !== feature.layerId) {
|
|
178
|
+
this.invalidateLayer(previous.layerId);
|
|
179
|
+
this.invalidateLayer(feature.layerId);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// A change of the kind, the visibility, the style or the group can change the run split
|
|
183
|
+
// itself
|
|
184
|
+
if (previous.type !== feature.type ||
|
|
185
|
+
previous.visible !== feature.visible ||
|
|
186
|
+
previous.style !== feature.style ||
|
|
187
|
+
previous.groupId !== feature.groupId) {
|
|
188
|
+
this.invalidateLayer(feature.layerId);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Moving a few vertices (= a drag) only needs a partial update of the coordinate texture of
|
|
192
|
+
// the retained batch. No rebuild is required.
|
|
193
|
+
if (this.tryQueueCoordPatch(feature, previous))
|
|
194
|
+
continue;
|
|
195
|
+
// A change of the coordinates or properties alone only needs the chunk in question rebuilt
|
|
196
|
+
this.markFeatureDirty(feature.layerId, feature.id);
|
|
197
|
+
}
|
|
198
|
+
// Any change of styleRule / visible / order rebuilds the whole layer. The opacity is a
|
|
199
|
+
// uniform written at draw time, so a change of the opacity alone keeps the batches
|
|
200
|
+
for (const { id, layer, previous } of changes.layers?.updated ?? []) {
|
|
201
|
+
if (isOpacityOnlyLayerChange(previous, layer))
|
|
202
|
+
continue;
|
|
203
|
+
this.invalidateLayer(id);
|
|
204
|
+
}
|
|
205
|
+
for (const layer of changes.layers?.deleted ?? []) {
|
|
206
|
+
this.invalidateLayer(layer.id);
|
|
207
|
+
}
|
|
208
|
+
// layers.orderChanged is the order between layers, so it does not affect the chunks
|
|
209
|
+
// (renderLayers calls drawLayer in layer order)
|
|
210
|
+
if (changes.layerReorder) {
|
|
211
|
+
this.invalidateLayer(changes.layerReorder.layerId);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Discards the cache of every layer (the GPU resources are released as well)
|
|
216
|
+
*/
|
|
217
|
+
invalidateAll() {
|
|
218
|
+
for (const layerId of [...this.layers.keys()]) {
|
|
219
|
+
this.invalidateLayer(layerId);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Discards the cache of a single layer (the GPU resources are released as well)
|
|
224
|
+
*/
|
|
225
|
+
invalidateLayer(layerId) {
|
|
226
|
+
const cache = this.layers.get(layerId);
|
|
227
|
+
if (!cache)
|
|
228
|
+
return;
|
|
229
|
+
for (const chunk of cache.chunks) {
|
|
230
|
+
this.disposeChunk(chunk);
|
|
231
|
+
}
|
|
232
|
+
this.layers.delete(layerId);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Releases every GPU resource (called from onRemove of CustomLayer)
|
|
236
|
+
*
|
|
237
|
+
* @param renderers Where to release them (the ones used in the most recent draw when omitted)
|
|
238
|
+
*/
|
|
239
|
+
dispose(renderers) {
|
|
240
|
+
if (renderers)
|
|
241
|
+
this.renderers = renderers;
|
|
242
|
+
this.invalidateAll();
|
|
243
|
+
this.renderers = null;
|
|
244
|
+
this.watch.resetLocallyHidden();
|
|
245
|
+
this.featuresByLayer = null;
|
|
246
|
+
}
|
|
247
|
+
// === Internals ===
|
|
248
|
+
/**
|
|
249
|
+
* Prepares the cache of a layer and rebuilds the dirty chunks
|
|
250
|
+
*
|
|
251
|
+
* When the classification disagrees with the kind of the chunk (for example when the evaluation
|
|
252
|
+
* of a style rule changed through properties), the whole layer is rebuilt. When it disagrees a
|
|
253
|
+
* second time as well, that frame is drawn in immediate mode and left to the next frame.
|
|
254
|
+
*/
|
|
255
|
+
ensureLayer(layerId, layer, deps) {
|
|
256
|
+
let cache = this.layers.get(layerId);
|
|
257
|
+
if (!cache) {
|
|
258
|
+
cache = this.buildLayerCache(layerId, layer, deps);
|
|
259
|
+
this.layers.set(layerId, cache);
|
|
260
|
+
}
|
|
261
|
+
if (!this.buildDirtyChunks(cache, layer, deps))
|
|
262
|
+
return cache;
|
|
263
|
+
this.invalidateLayer(layerId);
|
|
264
|
+
cache = this.buildLayerCache(layerId, layer, deps);
|
|
265
|
+
this.layers.set(layerId, cache);
|
|
266
|
+
this.buildDirtyChunks(cache, layer, deps);
|
|
267
|
+
return cache;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Rebuilds the dirty chunks
|
|
271
|
+
*
|
|
272
|
+
* An immediate chunk has no retained batch, but the bbox used for thinning is recomputed here
|
|
273
|
+
* (so that the timing of the build matches a retained chunk).
|
|
274
|
+
*
|
|
275
|
+
* @returns Whether there was a disagreement of the classification (true = rebuild the layer)
|
|
276
|
+
*/
|
|
277
|
+
buildDirtyChunks(cache, layer, deps) {
|
|
278
|
+
for (const chunk of cache.chunks) {
|
|
279
|
+
if (!chunk.dirty)
|
|
280
|
+
continue;
|
|
281
|
+
if (chunk.kind === 'immediate') {
|
|
282
|
+
chunk.bbox = this.computeChunkBBox(chunk.featureIds);
|
|
283
|
+
chunk.dirty = false;
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (this.buildChunk(chunk, layer, deps) === 'mismatch')
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Computes the bbox of a list of feature ids (looked up again from the Store)
|
|
293
|
+
*/
|
|
294
|
+
computeChunkBBox(featureIds) {
|
|
295
|
+
const features = [];
|
|
296
|
+
for (const id of featureIds) {
|
|
297
|
+
const feature = this.store.getFeature(id);
|
|
298
|
+
if (feature)
|
|
299
|
+
features.push(feature);
|
|
300
|
+
}
|
|
301
|
+
return computeFeaturesBBox(features, this.extensions);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Cuts the feature list of a layer into runs and chunks
|
|
305
|
+
*
|
|
306
|
+
* A run is cut where the classification changes, and within a run it is split into chunks of
|
|
307
|
+
* STORE_CHUNK_TARGET features each. The viewport is not looked at here (the contents of a
|
|
308
|
+
* retained batch must not depend on the camera). Thinning is done per chunk at draw time.
|
|
309
|
+
*/
|
|
310
|
+
buildLayerCache(layerId, layer, deps) {
|
|
311
|
+
const chunks = [];
|
|
312
|
+
const featureToChunk = new Map();
|
|
313
|
+
let current = null;
|
|
314
|
+
for (const feature of this.getLayerFeatures(layerId)) {
|
|
315
|
+
const kind = classifyFeature(feature, deps.renderers.styles, deps.customRenderers, deps.companions, layer);
|
|
316
|
+
if (current === null ||
|
|
317
|
+
current.kind !== kind ||
|
|
318
|
+
current.featureIds.length >= STORE_CHUNK_TARGET) {
|
|
319
|
+
current = createChunkEntry(kind);
|
|
320
|
+
chunks.push(current);
|
|
321
|
+
}
|
|
322
|
+
current.featureIds.push(feature.id);
|
|
323
|
+
featureToChunk.set(feature.id, chunks.length - 1);
|
|
324
|
+
}
|
|
325
|
+
return { chunks, featureToChunk };
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* The features of a layer in draw order (visible and not locally hidden)
|
|
329
|
+
*
|
|
330
|
+
* It is never called in a frame where the cache is complete.
|
|
331
|
+
*/
|
|
332
|
+
getLayerFeatures(layerId) {
|
|
333
|
+
if (!this.featuresByLayer) {
|
|
334
|
+
const byLayer = new Map();
|
|
335
|
+
for (const feature of getDisplayFeatures(this.store)) {
|
|
336
|
+
const list = byLayer.get(feature.layerId);
|
|
337
|
+
if (list)
|
|
338
|
+
list.push(feature);
|
|
339
|
+
else
|
|
340
|
+
byLayer.set(feature.layerId, [feature]);
|
|
341
|
+
}
|
|
342
|
+
this.featuresByLayer = byLayer;
|
|
343
|
+
}
|
|
344
|
+
return this.featuresByLayer.get(layerId) ?? [];
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Builds the retained batch of a chunk
|
|
348
|
+
*/
|
|
349
|
+
buildChunk(chunk, layer, deps) {
|
|
350
|
+
const styles = deps.renderers.styles;
|
|
351
|
+
// Re-evaluate the classification (a safety net for when the rebuild was triggered by a change
|
|
352
|
+
// of properties)
|
|
353
|
+
const features = [];
|
|
354
|
+
for (const id of chunk.featureIds) {
|
|
355
|
+
const feature = this.store.getFeature(id);
|
|
356
|
+
if (!feature?.visible || isLocallyHidden(feature, this.store))
|
|
357
|
+
return 'mismatch';
|
|
358
|
+
if (classifyFeature(feature, styles, deps.customRenderers, deps.companions, layer) !==
|
|
359
|
+
chunk.kind) {
|
|
360
|
+
return 'mismatch';
|
|
361
|
+
}
|
|
362
|
+
features.push(feature);
|
|
363
|
+
}
|
|
364
|
+
this.disposeChunk(chunk);
|
|
365
|
+
chunk.bbox = computeFeaturesBBox(features, this.extensions);
|
|
366
|
+
// The origin is the center of the extent (or the one chosen for the view), not the first
|
|
367
|
+
// feature: the error of the baked offsets grows with the distance from it
|
|
368
|
+
const origin = chunk.viewOrigin ??
|
|
369
|
+
(chunk.bbox ? boundsCenter(chunkBBoxToBounds(chunk.bbox)) : featureOrigin(features[0]));
|
|
370
|
+
chunk.origin = origin;
|
|
371
|
+
const result = buildChunkBatch(chunk, features, layer, origin, deps.renderers);
|
|
372
|
+
if (result !== 'retry')
|
|
373
|
+
chunk.dirty = false;
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Builds a retained chunk again around the view when its origin leaves a visible error
|
|
378
|
+
*
|
|
379
|
+
* A chunk is cut in draw order, so its extent can be wide; seen at high zoom, the vertices on
|
|
380
|
+
* screen can then be degrees away from the origin. The rule and the tolerance are in
|
|
381
|
+
* `view/shaders/retained-origin.ts`. A chunk that cannot be rebuilt now stays dirty and is
|
|
382
|
+
* drawn in immediate mode (exact) until the next frame.
|
|
383
|
+
*/
|
|
384
|
+
rebaseForView(chunk, layer, zoom, deps, viewportBounds) {
|
|
385
|
+
if (chunk.kind === 'immediate' || chunk.dirty || !chunk.origin || !chunk.bbox)
|
|
386
|
+
return;
|
|
387
|
+
if (chunk.rebasedFrame === this.frame)
|
|
388
|
+
return;
|
|
389
|
+
const next = rebasedRetainedOrigin(chunk.origin, chunkBBoxToBounds(chunk.bbox), viewportBounds ?? null, zoom);
|
|
390
|
+
if (!next)
|
|
391
|
+
return;
|
|
392
|
+
chunk.viewOrigin = next;
|
|
393
|
+
chunk.rebasedFrame = this.frame;
|
|
394
|
+
chunk.dirty = true;
|
|
395
|
+
this.buildChunk(chunk, layer, deps);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Releases the retained batch of a chunk
|
|
399
|
+
*/
|
|
400
|
+
disposeChunk(chunk) {
|
|
401
|
+
disposeChunkBatches(chunk, this.renderers);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Queues a vertex movement as a diff patch against the retained batch of its chunk
|
|
405
|
+
*
|
|
406
|
+
* The conditions are in queueCoordPatch. false = the caller rebuilds the chunk.
|
|
407
|
+
*/
|
|
408
|
+
tryQueueCoordPatch(feature, previous) {
|
|
409
|
+
const cache = this.layers.get(feature.layerId);
|
|
410
|
+
const index = cache?.featureToChunk.get(feature.id);
|
|
411
|
+
const chunk = index === undefined ? undefined : cache?.chunks[index];
|
|
412
|
+
return queueCoordPatch(chunk, feature, previous, this.renderers?.line ?? null);
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Marks the chunk that carries the feature as dirty
|
|
416
|
+
*
|
|
417
|
+
* If there is no corresponding chunk, the whole layer is rebuilt.
|
|
418
|
+
*/
|
|
419
|
+
markFeatureDirty(layerId, featureId) {
|
|
420
|
+
const cache = this.layers.get(layerId);
|
|
421
|
+
if (!cache)
|
|
422
|
+
return;
|
|
423
|
+
const index = cache.featureToChunk.get(featureId);
|
|
424
|
+
if (index === undefined) {
|
|
425
|
+
this.invalidateLayer(layerId);
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
cache.chunks[index].dirty = true;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|