@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,132 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { TERRAIN_DEPTH_BIAS } from '../terrain/metrics.js';
|
|
4
|
+
import { getTerrainCoarsening, setQuadDrapeFrame, setTerrainShadeLight, TERRAIN_ATLAS_TEXTURE_UNIT, } from '../terrain/state.js';
|
|
5
|
+
import { setDepthTestEnabled, syncDepthTestEnabled } from './depth-state.js';
|
|
6
|
+
/** Establishes the GL state this frame assumes, at the start of the drawing of a slot */
|
|
7
|
+
export function applySegmentGlState(gl, terrainContext, f) {
|
|
8
|
+
// Sync the record of the depth test with the actual state of this frame (the foundation that
|
|
9
|
+
// keeps the symbol rendering from asking gl.isEnabled every time; depth-state.ts)
|
|
10
|
+
syncDepthTestEnabled(gl);
|
|
11
|
+
// Deliver the same light as the analytic drape to the polygon fills of the vertex
|
|
12
|
+
// displacement path, so that the look of a fill does not jump when the paths swap
|
|
13
|
+
// (terrain/shade.ts). Without terrain it is null and there is no shading
|
|
14
|
+
setTerrainShadeLight(terrainContext, f.terrainState.active ? f.drapeLight : null);
|
|
15
|
+
if (f.terrainState.active && f.terrainState.atlasTexture) {
|
|
16
|
+
// The DEM atlas is left bound to a dedicated texture unit (every renderer uses unit 0 for
|
|
17
|
+
// its coordinate texture)
|
|
18
|
+
gl.activeTexture(gl.TEXTURE0 + TERRAIN_ATLAS_TEXTURE_UNIT);
|
|
19
|
+
gl.bindTexture(gl.TEXTURE_2D, f.terrainState.atlasTexture);
|
|
20
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
21
|
+
}
|
|
22
|
+
f.restoreBlendState();
|
|
23
|
+
applySegmentDepthState(gl, terrainContext, f);
|
|
24
|
+
if (f.quadDrapeFrame) {
|
|
25
|
+
// The layer rendering keeps the depth test after a quad, whether or not the drape was used
|
|
26
|
+
f.quadDrapeFrame.keepDepthTest = true;
|
|
27
|
+
setQuadDrapeFrame(terrainContext, f.quadDrapeFrame);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Establishes the depth state of the layer rendering of a slot
|
|
32
|
+
*
|
|
33
|
+
* `applySegmentGlState` sets it at the start of a slot, and the drape of the segment, which
|
|
34
|
+
* changes the depth function and the offset, hands it back with this before the layers are
|
|
35
|
+
* drawn. The layers are therefore drawn in one depth state whether or not the drape was used.
|
|
36
|
+
* What the drape cannot paint (dashed lines, polygons with a dashed outline, the geometry being
|
|
37
|
+
* drawn, the features of extensions, the datasets not handed over to it) is
|
|
38
|
+
* drawn after it by the vertex displacement path and must be hidden by the terrain in the same
|
|
39
|
+
* way. Symbols switch the depth test off themselves (`drawBillboardsWithoutDepth`).
|
|
40
|
+
*/
|
|
41
|
+
export function applySegmentDepthState(gl, terrainContext, f) {
|
|
42
|
+
// Depth (used only when there is terrain)
|
|
43
|
+
//
|
|
44
|
+
// MapLibre hands control to a '3d' CustomLayer with the depth test enabled, LEQUAL, and
|
|
45
|
+
// writing allowed. The depth of the terrain mesh is written into the framebuffer of the
|
|
46
|
+
// screen, so enabling the test correctly hides the features behind a mountain. Writing,
|
|
47
|
+
// however, is turned off: the stacking order of core (the layer order, the selection UI in
|
|
48
|
+
// front) was built on a draw order without depth, and letting our own drawings order each
|
|
49
|
+
// other by depth would break it. gl.depthRange is not rewritten (MapLibre sets a narrowed
|
|
50
|
+
// range shared with the terrain mesh). The depth function is set to the LEQUAL MapLibre
|
|
51
|
+
// hands over, so that it is the same after the drape.
|
|
52
|
+
if (f.terrainState.active && !f.wideFallback) {
|
|
53
|
+
setDepthTestEnabled(gl, true);
|
|
54
|
+
gl.depthMask(false);
|
|
55
|
+
gl.depthFunc(gl.LEQUAL);
|
|
56
|
+
// The depth bias is applied in proportion to the slope. The disagreement between the
|
|
57
|
+
// terrain mesh and our own polygons is largest on a slope, so a constant lift cannot cover
|
|
58
|
+
// it. The factor of polygonOffset is proportional to "the screen-space gradient of the
|
|
59
|
+
// depth", which fits the shape of this problem.
|
|
60
|
+
//
|
|
61
|
+
// The amount is made proportional to "the coarseness of the step". A coarsely subdivided
|
|
62
|
+
// polygon becomes a chord between the nodes, and on a hilltop the chord sinks below the
|
|
63
|
+
// terrain. Measured, the sinking was at most 1.2 m for a step of 7.8 m, 3.7 m for 15.6 m
|
|
64
|
+
// and 5.2 m for 31 m (the hills of northern Kawasaki). The coarser the step, the deeper it
|
|
65
|
+
// sinks, so the bias grows by the same amount.
|
|
66
|
+
const bias = TERRAIN_DEPTH_BIAS * getTerrainCoarsening(terrainContext);
|
|
67
|
+
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
68
|
+
gl.polygonOffset(-bias, -bias);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
setDepthTestEnabled(gl, false);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Restores the GL state to the defaults of maplibre at the end of the drawing of a slot */
|
|
75
|
+
export function restoreSegmentGlState(gl, f) {
|
|
76
|
+
if (f.terrainState.active && !f.wideFallback) {
|
|
77
|
+
gl.depthMask(true);
|
|
78
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
79
|
+
gl.polygonOffset(0, 0);
|
|
80
|
+
}
|
|
81
|
+
// The depth function goes back to the default of maplibre (the slot drew with LEQUAL)
|
|
82
|
+
gl.depthFunc(gl.LESS);
|
|
83
|
+
setDepthTestEnabled(gl, true);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Establishes the GL state of the analytic drape
|
|
87
|
+
*
|
|
88
|
+
* Composite with premultiplied alpha (the coverage is evaluated once per pixel, so an overlap
|
|
89
|
+
* is never painted twice).
|
|
90
|
+
*
|
|
91
|
+
* What the drape draws is the ground itself. It coincides with the terrain surface of maplibre
|
|
92
|
+
* at the same height, so on pixels of equal depth the winner wavers and the edges get eaten away
|
|
93
|
+
* (pronounced on a shallow slope; confirmed in the field). The depth function is set to LEQUAL so
|
|
94
|
+
* that equality wins, and the slope-proportional bias (which exists to fill the sinking of the
|
|
95
|
+
* chords of the CPU subdivision) is not applied: the surfaces of the drape are not chords, so it
|
|
96
|
+
* is not needed. The occlusion is carried by the depth test itself, so it must not be turned off.
|
|
97
|
+
*
|
|
98
|
+
* The depth bias (polygonOffset) is not used. The factor is proportional to the screen-space
|
|
99
|
+
* gradient of the depth, so it acts too strongly on a shallow slope, and its unit depends on the
|
|
100
|
+
* resolution of the depth buffer. The drape lifts its vertices ever so slightly to win instead
|
|
101
|
+
* (DRAPE_LIFT_RATIO in drape/renderer.ts).
|
|
102
|
+
*/
|
|
103
|
+
export function applyDrapeGlState(gl) {
|
|
104
|
+
applyDrapeBlendState(gl);
|
|
105
|
+
setDepthTestEnabled(gl, true);
|
|
106
|
+
gl.depthFunc(gl.LEQUAL);
|
|
107
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Goes back to the drape after an image was interleaved (the blending and the depth test; the
|
|
111
|
+
* depth function and the offset were left as the drape set them)
|
|
112
|
+
*/
|
|
113
|
+
export function resumeDrapeGlState(gl) {
|
|
114
|
+
applyDrapeBlendState(gl);
|
|
115
|
+
setDepthTestEnabled(gl, true);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Establishes the GL state of the symbols and the UI (no depth test)
|
|
119
|
+
*
|
|
120
|
+
* From here on it is not "something painted onto the ground" but the symbols and the UI.
|
|
121
|
+
* Points, handles and selection boxes are billboards, so with the depth in effect they disappear
|
|
122
|
+
* entirely as soon as they sink a little into the ground. Measured, enabling the terrain made
|
|
123
|
+
* every point invisible. Symbols are always drawn in front.
|
|
124
|
+
*/
|
|
125
|
+
export function enterSymbolGlState(gl) {
|
|
126
|
+
setDepthTestEnabled(gl, false);
|
|
127
|
+
}
|
|
128
|
+
/** Premultiplied alpha compositing of the drape */
|
|
129
|
+
function applyDrapeBlendState(gl) {
|
|
130
|
+
gl.enable(gl.BLEND);
|
|
131
|
+
gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
132
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { BlendCapableGL } from './blend.js';
|
|
2
|
+
export { applyDrawBlendState } from './blend.js';
|
|
3
|
+
export type { CustomLayerDeps, CustomLayerInterface } from './custom-layer.js';
|
|
4
|
+
export { createCustomLayer } from './custom-layer.js';
|
|
5
|
+
export type { RenderSegment, RenderSlot } from './slots.js';
|
|
6
|
+
export { PRIMARY_RENDER_LAYER_ID, partitionLayerOrder, renderSlotLayerId } from './slots.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
export { applyDrawBlendState } from './blend.js';
|
|
4
|
+
export { createCustomLayer } from './custom-layer.js';
|
|
5
|
+
export { PRIMARY_RENDER_LAYER_ID, partitionLayerOrder, renderSlotLayerId } from './slots.js';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The render scope of one draw instance
|
|
3
|
+
*
|
|
4
|
+
* Everything the rendering of one CustomLayer keeps between frames and that must never be seen
|
|
5
|
+
* by another draw instance: the selection scope shared with the modes, the terrain state, and
|
|
6
|
+
* the caches of triangulation and style evaluation keyed by feature id. Two instances on the
|
|
7
|
+
* same page (a print preview next to the editor, a duplicated document with the same ids)
|
|
8
|
+
* therefore never read each other's triangles, styles or terrain.
|
|
9
|
+
*
|
|
10
|
+
* The CustomLayer creates it (the selection scope is handed in, because the modes use the same
|
|
11
|
+
* one) and passes the parts each renderer needs at construction.
|
|
12
|
+
*/
|
|
13
|
+
import { EarcutCache } from '../cache/earcut.js';
|
|
14
|
+
import { StyleRuleCache } from '../cache/style-rule.js';
|
|
15
|
+
import { TerrainContext } from '../terrain/context.js';
|
|
16
|
+
import type { SelectionScope } from '../ui/selection-scope.js';
|
|
17
|
+
export interface RenderScope {
|
|
18
|
+
/** The selection scope of the draw instance (shared with the modes) */
|
|
19
|
+
readonly selection: SelectionScope;
|
|
20
|
+
/** The terrain state of the draw instance */
|
|
21
|
+
readonly terrain: TerrainContext;
|
|
22
|
+
/** Triangulation results keyed by feature id */
|
|
23
|
+
readonly earcut: EarcutCache;
|
|
24
|
+
/** Evaluated style rules keyed by feature id */
|
|
25
|
+
readonly styleRules: StyleRuleCache;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates the render scope of one draw instance
|
|
29
|
+
*/
|
|
30
|
+
export declare function createRenderScope(selection: SelectionScope): RenderScope;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The render scope of one draw instance
|
|
5
|
+
*
|
|
6
|
+
* Everything the rendering of one CustomLayer keeps between frames and that must never be seen
|
|
7
|
+
* by another draw instance: the selection scope shared with the modes, the terrain state, and
|
|
8
|
+
* the caches of triangulation and style evaluation keyed by feature id. Two instances on the
|
|
9
|
+
* same page (a print preview next to the editor, a duplicated document with the same ids)
|
|
10
|
+
* therefore never read each other's triangles, styles or terrain.
|
|
11
|
+
*
|
|
12
|
+
* The CustomLayer creates it (the selection scope is handed in, because the modes use the same
|
|
13
|
+
* one) and passes the parts each renderer needs at construction.
|
|
14
|
+
*/
|
|
15
|
+
import { EarcutCache } from '../cache/earcut.js';
|
|
16
|
+
import { StyleRuleCache } from '../cache/style-rule.js';
|
|
17
|
+
import { TerrainContext } from '../terrain/context.js';
|
|
18
|
+
/**
|
|
19
|
+
* Creates the render scope of one draw instance
|
|
20
|
+
*/
|
|
21
|
+
export function createRenderScope(selection) {
|
|
22
|
+
return {
|
|
23
|
+
selection,
|
|
24
|
+
terrain: new TerrainContext(),
|
|
25
|
+
earcut: new EarcutCache(),
|
|
26
|
+
styleRules: new StyleRuleCache(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-layer rendering
|
|
3
|
+
*
|
|
4
|
+
* The per-layer rendering loop called from CustomLayer's render()
|
|
5
|
+
*/
|
|
6
|
+
import type { ProjectionData } from 'maplibre-gl';
|
|
7
|
+
import type { DatasetManager } from '../../display/manager.js';
|
|
8
|
+
import type { CustomFeatureHandler, CustomRendererDrawContext, LayerAwareOverlayRenderer } from '../../extension/index.js';
|
|
9
|
+
import type { Store } from '../../store/store.js';
|
|
10
|
+
import type { BoundingBox, Feature, Layer } from '../../store/types.js';
|
|
11
|
+
import type { FeatureCompanionRegistry } from '../feature-companion.js';
|
|
12
|
+
import type { Renderers } from './renderers.js';
|
|
13
|
+
import type { StoreRetainedCache } from './store-retained.js';
|
|
14
|
+
/**
|
|
15
|
+
* Draw features and overlays layer by layer
|
|
16
|
+
*
|
|
17
|
+
* The loop walks the stacking order of the Store (`store.getLayerOrder()`). Its entries are a
|
|
18
|
+
* mix of layer ids and dataset ids, and for each entry it does the following.
|
|
19
|
+
*
|
|
20
|
+
* - A layer exists: draw it in retained / immediate mode as before
|
|
21
|
+
* - A dataset whose order is 'layer-order' exists: draw that dataset
|
|
22
|
+
* - Neither of them (an unknown id): skip it (not an error)
|
|
23
|
+
*
|
|
24
|
+
* In addition, datasets (display) have two insertion points outside the layer
|
|
25
|
+
* loop. below-store is drawn before every layer (behind them) and above-store after every layer
|
|
26
|
+
* (in front of them). Batching uses the same BatchManager as the Store. The per-layer frames
|
|
27
|
+
* (beginFrame / endFrame) are closed inside the loop, so their state never mixes with a frame
|
|
28
|
+
* opened outside it. The batch of a dataset is also closed at a layer boundary, so inserting
|
|
29
|
+
* one in the middle of the order never nests GL state.
|
|
30
|
+
*
|
|
31
|
+
* There are two paths for the features of the Store.
|
|
32
|
+
*
|
|
33
|
+
* - Retained mode (storeRetained is present and the renderers support it): draws the retained
|
|
34
|
+
* batches prepared per layer. The features argument is not used. Thinning of a retained batch
|
|
35
|
+
* is done per chunk, so the bbox of the expanded viewport is computed once per frame and passed
|
|
36
|
+
* in. Immediate chunks, which draw one feature at a time, are thinned per feature as well, so
|
|
37
|
+
* the set of visible ids is passed too (only once it becomes necessary).
|
|
38
|
+
* - Immediate mode (the path used before): walks features every frame and draws them.
|
|
39
|
+
*
|
|
40
|
+
* The rendering result (including the z-order) is the same either way.
|
|
41
|
+
*
|
|
42
|
+
* An external renderer (a custom feature type or a layer-aware overlay) may rewrite the GL blend
|
|
43
|
+
* state for its own purposes. If it comes back having left it rewritten, everything drawn later
|
|
44
|
+
* in that frame (the layers that follow and the datasets) is drawn with the
|
|
45
|
+
* wrong blending, so `restoreBlendState` is called at the point control comes back, to
|
|
46
|
+
* re-establish the contract of the frame.
|
|
47
|
+
*
|
|
48
|
+
* @param companions Providers of companion drawing (those of this draw instance)
|
|
49
|
+
* @param features Features to draw in immediate mode (not used in retained mode)
|
|
50
|
+
* @param datasets Datasets (not drawn when omitted)
|
|
51
|
+
* @param storeRetained Retained batch cache for drawing the Store (immediate mode when omitted)
|
|
52
|
+
* @param restoreBlendState Re-establishes our own blend state (not re-established when omitted)
|
|
53
|
+
* @param range The segment (slot) to draw (every entry when omitted)
|
|
54
|
+
* @param view The part of the view to draw, on one copy of the world (the expanded viewport
|
|
55
|
+
* of the ViewportFilter when omitted). A view across the antimeridian is drawn once per
|
|
56
|
+
* copy, each with its own range
|
|
57
|
+
*/
|
|
58
|
+
export declare function renderLayers(r: Renderers, store: Store, features: Feature[], selectedIdSet: Set<string>, defaultProjectionData: ProjectionData, zoom: number, customRenderers: Map<string, CustomFeatureHandler['renderer']>, customRendererContext: CustomRendererDrawContext, companions: FeatureCompanionRegistry, layerAwareRenderers: LayerAwareOverlayRenderer[], datasets?: DatasetManager, storeRetained?: StoreRetainedCache, restoreBlendState?: () => void, range?: RenderLayersRange, view?: RenderLayersView): void;
|
|
59
|
+
/**
|
|
60
|
+
* The context of the custom renderers for one layer (the context of the frame with the opacity
|
|
61
|
+
* of the layer)
|
|
62
|
+
*
|
|
63
|
+
* The same object is returned when the opacity is already the one of the context, so a map whose
|
|
64
|
+
* layers are all opaque allocates nothing per layer.
|
|
65
|
+
*/
|
|
66
|
+
export declare function layerRendererContext(base: CustomRendererDrawContext, layer: Layer): CustomRendererDrawContext;
|
|
67
|
+
/**
|
|
68
|
+
* The part of the view one rendering covers (one copy of the world)
|
|
69
|
+
*/
|
|
70
|
+
export interface RenderLayersView {
|
|
71
|
+
/** The range to draw, in stored longitudes (thins the chunks) */
|
|
72
|
+
readonly bounds: BoundingBox;
|
|
73
|
+
/** The ids of the features inside `bounds` (thins the immediate chunks one by one) */
|
|
74
|
+
readonly getVisibleIds: () => ReadonlySet<string>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Specification of the segment (slot) to draw
|
|
78
|
+
*
|
|
79
|
+
* from / to is [from, to) in layerOrder. first is the first slot (it draws the datasets below
|
|
80
|
+
* the order), last is the last slot (it draws the datasets above the order).
|
|
81
|
+
*/
|
|
82
|
+
export interface RenderLayersRange {
|
|
83
|
+
readonly from: number;
|
|
84
|
+
readonly to: number;
|
|
85
|
+
readonly first: boolean;
|
|
86
|
+
readonly last: boolean;
|
|
87
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { drawFeatureCompanionsInFrame } from '../feature-companion.js';
|
|
4
|
+
import { layerDrawFactors } from '../renderers/draw-factors.js';
|
|
5
|
+
/**
|
|
6
|
+
* Draw features and overlays layer by layer
|
|
7
|
+
*
|
|
8
|
+
* The loop walks the stacking order of the Store (`store.getLayerOrder()`). Its entries are a
|
|
9
|
+
* mix of layer ids and dataset ids, and for each entry it does the following.
|
|
10
|
+
*
|
|
11
|
+
* - A layer exists: draw it in retained / immediate mode as before
|
|
12
|
+
* - A dataset whose order is 'layer-order' exists: draw that dataset
|
|
13
|
+
* - Neither of them (an unknown id): skip it (not an error)
|
|
14
|
+
*
|
|
15
|
+
* In addition, datasets (display) have two insertion points outside the layer
|
|
16
|
+
* loop. below-store is drawn before every layer (behind them) and above-store after every layer
|
|
17
|
+
* (in front of them). Batching uses the same BatchManager as the Store. The per-layer frames
|
|
18
|
+
* (beginFrame / endFrame) are closed inside the loop, so their state never mixes with a frame
|
|
19
|
+
* opened outside it. The batch of a dataset is also closed at a layer boundary, so inserting
|
|
20
|
+
* one in the middle of the order never nests GL state.
|
|
21
|
+
*
|
|
22
|
+
* There are two paths for the features of the Store.
|
|
23
|
+
*
|
|
24
|
+
* - Retained mode (storeRetained is present and the renderers support it): draws the retained
|
|
25
|
+
* batches prepared per layer. The features argument is not used. Thinning of a retained batch
|
|
26
|
+
* is done per chunk, so the bbox of the expanded viewport is computed once per frame and passed
|
|
27
|
+
* in. Immediate chunks, which draw one feature at a time, are thinned per feature as well, so
|
|
28
|
+
* the set of visible ids is passed too (only once it becomes necessary).
|
|
29
|
+
* - Immediate mode (the path used before): walks features every frame and draws them.
|
|
30
|
+
*
|
|
31
|
+
* The rendering result (including the z-order) is the same either way.
|
|
32
|
+
*
|
|
33
|
+
* An external renderer (a custom feature type or a layer-aware overlay) may rewrite the GL blend
|
|
34
|
+
* state for its own purposes. If it comes back having left it rewritten, everything drawn later
|
|
35
|
+
* in that frame (the layers that follow and the datasets) is drawn with the
|
|
36
|
+
* wrong blending, so `restoreBlendState` is called at the point control comes back, to
|
|
37
|
+
* re-establish the contract of the frame.
|
|
38
|
+
*
|
|
39
|
+
* @param companions Providers of companion drawing (those of this draw instance)
|
|
40
|
+
* @param features Features to draw in immediate mode (not used in retained mode)
|
|
41
|
+
* @param datasets Datasets (not drawn when omitted)
|
|
42
|
+
* @param storeRetained Retained batch cache for drawing the Store (immediate mode when omitted)
|
|
43
|
+
* @param restoreBlendState Re-establishes our own blend state (not re-established when omitted)
|
|
44
|
+
* @param range The segment (slot) to draw (every entry when omitted)
|
|
45
|
+
* @param view The part of the view to draw, on one copy of the world (the expanded viewport
|
|
46
|
+
* of the ViewportFilter when omitted). A view across the antimeridian is drawn once per
|
|
47
|
+
* copy, each with its own range
|
|
48
|
+
*/
|
|
49
|
+
export function renderLayers(r, store, features, selectedIdSet, defaultProjectionData, zoom, customRenderers, customRendererContext, companions, layerAwareRenderers, datasets, storeRetained, restoreBlendState, range, view) {
|
|
50
|
+
const fullOrder = store.getLayerOrder();
|
|
51
|
+
// When a segment (slot) is given, only the entries of that segment are drawn. The datasets
|
|
52
|
+
// below the order (below-store) are drawn only by the first segment and those above it
|
|
53
|
+
// (above-store) only by the last segment (the same thing is not drawn once per slot)
|
|
54
|
+
const layerOrder = range ? fullOrder.slice(range.from, range.to) : fullOrder;
|
|
55
|
+
const drawBelow = range ? range.first : true;
|
|
56
|
+
const drawAbove = range ? range.last : true;
|
|
57
|
+
const tentative = store.getTentative();
|
|
58
|
+
// Implementations without the renderers of retained mode (a test stub, for example) fall back
|
|
59
|
+
// to the immediate mode used before
|
|
60
|
+
const retainedRenderers = storeRetained !== undefined && typeof r.batchManager.getRetainedRenderers === 'function'
|
|
61
|
+
? r.batchManager.getRetainedRenderers()
|
|
62
|
+
: undefined;
|
|
63
|
+
const useRetained = storeRetained !== undefined && retainedRenderers !== undefined;
|
|
64
|
+
if (useRetained)
|
|
65
|
+
storeRetained.beginFrame(companions);
|
|
66
|
+
// The range used to thin the retained chunks and the chunks of the datasets.
|
|
67
|
+
// It does not depend on the number of features, so once per frame is enough (it is computed
|
|
68
|
+
// regardless of the rendering path and passed to draw / drawOne as an argument; the manager is
|
|
69
|
+
// not left to look it up lazily). An implementation without a ViewportFilter (a test stub, for
|
|
70
|
+
// example) does not compute it and leaves it to the default of the dataset.
|
|
71
|
+
const viewportBounds = view?.bounds ??
|
|
72
|
+
(typeof r.viewportFilter?.getBounds === 'function' ? r.viewportFilter.getBounds() : undefined);
|
|
73
|
+
// Immediate chunks (dashed lines, images, custom types) cannot be thinned by the chunk bbox
|
|
74
|
+
// alone: once a chunk touches the view, even features outside the screen are drawn one by one.
|
|
75
|
+
// The set of visible ids is passed so that the same per-feature thinning as immediate mode is
|
|
76
|
+
// applied. Querying the spatial index once per frame is enough, and it is not needed at all in
|
|
77
|
+
// a frame without a single immediate chunk, so it is looked up once, when first needed.
|
|
78
|
+
let visibleIdsMemo;
|
|
79
|
+
const canFilterVisible = view !== undefined ||
|
|
80
|
+
(viewportBounds !== undefined && typeof r.viewportFilter?.getVisibleIds === 'function');
|
|
81
|
+
const getVisibleIds = canFilterVisible
|
|
82
|
+
? () => {
|
|
83
|
+
if (!visibleIdsMemo) {
|
|
84
|
+
visibleIdsMemo = view ? view.getVisibleIds() : r.viewportFilter.getVisibleIds();
|
|
85
|
+
}
|
|
86
|
+
return visibleIdsMemo;
|
|
87
|
+
}
|
|
88
|
+
: undefined;
|
|
89
|
+
// Insertion point 1: behind every layer of the Store
|
|
90
|
+
if (drawBelow) {
|
|
91
|
+
datasets?.draw('below-store', r.batchManager, defaultProjectionData, zoom, viewportBounds);
|
|
92
|
+
}
|
|
93
|
+
// Group the features by layer id (immediate mode only)
|
|
94
|
+
const featuresByLayer = new Map();
|
|
95
|
+
if (!useRetained) {
|
|
96
|
+
for (const feature of features) {
|
|
97
|
+
const layerFeatures = featuresByLayer.get(feature.layerId) ?? [];
|
|
98
|
+
layerFeatures.push(feature);
|
|
99
|
+
featuresByLayer.set(feature.layerId, layerFeatures);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
for (const layerId of layerOrder) {
|
|
103
|
+
// The layer is needed to evaluate the style rule (layer.styleRule), so it is passed to the
|
|
104
|
+
// frame of the batch.
|
|
105
|
+
const layer = store.getLayer(layerId);
|
|
106
|
+
// An entry that is not a layer is drawn as a dataset taking part in the
|
|
107
|
+
// stacking order. If it is not a dataset either, it is skipped (the order is the single
|
|
108
|
+
// source of truth, and an id that is not on it is not drawn).
|
|
109
|
+
if (!layer) {
|
|
110
|
+
datasets?.drawOne(layerId, r.batchManager, defaultProjectionData, zoom, viewportBounds);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// The custom renderers and the companions of the layer get its opacity in their context
|
|
114
|
+
const layerContext = layerRendererContext(customRendererContext, layer);
|
|
115
|
+
if (useRetained && retainedRenderers) {
|
|
116
|
+
storeRetained.drawLayer(layerId, layer, defaultProjectionData, zoom, {
|
|
117
|
+
renderers: retainedRenderers,
|
|
118
|
+
batchManager: r.batchManager,
|
|
119
|
+
customRenderers,
|
|
120
|
+
customRendererContext: layerContext,
|
|
121
|
+
companions,
|
|
122
|
+
getVisibleIds,
|
|
123
|
+
restoreBlendState,
|
|
124
|
+
}, viewportBounds);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const layerFeatures = featuresByLayer.get(layerId) ?? [];
|
|
128
|
+
r.batchManager.beginFrame(defaultProjectionData, zoom, layer);
|
|
129
|
+
for (const feature of layerFeatures) {
|
|
130
|
+
const isSelected = selectedIdSet.has(feature.id);
|
|
131
|
+
// Companion drawing (feature companion): drawn right before the feature itself, that is,
|
|
132
|
+
// one z below it. If no provider at all is registered, not even has is called.
|
|
133
|
+
drawFeatureCompanionsInFrame(companions, feature, r.batchManager, defaultProjectionData, zoom, layer, layerContext, restoreBlendState);
|
|
134
|
+
const customRenderer = customRenderers.get(feature.type);
|
|
135
|
+
if (customRenderer) {
|
|
136
|
+
// To keep the draw order (painter's algorithm), the core batch that has accumulated is
|
|
137
|
+
// flushed first and only then the custom feature is drawn immediately.
|
|
138
|
+
// A batch is not painted until endFrame, so without flushing here a custom feature
|
|
139
|
+
// would ignore layer.order and be drawn before the core features of the same layer.
|
|
140
|
+
r.batchManager.endFrame();
|
|
141
|
+
customRenderer.draw({
|
|
142
|
+
id: feature.id,
|
|
143
|
+
type: feature.type,
|
|
144
|
+
coordinates: feature.coordinates,
|
|
145
|
+
properties: feature.properties,
|
|
146
|
+
style: feature.style,
|
|
147
|
+
}, defaultProjectionData, zoom, layerContext);
|
|
148
|
+
// Re-establish the blend state that the external renderer may have rewritten.
|
|
149
|
+
restoreBlendState?.();
|
|
150
|
+
// Restart the batch for the core features that follow.
|
|
151
|
+
r.batchManager.beginFrame(defaultProjectionData, zoom, layer);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
r.batchManager.processFeature(feature, isSelected);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
r.batchManager.endFrame();
|
|
158
|
+
}
|
|
159
|
+
// Tentative rendering
|
|
160
|
+
if (tentative && tentative.layerId === layerId) {
|
|
161
|
+
r.tentativeRenderer.drawGeometry(tentative, defaultProjectionData, zoom);
|
|
162
|
+
}
|
|
163
|
+
// Layer-aware overlay rendering (an overlay is not content of the layer, so it keeps the
|
|
164
|
+
// context of the frame, at opacity 1)
|
|
165
|
+
for (const renderer of layerAwareRenderers) {
|
|
166
|
+
renderer.drawForLayer(layerId, defaultProjectionData, zoom, customRendererContext);
|
|
167
|
+
// Re-establish the blend state that the external renderer may have rewritten
|
|
168
|
+
restoreBlendState?.();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Insertion point 2: in front of every layer of the Store (behind the selection UI and
|
|
172
|
+
// tentative)
|
|
173
|
+
if (drawAbove) {
|
|
174
|
+
datasets?.draw('above-store', r.batchManager, defaultProjectionData, zoom, viewportBounds);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The context of the custom renderers for one layer (the context of the frame with the opacity
|
|
179
|
+
* of the layer)
|
|
180
|
+
*
|
|
181
|
+
* The same object is returned when the opacity is already the one of the context, so a map whose
|
|
182
|
+
* layers are all opaque allocates nothing per layer.
|
|
183
|
+
*/
|
|
184
|
+
export function layerRendererContext(base, layer) {
|
|
185
|
+
const opacity = layerDrawFactors(layer).opacity;
|
|
186
|
+
return base.opacity === opacity ? base : { ...base, opacity };
|
|
187
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialization and disposal of the renderers
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle management of every renderer that CustomLayer uses
|
|
5
|
+
*/
|
|
6
|
+
import type { Map as MapLibreMap } from 'maplibre-gl';
|
|
7
|
+
import type { CustomFeatureHandler } from '../../extension/index.js';
|
|
8
|
+
import type { FeatureStyleConfig } from '../../shared/config/feature-style.js';
|
|
9
|
+
import type { RenderingConfig } from '../../shared/config/rendering.js';
|
|
10
|
+
import type { SelectionUIConfig } from '../../shared/config/selection.js';
|
|
11
|
+
import type { PixelRatioInput } from '../../shared/utils/pixel-ratio.js';
|
|
12
|
+
import type { SpatialIndex } from '../../store/spatial/spatial-index.js';
|
|
13
|
+
import type { Store } from '../../store/store.js';
|
|
14
|
+
import { TextureCache } from '../cache/texture.js';
|
|
15
|
+
import { BatchManager } from '../renderers/batch-manager.js';
|
|
16
|
+
import { FeatureDrawer } from '../renderers/drawer.js';
|
|
17
|
+
import { type ImageErrorFn, ImageRenderer } from '../renderers/image.js';
|
|
18
|
+
import { SDFLineRenderer } from '../renderers/line/sdf-line.js';
|
|
19
|
+
import { PointInstanceRenderer } from '../renderers/point/point-instance.js';
|
|
20
|
+
import { PointShapeRenderer } from '../renderers/point/point-shape.js';
|
|
21
|
+
import { PolygonBatchRenderer } from '../renderers/polygon/batch.js';
|
|
22
|
+
import { FillShaderManager } from '../renderers/polygon/fill.js';
|
|
23
|
+
import { SDFPolygonRenderer } from '../renderers/polygon/sdf-polygon.js';
|
|
24
|
+
import { StrokeRenderer } from '../renderers/stroke.js';
|
|
25
|
+
import { ShaderInitializer } from '../shaders/initializer.js';
|
|
26
|
+
import { QuadShader } from '../shaders/quad.js';
|
|
27
|
+
import { BoxSelectionRenderer } from '../ui/box-selection.js';
|
|
28
|
+
import { SelectionHandlesRenderer, SelectionUIRenderer } from '../ui/index.js';
|
|
29
|
+
import { TentativeRenderer } from '../ui/tentative.js';
|
|
30
|
+
import { ViewportFilter } from '../viewport.js';
|
|
31
|
+
import type { RenderScope } from './render-scope.js';
|
|
32
|
+
/**
|
|
33
|
+
* The initialized renderers
|
|
34
|
+
*/
|
|
35
|
+
export interface Renderers {
|
|
36
|
+
textureCache: TextureCache;
|
|
37
|
+
quadShader: QuadShader;
|
|
38
|
+
imageRenderer: ImageRenderer;
|
|
39
|
+
strokeRenderer: StrokeRenderer;
|
|
40
|
+
sdfLineRenderer: SDFLineRenderer;
|
|
41
|
+
pointShapeRenderer: PointShapeRenderer;
|
|
42
|
+
pointInstanceRenderer: PointInstanceRenderer;
|
|
43
|
+
polygonBatchRenderer: PolygonBatchRenderer;
|
|
44
|
+
sdfPolygonRenderer: SDFPolygonRenderer;
|
|
45
|
+
fillShaderManager: FillShaderManager;
|
|
46
|
+
selectionUIRenderer: SelectionUIRenderer;
|
|
47
|
+
selectionHandlesRenderer: SelectionHandlesRenderer;
|
|
48
|
+
featureDrawer: FeatureDrawer;
|
|
49
|
+
tentativeRenderer: TentativeRenderer;
|
|
50
|
+
boxSelectionRenderer: BoxSelectionRenderer;
|
|
51
|
+
viewportFilter: ViewportFilter;
|
|
52
|
+
shaderInitializer: ShaderInitializer;
|
|
53
|
+
batchManager: BatchManager;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What the renderers of one CustomLayer are built from
|
|
57
|
+
*/
|
|
58
|
+
export interface InitRenderersDeps {
|
|
59
|
+
gl: WebGL2RenderingContext;
|
|
60
|
+
map: MapLibreMap;
|
|
61
|
+
store: Store;
|
|
62
|
+
spatialIndex: SpatialIndex;
|
|
63
|
+
featureStyle: FeatureStyleConfig;
|
|
64
|
+
selectionConfig: SelectionUIConfig;
|
|
65
|
+
renderingConfig: RenderingConfig;
|
|
66
|
+
customFeatureHandlers: CustomFeatureHandler[] | undefined;
|
|
67
|
+
/** Injected rendering pixel ratio (when omitted, read from window every time) */
|
|
68
|
+
pixelRatio?: PixelRatioInput;
|
|
69
|
+
/** The state and the caches owned by the draw instance (never shared between instances) */
|
|
70
|
+
scope: RenderScope;
|
|
71
|
+
/** Where the failure to load the image of an Image feature is reported */
|
|
72
|
+
onImageError?: ImageErrorFn;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Initialize the renderers
|
|
76
|
+
*/
|
|
77
|
+
export declare function initRenderers(deps: InitRenderersDeps): Renderers;
|
|
78
|
+
/**
|
|
79
|
+
* Dispose the renderers
|
|
80
|
+
*/
|
|
81
|
+
export declare function disposeRenderers(r: Renderers): void;
|