Compare commits

...

70 Commits

Author SHA1 Message Date
tei
bf7f6193e0 release: finalize unified particle.22
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 16:17:29 +09:00
tei
7cfad1c72f build(release): pin built source and correct SwiftPM RN dependency note
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 16:13:30 +09:00
tei
ea5bd393c6 release: prepare unified particle.22
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 14:08:10 +09:00
tei
40b79764ae build(release): support 13.6.1 v22 and RN 11.5.0 version lock 2026-10-09 14:07:18 +09:00
tei
69922b795a docs(android): close STEP-106 FZG T2 regression PASS
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 13:17:29 +09:00
tei
23f7b8a4d7 docs(android): record T2 old-version reproduction and pending rebuild gate
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 13:03:02 +09:00
tei
86906c8a6a test(android): isolate internal annotation symbol from STEP-102 retained ranges 2026-10-09 13:01:43 +09:00
tei
a49dd936c4 docs(android): close FZG native runtime audit with placement finding
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 12:35:40 +09:00
tei
2c6f673e54 docs(android): record FZG 13.6.1 ADB runtime matrix and T2 blocker 2026-10-09 12:35:24 +09:00
tei
c30add4d33 docs(android): record FZG MapLibre 13.6.1 APK installation verification
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 12:05:55 +09:00
tei
73db0356ac build(android): permit signed Sentry auxiliary ABIs in FZG validation APK 2026-10-09 12:04:38 +09:00
tei
30d0e6665e docs(upgrade): record android 13.6.1 native OpenGL compile PASS
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
2026-10-09 10:31:21 +09:00
tei
a4b5f4eaa0 docs(upgrade): record official native 13.6.1 merge checkpoint 2026-10-09 09:37:47 +09:00
tei
f8378fd711 merge(upgrade): port particle extensions onto official native 13.6.1 (unverified) 2026-10-09 09:37:07 +09:00
tei
e4c7af7c40 docs(upgrade): establish native 13.6.1 migration gate and recorder 2026-10-09 09:23:25 +09:00
Adrian Cojocaru
c7506d6aff Release MapLibre Android 13.6.1 (#4601) 2026-09-08 18:56:06 +00:00
Taiyu Yoshizawa
57d1981497 keep digits and short codes upright in CJK line labels (#4566) 2026-09-07 23:17:43 +02:00
Akash Mohan Chaudhary
042f21da5c Rename OpenGL event to GraphicsBackend (#4515) 2026-09-06 21:02:21 +00:00
VandenOstende
a33d3f00fb fix(ios): use window scene interface orientation for heading compensation (#4548) 2026-09-06 01:04:02 +00:00
Tore Halset
eca9e1db33 mbgl-render add support for style from stdin and png to stdout (#4561) 2026-09-05 23:05:39 +00:00
Taku Fukada
843cdec996 fix(core): bundle fastpfor-lib into the Linux/macOS amalgams (#4538) 2026-09-06 00:06:43 +02:00
John Carmack
474d127bfb fix(core): break a label before a left parenthesis, not after it (#4553) 2026-09-06 00:03:38 +02:00
John Carmack
fed6dc019b ci: cancel superseded rust-ci runs on pull requests (#4555) 2026-09-06 00:02:17 +02:00
Adrian Cojocaru
0b342a1209 fix(core): Fix missing symbols/glyphs (#4554) 2026-09-04 21:42:09 +02:00
Adrian Cojocaru
96e806931d fix(core): Sync image transition based on layout (#4540) 2026-09-02 14:29:54 +03:00
Bart Louwers
e5d0fce32a core: refactor renderable size ownership (#4512) 2026-09-01 18:35:29 +03:00
Taku Fukada
be3f03b86e fix(macos): preserve exception RTTI in amalgam archive (#4350)
Co-authored-by: Bart Louwers <bart@emeel.net>
2026-08-30 10:28:43 +02:00
Bart Louwers
2919f71e39 Release MapLibre Android 13.6.0 (#4529) 2026-08-28 11:38:05 +02:00
Taku Fukada
6010a2e687 fix(core): update amalgam symbol filters for mln namespace rename (#4531) 2026-08-28 11:37:51 +02:00
Taku Fukada
c3b588321b Fix ImageSource not rendering across world copies (#4508) 2026-08-28 02:48:01 +00:00
Alex Cristici
cbe4681ef1 Reduce symbol buffers memory by using instancing (Core optimization) (#4383)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-27 00:12:07 +03:00
Haruto Sasaki
1d0908bdaa test: restore heatmap render tests disabled during renderer migration (#4466) 2026-08-25 07:15:18 +00:00
Yul Kang
96afb98b7f core: remove unused Metal RendererBackend state-cache methods (#4519) 2026-08-25 09:10:14 +02:00
Copilot
ef5ff9ac01 Update expected-lite to restore C++23 consumer compatibility for database_file_source.hpp (#4474)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: louwers <649392+louwers@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
2026-08-25 04:49:07 +00:00
dependabot[bot]
08f775e2ed build(deps): bump the github-actions group across 1 directory with 13 updates (#4493)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 00:21:54 +02:00
Bart Louwers
a4670161a0 Fix iOS Swift package release ordering (#4520) 2026-08-24 23:47:43 +02:00
Bart Louwers
0c7fbe2b29 Release MapLibre iOS 6.29.0 (#4509) 2026-08-23 11:00:37 +00:00
Bart Louwers
2a8ebc4906 core: rename mbgl directories to mln (#4511)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-22 20:50:14 +02:00
Bart Louwers
06fcf13d42 fix(glfw): synchronize Metal renderable size (#4510) 2026-08-21 16:32:44 +02:00
Adrian Cojocaru
f0bd259b53 Release MapLibre Android 13.5.1 (#4507) 2026-08-21 14:29:21 +03:00
Trietes
2e13de25f4 Fix surface transform (#4495) 2026-08-18 16:22:23 +03:00
Adrian Cojocaru
65a3405370 fix(core): Fix nullptr access during custom layer pre-render (#4496) 2026-08-18 13:16:09 +02:00
Bart Louwers
550f64be22 core: rename mbgl namespace to mln (#4487)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-14 23:25:20 +02:00
Bart Louwers
836b862984 android: allow configurable Maven publication repository (#4485) 2026-08-14 17:52:50 +02:00
Bart Louwers
95a977e12e Reduce Android AAR size with header-only Prefab (#4483) 2026-08-14 14:37:28 +00:00
Bouke van der Bijl
6485d28b3e macOS: report the drawable size to the renderer (#4479) 2026-08-14 13:31:09 +00:00
Bouke van der Bijl
d508e65692 macOS: render the Metal map on demand (#4480) 2026-08-14 15:24:14 +02:00
Adrian Cojocaru
743ed53794 fix (glfw): Remove duplicate glfwSwapInterval (#4484) 2026-08-14 11:57:36 +00:00
Bart Louwers
a666f02633 Release MapLibre Android 13.5.0 (#4477) 2026-08-13 00:37:23 +02:00
munawiki
9a9f831782 feat: implement split and join expressions (#4463)
Co-authored-by: Bart Louwers <bart@emeel.net>
2026-08-12 18:25:47 +02:00
Adrian Cojocaru
bd92c87d39 fix(android): Workaround for Adreno VK_ERROR_DEVICE_LOST (#4442) 2026-08-12 09:21:24 +00:00
Nathan Gass
8be081ae83 accept libpng with different release/patch number (#4467) 2026-08-11 23:37:00 +00:00
Steve Gifford
49f80e95f3 Changes to the custom Metal layer to allow more flexible rendering (#4446)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: louwers <649392+louwers@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
2026-08-12 00:23:35 +02:00
Adrian Cojocaru
d9664ee187 core: Add error reporting for corrupted symbols (#4458) 2026-08-11 18:20:59 +02:00
Adrian Cojocaru
7f430aa624 core: Use compatible descriptor set layout for tile clipping (#4470) 2026-08-11 17:18:44 +02:00
Veniamin Vynohradov
b0388d186d Add multiBackend Android flavor for runtime OpenGL/Vulkan switching (#4288) 2026-08-06 15:54:58 +02:00
David Wheatley
ccb9af119e feat: specify layer/property that has a parse error when logging (#4292) 2026-08-05 08:14:36 -07:00
Sargun Vohra
e2b01754b6 build: Make the emdawnwebgpu suspension mode configurable (#4451) 2026-08-05 08:50:19 +02:00
Richard Fairhurst
40be634126 Android: setOverrideSynchronousUpdate for existing sources (#4366)
Co-authored-by: Bart Louwers <bart@emeel.net>
2026-08-04 20:00:50 +00:00
Adrian Cojocaru
f1905c5215 fix(core): Add action journal exception handling (#4438) 2026-08-04 19:34:45 +03:00
Stephan Schmid (MBAG)
e626fc0fbd Make string expressions operate on unicode (#4344) 2026-08-04 18:26:26 +02:00
Vladyslav Odobesku
9ef0f1c790 core: add CustomVectorSource for binary tile data delivery (#4377)
Co-authored-by: Vladyslav Odobesku <VladyslavOdobesku@intellias.com>
Co-authored-by: Claude Opus 4 <noreply@anthropic.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-04 18:23:41 +02:00
Adrian Cojocaru
25e4f6acbf fix(android): Add option to move symbol location indicator bearing down the image stack (#4408) 2026-08-04 18:21:25 +02:00
Brandon Roeder
a34723ff4a fix(core): repaint feature-state-driven symbol paint properties (#4445) 2026-08-04 18:17:53 +02:00
Bart Louwers
5e6fd6bb78 do a recursive checkout in gh-pages-docc.yml workflow (#4450) 2026-08-03 08:59:17 +00:00
Adrian Cojocaru
c8dad00be5 fix(android): Fix surface changed ANR (#4439) 2026-07-29 19:23:35 +02:00
Yul Kang
a6189feecb docs: remove duplicate packages from macOS Homebrew
install command (#4441)
2026-07-29 15:12:01 +00:00
Chris Gervang
83ce54ed3e fix(core): accept alpha in hsl colors (#4435) 2026-07-28 17:29:01 +02:00
Sargun Vohra
5bcdc704b8 core: Drain WebGPU render-thread cleanup jobs (#4367) 2026-07-24 08:11:26 +00:00
Sargun Vohra
15fcee54dc core: emdawnwebgpu build support (#4370) 2026-07-24 07:57:28 +00:00
2312 changed files with 28794 additions and 22219 deletions

View File

@@ -26,7 +26,7 @@ jobs:
outputs:
should_skip: ${{ github.event_name != 'workflow_dispatch' && steps.changed-files.outputs.android_any_modified != 'true' }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -46,7 +46,7 @@ jobs:
strategy:
fail-fast: false
matrix:
renderer: [opengl, vulkan]
renderer: [opengl, vulkan, multiBackend]
defaults:
run:
working-directory: platform/android
@@ -57,14 +57,14 @@ jobs:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_ANDROID }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
- uses: ./.github/actions/setup-android-ci
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"
@@ -169,6 +169,7 @@ jobs:
case "${{ matrix.renderer }}" in
opengl) echo "renderer=OpenGL" >> "$GITHUB_ENV" ;;
vulkan) echo "renderer=Vulkan" >> "$GITHUB_ENV" ;;
multiBackend) echo "renderer=MultiBackend" >> "$GITHUB_ENV" ;;
*) echo "::error ::Unknown renderer '${{ matrix.renderer }}'"; exit 1 ;;
esac
@@ -210,7 +211,7 @@ jobs:
working-directory: test/android
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -255,7 +256,7 @@ jobs:
if: needs.pre_job.outputs.should_skip != 'true'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -283,7 +284,7 @@ jobs:
env:
IS_LOCAL_DEVELOPMENT: false
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -316,7 +317,7 @@ jobs:
C_COMPILER: aarch64-linux-android26-clang
BINDGEN_TARGET: aarch64-linux-android26
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -390,7 +391,7 @@ jobs:
# automatically trigger android-release when code is pushed to main
# and the platform/android/VERSION file has changed
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
- name: VERSION file changed

View File

@@ -78,11 +78,11 @@ jobs:
runs-on: ubuntu-latest
if: github.repository_owner == 'maplibre' && github.event.workflow_run.conclusion == 'success'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
@@ -145,7 +145,7 @@ jobs:
- name: Configure AWS Credentials
if: env.run_device_test == 'true'
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}

View File

@@ -15,7 +15,7 @@ jobs:
run:
working-directory: platform/android
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Validate and set version
working-directory: .
@@ -52,7 +52,7 @@ jobs:
- name: Create release (draft)
id: create_release
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
tag_name: ${{ steps.prepare_release.outputs.version_tag }}
name: ${{ steps.prepare_release.outputs.version_tag }}
@@ -74,19 +74,20 @@ jobs:
RENDERER:
- vulkan
- opengl
- multiBackend
BUILDTYPE:
- Release
- Debug
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"
- uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5.5.0
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: "temurin"
java-version: "17"
@@ -118,7 +119,7 @@ jobs:
"build/debug-symbols-maplibre-android-${{ matrix.RENDERER }}-${{ env.buildtype }}-$version_tag.tar.gz"
- name: Upload release assets (${{ matrix.RENDERER }}, ${{ matrix.BUILDTYPE }})
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
tag_name: ${{ needs.android-create-release.outputs.version_tag }}
fail_on_unmatched_files: true
@@ -133,8 +134,12 @@ jobs:
if [ "$renderer" = "opengl" ]; then
./gradlew :MapLibreAndroid:publishOpengl${{ env.buildtype }}PublicationToMavenCentralRepository
./gradlew :MapLibreAndroid:publishDefault${{ env.buildtype }}PublicationToMavenCentralRepository
else
elif [ "$renderer" = "vulkan" ]; then
./gradlew :MapLibreAndroid:publishVulkan${{ env.buildtype }}PublicationToMavenCentralRepository
elif [ "$renderer" = "multiBackend" ]; then
./gradlew :MapLibreAndroid:publishMultibackend${{ env.buildtype }}PublicationToMavenCentralRepository
else
echo "::error ::Unknown renderer '$renderer'"; exit 1
fi
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
@@ -149,20 +154,20 @@ jobs:
- android-build-and-upload-release
steps:
- name: Publish release (remove draft)
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
tag_name: ${{ needs.android-create-release.outputs.version_tag }}
name: ${{ needs.android-create-release.outputs.version_tag }}
draft: false
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5.5.0
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: "temurin"
java-version: "17"
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"

View File

@@ -10,7 +10,7 @@ jobs:
create-android-testapp-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
@@ -30,7 +30,7 @@ jobs:
strategy:
fail-fast: false
matrix:
renderer: [opengl, vulkan]
renderer: [opengl, vulkan, multibackend]
defaults:
run:
working-directory: platform/android
@@ -43,7 +43,7 @@ jobs:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_ANDROID }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -68,11 +68,11 @@ jobs:
needs: [android-build-testapp]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Finalize release (set draft=false)
run: |

View File

@@ -15,7 +15,7 @@ jobs:
contents: read
steps:
- name: Check out code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

View File

@@ -14,7 +14,7 @@ jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
@@ -46,13 +46,13 @@ jobs:
needs: [create-release]
runs-on: macos-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
- run: brew install webp libuv
- run: brew install webp libuv llvm
- uses: taiki-e/install-action@2ca9b94c269419b7b0c711c09d0b21c4e1d51145 # v2.83.1
- uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: armerge@2
@@ -103,14 +103,14 @@ jobs:
- renderer: vulkan
runner: { os: ubuntu-24.04-arm, arch: arm64 }
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
- name: Install dependencies
run: .github/scripts/install-linux-deps
- uses: taiki-e/install-action@2ca9b94c269419b7b0c711c09d0b21c4e1d51145 # v2.83.1
- uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: armerge@2
@@ -156,7 +156,7 @@ jobs:
- run: |
git config --system core.longpaths true
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive

View File

@@ -15,11 +15,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-java@0f481fcb613427c0f801b606911222b5b6f3083a # v5.5.0
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: "temurin"
java-version: "17"
@@ -28,7 +28,7 @@ jobs:
run: ./gradlew dokkaGenerate
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
uses: JamesIves/github-pages-deploy-action@fa24774553152dd7873cd16ebd8d959b010c5445 # v4.9.0
with:
branch: gh-pages
folder: platform/android/MapLibreAndroid/build/dokka/html

View File

@@ -17,13 +17,13 @@ jobs:
shell: bash
steps:
- name: Checkout 🛎️
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Generate documentation
run: make mkdocs-build
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
uses: JamesIves/github-pages-deploy-action@fa24774553152dd7873cd16ebd8d959b010c5445 # v4.9.0
with:
branch: gh-pages
folder: platform/android/site

View File

@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: true
@@ -20,7 +20,7 @@ jobs:
run: doxygen
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
uses: JamesIves/github-pages-deploy-action@fa24774553152dd7873cd16ebd8d959b010c5445 # v4.9.0
with:
branch: gh-pages
folder: docs/doxygen/html

View File

@@ -15,15 +15,17 @@ on:
jobs:
gh-pages-docc-build:
if: ${{ github.ref_name == 'main' }}
name: Build DocC Docs
runs-on: macos-latest
if: ${{ github.ref_name == 'main' }}
steps:
- name: Checkout 🛎️
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}
@@ -52,7 +54,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Download DocC docs artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
@@ -67,7 +69,7 @@ jobs:
rm docs.zip
- name: Deploy DocC documentation (main) 🚀
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
uses: JamesIves/github-pages-deploy-action@fa24774553152dd7873cd16ebd8d959b010c5445 # v4.9.0
with:
branch: gh-pages
folder: build/docs

View File

@@ -16,7 +16,7 @@ jobs:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3 # v4
- name: Setup mdBook
uses: peaceiris/actions-mdbook@ee69d230fe19748b7abf22df32acaa93833fad08 # v2.0.0
@@ -40,7 +40,7 @@ jobs:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Download book
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
@@ -48,7 +48,7 @@ jobs:
path: artifacts/book
- name: Deploy
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
uses: JamesIves/github-pages-deploy-action@fa24774553152dd7873cd16ebd8d959b010c5445 # v4.9.0
with:
branch: gh-pages
folder: artifacts/book

View File

@@ -22,7 +22,7 @@ jobs:
outputs:
should_skip: ${{ github.event_name != 'workflow_dispatch' && steps.changed-files-yaml.outputs.ios_any_modified != 'true' }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -58,7 +58,7 @@ jobs:
working-directory: platform/ios
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: false
persist-credentials: false
@@ -211,7 +211,7 @@ jobs:
- name: Configure AWS Credentials
if: github.ref == 'refs/heads/main' && vars.OIDC_AWS_ROLE_TO_ASSUME
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}
@@ -236,7 +236,7 @@ jobs:
runs-on: macos-14
if: needs.pre_job.outputs.should_skip != 'true'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
@@ -269,7 +269,7 @@ jobs:
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: macos-26
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -304,7 +304,7 @@ jobs:
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: macos-26
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -366,7 +366,7 @@ jobs:
# Trigger release on main if VERSION file changed
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
if: github.ref == 'refs/heads/main'
with:
persist-credentials: false

View File

@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-24.04
if: github.repository_owner == 'maplibre' && github.event.workflow_run.conclusion == 'success'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
@@ -52,7 +52,7 @@ jobs:
files: "${{ matrix.test.xcTestFile }}, ${{ matrix.test.ipaFile }}"
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}

View File

@@ -14,7 +14,7 @@ jobs:
working-directory: platform/ios
runs-on: macos-14
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

View File

@@ -23,7 +23,7 @@ jobs:
working-directory: platform/ios
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
@@ -65,7 +65,7 @@ jobs:
working-directory: platform/ios
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
@@ -104,13 +104,13 @@ jobs:
working-directory: platform/ios
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"
@@ -144,7 +144,7 @@ jobs:
cat changelog_for_version.md
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}
@@ -155,7 +155,7 @@ jobs:
- name: Release (GitHub) - Create Draft
id: github_release
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
name: ios-v${{ env.version }}
files: |
@@ -177,6 +177,22 @@ jobs:
private-key: ${{ secrets.MAPLIBRE_NATIVE_BOT_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- run: npm install
working-directory: .
- name: Release (CocoaPods)
shell: bash -leo pipefail {0} # so pod is found
run: gh workflow run ios-release-cocoapods.yml --field version=${{ env.version }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish release (remove draft)
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
tag_name: ios-v${{ env.version }}
name: ios-v${{ env.version }}
draft: false
- name: Release (Swift Package Index)
run: |
echo "::add-mask::${{ steps.generate_token.outputs.token }}"
@@ -192,22 +208,6 @@ jobs:
"version":"${{ env.version }}",
"download_url": "https://github.com/maplibre/maplibre-native/releases/download/ios-v${{ env.version }}/MapLibre.dynamic.xcframework.zip"}}'
- run: npm install
working-directory: .
- name: Release (CocoaPods)
shell: bash -leo pipefail {0} # so pod is found
run: gh workflow run ios-release-cocoapods.yml --field version=${{ env.version }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish release (remove draft)
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
with:
tag_name: ios-v${{ env.version }}
name: ios-v${{ env.version }}
draft: false
- name: Write release notifications
if: github.repository_owner == 'maplibre'
env:

View File

@@ -15,7 +15,7 @@ jobs:
runs-on: macos-26
timeout-minutes: 90
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -49,7 +49,7 @@ jobs:
test -f bazel-bin/platform/ios/app-swift/MapLibreApp.ipa
- name: Upload app to TestFlight
uses: apple-actions/upload-testflight-build@1ad58030672057aa084b4e96beb6f7a8c627f9e6 # v5.2.1
uses: apple-actions/upload-testflight-build@5e75ff58276689011512ba87a381d93dc67dbcf8 # v5.3.0
with:
app-path: bazel-bin/platform/ios/app-swift/MapLibreApp.ipa
issuer-id: ${{ vars.APPSTORE_ISSUER_ID }}

View File

@@ -9,4 +9,4 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6.2.0
- uses: actions/labeler@bf12e9b00b37c5c0ca2b87b79b2daf7891dbda13 # v7.0.0

View File

@@ -33,7 +33,7 @@ jobs:
outputs:
should_skip: ${{ github.event_name != 'workflow_dispatch' && steps.changed-files.outputs.linux_any_modified != 'true' }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -66,20 +66,20 @@ jobs:
rust: true
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
languages: cpp
- name: Install dependencies
run: .github/scripts/install-linux-deps
- uses: taiki-e/install-action@2ca9b94c269419b7b0c711c09d0b21c4e1d51145 # v2.83.1
- uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: armerge@2
@@ -156,7 +156,7 @@ jobs:
# CodeQL
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
category: "/language:cpp"
@@ -199,7 +199,7 @@ jobs:
linux-coverage:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -215,7 +215,7 @@ jobs:
${{ runner.os }}-bazel-
path: ~/.cache/bazel
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
@@ -249,7 +249,7 @@ jobs:
- linux-build-and-test
- linux-coverage
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- if: github.event_name == 'pull_request'
uses: ./.github/actions/save-pr-number

View File

@@ -69,7 +69,7 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
fetch-depth: 0
@@ -106,7 +106,7 @@ jobs:
name: wgpu
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false

View File

@@ -23,7 +23,7 @@ jobs:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4
with:
submodules: recursive
@@ -56,7 +56,7 @@ jobs:
working-directory: .
- name: Upload artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: xcframework
path: |
@@ -70,7 +70,7 @@ jobs:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4
with:
submodules: recursive
@@ -92,7 +92,7 @@ jobs:
working-directory: .
- name: Upload artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: xcframework-static
path: |
@@ -111,13 +111,13 @@ jobs:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4
with:
submodules: recursive
- uses: actions/download-artifact@v8
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v4
with:
node-version-file: ".nvmrc"
@@ -153,7 +153,7 @@ jobs:
cat changelog_for_version.md
- name: Release (GitHub) - Create Draft
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
name: macos-v${{ env.version }}
files: |
@@ -167,7 +167,7 @@ jobs:
draft: true
- name: Publish release (remove draft)
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
with:
tag_name: macos-v${{ env.version }}
name: macos-v${{ env.version }}

View File

@@ -100,7 +100,7 @@ jobs:
run: git config --global core.longpaths true
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -141,7 +141,7 @@ jobs:
/usr/sbin/update-ccache-symlinks
- name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'platform/node/.nvmrc'

View File

@@ -17,12 +17,12 @@ jobs:
run:
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'platform/node/.nvmrc'
@@ -50,7 +50,7 @@ jobs:
run:
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
@@ -118,7 +118,7 @@ jobs:
run: git config --global core.longpaths true
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -159,7 +159,7 @@ jobs:
/usr/sbin/update-ccache-symlinks
- name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'platform/node/.nvmrc'
@@ -297,12 +297,12 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'platform/node/.nvmrc'
registry-url: 'https://registry.npmjs.org'

View File

@@ -19,14 +19,14 @@ jobs:
outputs:
should_skip: ${{ steps.parent_workflow.outputs.was_skipped_or_cancelled }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: |
.github
.nvmrc
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
@@ -45,7 +45,7 @@ jobs:
if: needs.pre_job.outputs.should_skip == 'false'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
@@ -85,7 +85,7 @@ jobs:
- name: Configure AWS Credentials
if: vars.OIDC_AWS_ROLE_TO_ASSUME
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}

View File

@@ -22,14 +22,14 @@ jobs:
outputs:
should_skip: ${{ steps.parent_workflow.outputs.was_skipped_or_cancelled }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: |
.github
.nvmrc
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
@@ -48,7 +48,7 @@ jobs:
if: needs.pre_job.outputs.should_skip == 'false'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
@@ -95,7 +95,7 @@ jobs:
- name: Configure AWS Credentials
if: github.ref == 'refs/heads/main' && vars.OIDC_AWS_ROLE_TO_ASSUME
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}
@@ -139,7 +139,7 @@ jobs:
if: needs.pre_job.outputs.should_skip == 'false'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: true
persist-credentials: false
@@ -170,7 +170,7 @@ jobs:
- name: Configure AWS Credentials
if: github.ref == 'refs/heads/main' && vars.OIDC_AWS_ROLE_TO_ASSUME
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}

View File

@@ -104,7 +104,7 @@ jobs:
run: git config --global core.longpaths true
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: source
submodules: recursive

View File

@@ -7,6 +7,10 @@ on:
branches: [ main ]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
defaults:
run:
working-directory: rustutils/
@@ -23,9 +27,9 @@ jobs:
- os: windows-latest
- os: ubuntu-latest
steps:
- uses: taiki-e/install-action@2ca9b94c269419b7b0c711c09d0b21c4e1d51145 # v2.83.1
- uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with: { tool: just }
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- run: just -v ci-test
@@ -34,9 +38,9 @@ jobs:
name: Rust tests MSRV (Minimal Supported Rust Version)
runs-on: ubuntu-latest
steps:
- uses: taiki-e/install-action@2ca9b94c269419b7b0c711c09d0b21c4e1d51145 # v2.83.1
- uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with: { tool: just }
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Read crate metadata

View File

@@ -12,14 +12,14 @@ jobs:
outputs:
should_run: ${{ !steps.parent_workflow.outputs.was_skipped_or_cancelled }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: |
.github
.nvmrc
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
@@ -38,7 +38,7 @@ jobs:
if: needs.pre_job.outputs.should_run == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

View File

@@ -9,9 +9,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"

View File

@@ -9,11 +9,11 @@ jobs:
validate-scripts:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: ".nvmrc"

View File

@@ -37,7 +37,7 @@ jobs:
- run: |
git config --system core.longpaths true
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -62,7 +62,7 @@ jobs:
- run: |
git config --system core.longpaths true
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: |
platform/windows/vendor
@@ -118,19 +118,19 @@ jobs:
- run: |
git config --system core.longpaths true
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
languages: cpp
- uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
- uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
- name: Initialize sccache
run: |
@@ -167,7 +167,7 @@ jobs:
# CodeQL
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
category: "/language:cpp"
@@ -255,7 +255,7 @@ jobs:
git config --system core.longpaths true
git config --system core.autocrlf input
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
persist-credentials: false
@@ -279,11 +279,11 @@ jobs:
libuv:p
- name: Initialize CodeQL
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
languages: cpp
- uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
- name: Initialize sccache
run: |
@@ -308,7 +308,7 @@ jobs:
# CodeQL
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
category: "/language:cpp"

View File

@@ -10,7 +10,7 @@ MapLibre Native uses a monolithic repository that houses both core C++ code and
## Core cross-platform C++ code
In the repository, core C++ code is contained in the `include` and `src` directories. The former includes headers that are considered to make up the "public" core C++ API, while the latter includes `.cpp` implementation files and headers that are private to the implementation. Within both directories, files are nested under an `mbgl` directory, which has various subdirectories based on areas of functionality. Both public and private headers therefore can (and should) always be included with the form `#include <mbgl/___/___.hpp>`.
In the repository, core C++ code is contained in the `include` and `src` directories. The former includes headers that are considered to make up the "public" core C++ API, while the latter includes `.cpp` implementation files and headers that are private to the implementation. Within both directories, files are nested under an `mbgl` directory, which has various subdirectories based on areas of functionality. Both public and private headers therefore can (and should) always be included with the form `#include <mln/___/___.hpp>`.
## Platform specific code
@@ -24,7 +24,7 @@ Code and build scripts belonging to platform SDKs are contained in the `platform
## Other directories
- `benchmark` contains the performance tests built using https://github.com/google/benchmark/. The code under this directory builds the `mbgl-benchmark-test` executable to execute the benchmark tests.
- The entry point of this executable is `platform/default/src/mbgl/benchmark/main.cpp -> benchmark/src/mbgl/benchmark/benchmark.cpp`.
- The entry point of this executable is `platform/default/src/mln/benchmark/main.cpp -> benchmark/src/mln/benchmark/benchmark.cpp`.
- iOS SDK runs benchmark test through a separate app named `BenchmarkApp`.
- Android SDK does not have benchmark test.
- `bin` contains the code for tools like `mbgl-cache`, `mbgl-offline`, and `mbgl-render`.
@@ -142,4 +142,4 @@ To minimize data races and invalid memory access, we aim for zero shared memory
Invoking a task on another thread itself creates an ownership obligation: the responsibility for the work happening on the other thread. This ownership is represented by the invocation method returning `std::unique_ptr<AsyncTask>`. Destroying this object indicates that the result of the task is no longer required: the callback is guaranteed not to be called, and the work on the other thread may be aborted (if doing so is convenient).
All this is implemented by [Thread](https://github.com/mapbox/mapbox-gl-native/blob/master/src/mbgl/util/thread.hpp) and [RunLoop](https://github.com/mapbox/mapbox-gl-native/blob/master/include/mbgl/util/run_loop.hpp).
All this is implemented by [Thread](https://github.com/mapbox/mapbox-gl-native/blob/master/src/mln/util/thread.hpp) and [RunLoop](https://github.com/mapbox/mapbox-gl-native/blob/master/include/mln/util/run_loop.hpp).

View File

@@ -29,6 +29,10 @@
### 🐞 Bug fixes
- *...Add new stuff here...*
- [core] Draw numbers and short uppercase codes upright in vertical CJK line labels ([#4565](https://github.com/maplibre/maplibre-native/issues/4565)), compat to [maplibre-gl-js#8205](https://github.com/maplibre/maplibre-gl-js/pull/8205).
- [core] Fix `ImageSource` not rendering across world copies ([#4508](https://github.com/maplibre/maplibre-native/issues/4508)).
- [core] Repaint data-driven symbol paint properties after feature-state updates.
- [core] Accept alpha values in legacy comma-separated `hsl()` colors ([#4434](https://github.com/maplibre/maplibre-native/issues/4434)).
- [core] Fix thread-unsafe headless OpenGL display singleton initialization [#4332](https://github.com/maplibre/maplibre-native/pull/4332)
- [macos] Fix `mlt-cpp` and `mbgl-vendor-icu` not being included in the amalgamation
- [core] Fix memory access violation exception in vector_tile_data.cpp [#632](https://github.com/maplibre/maplibre-native/pull/632)
@@ -85,7 +89,7 @@
- [ios, macos] Allow specifying multiple fonts or font families for local font rendering ([#16253](https://github.com/mapbox/mapbox-gl-native/pull/16253))
By default, CJK characters are now set in the font specified by the `text-font` layout property. If the named font is not installed on the device or bundled with the application, the characters are set in one of the fallback fonts passed into the `localFontFamily` parameter of `mbgl::Renderer::Renderer()` and `mbgl::MapSnapshotter::MapSnapshotter()`. This parameter can now contain a list of font family names, font display names, and font PostScript names, each name separated by a newline.
By default, CJK characters are now set in the font specified by the `text-font` layout property. If the named font is not installed on the device or bundled with the application, the characters are set in one of the fallback fonts passed into the `localFontFamily` parameter of `mln::Renderer::Renderer()` and `mln::MapSnapshotter::MapSnapshotter()`. This parameter can now contain a list of font family names, font display names, and font PostScript names, each name separated by a newline.
### 🐞 Bug fixes
@@ -139,7 +143,7 @@
- [core][tile mode] Fix variable placement for labels with the `icon-text-fit` property set ([#16382](https://github.com/mapbox/mapbox-gl-native/pull/16382))
The `symbolIntersectsTileEdges()` util in `mbgl::TilePlacement` now considers icon shift for the variable symbols with enabled icon-text-fit setting, thus providing more accurate results.
The `symbolIntersectsTileEdges()` util in `mln::TilePlacement` now considers icon shift for the variable symbols with enabled icon-text-fit setting, thus providing more accurate results.
- [core] Correctly log a warning instead of crashing when a non-existent image is attempted to be removed. ([#16391](https://github.com/mapbox/mapbox-gl-native/pull/16391))
@@ -170,7 +174,7 @@
- [android] Add jni binding for styleable snapshotter ([#16286](https://github.com/mapbox/mapbox-gl-native/pull/16286))
- [core] Ability to set generic layer properties using setProperty method ([#16324](https://github.com/mapbox/mapbox-gl-native/pull/16324))
This change enables the following new keys for the `mbgl::Layer::setProperty()` API:
This change enables the following new keys for the `mln::Layer::setProperty()` API:
- "filter" invokes `setFilter()`
- "minzoom" invokes `setMinZoom()`
- "maxzoom" invokes `setMaxZoom()`
@@ -252,7 +256,7 @@
- Fixed using of the `in` expression as a layer filter ([#16272](https://github.com/mapbox/mapbox-gl-native/pull/16272))
The bug was caused by `mbgl::style::conversion::isExpression()` always returning `false` for the `in` expression.
The bug was caused by `mln::style::conversion::isExpression()` always returning `false` for the `in` expression.
### 🧩 Architectural changes
@@ -296,9 +300,9 @@
##### ⚠️ Breaking changes
- Changes to `mbgl::FileSourceManager::getFileSource()` ([#16238](https://github.com/mapbox/mapbox-gl-native/pull/16238))
- Changes to `mln::FileSourceManager::getFileSource()` ([#16238](https://github.com/mapbox/mapbox-gl-native/pull/16238))
It returns now `mbgl::PassRefPtr<FileSource>` (previously was `std::shared_ptr<FileSource>`) in order to enforce keeping the strong reference to the returned object.
It returns now `mln::PassRefPtr<FileSource>` (previously was `std::shared_ptr<FileSource>`) in order to enforce keeping the strong reference to the returned object.
Breaking code example:
`auto fs = FileSourceManager::getFileSource(); fs->..`
@@ -306,9 +310,9 @@
Possible fix:
`std::shared_ptr<FileSource> fs = `;
- The `mbgl::OnlineFileSource` class cannot be used directly ([#16238](https://github.com/mapbox/mapbox-gl-native/pull/16238))
- The `mln::OnlineFileSource` class cannot be used directly ([#16238](https://github.com/mapbox/mapbox-gl-native/pull/16238))
Clients must use the parent `mbgl::FileSource` interface instead.
Clients must use the parent `mln::FileSource` interface instead.
Breaking code example:
`std::shared_ptr<OnlineFileSource> onlineSource = std::static_pointer_cast<OnlineFileSource>(FileSourceManager::get()->getFileSource(..));`

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@ add_library(
${PROJECT_SOURCE_DIR}/benchmark/parse/tile_mask.benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/parse/vector_tile.benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/renderer/group_layers.benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/src/mbgl/benchmark/benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/src/mln/benchmark/benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/storage/offline_database.benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/util/tilecover.benchmark.cpp
${PROJECT_SOURCE_DIR}/benchmark/util/color.benchmark.cpp

View File

@@ -1,17 +1,17 @@
#include <benchmark/benchmark.h>
#include <mbgl/map/map.hpp>
#include <mbgl/map/map_options.hpp>
#include <mbgl/gfx/headless_frontend.hpp>
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/image.hpp>
#include <mbgl/storage/network_status.hpp>
#include <mbgl/util/image.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mln/map/map.hpp>
#include <mln/map/map_options.hpp>
#include <mln/gfx/headless_frontend.hpp>
#include <mln/renderer/renderer.hpp>
#include <mln/style/style.hpp>
#include <mln/style/image.hpp>
#include <mln/storage/network_status.hpp>
#include <mln/util/image.hpp>
#include <mln/util/io.hpp>
#include <mln/util/run_loop.hpp>
using namespace mbgl;
using namespace mln;
namespace {

View File

@@ -1,24 +1,24 @@
#include <benchmark/benchmark.h>
#include <mbgl/gfx/headless_frontend.hpp>
#include <mbgl/map/map.hpp>
#include <mbgl/map/map_observer.hpp>
#include <mbgl/map/map_options.hpp>
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/storage/network_status.hpp>
#include <mbgl/storage/resource_options.hpp>
#include <mbgl/style/image.hpp>
#include <mbgl/style/layers/symbol_layer.hpp>
#include <mbgl/style/sources/geojson_source.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/util/image.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mln/gfx/headless_frontend.hpp>
#include <mln/map/map.hpp>
#include <mln/map/map_observer.hpp>
#include <mln/map/map_options.hpp>
#include <mln/renderer/renderer.hpp>
#include <mln/storage/network_status.hpp>
#include <mln/storage/resource_options.hpp>
#include <mln/style/image.hpp>
#include <mln/style/layers/symbol_layer.hpp>
#include <mln/style/sources/geojson_source.hpp>
#include <mln/style/style.hpp>
#include <mln/util/image.hpp>
#include <mln/util/io.hpp>
#include <mln/util/run_loop.hpp>
#include <sstream>
#include <optional>
using namespace mbgl;
using namespace mln;
namespace {
@@ -124,7 +124,7 @@ static void API_renderStill_recreate_map_2(::benchmark::State& state) {
}
static void API_renderStill_multiple_sources(::benchmark::State& state) {
using namespace mbgl::style;
using namespace mln::style;
RenderBenchmark bench;
HeadlessFrontend frontend{size, pixelRatio};
Map map{frontend,

View File

@@ -1,12 +1,12 @@
#include <benchmark/benchmark.h>
#include <mbgl/style/conversion/json.hpp>
#include <mbgl/style/conversion/function.hpp>
#include <mbgl/style/conversion/property_value.hpp>
#include <mbgl/style/conversion_impl.hpp>
#include <mln/style/conversion/json.hpp>
#include <mln/style/conversion/function.hpp>
#include <mln/style/conversion/property_value.hpp>
#include <mln/style/conversion_impl.hpp>
using namespace mbgl;
using namespace mbgl::style;
using namespace mln;
using namespace mln::style;
static std::string createFunctionJSON(size_t stopCount) {
std::string stops = "[";

View File

@@ -1,14 +1,14 @@
#include <benchmark/benchmark.h>
#include <mbgl/benchmark/stub_geometry_tile_feature.hpp>
#include <mln/benchmark/stub_geometry_tile_feature.hpp>
#include <mbgl/style/conversion/json.hpp>
#include <mbgl/style/conversion/function.hpp>
#include <mbgl/style/conversion/property_value.hpp>
#include <mbgl/style/conversion_impl.hpp>
#include <mln/style/conversion/json.hpp>
#include <mln/style/conversion/function.hpp>
#include <mln/style/conversion/property_value.hpp>
#include <mln/style/conversion_impl.hpp>
using namespace mbgl;
using namespace mbgl::style;
using namespace mln;
using namespace mln::style;
static std::string createFunctionJSON(size_t stopCount) {
std::string stops = "[";

View File

@@ -1,13 +1,13 @@
#include <benchmark/benchmark.h>
#include <mbgl/benchmark/stub_geometry_tile_feature.hpp>
#include <mln/benchmark/stub_geometry_tile_feature.hpp>
#include <mbgl/style/conversion/json.hpp>
#include <mbgl/style/conversion/property_value.hpp>
#include <mbgl/style/conversion_impl.hpp>
#include <mln/style/conversion/json.hpp>
#include <mln/style/conversion/property_value.hpp>
#include <mln/style/conversion_impl.hpp>
using namespace mbgl;
using namespace mbgl::style;
using namespace mln;
using namespace mln::style;
static std::string createFunctionJSON(size_t stopCount) {
std::string stops = "[";

View File

@@ -1,7 +1,7 @@
#pragma once
namespace mbgl {
namespace mln {
int runBenchmark(int argc, char* argv[]);
} // namespace mbgl
} // namespace mln

View File

@@ -1,8 +1,8 @@
#include <ios_test_runner.hpp>
#include <mbgl/benchmark.hpp>
#include <mln/benchmark.hpp>
#include <mbgl/util/logging.hpp>
#include <mln/util/logging.hpp>
#include <unistd.h>
#include <vector>
@@ -22,13 +22,13 @@ bool TestRunner::startTest(const std::string& basePath) {
argv.push_back(nullptr);
if (chdir(basePath.c_str())) {
mbgl::Log::Error(mbgl::Event::General, "Failed to change the directory to " + basePath);
mln::Log::Error(mln::Event::General, "Failed to change the directory to " + basePath);
return false;
}
mbgl::Log::Info(mbgl::Event::General, "Start BenchmarkRunner");
int status = mbgl::runBenchmark(static_cast<uint32_t>(argv.size()), argv.data());
mbgl::Log::Info(mbgl::Event::General, "BenchmarkRunner finished with status: '%d'", status);
mln::Log::Info(mln::Event::General, "Start BenchmarkRunner");
int status = mln::runBenchmark(static_cast<uint32_t>(argv.size()), argv.data());
mln::Log::Info(mln::Event::General, "BenchmarkRunner finished with status: '%d'", status);
return status == 0;
}

View File

@@ -1,13 +1,13 @@
#include <benchmark/benchmark.h>
#include <mbgl/style/filter.hpp>
#include <mbgl/style/conversion/json.hpp>
#include <mbgl/style/conversion/filter.hpp>
#include <mbgl/style/conversion_impl.hpp>
#include <mbgl/tile/geometry_tile_data.hpp>
#include <mbgl/benchmark/stub_geometry_tile_feature.hpp>
#include <mln/style/filter.hpp>
#include <mln/style/conversion/json.hpp>
#include <mln/style/conversion/filter.hpp>
#include <mln/style/conversion_impl.hpp>
#include <mln/tile/geometry_tile_data.hpp>
#include <mln/benchmark/stub_geometry_tile_feature.hpp>
using namespace mbgl;
using namespace mln;
style::Filter parse(const char* expression) {
style::conversion::Error error;

View File

@@ -1,8 +1,8 @@
#include <benchmark/benchmark.h>
#include <mbgl/algorithm/update_tile_masks.hpp>
#include <mln/algorithm/update_tile_masks.hpp>
using namespace mbgl;
using namespace mln;
class FakeTile {
public:

View File

@@ -1,9 +1,9 @@
#include <benchmark/benchmark.h>
#include <mbgl/tile/vector_mvt_tile_data.hpp>
#include <mbgl/util/io.hpp>
#include <mln/tile/vector_mvt_tile_data.hpp>
#include <mln/util/io.hpp>
using namespace mbgl;
using namespace mln;
static void Parse_VectorTile(benchmark::State& state) {
auto data = std::make_shared<std::string>(

View File

@@ -1,31 +1,31 @@
#include <benchmark/benchmark.h>
// Core function to benchmark
#include <mbgl/renderer/group_by_layout.hpp>
#include <mln/renderer/group_by_layout.hpp>
// For mock layer properties
#include <mbgl/style/layer_properties.hpp>
#include <mbgl/style/layers/fill_layer_impl.hpp>
#include <mbgl/style/layers/fill_layer_properties.hpp>
#include <mbgl/style/layers/line_layer_impl.hpp>
#include <mbgl/style/layers/line_layer_properties.hpp>
#include <mbgl/style/layers/symbol_layer_impl.hpp>
#include <mbgl/style/layers/symbol_layer_properties.hpp>
#include <mbgl/style/layers/circle_layer_impl.hpp>
#include <mbgl/style/layers/circle_layer_properties.hpp>
#include <mbgl/util/immutable.hpp>
#include <mln/style/layer_properties.hpp>
#include <mln/style/layers/fill_layer_impl.hpp>
#include <mln/style/layers/fill_layer_properties.hpp>
#include <mln/style/layers/line_layer_impl.hpp>
#include <mln/style/layers/line_layer_properties.hpp>
#include <mln/style/layers/symbol_layer_impl.hpp>
#include <mln/style/layers/symbol_layer_properties.hpp>
#include <mln/style/layers/circle_layer_impl.hpp>
#include <mln/style/layers/circle_layer_properties.hpp>
#include <mln/util/immutable.hpp>
// For real style loading
#include <mbgl/style/style_impl.hpp>
#include <mbgl/storage/file_source.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/layermanager/layer_manager.hpp>
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/util/thread_pool.hpp>
#include <mln/style/style_impl.hpp>
#include <mln/storage/file_source.hpp>
#include <mln/util/io.hpp>
#include <mln/util/run_loop.hpp>
#include <mln/layermanager/layer_manager.hpp>
#include <mln/renderer/render_layer.hpp>
#include <mln/util/thread_pool.hpp>
using namespace mbgl;
using namespace mbgl::style;
using namespace mln;
using namespace mln::style;
// Minimal FileSource stub for benchmark (doesn't actually fetch resources)
class StubFileSource : public FileSource {

View File

@@ -1,8 +1,8 @@
#include <mbgl/benchmark.hpp>
#include <mln/benchmark.hpp>
#include <benchmark/benchmark.h>
namespace mbgl {
namespace mln {
int runBenchmark(int argc, char* argv[]) {
::benchmark::Initialize(&argc, argv);
@@ -10,4 +10,4 @@ int runBenchmark(int argc, char* argv[]) {
return 0;
}
} // namespace mbgl
} // namespace mln

View File

@@ -1,9 +1,9 @@
#pragma once
#include <mbgl/tile/geometry_tile_data.hpp>
#include <mbgl/util/feature.hpp>
#include <mln/tile/geometry_tile_data.hpp>
#include <mln/util/feature.hpp>
using namespace mbgl;
using namespace mln;
class StubGeometryTileFeature : public GeometryTileFeature {
public:

View File

@@ -1,11 +1,11 @@
#include <benchmark/benchmark.h>
#include <mbgl/storage/offline_database.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/storage/sqlite3.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/util/logging.hpp>
#include <mln/storage/offline_database.hpp>
#include <mln/storage/resource.hpp>
#include <mln/storage/response.hpp>
#include <mln/storage/sqlite3.hpp>
#include <mln/util/string.hpp>
#include <mln/util/logging.hpp>
#include <random>
@@ -18,14 +18,14 @@ public:
response.data = std::make_shared<std::string>(50 * 1024, 0);
response.mustRevalidate = false;
response.expires = mbgl::util::now() + 1h;
response.expires = mln::util::now() + 1h;
resetAmbientTiles();
resetRegion();
}
void resetAmbientTiles() {
using namespace mbgl;
using namespace mln;
db.clearAmbientCache();
@@ -37,7 +37,7 @@ public:
}
void resetRegion() {
using namespace mbgl;
using namespace mln;
auto regions = db.listRegions().value();
if (!regions.empty()) {
@@ -58,8 +58,8 @@ public:
}
}
mbgl::Response response;
mbgl::OfflineDatabase db{":memory:", mbgl::TileServerOptions::DefaultConfiguration()};
mln::Response response;
mln::OfflineDatabase db{":memory:", mln::TileServerOptions::DefaultConfiguration()};
const unsigned tileCount = 100;
int64_t regionID = 0;
@@ -78,7 +78,7 @@ BENCHMARK_F(OfflineDatabase, DeleteRegion)(benchmark::State& state) {
}
BENCHMARK_F(OfflineDatabase, InsertTileRegion)(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
while (state.KeepRunning()) {
const Resource offline = Resource::tile(
@@ -99,7 +99,7 @@ BENCHMARK_F(OfflineDatabase, ClearAmbientCache)(benchmark::State& state) {
}
BENCHMARK_F(OfflineDatabase, InsertTileCache)(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
while (state.KeepRunning()) {
const Resource ambient = Resource::tile(
@@ -109,7 +109,7 @@ BENCHMARK_F(OfflineDatabase, InsertTileCache)(benchmark::State& state) {
}
BENCHMARK_F(OfflineDatabase, InsertBigTileCache)(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
Response big;
big.data = std::make_shared<std::string>(util::DEFAULT_MAX_CACHE_SIZE / 100, 0);
@@ -122,7 +122,7 @@ BENCHMARK_F(OfflineDatabase, InsertBigTileCache)(benchmark::State& state) {
}
BENCHMARK_F(OfflineDatabase, GetTile)(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
std::random_device rd;
std::mt19937 gen(rd());
@@ -136,7 +136,7 @@ BENCHMARK_F(OfflineDatabase, GetTile)(benchmark::State& state) {
}
BENCHMARK_F(OfflineDatabase, AddTilesToFullDatabase)(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
Log::setObserver(std::make_unique<Log::NullObserver>());
db.setMaximumAmbientCacheSize(50 * 1024 * 5);
@@ -152,7 +152,7 @@ BENCHMARK_F(OfflineDatabase, AddTilesToFullDatabase)(benchmark::State& state) {
BENCHMARK_F(OfflineDatabase, AddTilesToDisabledDatabase)
(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
auto regions = db.listRegions().value();
if (!regions.empty()) {
@@ -171,7 +171,7 @@ BENCHMARK_F(OfflineDatabase, AddTilesToDisabledDatabase)
BENCHMARK_F(OfflineDatabase, GetTileFromDisabledDatabase)
(benchmark::State& state) {
using namespace mbgl;
using namespace mln;
auto regions = db.listRegions().value();
if (!regions.empty()) {

View File

@@ -2,7 +2,7 @@
#include <string>
#include <vector>
#include <mbgl/util/color.hpp>
#include <mln/util/color.hpp>
static const std::vector<std::string> testStrings = {"#000000",
"#FFFFFF",
@@ -20,7 +20,7 @@ namespace {
void ColorParse(benchmark::State& state) {
for (auto _ : state) {
for (const auto& str : testStrings) {
auto result = mbgl::Color::parse(str);
auto result = mln::Color::parse(str);
benchmark::DoNotOptimize(result);
}
}

View File

@@ -1,11 +1,11 @@
#include <benchmark/benchmark.h>
#include <mbgl/util/geo.hpp>
#include <mbgl/util/geometry.hpp>
#include <mbgl/util/tile_coordinate.hpp>
#include <mbgl/util/tile_cover.hpp>
#include <mbgl/map/transform.hpp>
#include <mln/util/geo.hpp>
#include <mln/util/geometry.hpp>
#include <mln/util/tile_coordinate.hpp>
#include <mln/util/tile_cover.hpp>
#include <mln/map/transform.hpp>
using namespace mbgl;
using namespace mln;
static const LatLngBounds sanFrancisco = LatLngBounds::hull({37.6609, -122.5744}, {37.8271, -122.3204});

View File

@@ -1,8 +1,8 @@
#include <mbgl/storage/file_source_manager.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/resource_options.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mln/storage/file_source_manager.hpp>
#include <mln/storage/resource.hpp>
#include <mln/storage/resource_options.hpp>
#include <mln/util/chrono.hpp>
#include <mln/util/run_loop.hpp>
#include <args.hxx>
#include <mapbox/io/io.hpp>
@@ -25,20 +25,20 @@ int main(int argc, char* argv[]) {
args::ValueFlag<unsigned long> expiresValue(p, "expires", "Expires date, will use 'now' otherwise", {'e'});
args::ValueFlag<unsigned long> modifiedValue(p, "modified", "Modified date, will use 'now' otherwise", {'m'});
std::unordered_map<std::string, mbgl::Resource::Kind> typeMap{{"glyphs", mbgl::Resource::Glyphs},
{"image", mbgl::Resource::Image},
{"source", mbgl::Resource::Source},
{"sprite-image", mbgl::Resource::SpriteImage},
{"sprite-json", mbgl::Resource::SpriteJSON},
{"style", mbgl::Resource::Style},
{"tile", mbgl::Resource::Tile}};
std::unordered_map<std::string, mln::Resource::Kind> typeMap{{"glyphs", mln::Resource::Glyphs},
{"image", mln::Resource::Image},
{"source", mln::Resource::Source},
{"sprite-image", mln::Resource::SpriteImage},
{"sprite-json", mln::Resource::SpriteJSON},
{"style", mln::Resource::Style},
{"tile", mln::Resource::Tile}};
std::string typeHelp("One of the following (required):");
for (const auto& key : typeMap) {
typeHelp += " " + key.first;
}
args::MapFlag<std::string, mbgl::Resource::Kind> typeFlag(
args::MapFlag<std::string, mln::Resource::Kind> typeFlag(
p, "type", typeHelp, {"type"}, typeMap, args::Options::Required);
args::Group tileIdGroup(p, "Coordinates (required for 'tile')", args::Group::Validators::AllOrNone);
@@ -67,15 +67,15 @@ int main(int argc, char* argv[]) {
exit(3);
}
mbgl::Response response;
mln::Response response;
response.data = std::make_shared<std::string>(*file);
response.etag = etagValue ? args::get(etagValue) : std::string();
response.expires = expiresValue ? mbgl::Timestamp(mbgl::Seconds(args::get(expiresValue))) : mbgl::util::now();
response.modified = modifiedValue ? mbgl::Timestamp(mbgl::Seconds(args::get(modifiedValue))) : mbgl::util::now();
response.expires = expiresValue ? mln::Timestamp(mln::Seconds(args::get(expiresValue))) : mln::util::now();
response.modified = modifiedValue ? mln::Timestamp(mln::Seconds(args::get(modifiedValue))) : mln::util::now();
mbgl::Resource resource(args::get(typeFlag), args::get(urlValue));
mln::Resource resource(args::get(typeFlag), args::get(urlValue));
if (args::get(typeFlag) == mbgl::Resource::Tile) {
if (args::get(typeFlag) == mln::Resource::Tile) {
if (!xValueFlag || !yValueFlag || !zValueFlag) {
std::cerr << "Error: -x, -y and -z must be provided for tiles" << '\n';
exit(1);
@@ -88,9 +88,9 @@ int main(int argc, char* argv[]) {
.z = static_cast<int8_t>(args::get(zValueFlag))}};
}
mbgl::util::RunLoop loop;
std::shared_ptr<mbgl::FileSource> dbfs = mbgl::FileSourceManager::get()->getFileSource(
mbgl::FileSourceType::Database, mbgl::ResourceOptions().withCachePath(args::get(cacheValue)));
mln::util::RunLoop loop;
std::shared_ptr<mln::FileSource> dbfs = mln::FileSourceManager::get()->getFileSource(
mln::FileSourceType::Database, mln::ResourceOptions().withCachePath(args::get(cacheValue)));
dbfs->forward(resource, response, [&loop] { loop.stop(); });
loop.run();
return 0;

View File

@@ -1,12 +1,12 @@
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/util/geojson.hpp>
#include <mln/util/run_loop.hpp>
#include <mln/util/string.hpp>
#include <mln/util/geojson.hpp>
#include <mbgl/storage/database_file_source.hpp>
#include <mbgl/storage/file_source_manager.hpp>
#include <mbgl/storage/resource_options.hpp>
#include <mbgl/util/client_options.hpp>
#include <mbgl/util/tile_server_options.hpp>
#include <mln/storage/database_file_source.hpp>
#include <mln/storage/file_source_manager.hpp>
#include <mln/storage/resource_options.hpp>
#include <mln/util/client_options.hpp>
#include <mln/util/tile_server_options.hpp>
#include <args.hxx>
@@ -51,19 +51,19 @@ mapbox::geometry::geometry<double> parseGeometry(const std::string& json) {
});
}
std::ostream& operator<<(std::ostream& os, mbgl::Response::Error::Reason r) {
std::ostream& operator<<(std::ostream& os, mln::Response::Error::Reason r) {
switch (r) {
case mbgl::Response::Error::Reason::Success:
case mln::Response::Error::Reason::Success:
return os << "Response::Error::Reason::Success";
case mbgl::Response::Error::Reason::NotFound:
case mln::Response::Error::Reason::NotFound:
return os << "Response::Error::Reason::NotFound";
case mbgl::Response::Error::Reason::Server:
case mln::Response::Error::Reason::Server:
return os << "Response::Error::Reason::Server";
case mbgl::Response::Error::Reason::Connection:
case mln::Response::Error::Reason::Connection:
return os << "Response::Error::Reason::Connection";
case mbgl::Response::Error::Reason::RateLimit:
case mln::Response::Error::Reason::RateLimit:
return os << "Response::Error::Reason::RateLimit";
case mbgl::Response::Error::Reason::Other:
case mln::Response::Error::Reason::Other:
return os << "Response::Error::Reason::Other";
}
@@ -122,7 +122,7 @@ int main(int argc, char* argv[]) {
exit(2);
}
auto mapTilerConfiguration = mbgl::TileServerOptions::MapTilerConfiguration();
auto mapTilerConfiguration = mln::TileServerOptions::MapTilerConfiguration();
std::string style = styleValue ? args::get(styleValue) : mapTilerConfiguration.defaultStyles().at(0).getUrl();
std::cout << " Style: " << style << std::endl;
@@ -138,7 +138,7 @@ int main(int argc, char* argv[]) {
const bool includeIdeographs = includeIdeographsValue ? args::get(includeIdeographsValue) : false;
const std::string output = outputValue ? args::get(outputValue) : "offline.db";
using namespace mbgl;
using namespace mln;
OfflineRegionDefinition definition = [&]() {
if (geometryValue) {
@@ -185,7 +185,7 @@ int main(int argc, char* argv[]) {
int retCode = 0;
std::cout << "Start Merge" << std::endl;
inputSource.mergeOfflineRegions(
*mergePath, [&](mbgl::expected<std::vector<OfflineRegion>, std::exception_ptr> result) {
*mergePath, [&](mln::expected<std::vector<OfflineRegion>, std::exception_ptr> result) {
if (!result) {
std::cerr << "Error merging database: " << util::toString(result.error()) << std::endl;
retCode = 1;
@@ -264,7 +264,7 @@ int main(int argc, char* argv[]) {
std::signal(SIGINT, [](int) { stop(); });
fileSource->createOfflineRegion(
definition, metadata, [&](mbgl::expected<OfflineRegion, std::exception_ptr> region_) {
definition, metadata, [&](mln::expected<OfflineRegion, std::exception_ptr> region_) {
if (!region_) {
std::cerr << "Error creating region: " << util::toString(region_.error()) << std::endl;
loop.stop();

View File

@@ -1,11 +1,11 @@
#include <mbgl/map/map.hpp>
#include <mbgl/map/map_options.hpp>
#include <mbgl/util/image.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mln/map/map.hpp>
#include <mln/map/map_options.hpp>
#include <mln/util/image.hpp>
#include <mln/util/run_loop.hpp>
#include <mbgl/gfx/backend.hpp>
#include <mbgl/gfx/headless_frontend.hpp>
#include <mbgl/style/style.hpp>
#include <mln/gfx/backend.hpp>
#include <mln/gfx/headless_frontend.hpp>
#include <mln/style/style.hpp>
#include <args.hxx>
@@ -19,8 +19,10 @@ int main(int argc, char* argv[]) {
args::ValueFlag<std::string> backendValue(argumentParser, "Backend", "Rendering backend", {"backend"});
args::ValueFlag<std::string> apikeyValue(argumentParser, "key", "API key", {'t', "apikey"});
args::ValueFlag<std::string> styleValue(argumentParser, "URL", "Map stylesheet", {'s', "style"});
args::ValueFlag<std::string> outputValue(argumentParser, "file", "Output file name", {'o', "output"});
args::ValueFlag<std::string> styleValue(
argumentParser, "URL|file|-", "Map stylesheet (use '-' for stdin)", {'s', "style"});
args::ValueFlag<std::string> outputValue(
argumentParser, "file|-", "Output file name (use '-' for stdout)", {'o', "output"});
args::ValueFlag<std::string> cacheValue(argumentParser, "file", "Cache database file name", {'c', "cache"});
args::ValueFlag<std::string> assetsValue(
argumentParser, "file", "Directory to which asset:// URLs will resolve", {'a', "assets"});
@@ -69,7 +71,7 @@ int main(int argc, char* argv[]) {
const double lon = lonValue ? args::get(lonValue) : 0;
const double alt = altValue ? args::get(altValue) : 0;
const double zoom = zoomValue ? args::get(zoomValue) : 0;
const double fov = fovValue ? args::get(fovValue) : mbgl::util::rad2deg(mbgl::util::DEFAULT_FOV);
const double fov = fovValue ? args::get(fovValue) : mln::util::rad2deg(mln::util::DEFAULT_FOV);
const double bearing = bearingValue ? args::get(bearingValue) : 0;
const double pitch = pitchValue ? args::get(pitchValue) : 0;
const double roll = rollValue ? args::get(rollValue) : 0;
@@ -87,9 +89,11 @@ int main(int argc, char* argv[]) {
const bool debug = debugFlag ? args::get(debugFlag) : false;
using namespace mbgl;
using namespace mln;
auto mapTilerConfiguration = mbgl::TileServerOptions::MapTilerConfiguration();
auto mapTilerConfiguration = mln::TileServerOptions::MapTilerConfiguration();
std::string json;
std::string style = styleValue ? args::get(styleValue) : mapTilerConfiguration.defaultStyles().at(0).getUrl();
util::RunLoop loop;
@@ -115,11 +119,16 @@ int main(int argc, char* argv[]) {
.withApiKey(apikey)
.withTileServerOptions(mapTilerConfiguration));
if (style.find("://") == std::string::npos) {
style = std::string("file://") + style;
}
if (style == "-") {
json = std::string(std::istreambuf_iterator<char>(std::cin), std::istreambuf_iterator<char>());
map.getStyle().loadJSON(json);
} else {
if (style.find("://") == std::string::npos) {
style = std::string("file://") + style;
}
map.getStyle().loadURL(style);
map.getStyle().loadURL(style);
}
std::vector<double> bounds = args::get(boundsValue);
if (bounds.size() == 4) {
LatLngBounds boundingBox = LatLngBounds::hull(LatLng(bounds[0], bounds[1]), LatLng(bounds[2], bounds[3]));
@@ -136,14 +145,19 @@ int main(int argc, char* argv[]) {
}
if (debug) {
map.setDebug(debug ? mbgl::MapDebugOptions::TileBorders | mbgl::MapDebugOptions::ParseStatus
: mbgl::MapDebugOptions::NoDebug);
map.setDebug(debug ? mln::MapDebugOptions::TileBorders | mln::MapDebugOptions::ParseStatus
: mln::MapDebugOptions::NoDebug);
}
try {
std::ofstream out(output, std::ios::binary);
out << encodePNG(frontend.render(map).image);
out.close();
std::string png = encodePNG(frontend.render(map).image);
if (output == "-") {
std::cout.write(png.data(), png.size());
} else {
std::ofstream out(output, std::ios::binary);
out << png;
out.close();
}
} catch (std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
exit(1);

View File

@@ -11,96 +11,93 @@ target_compile_definitions(
)
list(APPEND
INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/context.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/mtl_fwd.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/tile_layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/vertex_attribute.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/mtl/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/background.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/circle.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/common.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/collision.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/debug.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/fill.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/line.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/particle_gpu_validation.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/retained_underlay_composite.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/shader_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/mtl/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/context.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/mtl_fwd.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/tile_layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/vertex_attribute.hpp
${PROJECT_SOURCE_DIR}/include/mln/mtl/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/background.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/circle.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/common.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/collision.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/debug.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/fill.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/line.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/particle_gpu_validation.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/retained_underlay_composite.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/raster.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/shader_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/mtl/symbol.hpp
)
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/context.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/drawable_impl.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/mtl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/background.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/circle.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/collision.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/debug.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/fill.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/line.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/particle_gpu_validation.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/retained_underlay_composite.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/mtl/custom_layer_render_parameters.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/context.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/drawable_impl.hpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/mtl.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mln/mtl/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/background.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/circle.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/collision.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/debug.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/fill.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/line.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/particle_gpu_validation.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/retained_underlay_composite.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/raster.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/mtl/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mln/style/layers/mtl/custom_layer_render_parameters.cpp
)
find_library(METAL_FRAMEWORK Metal)
if (METAL_FRAMEWORK)
target_link_libraries(mbgl-core PRIVATE ${METAL_FRAMEWORK})
endif()
target_link_libraries(mbgl-core PRIVATE "-framework Metal")

View File

@@ -11,143 +11,144 @@ target_compile_definitions(
)
list(APPEND
INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/gl/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/platform/gl_functions.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/shader_manifest.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/shader_group_gl.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/prelude.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/background.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/background_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/circle.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/collision_box.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/collision_circle.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/debug.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_outline.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_outline_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_outline_triangulated.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_extrusion_instanced.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_extrusion_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/fill_extrusion_pattern_instanced.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/retained_underlay_composite.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/line.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/line_gradient.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/line_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/line_sdf.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/location_indicator_textured.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/symbol_sdf.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/symbol_text_and_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/wide_vector.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mln/platform/gl_functions.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/shader_manifest.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/shader_group_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/prelude.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/background.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/background_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/circle.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/collision_box.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/collision_circle.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/debug.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_outline.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_outline_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_outline_triangulated.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_extrusion_instanced.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_extrusion_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/fill_extrusion_pattern_instanced.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/particle_gpu_validation.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/retained_underlay_composite.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/line.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/line_gradient.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/line_pattern.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/line_sdf.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/location_indicator_textured.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/raster.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/symbol_sdf.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/symbol_text_and_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/wide_vector.hpp
)
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/gl/attribute.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/attribute.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/command_encoder.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/context.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/context.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/fence.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/fence.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/debugging_extension.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/debugging_extension.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/defines.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/draw_scope_resource.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/enum.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/enum.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/extension.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/framebuffer.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/object.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/object.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_pass.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/renderbuffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/renderbuffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/resource_pool.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/resource_pool.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/state.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/timestamp_query_extension.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/timestamp_query_extension.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/types.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/uniform.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/uniform.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/upload_pass.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/value.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/value.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_array.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_array.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/platform/gl_functions.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/legacy/clipping_mask_program.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/legacy/program_base.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/legacy/program.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/legacy/programs.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/legacy/programs.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/attribute.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/attribute.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/command_encoder.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/context.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/context.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/fence.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/fence.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/debugging_extension.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/debugging_extension.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/defines.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/draw_scope_resource.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/enum.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/enum.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/extension.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/framebuffer.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/object.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/object.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/render_pass.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/renderbuffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/renderbuffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/resource_pool.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/resource_pool.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/state.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/timestamp_query_extension.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/timestamp_query_extension.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/types.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/uniform.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/uniform.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/upload_pass.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/value.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/value.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/vertex_array.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/vertex_array.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/src/mln/platform/gl_functions.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/legacy/clipping_mask_program.hpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/legacy/program_base.hpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/legacy/program.hpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/legacy/programs.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/legacy/programs.hpp
)
list(APPEND INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/background_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/circle_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/collision_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/custom_drawable_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/debug_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/fill_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/fill_extrusion_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/heatmap_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/heatmap_texture_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/hillshade_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/color_relief_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/hillshade_prepare_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/line_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/location_indicator_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/raster_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/shader_defines.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/symbol_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/widevector_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/layers/custom_drawable_layer.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/layermanager/custom_drawable_layer_factory.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/gl/shader_program_gl.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/buffer_allocator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/drawable_gl.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/drawable_gl_builder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/layer_group_gl.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/uniform_buffer_gl.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/gl/vertex_attribute_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/background_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/circle_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/collision_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/custom_drawable_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/debug_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/fill_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/fill_extrusion_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/heatmap_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/heatmap_texture_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/hillshade_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/color_relief_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/hillshade_prepare_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/line_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/location_indicator_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/raster_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/shader_defines.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/symbol_layer_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/widevector_ubo.hpp
${PROJECT_SOURCE_DIR}/include/mln/style/layers/custom_drawable_layer.hpp
${PROJECT_SOURCE_DIR}/include/mln/layermanager/custom_drawable_layer_factory.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/gl/shader_program_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/buffer_allocator.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/drawable_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/drawable_gl_builder.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/layer_group_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/uniform_buffer_gl.hpp
${PROJECT_SOURCE_DIR}/include/mln/gl/vertex_attribute_gl.hpp
)
list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/shader_info.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/shader_program_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/buffer_allocator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/drawable_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/drawable_gl_builder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/drawable_gl_impl.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/layer_group_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/uniform_buffer_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_attribute_gl.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/shader_info.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/gl/shader_program_gl.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/buffer_allocator.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/drawable_gl.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/drawable_gl_builder.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/drawable_gl_impl.hpp
${PROJECT_SOURCE_DIR}/src/mln/gl/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/layer_group_gl.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/uniform_buffer_gl.cpp
${PROJECT_SOURCE_DIR}/src/mln/gl/vertex_attribute_gl.cpp
)

View File

@@ -12,93 +12,93 @@ target_compile_definitions(
list(APPEND
INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/style/layers/vulkan/custom_layer_init_parameters.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/layers/vulkan/custom_layer_render_parameters.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/context.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/descriptor_set.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/pipeline.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/tile_layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/vertex_attribute.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/vulkan/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/shader_group.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/background.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/circle.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/collision.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/common.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/fill.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/line.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/widevector.hpp
${PROJECT_SOURCE_DIR}/include/mln/style/layers/vulkan/custom_layer_init_parameters.hpp
${PROJECT_SOURCE_DIR}/include/mln/style/layers/vulkan/custom_layer_render_parameters.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/context.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/descriptor_set.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/offscreen_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/pipeline.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/renderable_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/tile_layer_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/vertex_attribute.hpp
${PROJECT_SOURCE_DIR}/include/mln/vulkan/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/shader_group.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/background.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/circle.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/collision.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/common.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/fill.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/line.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/raster.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/vulkan/widevector.hpp
)
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/vulkan/custom_layer_render_parameters.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/context.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/descriptor_set.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/drawable_impl.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/pipeline.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/renderable_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/vulkan/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/background.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/circle.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/collision.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/debug.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/fill.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/line.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mln/style/layers/vulkan/custom_layer_render_parameters.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/context.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/descriptor_set.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/drawable_impl.hpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/pipeline.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/renderable_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mln/vulkan/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/background.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/circle.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/collision.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/debug.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/fill.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/line.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/raster.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/vulkan/widevector.cpp
)

View File

@@ -17,99 +17,98 @@ target_include_directories(
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/context.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/headless_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/draw_scope_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/wgsl_preprocessor.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/background.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/circle.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/collision.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/debug.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/fill.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/line.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/context.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/draw_scope_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/wgsl_preprocessor.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/background.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/circle.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/collision.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/custom_geometry.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/debug.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/fill.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/color_relief.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/line.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/raster.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/offscreen_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/layer_group.cpp
)
list(APPEND
INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/context.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/background.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/circle.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/collision.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/common.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/debug.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/fill.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/line.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/widevector.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/vertex_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/command_encoder.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/context.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/drawable.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/drawable_builder.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/dynamic_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/index_buffer_resource.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/render_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/renderer_backend.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/shader_program.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/background.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/circle.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/clipping_mask.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/collision.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/common.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/custom_geometry.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/custom_symbol_icon.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/debug.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/fill.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/fill_extrusion.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/heatmap.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/heatmap_texture.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/hillshade.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/hillshade_prepare.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/color_relief.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/line.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/raster.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mln/shaders/webgpu/widevector.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/uniform_buffer.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/upload_pass.hpp
${PROJECT_SOURCE_DIR}/include/mln/webgpu/vertex_buffer_resource.hpp
)
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/context.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/command_encoder.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/context.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/drawable.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/drawable_builder.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/dynamic_texture.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/index_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/render_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/renderer_backend.cpp
${PROJECT_SOURCE_DIR}/src/mln/shaders/webgpu/shader_program.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/texture2d.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/uniform_buffer.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/upload_pass.cpp
${PROJECT_SOURCE_DIR}/src/mln/webgpu/vertex_buffer_resource.cpp
)
# Include WebGPU vendor configuration (Dawn or wgpu)
@@ -119,7 +118,13 @@ include(${PROJECT_SOURCE_DIR}/vendor/webgpu.cmake)
if(MLN_WEBGPU_IMPL_DAWN)
include(${PROJECT_SOURCE_DIR}/vendor/dawn.cmake)
if(TARGET mbgl-vendor-dawn)
target_link_libraries(mbgl-core PRIVATE mbgl-vendor-dawn)
if(MLN_WEBGPU_EMDAWN)
# Emdawn is a compiler/linker port rather than a conventional
# library. Consumers must inherit its final-link options.
target_link_libraries(mbgl-core PUBLIC mbgl-vendor-dawn)
else()
target_link_libraries(mbgl-core PRIVATE mbgl-vendor-dawn)
endif()
endif()
elseif(MLN_WEBGPU_IMPL_WGPU OR MLN_WEBGPU_IMPL_FFI)
# Include wgpu-native integration
@@ -127,6 +132,11 @@ elseif(MLN_WEBGPU_IMPL_WGPU OR MLN_WEBGPU_IMPL_FFI)
if(TARGET mbgl-vendor-wgpu)
target_link_libraries(mbgl-core PRIVATE mbgl-vendor-wgpu)
# Add WebGPU-Cpp implementation file (required for wgpu-native backend)
list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/webgpu_cpp_impl.cpp)
list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mln/webgpu/webgpu_cpp_impl.cpp)
endif()
endif()
# Headless backend uses Dawn native / wgpu-native bootstrap; skip for emdawnwebgpu.
if(NOT MLN_WEBGPU_EMDAWN)
list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mln/webgpu/headless_backend.cpp)
endif()

View File

@@ -75,7 +75,7 @@ The shaders need a representation visible outside the toolkit and we need to cha
Individual shaders are represented by an object class with massive amounts of template logic and a minimum of in-line comments. They’re opaque from the outside and only controllable through vector tile data and styles.
The [render_raster_layer](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/layers/render_raster_layer.cpp), as an example, asks for the instantiation of (eventually) RasterProgram. Rather than having the source for the program, that then pokes into a compressed chunk of memory that contains the source, which is then uncompressed and fed into OpenGL for compilation.
The [render_raster_layer](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/layers/render_raster_layer.cpp), as an example, asks for the instantiation of (eventually) RasterProgram. Rather than having the source for the program, that then pokes into a compressed chunk of memory that contains the source, which is then uncompressed and fed into OpenGL for compilation.
All of this makes sense in context, but is completely inaccessible outside the toolkit and rather incomprehensible when making changes.
@@ -134,9 +134,9 @@ Modern graphics pipelines use more than one pass to create a visual representati
Without getting too deep into specifics, early rendering passes allow the developer to use the power of the rasterizer for their own data. Later rendering passes are typically used to decorate the map with effects.
#### The way it is now:
The [low level rendering logic](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/renderer_impl.cpp) in the toolkit seems to only support one explicit rendering pass.
The [low level rendering logic](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/renderer_impl.cpp) in the toolkit seems to only support one explicit rendering pass.
However, there is the [RenderPass](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/gl/render_pass.hpp) so some notion of this exists in the toolkit, but it's not clear how complete that is. It may depend on ordering to work things out, rather than the explicit command buffer filling and fences we would use in a more modern approach.
However, there is the [RenderPass](https://github.com/maplibre/maplibre-native/blob/main/src/mln/gl/render_pass.hpp) so some notion of this exists in the toolkit, but it's not clear how complete that is. It may depend on ordering to work things out, rather than the explicit command buffer filling and fences we would use in a more modern approach.
In any case, we need this filled out more explicitly for the render targets.
@@ -205,7 +205,7 @@ In WhirlyGlobe we’ve always called out separate objects for drawing certain ki
Which is to say that Drawable is a good concept which can encapsulate a lot of complexity. So much so that it eventually encapsulates ALL the complexity, at least at that level of rendering. It’s a good interface between the things that construct geometry and the things that render geometry.
To keep the Drawable somewhat manageable, we added the concept of a Drawable Builder. This is an object that you throw geometry at in a somewhat disordered way and it emits Drawables when you’re done. MapLibre's [Buckets](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/bucket.hpp) are similar, but not quite the same. Perhaps they'll be adaptable. We'll see.
To keep the Drawable somewhat manageable, we added the concept of a Drawable Builder. This is an object that you throw geometry at in a somewhat disordered way and it emits Drawables when you’re done. MapLibre's [Buckets](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/bucket.hpp) are similar, but not quite the same. Perhaps they'll be adaptable. We'll see.
Drawables and Builders have a subclass for each supported rendering SDK. One mistake we won’t bring over is using multiple inheritance for that. You’re welcome.
@@ -221,7 +221,7 @@ Builders will be used primarily by Layers to emit Drawables for rendering.
This is a big topic because it gets to the very heart of the critical changes we want to make to the toolkit. There are a couple of different categories that are revealing and we'll use some examples.
Most commonly there are *render layers*. These are individual classes that know how to render, for instance, the [fill layer](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/layers/render_fill_layer.cpp). You'll see a bunch of these that start with "render" and end with "layer".
Most commonly there are *render layers*. These are individual classes that know how to render, for instance, the [fill layer](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/layers/render_fill_layer.cpp). You'll see a bunch of these that start with "render" and end with "layer".
What's going on here is that the toolkit has broken out a bunch of features from a tile, consolidated them together in a Bucket and then handed them off to a Layer to render. Sure enough, if you look in the render_*_layer you can see it doing just that.
@@ -230,7 +230,7 @@ Now it's not redoing the work of consolidation each frame, but it is doing a lot
- This is more specific logic than we'd want to see in a rendering loop. Remember, this runs every frame.
- If your data is not in tile form, it's going to be hard to render.
That last one is really interesting and we can find an example in MapLibre Native itself. Look to the [Render Location Indicator Layer](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/layers/render_location_indicator_layer.cpp). Here's where this approach trips up... rolls down the hill... into a pile of broken glass. You can feel the developers' pain in this module.
That last one is really interesting and we can find an example in MapLibre Native itself. Look to the [Render Location Indicator Layer](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/layers/render_location_indicator_layer.cpp). Here's where this approach trips up... rolls down the hill... into a pile of broken glass. You can feel the developers' pain in this module.
If you're not familiar with real time rendering toolkits, I'll put it this way. Managing the logic for a location puck that updates every time the user moves should not involve direct OpenGL calls. It should be abstracted, at least a little.
@@ -319,7 +319,7 @@ Every real time rendering toolkit has a main rendering loop or something like it
On iOS this runs on the main thread and on Android this runs on its own separate thread. You might think the latter is better, but it has its own problems (gesture lag). In any case, MapLibre Native handles both just fine.
The toolkit's main rendering "loop" lives in [renderer_impl](https://github.com/maplibre/maplibre-native/blob/main/src/mbgl/renderer/renderer_impl.cpp) and it's worth a look. It serves as a central point to begin examining the real time rendering.
The toolkit's main rendering "loop" lives in [renderer_impl](https://github.com/maplibre/maplibre-native/blob/main/src/mln/renderer/renderer_impl.cpp) and it's worth a look. It serves as a central point to begin examining the real time rendering.
As you might suspect, the rendering loop logic and implementation are heavily influenced by OpenGL.

View File

@@ -0,0 +1,184 @@
# Custom Vector Source
## Motivation
MapLibre Native currently supports two ways to provide vector tile data:
1. **URL-based sources** (`vector` source type) — tiles are fetched according to the protocol of the URL (`http://`,
`file://`, etc.).
2. **CustomGeometrySource** — accepts GeoJSON features programmatically, but internally re-encodes them into vector
tiles, adding overhead and limiting control over the tile encoding.
This proposal comes from the need for an efficient and kotlin native way to asynchronously connect a tile data source
similar to vector tile.
CustomGeometrySource was considered, but it has some obvious drawbacks:
1. Tile requests are in the format of a bounding box — since it's not a tile X/Y/Z it is pretty unclear what logic it
conforms to.
1. Is it just a tile X/Y/Z but converted to geo bounds?
2. Can it ever request data in a bounding box that is bigger than just one X/Y/Z tile
3. Additional boilerplate of mapping geo bounds into tile X/Y/Z
2. Internally CustomGeometrySource spawns a 4 thread threadpool and runs tasks one by one inside. It's a good old
technique
but Kotlin has things like coroutines which are a more ergonomic way to handle suspendable operations (like network
requests).
3. CustomGeometrySource operates over GeoJSON. So in case of a vector tiles like format it needs to be converted to
GeoJSON and then internally it will be cut down into vector tile format back.
## Proposed Change
Introduce a new source type, `CustomVectorSource`, that lets the application deliver raw binary tile data (starting with
MVT) directly to the rendering pipeline. The source participates in the standard tile loading lifecycle — the core
requests tiles by `CanonicalTileID`, and the application responds asynchronously with encoded data or an error.
### Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Platform layer (Kotlin) │
│ │
│ CustomVectorTileProvider.fetchTile(z, x, y) → TileData │
│ ↕ (JNI / platform bridge) │
├─────────────────────────────────────────────────────────────┤
│ Core C++ layer │
│ │
│ CustomVectorSource │
│ ├── Options { fetchTileFunction, cancelTileFunction, │
│ │ zoomRange } │
│ ├── setTileData(CanonicalTileID, shared_ptr<string>, │
│ │ TileDataFormat) │
│ ├── setTileError(CanonicalTileID, exception_ptr) │
│ └── invalidateTile(CanonicalTileID) │
│ │
│ CustomVectorTileLoader (Actor on Scheduler::GetBackground) │
│ └── Receives fetch/cancel requests from tiles │
│ │
│ CustomVectorTile (extends Tile) │
│ └── Parses MVT data via VectorTileData, delegates to │
│ standard GeometryTileWorker for symbol/line/fill │
│ layout │
│ │
│ RenderCustomVectorSource (extends RenderTileSetSource) │
│ └── Standard tile pyramid rendering │
├─────────────────────────────────────────────────────────────┤
│ Existing rendering pipeline (unchanged) │
│ GeometryTileWorker → Buckets → Drawables → GPU │
└─────────────────────────────────────────────────────────────┘
```
### Key Design Decisions
1. **Binary data, not GeoJSON.** For the Kotlin layer to send data to C++, it needs to be marshaled into some
data format that can be passed across languages. One could come up with a new binary format, implement an encoder in
Kotlin and a decoder in C++. But it turns out MVT is already such a format — just a binary blob that can be passed
simply as a sized buffer. Existing infrastructure of `MVT` tile data is just reused as is.
2. **Actor-based concurrency.** `CustomVectorTileLoader` runs on a background thread via MapLibre's Actor system. The
platform callback (fetch/cancel) is invoked on this thread; the platform layer is responsible for dispatching to its
own preferred context (e.g., coroutines on Android).
3. **Cooperative cancellation.** When a tile is no longer needed (e.g., user panned away), the core calls
`cancelTileFunction`. The platform layer can abort in-flight work.
4. **Standard tile pipeline reuse.** Once binary data arrives, it goes through the same `VectorTileData` →
`GeometryTileWorker` path as HTTP-fetched vector tiles. No custom rendering code is needed.
5. **Extensible format enum.** `TileDataFormat` is an enum starting with `MVT`. Future formats (e.g., a hypothetical
compact binary format) can be added without API changes. And obvious next candidate is `MLT` format support in
CustomVectorSource.
### Threading Model
```
Main thread: Source::update() → tile needs data
↓
Background Actor: CustomVectorTileLoader::fetchTile()
↓
Platform bridge: fetchTileFunction callback → platform code
↓ (async, any thread)
setTileData() → mailbox → CustomVectorTile::setData()
↓
GeometryTileWorker: parse MVT, create buckets (background pool)
↓
Main thread: Tile ready → render
```
## API Modifications
### Core C++ (public header)
```cpp
namespace mln::style {
enum class TileDataFormat : uint8_t { MVT = 0 };
using TileFunction = std::function<void(const CanonicalTileID&)>;
class CustomVectorSource final : public Source {
public:
struct Options {
TileFunction fetchTileFunction;
TileFunction cancelTileFunction;
Range<uint8_t> zoomRange = {0, 18};
};
CustomVectorSource(std::string id, const Options& options);
void setTileData(const CanonicalTileID&,
const std::shared_ptr<const std::string>& data,
TileDataFormat format = TileDataFormat::MVT);
void setTileError(const CanonicalTileID&, std::exception_ptr error);
void invalidateTile(const CanonicalTileID&);
};
} // namespace mln::style
```
### Android (Kotlin)
```kotlin
interface CustomVectorTileProvider {
suspend fun fetchTile(z: Int, x: Int, y: Int): TileData
}
sealed class TileData {
class Mvt(val data: ByteArray) : TileData()
}
class CustomVectorSource(
id: String,
provider: CustomVectorTileProvider,
scope: CoroutineScope,
minZoom: Int = 0,
maxZoom: Int = 18
) : Source()
```
The Android API uses Kotlin coroutines for async tile fetching. The `CoroutineScope` is caller-provided. Meaning
`CustomVectorSource` can run on a threadpool but not limited to a threadpool. `CoroutineScope` abstracts it away.
### iOS / macOS
Not included in this initial implementation. The core C++ API is platform-agnostic and can be wrapped in Swift/Obj-C
following the same pattern.
## Migration Plan and Compatibility
All changes are **additive**. No existing APIs are modified or removed. The new source type is opt-in — applications
that don't use it are unaffected.
- A new `SourceType::CustomMVTVector` enum value is added to the core.
- Existing `CustomGeometrySource` remains unchanged and is not deprecated.
## Rejected Alternatives
### Extend CustomGeometrySource to accept binary data
`CustomGeometrySource` is designed around GeoJSON features and internally manages geometry encoding. Bolting binary tile
support onto it would conflate two different data models and complicate its already non-trivial implementation.
### Use a local file source with a custom URL scheme
This approach (e.g., `mbtiles://` or `custom://`) requires the application to write tile data to disk or implement a
custom `FileSource`. It adds I/O overhead, doesn't support cooperative cancellation, and is harder to integrate with
structured concurrency frameworks like Kotlin coroutines.

View File

@@ -0,0 +1,43 @@
# STEP-104 官方 MapLibre Native Android 13.6.1 迁移:第一阶段 Codex 任务 v1
## 1. 基线与职责
- 用户授权 **GPT-6.1 Sol / High** 实施官方跟进,使用 Mac 固定 GNU Screen 会话 `20825.7445.codex`,不要自行切换模型和推理档位。
- 项目独立 worktree:`/Users/tei/dev/MapLibreParticleLab-upgrade-android-1361`,分支 `upgrade/android-native-13.6.1-20261009`。
- 当前第一父基线:**官方 Android Native 13.6.1** peeled commit `c7506d6aff3800e946f89e1a51432fc22d1a6534`;原有自研稳定版本(.21)HEAD `630ec657687bad4200c059bbccbb950d9c6f7ce9`,审计与报告闭环 HEAD `b433775348373b10fba02dc0e1f728bacd72f9e7`。
- Integrated repo Linux 远端 `main` 已同步至 `80667d6c343411d03a760425438e3d292f452118`;当前遵守 C-001/C-002、RFC-004、ADR-001,不得擅自改公开 API 或将 Android 新行为写进跨平台 contract。
- 先读原工作树 `/Users/tei/dev/MapLibreParticleLab/AGENTS.md`、`PARTICLE_BASELINE.md`、`docs/00_项目规范/`、`docs/00_项目总则/README.md` 与四份有效总则,再读现有审计报告 `/Users/tei/dev/MapLibreParticleLab-upstream-audit-20261009/docs/报告/UPSTREAM-001_MapLibre官方升级兼容性架构审计_Codex完成报告_v1.md`、近期 STEP-100/101/102 记录以及本任务。
- 另一个 Mac `particle/main` 工作树有用户未跟踪文件且落后远端,禁止修改;历史 release/STEP-103 工作树均不可改。
## 2. 本轮的工程目标和停点
目标是形成一个**可测试的 Android Native 13.6.1 官方底座候选**,继续保留自研 Field/QBIN/Particle/WeatherColor/RenderSegment/Retained 功能,不重写、不扩大功能。当前不是新版发行。
- A:在本分支以官方 13.6.1 为第一父,安全合入 `b433775348...` 自研历史的有效差异。优先使用 `git merge --no-commit --no-ff b433775348...`;解决全部 rename/content/modify-delete 冲突,不允许选择整文件 `ours/theirs` 丢失官方修复或自己的功能。核实 `git diff --check`、冲突标记和完整树,再创建明确 merge commit。可启用 rerere。
- B:适配官方 `mbgl→mln` 命名空间、include、Layer/Source/Shader factory、`RenderLayer::update(PaintParameters)`、`RenderStaticData::backendSize` 移除、Renderer lifecycle、RenderSegment 和 GL 粒子后端。只修改当前升级必要的官方接入点,保留现有 fail-closed、source/placement/revision/fast-path gate、map Style 顺序、stencil/target 安全。
- C:源码修改完成后,列出**精确可执行**的 Android Native C++/OpenGL 编译与定向测试命令,让 RDC 在 Mac 或 Linux 执行;Codex 自身不得进行耗时 build、link、codegen、打包或 Jest。可以执行 `git diff --check`、少量静态检查。
- D:若完整迁移无法在本轮完成,优先形成单独的、可复现且可回退的 Git checkpoint、明确残留冲突/失败清单;未清除 Git 冲突不得提交伪造的成功 merge。发生公共 API/Contract 变化或 iOS 专属需求立即停下来报告,不自行扩大跨团队范围。
## 3. 必须保留的现有行为
- C-002 QBIN V4 单帧 exact match、双帧合法插值、每 fieldKey 八帧和原子拒绝语义不变;不同 reference/dataset/profile 不混用;RN Host 负责加载、requestedForecastTime,Native submit 不调整时间。
- WeatherColorLayer 与 RasterParticleLayer 独立;粒子 GPU ping-pong、trail 和 RenderSegment 局部缓存存在;不允许用 CPU 动画替代、不允许关闭关键保护逻辑使其编译通过。
- Retained 保留 Z-order、opaque/translucent 绘制语义与 segment 索引;Source/layer/style/context/placement 变更失效安全、销毁不泄漏或使用陈旧 texture。
- 官方新版 Feature State 接口不得被自研逻辑覆盖或静默禁用;只记录 Native 后续 RN 11.5 测试 Gate,不升级 RN 包本轮版本锁。
## 4. 范围
- 允许:升级分支中的官方 Native Core/Shader/CMake、必要的 Android Native/JNI 接入、粒子模块源码、测试代码的机械迁移与必要接口适配,以及必要记录。
- 禁止:修改 `particle/main`、`release/particle.21`、STEP-103 工作树、NavSea、Integration 合同、iOS 专属 Metal/Bridge 功能实现、官方仓库、Node/Gradle/NDK 工具链;禁止发布 AAR/npm、build APK、改 public API/ABI 语义。
- 旧 .21 所有发布坐标保持冻结。iOS 旧实现应尽可能保留源码,但本轮只允许写 **NOT VERIFIED**,不允许声称 Metal/Swift/XCFramework PASS。
## 5. 记录和 Git:强制多次小提交
- 在仓库**根目录的 `recoder_step.md`** 追加每项实质进展,简明中文且 append-only,记录日期、基线、当前变化、已完成、剩余问题、下一步、关联 commit。还需追加 `粒子开发记录.md`(合入后存在),同步更新 `docs/50_Step记录/STEP-104_官方Native13.6.1升级阶段A_v1.md`。
- 本任务已有独立启动 checkpoint 提交。后续**至少尝试**按合并/结构迁移/接口修复/文档三个功能批次提交。每次提交限定本主题的文件并有清晰中英 commit message。不允许为了凑提交提交空文件或破坏历史;若阻塞,就如实说明只完成哪些。
- **仅 push 本次升级分支**到 `origin/upgrade/android-native-13.6.1-20261009`;切勿 push `particle/main`、force push、合并回主线、push upstream。需等 RDC 独立编译验收后再由 RDC 最终执行 push;Codex 此轮只 commit,不负责最终远端验收。
- 用户正式要求阶段记录必须叫 `recoder_step.md`,**不可擅自纠正拼写或用其它文件代替**。
- 工作期间若发现现存不相关改动,不能纳入任何提交。
## 6. 完成报告与检查
- 完成报告固定 `docs/报告/STEP-104_官方Native13.6.1升级阶段A_Codex完成报告_v1.md`,必须记录:实际模型与推理档位、原始 SHA 和候选 SHA、每个 commit 与变更范围、merge 冲突解决的准确状态、迁移清单、具体核心 API/行为检查、无 build 时 NOT RUN、给 RDC 的精确构建命令、剩余问题、Android/iOS/RN 明确边界、下一 Gate。
- 命名绝对不能自称正式 SDK PASS;如只完成局部迁移标 PARTIAL / BLOCKED。Codex 结束前检查 `git status --short`、`git diff --check`、阶段日志存在,任务范围与 commit 对得上。
- 对用户的最终下一停点是 Android 官方 13.6.1 候选的 Core/Android OpenGL 精确编译 Gate;RN 11.5/iOS/发布留后续。
- 若需要新增跨平台语义/接口必须暂停并记录 Integration 协调所需证据,而不是自行做新合同。
## 7. 本阶段特殊实施规则
按现有项目 `AGENTS.md`:**Codex 写代码,RDC 负责独立编译和验收**。仅在完成局部代码和提交后提供精确编译命令,等待 RDC 结果,如失败再进入下一轮修复。不要自行执行长时间构建。

View File

@@ -0,0 +1,28 @@
# STEP-104 官方 Native 13.6.1 升级阶段 A
- 状态:进行中。
- 当前基线:官方 Android Native `c7506d6aff3800e946f89e1a51432fc22d1a6534`;自研旧版本 .21 `630ec657687bad4200c059bbccbb950d9c6f7ce9`。
- 目标:把现有 Particle、WeatherColor、RasterArray、RenderSegment/Retained 与 Android Native 接口移植到官方 13.6.1,保持原语义;形成能进行精确编译验证的候选代码。
- 必做:合并/冲突、代码边界适配、append-only `recoder_step.md`、多提交、完成报告、RDC 静态及精确编译。
- 允许:本分支 Core/Android Native/构建配置/必要测试/记录。
- 禁止:NavSea、其他 worktree、主线和正式发行、未经协调的公共合同变化。
- 构建与测试:暂未运行;由 RDC 独立执行,不因任务书生成而记 PASS。
- 本轮输出:`docs/40_任务/STEP-104_官方Native13.6.1升级阶段A_Codex任务_v1.md`、`docs/报告/STEP-104_官方Native13.6.1升级阶段A_Codex完成报告_v1.md`、`recoder_step.md`、阶段代码 Git checkpoints。
- 当前结果:Gate 0 官方第一父基线检出;自研合并未开始。
- 阻塞:尚无;旧/新版差异已在 UPSTREAM-001 审计,需逐项移植。
- 下一步:Codex 迁移,RDC 独立编译,失败反馈给 Codex;未获得真实编译/设备结果不得宣称发布成功。
## Gate 1 实际进展(2026-10-09)
- 官方为第一父的 Git merge commit:`f8378fd7113c4d230500f0b82902d2356907f4a9`。
- 76 个冲突路径已处理、没有未合并 index 条目;RDC 已检查 Git history 和 Native 代码空白格式。
- 与旧发布的 Particle/QBIN/RenderSegment 功能是否能够完整编译、正确渲染仍未验证。本任务目标保持进行中;下一 Gate 为 Android Native 精确编译。
- 本检查点只能称为 `SOURCE_MERGED / BUILD_NOT_RUN`,不是 Android/iOS SDK PASS。
## Gate 2 / 2026-10-09 / RDC Native 编译实际结果
- 结果:Android x86_64 OpenGL Native **PASS**(Gradle `BUILD SUCCESSFUL in 22m 24s`;进程退出码 0),编译提交 `a4b5f4eaa0eccb734e00d67adb5e750bba320404`。
- 产物:`MapLibreAndroid/build/intermediates/cmake/openglDebug/obj/x86_64/libmaplibre.so`,`377246848` bytes,SHA-256 `ff5a5eb45f84ff633a87fe385fb04ee39ba63ed3bc486003408e02cea78c8907`。
- 已排除的构建阻塞:新 worktree 的 cheap-ruler-cpp、tile-spec/earcut、supercluster LICENSE 依赖检出缺失;按 Git 固定提交恢复,无需修改产品源码。
- 未完成项:其余 ABI、Android 安装/真机 GPU、Vulkan、RN 11.5.0、iOS Metal、发布均 NOT RUN;STEP-104 为 **PARTIAL**(阶段 A Native 编译 Gate 通过,产品发行 Gate 未开始)。
- 下一步:Android 多 ABI + 真实 GPU/Style/RenderSegment 功能验收,再进入 RN 11.5.0 公共桥接联调。

View File

@@ -0,0 +1,11 @@
# STEP-105 FZG1-2 MapLibre Native 13.6.1 Validation APK 安装记录
- 日期:2026-10-09(JST)
- 代码来源:官方 Native Android 13.6.1 + Particle .21 迁移候选,分支 `upgrade/android-native-13.6.1-20261009`,构建源提交 `30d0e6665e`。
- 构建与目标:Mac,`MapLibreAndroidTestApp`、OpenGL Debug、Native x86_64,Gradle 6m48s 初次完成;因 Sentry 辅助库多 ABI 被旧检查规则拒绝;修订验证规则后增量 Gradle 10s,ZIP/ABI/体积检查 PASS。
- 脚本修改:`tools/particle_android_validation/build_validation_apk.sh` 仅允许非目标 ABI 中已确认的 Sentry 库;`libmaplibre.so` 与 Custom Layer 必须仍为 x86_64;独立提交 `73db0356ac5860366f314ddba23b716220e7c16a`。
- APK:`artifacts/maplibre-particle/step105-native1361-fzg/MapLibreAndroidTestApp-validation-opengl-debug-x86_64.apk`,66,505,502 字节,SHA-256 `77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa`。
- 设备:FZG1-2 / Android 13 / ADB `192.168.200.139:5555`。覆盖安装 `adb install -r` **Success**;设备实际版本 `13.6.1`,签名一致、首次安装日期不变,设备文件 SHA 与 Mac 完全一致。
- NavSea 仍为前台 App,未主动启动测试 App;运行、GPU 绘制、RenderSegment 等仍 **NOT RUN**,不可写成已通过。
- 回退:旧版 13.4.1-particle.21 APK 已独立保存于忽略目录 `artifacts/.../rollback/`,未纳入 Git。
- Gate:本阶段 **APK_BUILD_AND_INSTALL_PASS**;下一阶段是 FZG 可视运行及完整功能回归。

View File

@@ -0,0 +1,13 @@
# STEP-105 / FZG1-2 MapLibre Native 13.6.1 实机运行记录 v1
- 日期:2026-10-09 JST。
- 设备:FZG1-2 Android 13 x86_64,ADB 192.168.200.139:5555。源码:upgrade/android-native-13.6.1-20261009 / c30add4d335c5c02aadac5756c1606b5bc497269。
- PASS:粒子页面启动和用户观察、Cache 开关、Pan/双击 Zoom 后存活与缓存边界失效、STEP-101 单次重建、STEP-101 流式 Logcat 20 次 Native reset 完整配对、STEP-099 R-C-R 底层复用、QBIN V4 Golden 时间控制六项、STEP-102 T1 Symbol 安全回退、默认界面恢复。
- STEP-101 T2 证据:20 请求、20 Native reset enter/complete、40 Renderer reset enter/complete、21 ready、crash buffer 0;最初的环形缓冲被覆盖测试不计正式 PASS。
- STEP-099 T4:动态 GeoJSON 71 次更新,R0 buildDelta=0、reuseDelta=3677、invalidationDelta=0。
- STEP-102 T1:R0 buildDelta=0、reuseDelta=3683、invalidationDelta=0;R1 包含 Symbol,gate=false、Live/Fallback,符合预期。
- FAIL:STEP-102 T2_TWO_FREE 的 R1 持续 placementCapable=true、gate=false、Live/Fallback,reuse=0、invalidation 增加 3682;按 fixture R1 为 Fill,理应支持 retained;R0 reuseDelta=3682、buildDelta=0、invalidationDelta=0。无 crash,不证明错绘或确定回归起点。
- 疑点:运行时注入的 Annotation Symbol、真实 Style Layer Index 或 Segment 范围;应先提取完整诊断和旧 .21 对照,保留 fail-closed,不直接改 Core 公共语义。
- 证据目录(不提交 Git):artifacts/maplibre-particle/step105-fzg-runtime-20261009/。截图、UI XML、Logcat、crash buffer 齐备。
- 恢复:ADB 冷启动默认粒子页 GLOBAL/ACTIVE/EAST/MIX0%/256,当前 FZG 前台 Test App 13.6.1,Crash Buffer 0。
- 状态:PARTIAL / T2 EXPECTATION FAIL。未编译、未执行 Jest、未更改源码或 NavSea,下一 Gate 是 T2 定向调查修正后回归。

View File

@@ -0,0 +1,48 @@
# STEP-106 STEP-102 T2 自动 Annotation 层边界修正记录 v1
日期:2026-10-09(JST)
**状态:SOURCE_FIXED / STATIC_PASS / ANDROID_BUILD_NOT_RUN / DEVICE_RETEST_NOT_RUN**
## 事实
- 旧版 13.4.1-particle.21 在 FZG 同样复现 T2 R1 placementCapable=true/gate=false/live/static-placement/reuse0,已保存同场景旧版日志。新版 13.6.1 在比较结束后成功恢复,设备 APK SHA 正确。
- 两版 AnnotationManager 会自动在 Style 末尾插入 Symbol Layer org.maplibre.annotations.points。T2 测试 Fixture 的上层自身为 Fill,但原 R-C-R Plan 的 R1 从 step102-upper 延续至最后一层,把该内部 Symbol 也算进去。
- 不允许修改或跳过 Shared Core/Renderer Placement 安全 Gate。此次只改两个 Android Test App Kotlin 文件;新增 C2 live 尾部区段,单独承载 MapLibre Annotation Symbol,从而使 T2 的 R1 仅含 Fill;T1 R1 仍含自身 Symbol。
- 为 tick8 新增 STEP102_STYLE_LAYER_LAYOUT 日志,供下次实际 APK 验证真实 Style Layer 顺序、分段边界。
- 代码 Git 提交:86906c8a6af474a8d064c6f6d7d431e2a7e3efe6;静态检查 PASS,没有执行 Gradle、ADB 修正版验证、Jest。
## 需用户手工编译
在 Mac 终端:
```bash
cd /Users/tei/dev/MapLibreParticleLab-upgrade-android-1361
export JAVA_HOME=/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
export ANDROID_HOME=/Users/tei/Library/Android/sdk
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export PATH="$JAVA_HOME/bin:$ANDROID_HOME/platform-tools:$PATH"
export MAPLIBRE_VALIDATION_OUT_DIR="$PWD/artifacts/maplibre-particle/step106-t2-fix"
./tools/particle_android_validation/build_validation_apk.sh
```
脚本内部使用 Gradle `--console=plain`。请保留 BUILD SUCCESS 和 build-info.txt,APK 生成后再由 RDC 安装到 FZG。不得把目前设备上的 13.6.1 旧 APK 当成包含本修复的版本。
## 复测门槛
- APK 完整性、包名、版本、Native x86_64、哈希校验;签名不符禁止卸载重装。
- 新版 STEP102_STYLE_LAYER_LAYOUT 必须显示自动 Annotation Symbol 在最后的独立 Continuous C2;Plan valid、segments=4。
- T1_FREE_SYMBOL:R0 continued Composite/Reuse、R1 placementCapable=true 且需要时 Live、C2 包含 Annotation;不崩溃。
- T2_TWO_FREE:R0 和 R1 均 placementCapable=false、gate=true、actualExecution=composite;tick8→130 的 buildDelta=0、invalidationDelta=0、reuseDelta>0;C2 Live;不崩溃。
- 复测 STEP-099 T4 R-C-R R0 locality,STEP-101 单次/20次 Native Reset(日志须持续采集),V4 Golden 最小烟测。保留失败路径及原始日志。
- 修正作用域限定 Test App 分段验证,不等同生产快帧性能达标。若仍 fallback,应保留 Placement fail-closed,重新诊断而非强制 PASS。
## 2026-10-09 手工边界获用户明确授权后的 RDC 编译与 FZG 闭环
- 本轮用户明确要求“你编译和验证吧”。在 Mac 执行 Android Test App Gradle,源码 HEAD 23f7b8a4d7、干净;Gradle/Validation PASS。新版 APK SHA256=0ef3b033cd33139db07258745e9cd9d023170ce69767e3f8a5159821776ec9ef,66,505,495 字节,x86_64 MapLibre Native。
- FZG1-2 签名检查一致,adb install -r Success;设备 base.apk SHA 与 Mac 相同、versionName=13.6.1。
- T1_FREE_SYMBOL(两窗口):Style 实际 5 层/4 段;R0 reuseΔ+3682、buildΔ0、invalidΔ0;R1 Symbol 继续保守 live/static-placement,PASS。
- T2_TWO_FREE(两窗口):R0、R1 均 placementCapable=false/gate=true/composite;两段各 reuseΔ+3683、buildΔ0、invalidΔ0;尾部 Annotation Symbol C2 live,PASS,原 T2 阻塞正式解除。
- STEP099 T4:R0 reuseΔ+3675、build/invalidΔ0,PASS。STEP101 T1:1 个 nativeReset 完成,PASS;T2:20 Native reset 完整配对、21 ready、40 Render reset enter/complete,PASS。
- QBIN V4 Golden t0/t1 插入、Runtime V4 READY 最小烟测 PASS。Crash Buffer 均无故障记录。FZG 已恢复默认 GLOBAL/ACTIVE/EAST/MIX0%/256,修正版 APK 哈希再次核对一致。
- 状态更新:**STEP-106 CLOSED/PASS(FZG Android x86_64/OpenGL 定向问题及回归)**。不代表 ARM64、RN、iOS、Vulkan、全链发行通过。原始日志保存在 Git 忽略的 artifacts/maplibre-particle/step106-t2-fix/。

View File

@@ -4,12 +4,15 @@ The rendering backend is selected at build time through Gradle product flavors.
## Available backends
| Flavor | Backend | Status | Notes |
|---|---|---|---|
| `opengl` | OpenGL ES | Stable | Default, widest device compatibility |
| `vulkan` | Vulkan | Stable | Better performance on modern devices |
| `webgpuDawn` | WebGPU (Dawn) | Experimental | Uses Vulkan internally, see [WebGPU](./android-webgpu.md) |
| `webgpuWgpu` | WebGPU (wgpu-native) | Experimental | Uses Vulkan internally, arm64-v8a only, see [WebGPU](./android-webgpu.md) |
| Flavor | Backend | Status | Maven Central artifact | Notes |
|---|---|---|---|---|
| `opengl` | OpenGL ES | Stable | `org.maplibre.gl:android-sdk-opengl` | Default, widest device compatibility |
| `vulkan` | Vulkan | Stable | `org.maplibre.gl:android-sdk-vulkan` | Better performance on modern devices |
| `webgpuDawn` | WebGPU (Dawn) | Experimental | not published | Uses Vulkan internally, see [WebGPU](./android-webgpu.md) |
| `webgpuWgpu` | WebGPU (wgpu-native) | Experimental | not published | Uses Vulkan internally, arm64-v8a only, see [WebGPU](./android-webgpu.md) |
| `multiBackend` | OpenGL ES + Vulkan | Experimental | `org.maplibre.gl:android-sdk-vulkan-opengl` | Both backends in one AAR, chosen at runtime |
`org.maplibre.gl:android-sdk` is also published and currently maps to the `vulkan` flavor's release build. `-debug` suffixed artifact (e.g. `android-sdk-vulkan-debug`) is published for each flavor as well.
## Building with a specific backend
@@ -29,6 +32,9 @@ cd platform/android
# WebGPU (wgpu-native)
./gradlew :MapLibreAndroidTestApp:installWebgpuWgpuDebug
# Both OpenGL ES and Vulkan, backend chosen at runtime
./gradlew :MapLibreAndroidTestApp:installMultiBackendDebug
```
The same pattern applies to the library module (`MapLibreAndroid`):
@@ -49,5 +55,8 @@ Each flavor sets different CMake arguments:
- `vulkan`: `-DMLN_WITH_VULKAN=ON`
- `webgpuDawn`: `-DMLN_WITH_WEBGPU=ON`, `-DMLN_WEBGPU_IMPL_DAWN=ON`
- `webgpuWgpu`: `-DMLN_WITH_WEBGPU=ON`, `-DMLN_WEBGPU_IMPL_WGPU=ON`
- `multiBackend`: `-DMLN_ANDROID_MULTI_BACKEND=ON`
Only one backend is active per build. Renderer-specific Java code lives in `src/opengl/`, `src/vulkan/`, or `src/webgpu/` source sets.
For `opengl`, `vulkan`, and the WebGPU flavors, only one backend is compiled in and it's fixed for the lifetime of the app. `multiBackend` is the exception - it ships both the OpenGL ES and Vulkan native libraries and picks one at runtime.
Renderer-specific Java code is split between flavor-specific source sets (`src/opengl/`, `src/vulkan/`, `src/multiBackend/`) and shared per-backend code in `src/sharedRenderer/opengl/` and `src/sharedRenderer/vulkan/`.

View File

@@ -1,6 +1,6 @@
# WebGPU on Android
Two WebGPU implementations are supported: **Dawn** (Google, C++) and **wgpu-native** (Rust). Both use Vulkan internally on Android. The Gradle product flavors are `webgpuDawn` and `webgpuWgpu`, sharing the `src/webgpu/` Java source set.
Two WebGPU implementations are supported: **Dawn** (Google, C++) and **wgpu-native** (Rust). Both use Vulkan internally on Android. The Gradle product flavors are `webgpuDawn` and `webgpuWgpu`, sharing the `src/vulkan/` and `src/sharedRenderer/vulkan/` Java source sets.
## Building with Dawn

View File

@@ -25,7 +25,7 @@ git clone --recurse-submodules git@github.com:maplibre/maplibre-native.git
Make sure the following Homebrew packages are installed:
```sh
brew install bazelisk webp libuv webp icu4c jpeg-turbo glfw libuv
brew install bazelisk webp libuv icu4c jpeg-turbo glfw
brew link icu4c --force
```

View File

@@ -23,7 +23,7 @@ Tracy computational overhead is very low but by default it keeps all instrumenta
#### Instrumentation in MapLibre
The file `include/mbgl/util/instrumentation.hpp` defines the following instrumentation macros:
The file `include/mln/util/instrumentation.hpp` defines the following instrumentation macros:
##### `MLN_TRACE_ZONE(label)`
The macro records the timestamps at the start and end of the code scope. The parameter label is a user defined name for the zone. Example:

View File

@@ -55,22 +55,22 @@ To create a new module:
1. Add a new source file to `rustutils/src/example.rs`.
2. Implement it, see the [CXX documentation](https://cxx.rs/index.html) or see `rustutils/src/color.rs` for an example.
3. Create a C++ source file that will use the generated C++ header. See `src/mbgl/util/color.rs.cpp` for an example. Import the generated header with
3. Create a C++ source file that will use the generated C++ header. See `src/mln/util/color.rs.cpp` for an example. Import the generated header with
```cpp
#include <rustutils/example.hpp>
```
4. Conditionally include either the `*.rs.cpp` file or the `*.cpp` file it replaces in CMake and Bazel. Here is what it looks like for CMake:
```cmake
${PROJECT_SOURCE_DIR}/src/mbgl/util/color$<IF:$<BOOL:${MLN_USE_RUST}>,.rs.cpp,.cpp>
${PROJECT_SOURCE_DIR}/src/mln/util/color$<IF:$<BOOL:${MLN_USE_RUST}>,.rs.cpp,.cpp>
```
And here for Bazel:
```bazel
select({
"//:rust": [
"src/mbgl/util/color.rs.cpp",
"src/mln/util/color.rs.cpp",
],
"//conditions:default": [
"src/mbgl/util/color.cpp",
"src/mln/util/color.cpp",
],
})
```

View File

@@ -0,0 +1,64 @@
# STEP-104 官方 Native 13.6.1 升级阶段 A — Codex 完成报告 v1
## 1. 执行结论
**PARTIAL:官方 Native 13.6.1 + Particle .21 源码移植已完成三方合并,Android x86_64 OpenGL Native 编译链接 PASS;其他 ABI、GPU 视觉/行为、RN 与 iOS 未验收。** 不是正式发布结论。
## 2. 执行模型与人员分工
- Codex:`gpt-6.1-sol`,`high`,真实会话 `turn_context` 已由 RDC 独立核对。
- Codex 负责源码冲突、接口调整和静态核对;RDC 负责 Git 真实合并/index/commit、submodule 和 Native 构建;未切换其他模型。
- 所有操作在隔离工作树 `/Users/tei/dev/MapLibreParticleLab-upgrade-android-1361`,branch `upgrade/android-native-13.6.1-20261009`;未修改 NavSea、正式 .21、Integration 合同或 iOS 专用行为。
## 3. Git 基线与多个提交
- 官方新底座:Android Native 13.6.1,`c7506d6aff3800e946f89e1a51432fc22d1a6534`。
- 旧自研扩展:发布 .21 `630ec657687bad4200c059bbccbb950d9c6f7ce9`,完整历史及审计闭环 `b433775348373b10fba02dc0e1f728bacd72f9e7`。
- `e4c7af7c401aebc0fdb9d85309ad781e328baff4`:升级任务与根目录 `recoder_step.md` 的启动检查点。
- `f8378fd7113c4d230500f0b82902d2356907f4a9`:两父三方合并,将自研 Particle 与 RenderSegment 移植至官方 13.6.1(提交时未编译)。
- `a4b5f4eaa0eccb734e00d67adb5e750bba320404`:补充真实合并进度与风险记录。
- 本报告对应的构建发生在 `a4b5f4eaa0` 上。本文及后续 Gate 记录另作独立收尾 commit,不修改已验证的 Native 产品代码;最终 HEAD 和远端结果以实际 Git 命令回填。
## 4. 主要源码调整
- 自研 Field、Ingress、QBIN、WeatherColor、RasterParticle 代码迁移到官方 `include/mln`、`src/mln` 路径,不恢复旧 `mbgl` 产品目录。
- 合并官方与 .21 的 Source/Layer Factory、Shader manifest 与 OpenGL 建置注册,保留官方 CustomMVTVector 和现有 RasterArray。
- 适配 RenderLayer 新 `PaintParameters` 参数和 `renderableSize`,同步保留 RenderSegment/Retained、fast-path、revision、source-scoped fail-closed、observer 与资源清理。
- Android JNI 自研入口及官方 Feature State 入口的静态声明/注册核对,未重新定义 RN 公共 API。
## 5. 冲突与格式检查
- `git merge --no-ff --no-commit` 初始 76 个未合并路径;Codex 清除冲突标记,RDC 确认 `git ls-files -u` 为 0 后完成合并提交。
- 新版 Native 源码范围的 `git diff --check` PASS。整体 merge 中有 3 份历史文档保留自旧版的尾随空格,逐字节确认来自 .21 源提交,未篡改历史文档。
- 源码状态以本次 Git branch 和原生编译证据为准,静态检查不替代行为验收。
## 6. Native 构建记录
- 环境:Mac,Homebrew OpenJDK 17,Android SDK/NDK `28.2.13676358`,SDK CMake 3.31.6;ABI=`x86_64`,Renderer=OpenGL,BuildType=Debug。
- 标准命令(`platform/android`;先 export JAVA_HOME/ANDROID_HOME/ANDROID_SDK_ROOT):
```bash
./gradlew --no-daemon --max-workers=3 --console=plain -Pmaplibre.abis=x86_64 :MapLibreAndroid:externalNativeBuildOpenglDebug
```
- 首轮:CMake 因缺少 `vendor/maplibre-native-base/deps/cheap-ruler-cpp/include` 失败(新 worktree submodule 未初始化)。
- 第二轮:CMake 因 `maplibre-tile-spec/cpp/vendor/earcut/CMakeLists.txt` 和 `mbgl-vendor-supercluster` license 缺失失败。
- RDC 校验 top-level Native submodules 固定提交,恢复中断克隆导致的残缺 vendor 工作树;第三轮命令成功,Gradle `BUILD SUCCESSFUL in 22m 24s`,退出码 **0**。已执行真实 NDK 编译与动态库链接。
- 第三轮原始构建日志保存于 Mac `/tmp/step104_android_native_opengl_gradle_third.log`;前两轮错误日志保存于同目录对应 `gradle.log` 与 `gradle_retry.log` 文件。
## 7. 产物证据
- 完整路径:`/Users/tei/dev/MapLibreParticleLab-upgrade-android-1361/platform/android/MapLibreAndroid/build/intermediates/cmake/openglDebug/obj/x86_64/libmaplibre.so`。
- 文件类型:ELF 64-bit LSB shared object、x86-64、dynamically linked、with debug_info、not stripped。
- 大小:`377246848` bytes。
- SHA-256:`ff5a5eb45f84ff633a87fe385fb04ee39ba63ed3bc486003408e02cea78c8907`。
- 此产物未签名、未公开发布,不应作为 NavSea 正式依赖或全 ABI 发布件。
## 8. 实际测试与未测试范围
- PASS:三方合并无未解决冲突、Native 编译器完成 x86_64 OpenGL 工程构建、最终 libmaplibre.so 链接。
- NOT RUN:ARMv7、ARM64、其余 Android ABI、Android APK/实体机/虚拟机 GPU 视觉、QBIN/T0/T1 运行态、Pan/Zoom/Rotate、Style reset、RenderSegment retained 行为、Vulkan、RN 11.5.0 Feature State 联调、iOS Metal/XCFramework。
- 未执行 Jest;未以静态推断伪报运行通过。
## 9. 已知问题与阻塞
- GitHub 下载曾出现间歇性 DNS/HTTPS 超时;RDC 校正必要的 submodule HEAD 后完成编译。
- Gradle/CMake 输出 SDK XML 版本、Gradle 10 弃用提示;本轮未导致失败。长期工具链调整需单独设计,不并入当前移植 Gate。
- iOS/shared contract 更改不属于 Android 本轮权限;涉及跨平台共同语义须回 Integration 协调。
## 10. 下一阶段、停点与发布边界
建议在**Android 多 ABI(armeabi-v7a / arm64-v8a / x86 / x86_64)Native 验证 + Test Host GPU 功能回归**处设置下一 Gate。下一阶段再独立验证 RN 11.5.0 的公共桥接与 Feature State,iOS 由对应负责方验证。当前不发布 AAR、npm,不改 NavSea 主线。
## 11. 收尾事实
本次更新采用根目录 `recoder_step.md` append-only,并追加 STEP-104;Git 提交、远端分支、最终 HEAD、push 结果以 RDC 后续独立回读为准。未完成项如实保留。

View File

@@ -0,0 +1,59 @@
# STEP-105 Android Native 13.6.1 — FZG1-2 Validation APK 打包与安装 RDC 执行报告 v1
## 1. 结论
**APK_BUILD_PASS / FZG_INSTALL_PASS / DEVICE_APK_HASH_PASS / RUNTIME_NOT_RUN**。
本次在 Mac 使用官方 MapLibre Native Android 13.6.1 + Particle .21 升级候选打包 `MapLibreAndroidTestApp`,通过 FZG1-2 的 ADB 覆盖安装,并在设备端核对实际版本和完整 APK SHA-256。没有安装 NavSea,也没有声明粒子运行态通过。
## 2. 环境与版本
- Mac 目录:`/Users/tei/dev/MapLibreParticleLab-upgrade-android-1361`
- 源码分支:`upgrade/android-native-13.6.1-20261009`
- 构建源 HEAD:`30d0e6665eb16a258e47b3a8cc0d16932e43762b`
- 底座 Native:`android-v13.6.1`;OpenGL Debug,Native ABI `x86_64`
- Test App 包名:`org.maplibre.android.testapp`;新版本 `13.6.1`,`versionCode=14`,`targetSdk=35`。
- FZG:`FZG1-2` / Android 13 / `192.168.200.139:5555`,`ro.product.cpu.abi=x86_64`;另一台 Odin 不在修改范围。
- 工具:Mac JDK17、Android SDK/NDK、Gradle `--console=plain`;缺失的 Android SDK Platform 35 已经由 Gradle 获取。
## 3. APK 构建与失败恢复
使用项目原有 `tools/particle_android_validation/build_validation_apk.sh`。
1. 第一轮 Gradle `:MapLibreAndroidTestApp:assembleOpenglDebug` 编译 **BUILD SUCCESSFUL in 6m 48s**,但原 Validation 脚本要求 APK 全部 ABI 集合精确为 `x86_64`。实际 APK 其他 ABI 含有 Sentry 日志库 `libsentry.so` / `libsentry-android.so`,因此脚本按照 fail-closed 策略拒绝打包,未安装。
2. 调整 `tools/particle_android_validation/build_validation_apk.sh`:所有非目标 ABI 的文件只接受 `arm64-v8a`、`armeabi-v7a`、`x86` 下这两种 Sentry 库;其它意外 Native 库仍拒绝。额外确认 `lib/x86_64/libmaplibre.so`、`lib/x86_64/libexample-custom-layer.so` 存在;保持 APK 体积及 `libmaplibre.so` 体积上限。
3. 脚本通过 `bash -n`、`git diff --check`;增量 Gradle **BUILD SUCCESSFUL in 10s**,脚本报告 **BUILD SUCCESS**。
4. 修改脚本单独 Git commit:`73db0356ac5860366f314ddba23b716220e7c16a`。APK 的 `build-info.txt` 记录源码 HEAD `30d0e6665e` 且当时 `git_dirty=true`,因为脚本尚未提交;这里如实保留这一构建时事实,不能把后续 commit 当作已经编入 APK 的 C++ SHA。
## 4. APK 最终产物
- 相对路径:`artifacts/maplibre-particle/step105-native1361-fzg/MapLibreAndroidTestApp-validation-opengl-debug-x86_64.apk`
- APK 字节数:`66,505,502`。
- `libmaplibre.so` 在 APK 内的字节数:`39,970,088`。
- SHA-256:`77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa`。
- `aapt dump badging`:`org.maplibre.android.testapp` / `versionName=13.6.1`。
- `apksigner verify` PASS;校验日志中的非致命 META-INF 元信息警告不代表签名失败。
- APK 同时携带三种其它 ABI 的 *Sentry 辅助库*;`libmaplibre.so` 和 Test App Custom Layer 均仅为 x86_64。产物命名中的 x86_64 指 MapLibre Native 编译目标,不表示 APK 没有任何其它架构的 Sentry 依赖。
## 5. FZG 安装与设备端回读
- 安装前原版:`13.4.1-particle.21`,包名相同。
- 从设备拉取旧 APK,`apksigner verify --print-certs` 核对新旧证书 SHA-256 均为 `e3f8fae6451ed6322259d090dd8e8788df554ab25ed89a01c78014f1d5ef8236`,允许正常覆盖。
- 安装命令:`adb -s 192.168.200.139:5555 install -r <APK>`。
- ADB 明确返回 **Success**,完成时间 **2026-10-09 12:03:06 JST**。
- `dumpsys package`:`versionName=13.6.1`,`lastUpdateTime=2026-10-09 12:03:06`,`firstInstallTime=2026-09-22 07:34:56`,未卸载重装。
- `adb shell sha256sum /data/app/.../base.apk` 返回 `77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa`,与 Mac 本地 APK 字节级一致。
- 安装后 FZG 前台仍是 `com.navsea.app/.MainActivity`。这不是 NavSea 更换 Native AAR/npm,也未更改 NavSea 本身。
## 6. 回退与未完成内容
- 安装前旧 APK 备份在(Git 忽略目录):`artifacts/maplibre-particle/step105-native1361-fzg/rollback/MapLibreAndroidTestApp-original-13.4.1-particle.21.apk`,SHA-256 `999f773276b29fffae05c1edc977e19df6cebecd94e4a4095508d0c5e97e07c2`。无需重新下载旧版 APK;尚未执行回退。
- **NOT RUN**:Test App 前台启动、GPU 粒子动画/QBIN/T0/T1、地图 pan/zoom/rotation、RenderSegment retained、Style/layer unload/reload、崩溃/帧性能、其它 ABI、RN 11.5.0 和 iOS。
- 下一阶段建议使用已安装的 FZG 测试 App 进行上述真实 GPU/生命周期回归,验收完成后再考虑升级分支合并或发布。
- 本任务通过 RDC 直接构建/安装,**没有调用 Codex 模型或替换 Codex 工作**。与此前 STEP-104 的 GPT-6.1 Sol/High 实施范围不同。
## 7. 记录与 Git
- Root `recoder_step.md` 追加事实,`docs/50_Step记录/` 单独记录,完成报告写入 `docs/报告/`。
- 脚本代码 commit `73db0356ac5860366f314ddba23b716220e7c16a`。本次文档提交与 push、远端 HEAD 由 RDC 单独验收,最终结果以实际 Git 回执为准。
- 只推送 `upgrade/android-native-13.6.1-20261009`;正式 `particle/main` 不更新。

View File

@@ -0,0 +1,57 @@
# STEP-105 FZG1-2 MapLibre 13.6.1 实机 ADB 验收报告 v1
## 1. 结论
整体状态:PARTIAL。Android x86_64 OpenGL 升级候选已在 FZG 上完成多组运行验收;STEP-102 T2_TWO_FREE 仍 FAIL。不得以已安装、可显示粒子和无崩溃代表升级全部 PASS。
## 2. 环境和范围
- 2026-10-09 JST;Mac RDC/ADB;FZG1-2 Android 13,serial 192.168.200.139:5555。
- Test App org.maplibre.android.testapp / versionName 13.6.1,已安装 APK SHA-256 为 77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa。
- Git 升级分支 upgrade/android-native-13.6.1-20261009,测试源码 HEAD c30add4d335c5c02aadac5756c1606b5bc497269。
- 仅 ADB UI/手势/Intent/Logcat/截图;没有 Codex、Gradle、Jest、NavSea 修改、iOS、其他 ABI 或正式发布。
## 3. 验收表
| 实测项目 | 证据 | 结论 |
|---|---|---|
| 初始粒子显示 | 用户看到粒子;UI GLOBAL/ACTIVE/EAST/MIX0%/256;两帧截图 | PASS(初始显示) |
| Cache ON→OFF→ON | 状态回读,runtime-disabled 后恢复 CACHE ON | PASS |
| 地图平移/双击缩放 | App 存活;camera-or-boundary 缓存失效,后续复用 | PASS(基础运行) |
| STEP-101 T1 单次重建 | destroy enter/return、Native reset、new Renderer ready、DONE | PASS |
| STEP-101 T2 20 次重建 | 流式日志20请求、20 Native reset进入/完成、40 Render reset进入/完成、21 ready、crash buffer0 | PASS |
| STEP-099 T4 R-C-R | 71次动态源更新,R0 build2→2、reuse5696→9373、invalidation35→35 | PASS(R0 locality) |
| QBIN V4 Golden | T0/T1 ACCEPTED_INSERTED,6项播放控制 ACCEPTED | PASS(操作契约) |
| STEP-102 T1_FREE_SYMBOL | R0 composite reuse +3683;R1 symbol placement gate false,Live | PASS |
| STEP-102 T2_TWO_FREE | R0 reuse +3682;R1 placementCapable=true、Live/Fallback、reuse0 | FAIL(预期双 Retained) |
| 最终恢复 | 默认 GLOBAL/ACTIVE/EAST/MIX0%/256;前台 Test App 13.6.1;crash buffer0 | PASS |
## 4. 关键数字及诊断
STEP-101 T2 首轮虽完成20次但设备环形 Logcat 丢失了前15次。该轮不记完整 PASS。第二轮使用 Mac 实时流式日志,从场景启动前持续记录到 DONE,完整包含:20 RESET_REQUEST、20 MapView destroy enter、20 destroy return、20 nativeReset entered、20 nativeReset completed、40 resetRenderer entered、40 completed、21 NEW_RENDERER_READY、1 SCENARIO_DONE,Crash Buffer 0。
STEP-099 T4 R-C-R(底层 Retained/中央粒子 Continuous/上层动态 Retained)在 tick8 至 tick130:R0 build=2→2、reuse=5696→9373(+3677)、invalidation=35→35;动态 GeoJSON 共71次更新。上层 R1 因 static-placement 保守 Live 回退。该 PASS 仅针对独立 R0 的 Source-scoped 缓存隔离。
QBIN V4 Golden 录得 t0=ACCEPTED_INSERTED、t1=ACCEPTED_INSERTED,后续 action=3 Seek25、4 Seek75、1 Play、5 Speed2、2 Pause、7 Clear,均 result=ACCEPTED;最终 UI 显示 V4 CLEARED。这不是天气场颜色和方向的像素级数值证明。
## 5. T2_TWO_FREE 阻塞事实和归因限制
T1:R0 placementCapable=false/gate=true/actual=composite,build1→1、reuse196→3879、invalidation6→6;带 Symbol 的 R1 placementCapable=true/gate=false/actual=live,符合保守安全设计。
T2:R0 placementCapable=false/gate=true/actual=composite,build1→1、reuse197→3879、invalidation5→5;R1 即使 fixture 指定 Fill,仍 placementCapable=true、gate=false、actual=live、fallback=static-placement,build0→0、reuse0→0、invalidation202→3884。最终 symbolFadeChange≈0.997、placementTransitionActive=true、crossSourceCollisions=true。两窗口 tick8/130 一致;无 FATAL/ANR,Crash Buffer 0。
只读源码:renderSegmentHasPlacementCapableLayer 只要分段内出现类型 symbol 即判 true,而测试 fixture T2 的自定义上层为 Fill。应调查运行时完整 Style Layer 列表、默认 Annotation Symbol 注入、segment begin/end、source/layer 归属。其它场景的 dependency 中曾出现 org.maplibre.annotations,但尚未证明在 T2 中造成该问题。缺少旧 .21 的 T2 运行对照,因此不应把该差异直接断言为 13.6.1 新引入的回归。
现象是保守 Live/Fallback 与复用能力未达预期,不是已证实的错绘或 GPU 资源错误。禁止为凑 PASS 关闭 Placement 安全门。需先核实是场景/区段定义问题还是实现问题,再在授权范围内修复并重新验收。
## 6. 原始证据、范围与收尾
Mac Git 忽略目录:artifacts/maplibre-particle/step105-fzg-runtime-20261009/,共含 01-baseline、02-cache、03-camera、04-teardown-t1、05-teardown-t2、06-locality-t4、07-qbin-v4、08-step102-t1、09-step102-t2、10-restored;保存截图、UI XML、原始流式 Logcat 与 crash buffer。其中 STEP-101 T2 正式证据为 05-teardown-t2/stream-complete.log。
本轮未做严格像素对比、长时间性能曲线、bearing/pitch 数值校验、Vulkan、RN 11.5.0、iOS、NavSea SDK 接入或正式发布。
结束前将 FZG 的 Test App 重新冷启动至普通粒子状态 GLOBAL / ACTIVE / EAST / MIX 0% / 256,前台运行、版本仍 13.6.1,设备 Crash Buffer 为空;NavSea 没有被安装或覆盖。
下一阶段:STEP-102 T2 的只读诊断与旧版 .21 对照,确定是否默认 annotation layer 被归入 R1,必要时明确修正场景/索引或源码,并在用户手工 Android 编译后由 RDC 重跑 T1/T2、T4 R-C-R 与 STEP-101 20次 reset。未完成前 Android Native 功能 Gate 保持 PARTIAL。
此报告没有业务代码提交。根目录 recoder_step.md 追加事实,中文阶段记录与 Git 远端状态通过 RDC 单独收尾。

View File

@@ -0,0 +1,78 @@
# STEP-106 STEP-102 T2 Placement 边界修正 — RDC 实施报告 v1
## 1. 当前判定
**源码修正已提交、静态检查通过;Android/Kotlin 编译 NOT RUN、FZG 修正版设备验证 NOT RUN。**
本阶段专门处理 STEP-105 的 T2_TWO_FREE 未达到预期问题。保留原 STEP-105 PARTIAL 状态直至修正版 APK 手工编译和 FZG 定向运行 Gate 全部通过。没有改动核心 Renderer 的 Placement 容错判定。
## 2. 旧版同设备复现
设备 FZG1-2,Android 13,x86_64,ADB 192.168.200.139:5555。
先核对旧、新 APK 的包名相同为 org.maplibre.android.testapp、versionCode 均为14、证书 SHA-256 均为 e3f8fae6451ed6322259d090dd8e8788df554ab25ed89a01c78014f1d5ef8236。旧版文件 SHA-256 为 999f773276b29fffae05c1edc977e19df6cebecd94e4a4095508d0c5e97e07c2。
临时 adb install -r 安装旧版 13.4.1-particle.21,运行:
`adb -s 192.168.200.139:5555 shell am start -W -n org.maplibre.android.testapp/.activity.particle.ParticleCoreLayerValidationActivity --es step102_scenario T2_TWO_FREE`
流式 Logcat 在 tick29/30 记录:R0 placementCapable=false/gate=true/composite/reuse 正常;R1 placementCapable=true/gate=false/actual=live/fallback=static-placement/build0/reuse0。因而确认该现象旧 .21 **同样存在**,不是已证明由官方 Native 13.6.1 升级新引入。
立即 adb install -r 恢复已签名的新 13.6.1,返回 Success;设备已安装 base.apk 的 SHA-256 为 77bc0b238fb476494410a603443030b104d78f97a737307be52460bf5a68f5aa,和 Mac 现有新 APK 完全一致。随后重新启动不带 Extra 的 Particle Core Layer Validation Activity,版本仍 13.6.1。
证据位于 Git 忽略目录 `artifacts/maplibre-particle/step105-fzg-t2-rootcause-20261009/old21-t2-stream.log`,以及先前 `step105-fzg-runtime-20261009/09-step102-t2/stream.log`。
## 3. 可核对的源级原因
13.6.1 的 `src/mln/annotation/annotation_manager.cpp` 中,`AnnotationManager::updateStyle()` 会创建名为 `org.maplibre.annotations.points` 的 Symbol Layer 并追加至 Style。旧 .21 的 `src/mbgl/annotation/annotation_manager.cpp` 保留同样逻辑。
原测试计划为 R0 RETAINED → C0 CONTINUOUS 从 `step102-particle` 开始 → R1 RETAINED 从 `step102-upper` 开始并延伸到 Style 最后一层。测试 fixture 的 T2 `step102-upper` 是 Fill,但 R1 还包含默认追加的 Annotation Symbol。RenderSegment 层级的 `renderSegmentHasPlacementCapableLayer()` 只要在范围内看到 Symbol 即正确地判 true;在 fade/placement 期间 fallback `static-placement` 是安全行为,不能绕过。
这是对代码结构和两版设备现象的一致解释。真实 Style 的完整 `styleLayers` 数组先前没有输出,因此最终边界还要等待修正版新增诊断进一步核对;不得在这里宣称 Pixel/GPU 原因已由运行时完整证明。
## 4. 修改与保护边界
源码分支:`upgrade/android-native-13.6.1-20261009`。
代码提交:`86906c8a6af474a8d064c6f6d7d431e2a7e3efe6` — `test(android): isolate internal annotation symbol from STEP-102 retained ranges`。
两个文件:
1. `platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/Step102PlacementFixture.kt`:为 T1、T2 共用计划增加最后一段 CONTINUOUS,startLayerId=`org.maplibre.annotations.points`,使原 R1 只包含自有上层。两场景保持相同边界。若默认 Layer 不存在,现有 Plan resolver 会因 boundary-layer-missing fail-closed,不会错误地忽略该层。
2. `platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt`:在 tick8 输出一次 `STEP102_STYLE_LAYER_LAYOUT`,包含 Style Layer id/type/index 与四段 begin/end,用实际测试证据验证上层边界。
没有修改 `src/mln`、`include/mln`、Renderer、Shared Core、NavSea 或 iOS,也未改变任何公开 API/ABI。
新增 C2 使本测试由 R-C-R 变为 R-C-R-C,并可能失去“仅一个 Continuous”的 Particle fast-path 优化条件:这是仅用于证明两个 Retained 在真实内部 Annotation 层存在时安全局部复用的独立测试布局,不能当作生产性能验证或建议宿主一律使用四区段布局。
## 5. 当前检查结果
- `git diff --check` PASS。
- 静态合成 Style 解析:T1 的 R1 为 Symbol,T2 的 R1 为 Fill,Annotation Symbol 位于 C2;模拟边界覆盖完整且无空段,PASS(**非 Kotlin 构建、非真实 Runtime**)。
- Android Gradle/Kotlin Build:NOT RUN(用户手工编译)。
- 更新版 Validation APK:NOT BUILT。
- FZG 新计划的 T1/T2 tick8/130:NOT RUN。
- 其它 ABI / iOS / NavSea / Jest:NOT RUN。
## 6. 用户手工编译与 RDC 验收
Mac 终端:
```bash
cd /Users/tei/dev/MapLibreParticleLab-upgrade-android-1361
export JAVA_HOME=/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
export ANDROID_HOME=/Users/tei/Library/Android/sdk
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export PATH="$JAVA_HOME/bin:$ANDROID_HOME/platform-tools:$PATH"
export MAPLIBRE_VALIDATION_OUT_DIR="$PWD/artifacts/maplibre-particle/step106-t2-fix"
./tools/particle_android_validation/build_validation_apk.sh
```
脚本自带 Gradle `--console=plain`、Native ABI/体积/ZIP 检查。用户编译后由 RDC 确认 Git 源码 SHA、包名、签名、APK SHA,再 adb install -r 到 FZG。
验收应分别运行 STEP-102 `T1_FREE_SYMBOL` 与 `T2_TWO_FREE`(明确传 `--es step102_scenario <SCENARIO>`),在 tick8 和 tick130 读取 `STEP102_STYLE_LAYER_LAYOUT` / `STEP102_SAMPLE` / `STEP102_WINDOW_MARKER`。对 T2 需要 R0 和 R1 同时 placementCapable=false、gate=true、actualExecution=composite;各自 buildDelta=0、invalidationDelta=0、reuseDelta>0;C2 live 且保持 Z-order。T1 的 R1 为 Symbol,应继续按现有安全 gate fallback;检查样本和崩溃日志。之后最小回归 STEP-099 T4、STEP-101 Native reset、QBIN V4 Golden,失败须保留现场。
## 7. Gate
**SOURCE_FIXED / STATIC_PASS / BUILD_PENDING / DEVICE_PENDING**。
任何未编译、未安装新版修正 APK 的设备日志不能被用来宣称 STEP-106 PASS。待 RDC 收到用户手工编译成功的制品后,才进入下一阶段设备验收和最终关闭。

View File

@@ -0,0 +1,100 @@
# STEP-106 STEP-102 T2 Placement 边界修正 — Mac 编译与 FZG 实机回归完成报告 v1
## 一、结论
**STEP-106 CLOSED/PASS(仅 FZG1-2 Android x86_64/OpenGL Test App 的 T2 问题及定向回归)。**
源码保留 RenderSegment Placement 安全规则,仅修复 STEP-102 Test App 的分段计划,将默认附加的 Annotation Symbol 从 R1 Retained 中隔离到末尾 Continuous C2。更新版经 Mac Gradle 打包、FZG 设备安装、两项 STEP-102 场景及 STEP-099/STEP-101/QBIN 回归,验收符合各自目标。
## 二、源码、构建、APK
- 工作区:/Users/tei/dev/MapLibreParticleLab-upgrade-android-1361
- 分支:upgrade/android-native-13.6.1-20261009
- 构建输入 HEAD:23f7b8a4d7b33d3fb63cd8691fc3a2f070936d03;构建时 git_dirty=false。
- 上游 Integration main 已经在本轮开始前同步到 80667d6c343411d03a760425438e3d292f452118。
- 构建:Mac,JDK 17,Android SDK/NDK,x86_64 OpenGL Debug,tools/particle_android_validation/build_validation_apk.sh(Gradle --console=plain);成功退出,BUILD SUCCESS,Kotlin/Java/Native 包装检查通过。
- APK:artifacts/maplibre-particle/step106-t2-fix/MapLibreAndroidTestApp-validation-opengl-debug-x86_64.apk;66,505,495 bytes;lib/x86_64/libmaplibre.so=39,970,088 bytes。
- APK SHA-256:0ef3b033cd33139db07258745e9cd9d023170ce69767e3f8a5159821776ec9ef。
- 其它 ABI 带入的仅是 Validation 脚本明示允许的 Sentry 库;MapLibre Native 和测试 Custom Layer 是 x86_64。APK ZIP 检查、脚本 ABI/体积检查 PASS。
- 打包日志与 source lock:artifacts/maplibre-particle/step106-t2-fix/build.log、build-info.txt。
## 三、FZG 安装
- 设备:FZG1-2 / Android 13 / ADB 192.168.200.139:5555 / x86_64。
- 包名:org.maplibre.android.testapp;versionName=13.6.1,versionCode=14。
- 新旧证书 SHA-256 一致:e3f8fae6451ed6322259d090dd8e8788df554ab25ed89a01c78014f1d5ef8236。
- 2026-10-09 13:08:17 JST,adb install -r 返回 Success,保留 App 数据。
- 完成后设备内 base.apk SHA-256 与 Mac 完全一致;最后恢复默认页面时再次独立回读核实。
## 四、STEP-102 T1/T2 两窗口验收
窗口均从 STEP102_WINDOW_MARKER baseline tick8 测至 final tick130,期间持续 ADB Logcat 收集。
修正后的实际 Style/Segment 层级日志(两组均在 FZG 真实记录):
- 层 0:step102-background(background)
- 层 1:step102-static-fill(fill)
- 层 2:step102-particle(raster-particle)
- 层 3:step102-upper(T1 为 symbol,T2 为 fill)
- 层 4:org.maplibre.annotations.points(MapLibre 内部 symbol)
四段为 R0 RETAINED[0,2)、C0 CONTINUOUS[2,3)、R1 RETAINED[3,4)、C2 CONTINUOUS[4,5)。
### T1_FREE_SYMBOL — PASS
- R0:placementCapable=false、gate=true、actual=composite,build 1→1、reuse 180→3862(**+3682**)、invalidation 2→2。
- R1:placementCapable=true、gate=false、actual=live,fallback=static-placement,reuse0。这一安全退回是正确行为。
- C2:MapLibre 内部 Annotation Symbol 持续 Live。
- Crash Buffer=0,Style Plan 接受。
### T2_TWO_FREE — PASS,原阻塞解除
- R0:placementCapable=false、gate=true、actual=composite,build 1→1,reuse 195→3878(**+3683**)、invalidation 7→7。
- R1:placementCapable=false、gate=true、actual=composite,build 1→1,reuse 195→3878(**+3683**)、invalidation 7→7。
- C2:内部 Annotation Symbol 继续 Live,不破坏 Placement 安全。
- Crash Buffer=0,Style Plan 接受。
原失败表现(R1 placementCapable=true/fallback=static-placement)不再存在。之前对旧 13.4.1-particle.21 的同设备对照证明原 fixture 也有相同问题,不属于 13.6.1 新增回归。
## 五、定向回归
| 回归 | 实际设备证据 | 结论 |
|---|---|---|
| STEP-099 T4 R-C-R | 动态 GeoJSON 更新 69 次;tick8/130 R0 build 1→1,reuse 193→3868(+3675),invalidation 13→13;crash0 | PASS |
| STEP-101 T1 | request1、destroy enter/return1、nativeReset enter/complete1、新 Renderer ready2、DONE1;crash0 | PASS |
| STEP-101 T2 | request20、destroy enter/return20、nativeReset enter/complete20、Renderer reset enter/complete40、newReady21、DONE1;crash0 | PASS |
| QBIN V4 Golden | clear/color/particle/time=ACCEPTED;T0/T1 均 ACCEPTED_INSERTED,Runtime V4 READY,UI 显示 V4 GOLDEN | PASS(最小烟测) |
| 默认画面恢复 | GLOBAL/ACTIVE/EAST/MIX0%/256,Test App 前台,13.6.1,设备 APK SHA一致,crash0 | PASS |
特别说明:STEP-101 T2 从场景启动前至终态使用 Mac 持续流式 Logcat,避免 Android 环形 Logcat 溢出造成的假性少计数。
## 六、原始证据位置
所有文件保存在 Mac Git 忽略目录:
artifacts/maplibre-particle/step106-t2-fix/
- build.log 与 build-info.txt
- runtime-T1/stream.log、crash.log
- runtime-T2/stream.log、crash.log
- runtime-STEP099-T4/stream.log、crash.log
- runtime-STEP101-T1/stream.log、crash.log
- runtime-STEP101-T2/stream.log、crash.log
- runtime-V4-smoke/load.log、v4.xml
- runtime-restored/window.xml、frame.png、crash.log
未将大型原始 Logcat、截图或 APK 纳入 Git。
## 七、保留边界
本次完成的是升级候选 **Android x86_64/OpenGL Test App** 上的明确阻塞与相关回归。STEP-102 改成 R-C-R-C 的测试布局引入第二 Continuous 区段,不能用它宣称生产环境单 Continuous Particle fast-path 的性能通过。没有修改 Shared Core 的 Renderer/Placement API、NavSea Host 或 iOS。
Android ARM64、RN 11.5.0 接入、iOS Metal、Vulkan、AAR 发行与全链用户验收均仍需独立完成。QB​​IN V4 本轮仅复测 T0/T1 Golden 插入,不声称六个时间控制动作再次全部验证;上轮 STEP-105 的六项回归保持独立历史事实。
本轮没有运行 Jest,没有使用 Codex 模型;编译/安装按用户此轮显式授权由 RDC 在 Mac 执行。
## 八、阶段判定和 Git
**STEP-106 / Test App 修正闭环:CLOSED / PASS。**
代码修正提交 86906c8a6af474a8d064c6f6d7d431e2a7e3efe6,之前根因记录提交 23f7b8a4d7b33d3fb63cd8691fc3a2f070936d03。本轮追加 recoder_step.md 与中文阶段记录,报告提交/远端 Push 以实际 Git 结果为准。正式 particle/main 不修改。

View File

@@ -1,13 +1,13 @@
#include "expression_test_logger.hpp"
#include "expression_test_runner.hpp"
#include <mbgl/util/io.hpp>
#include <mbgl/util/string.hpp>
#include <mln/util/io.hpp>
#include <mln/util/string.hpp>
#include <sstream>
#include <filesystem>
using namespace mbgl;
using namespace mln;
using namespace std::literals;
namespace {

View File

@@ -4,12 +4,12 @@
#undef GetObject
#endif
#include <mbgl/util/io.hpp>
#include <mbgl/util/logging.hpp>
#include <mbgl/util/variant.hpp>
#include <mbgl/style/conversion/function.hpp>
#include <mbgl/style/rapidjson_conversion.hpp>
#include <mbgl/style/expression/parsing_context.hpp>
#include <mln/util/io.hpp>
#include <mln/util/logging.hpp>
#include <mln/util/variant.hpp>
#include <mln/style/conversion/function.hpp>
#include <mln/style/rapidjson_conversion.hpp>
#include <mln/style/expression/parsing_context.hpp>
#include <mapbox/geojson/rapidjson.hpp>
#include <rapidjson/writer.h>
@@ -20,9 +20,9 @@
#include <regex>
using namespace mbgl;
using namespace mbgl::style;
using namespace mbgl::style::conversion;
using namespace mln;
using namespace mln::style;
using namespace mln::style::conversion;
using namespace std::literals;
namespace {
@@ -407,7 +407,7 @@ std::optional<TestData> parseTestData(const std::filesystem::path& path) {
TestData data;
auto maybeJson = readJson(path.string());
if (!maybeJson.is<JSDocument>()) { // NOLINT
mbgl::Log::Error(mbgl::Event::General, "Cannot parse test '" + path.string() + "'.");
mln::Log::Error(mln::Event::General, "Cannot parse test '" + path.string() + "'.");
return std::nullopt;
}

View File

@@ -1,15 +1,15 @@
#pragma once
#include <mbgl/style/expression/expression.hpp>
#include <mbgl/util/feature.hpp>
#include <mbgl/util/rapidjson.hpp>
#include <mln/style/expression/expression.hpp>
#include <mln/util/feature.hpp>
#include <mln/util/rapidjson.hpp>
#include <set>
#include <string>
#include <vector>
#include <filesystem>
using namespace mbgl;
using namespace mln;
struct Input {
Input(std::optional<float> zoom_,

View File

@@ -3,7 +3,7 @@
#include "expression_test_parser.hpp"
#include "test_runner_common.hpp"
#include <mbgl/util/io.hpp>
#include <mln/util/io.hpp>
#include <rapidjson/writer.h>
#include <rapidjson/prettywriter.h>
@@ -105,7 +105,7 @@ TestRunOutput runExpressionTest(TestData& data, const std::string& rootPath, con
std::vector<Value> outputs;
if (!data.inputs.empty()) {
for (const auto& input : data.inputs) {
mbgl::style::expression::EvaluationResult evaluationResult;
mln::style::expression::EvaluationResult evaluationResult;
if (input.canonical) {
evaluationResult = expression->evaluate(
input.zoom, input.feature, input.heatmapDensity, input.availableImages, *input.canonical);

View File

@@ -2,7 +2,7 @@
#include "expression_test_runner.hpp"
#include "expression_test_logger.hpp"
#include <mbgl/util/logging.hpp>
#include <mln/util/logging.hpp>
#include <random>
#include <iostream>

View File

@@ -3,7 +3,7 @@
#include <cmath>
#include <regex>
using namespace mbgl;
using namespace mln;
// Strip precision for numbers, so that we can compare evaluated results with
// fixtures. Copied from JS expression harness.

View File

@@ -1,11 +1,11 @@
#pragma once
#include <mbgl/util/feature.hpp>
#include <mln/util/feature.hpp>
#include <string>
#include <vector>
using namespace mbgl;
using namespace mln;
Value stripPrecision(const Value& value);
std::vector<std::string> tokenize(std::string str);

View File

@@ -1,30 +0,0 @@
#pragma once
#include <mbgl/gfx/renderable.hpp>
#include <mbgl/mtl/mtl_fwd.hpp>
#include <cstdlib>
namespace mbgl {
namespace mtl {
class RendererBackend;
class RenderableResource : public gfx::RenderableResource {
protected:
explicit RenderableResource() = default;
public:
virtual void swap() {
// Renderable resources that require a swap function to be called
// explicitly can override this method.
}
virtual const mbgl::mtl::RendererBackend& getBackend() const = 0;
virtual const mbgl::mtl::MTLCommandBufferPtr& getCommandBuffer() const = 0;
virtual mbgl::mtl::MTLBlitPassDescriptorPtr getUploadPassDescriptor() const = 0;
virtual const mbgl::mtl::MTLRenderPassDescriptorPtr& getRenderPassDescriptor() const = 0;
};
} // namespace mtl
} // namespace mbgl

View File

@@ -1,69 +0,0 @@
#pragma once
#include <mbgl/gfx/renderer_backend.hpp>
#include <mbgl/mtl/mtl_fwd.hpp>
#include <mbgl/util/image.hpp>
#include <mbgl/util/size.hpp>
#include <mbgl/util/util.hpp>
#include <Foundation/NSSharedPtr.hpp>
#include <Metal/MTLDevice.hpp>
#include <Metal/MTLCommandQueue.hpp>
namespace mbgl {
class ProgramParameters;
namespace mtl {
using ProcAddress = void (*)();
using FramebufferID = uint32_t;
class RendererBackend : public gfx::RendererBackend {
public:
RendererBackend(gfx::ContextMode);
~RendererBackend() override;
/// Called prior to rendering to update the internally assumed MetalMetal state.
virtual void updateAssumedState() = 0;
/// One-time shader initialization
void initShaders(gfx::ShaderRegistry&, const ProgramParameters& programParameters) override;
const MTLDevicePtr& getDevice() const { return device; }
const MTLCommandQueuePtr& getCommandQueue() const { return commandQueue; }
bool isBaseVertexInstanceDrawingSupported() const { return baseVertexInstanceDrawingSupported; }
protected:
std::unique_ptr<gfx::Context> createContext() override;
/// Reads the color pixel data from the currently bound framebuffer.
PremultipliedImage readFramebuffer(const Size&);
/// A constant to signal that a framebuffer is bound, but with an unknown ID.
static constexpr const FramebufferID ImplicitFramebufferBinding = std::numeric_limits<FramebufferID>::max();
/// Tells the renderer that the Metal state has already been set by the windowing toolkit.
/// It sets the internal assumed state to the supplied values.
void assumeFramebufferBinding(FramebufferID fbo);
void assumeViewport(int32_t x, int32_t y, const Size&);
void assumeScissorTest(bool);
/// Returns true when assumed framebuffer binding hasn't changed from the implicit binding.
bool implicitFramebufferBound();
public:
/// Triggers a Metal state update if the internal assumed state doesn't
/// match the supplied values.
void setFramebufferBinding(FramebufferID fbo);
void setViewport(int32_t x, int32_t y, const Size&);
void setScissorTest(bool);
protected:
MTLDevicePtr device;
MTLCommandQueuePtr commandQueue;
bool baseVertexInstanceDrawingSupported = false;
};
} // namespace mtl
} // namespace mbgl

View File

@@ -1,43 +0,0 @@
// Generated code, do not modify this file!
#pragma once
#include <mbgl/shaders/shader_source.hpp>
#if MLN_RENDER_BACKEND_OPENGL
#include <mbgl/shaders/gl/prelude.hpp>
#include <mbgl/shaders/gl/clipping_mask.hpp>
#include <mbgl/shaders/gl/background.hpp>
#include <mbgl/shaders/gl/background_pattern.hpp>
#include <mbgl/shaders/gl/circle.hpp>
#include <mbgl/shaders/gl/collision_box.hpp>
#include <mbgl/shaders/gl/collision_circle.hpp>
#include <mbgl/shaders/gl/custom_geometry.hpp>
#include <mbgl/shaders/gl/custom_symbol_icon.hpp>
#include <mbgl/shaders/gl/debug.hpp>
#include <mbgl/shaders/gl/fill.hpp>
#include <mbgl/shaders/gl/fill_outline.hpp>
#include <mbgl/shaders/gl/fill_pattern.hpp>
#include <mbgl/shaders/gl/fill_outline_pattern.hpp>
#include <mbgl/shaders/gl/fill_outline_triangulated.hpp>
#include <mbgl/shaders/gl/fill_extrusion.hpp>
#include <mbgl/shaders/gl/fill_extrusion_instanced.hpp>
#include <mbgl/shaders/gl/fill_extrusion_pattern.hpp>
#include <mbgl/shaders/gl/fill_extrusion_pattern_instanced.hpp>
#include <mbgl/shaders/gl/heatmap.hpp>
#include <mbgl/shaders/gl/heatmap_texture.hpp>
#include <mbgl/shaders/gl/particle_gpu_validation.hpp>
#include <mbgl/shaders/gl/retained_underlay_composite.hpp>
#include <mbgl/shaders/gl/hillshade_prepare.hpp>
#include <mbgl/shaders/gl/color_relief.hpp>
#include <mbgl/shaders/gl/hillshade.hpp>
#include <mbgl/shaders/gl/line.hpp>
#include <mbgl/shaders/gl/line_gradient.hpp>
#include <mbgl/shaders/gl/line_pattern.hpp>
#include <mbgl/shaders/gl/location_indicator.hpp>
#include <mbgl/shaders/gl/location_indicator_textured.hpp>
#include <mbgl/shaders/gl/line_sdf.hpp>
#include <mbgl/shaders/gl/raster.hpp>
#include <mbgl/shaders/gl/symbol_icon.hpp>
#include <mbgl/shaders/gl/symbol_sdf.hpp>
#include <mbgl/shaders/gl/symbol_text_and_icon.hpp>
#include <mbgl/shaders/gl/wide_vector.hpp>
#endif

View File

@@ -1,30 +0,0 @@
#pragma once
#include <mbgl/style/layers/custom_layer_render_parameters.hpp>
#include <mbgl/mtl/mtl_fwd.hpp>
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <memory>
namespace mbgl {
class PaintParameters;
namespace style {
namespace mtl {
/**
* Metal subclass of CustomLayerRenderParameters
*/
struct CustomLayerRenderParameters : mbgl::style::CustomLayerRenderParameters {
mbgl::mtl::MTLRenderCommandEncoderPtr encoder;
CustomLayerRenderParameters(const PaintParameters&);
};
} // namespace mtl
} // namespace style
} // namespace mbgl

View File

@@ -1,18 +1,18 @@
#pragma once
#include <mbgl/actor/aspiring_actor.hpp>
#include <mbgl/actor/established_actor.hpp>
#include <mbgl/actor/mailbox.hpp>
#include <mbgl/actor/message.hpp>
#include <mbgl/actor/actor_ref.hpp>
#include <mbgl/util/noncopyable.hpp>
#include <mln/actor/aspiring_actor.hpp>
#include <mln/actor/established_actor.hpp>
#include <mln/actor/mailbox.hpp>
#include <mln/actor/message.hpp>
#include <mln/actor/actor_ref.hpp>
#include <mln/util/noncopyable.hpp>
#include <memory>
#include <future>
#include <type_traits>
#include <cassert>
namespace mbgl {
namespace mln {
class TaggedScheduler;
@@ -83,4 +83,4 @@ private:
EstablishedActor<Object> target;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,11 +1,11 @@
#pragma once
#include <mbgl/actor/mailbox.hpp>
#include <mbgl/actor/message.hpp>
#include <mln/actor/mailbox.hpp>
#include <mln/actor/message.hpp>
#include <memory>
namespace mbgl {
namespace mln {
/**
An `ActorRef<O>` is a *non*-owning, weak reference to an actor of type `O`.
@@ -57,4 +57,4 @@ private:
std::weak_ptr<Mailbox> weakMailbox;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,15 +1,15 @@
#pragma once
#include <mbgl/actor/mailbox.hpp>
#include <mbgl/actor/message.hpp>
#include <mbgl/actor/actor_ref.hpp>
#include <mln/actor/mailbox.hpp>
#include <mln/actor/message.hpp>
#include <mln/actor/actor_ref.hpp>
#include <memory>
#include <future>
#include <type_traits>
#include <cassert>
namespace mbgl {
namespace mln {
template <class Object>
class EstablishedActor;
@@ -56,4 +56,4 @@ private:
friend class Actor<Object>;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,17 +1,17 @@
#pragma once
#include <mbgl/actor/aspiring_actor.hpp>
#include <mbgl/actor/mailbox.hpp>
#include <mbgl/actor/message.hpp>
#include <mbgl/actor/actor_ref.hpp>
#include <mbgl/actor/optional_actor_ref.hpp>
#include <mln/actor/aspiring_actor.hpp>
#include <mln/actor/mailbox.hpp>
#include <mln/actor/message.hpp>
#include <mln/actor/actor_ref.hpp>
#include <mln/actor/optional_actor_ref.hpp>
#include <memory>
#include <future>
#include <type_traits>
#include <cassert>
namespace mbgl {
namespace mln {
/**
An `EstablishedActor<O>` is one half of the pair of types that comprise an
@@ -107,4 +107,4 @@ private:
AspiringActor<Object>& parent;
};
} // namespace mbgl
} // namespace mln

View File

@@ -7,9 +7,9 @@
#include <queue>
#include <mapbox/std/weak.hpp>
#include <mbgl/actor/scheduler.hpp>
#include <mln/actor/scheduler.hpp>
namespace mbgl {
namespace mln {
class Scheduler;
class Message;
@@ -61,4 +61,4 @@ private:
std::queue<std::unique_ptr<Message>> queue;
};
} // namespace mbgl
} // namespace mln

View File

@@ -3,7 +3,7 @@
#include <future>
#include <utility>
namespace mbgl {
namespace mln {
// A movable type-erasing function wrapper. This allows to store arbitrary
// invocable things (like std::function<>, or the result of a movable-only
@@ -100,4 +100,4 @@ std::unique_ptr<Message> makeMessage(std::promise<ResultType>&& promise,
}
} // namespace actor
} // namespace mbgl
} // namespace mln

View File

@@ -1,9 +1,9 @@
#pragma once
#include <mbgl/actor/actor.hpp>
#include <mbgl/actor/optional_actor_ref.hpp>
#include <mln/actor/actor.hpp>
#include <mln/actor/optional_actor_ref.hpp>
namespace mbgl {
namespace mln {
class TaggedScheduler;
@@ -79,4 +79,4 @@ private:
OptionalActorRef<Object> selfRef;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,8 +1,8 @@
#pragma once
#include <mbgl/actor/actor_ref.hpp>
#include <mln/actor/actor_ref.hpp>
namespace mbgl {
namespace mln {
class TaggedScheduler;
@@ -37,4 +37,4 @@ private:
std::optional<ActorRef<Object>> actorRef;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,6 +1,6 @@
#pragma once
#include <mbgl/util/identity.hpp>
#include <mln/util/identity.hpp>
#include <mapbox/std/weak.hpp>
@@ -8,7 +8,7 @@
#include <memory>
#include <type_traits>
namespace mbgl {
namespace mln {
class Mailbox;
@@ -147,10 +147,10 @@ public:
scheduler->scheduleAndReplyValue(tag, task, reply);
}
const mbgl::util::SimpleIdentity tag;
const mln::util::SimpleIdentity tag;
private:
std::shared_ptr<Scheduler> scheduler;
};
} // namespace mbgl
} // namespace mln

View File

@@ -1,15 +1,15 @@
#pragma once
#include <mbgl/util/geometry.hpp>
#include <mbgl/util/variant.hpp>
#include <mbgl/util/color.hpp>
#include <mbgl/style/property_value.hpp>
#include <mln/util/geometry.hpp>
#include <mln/util/variant.hpp>
#include <mln/util/color.hpp>
#include <mln/style/property_value.hpp>
#include <cstdint>
#include <vector>
#include <string>
namespace mbgl {
namespace mln {
using AnnotationID = uint64_t;
using AnnotationIDs = std::vector<AnnotationID>;
@@ -63,4 +63,4 @@ public:
using Annotation = variant<SymbolAnnotation, LineAnnotation, FillAnnotation>;
} // namespace mbgl
} // namespace mln

View File

@@ -4,7 +4,7 @@
#include <cstdlib>
#include <memory>
namespace mbgl {
namespace mln {
namespace gfx {
class Backend {
@@ -66,4 +66,4 @@ private:
};
} // namespace gfx
} // namespace mbgl
} // namespace mln

View File

@@ -1,6 +1,6 @@
#pragma once
namespace mbgl {
namespace mln {
namespace gfx {
class RendererBackend;
@@ -35,4 +35,4 @@ private:
};
} // namespace gfx
} // namespace mbgl
} // namespace mln

View File

@@ -1,11 +1,11 @@
#pragma once
#include <mbgl/gfx/types.hpp>
#include <mbgl/util/variant.hpp>
#include <mbgl/util/color.hpp>
#include <mbgl/util/hash.hpp>
#include <mln/gfx/types.hpp>
#include <mln/util/variant.hpp>
#include <mln/util/color.hpp>
#include <mln/util/hash.hpp>
namespace mbgl {
namespace mln {
namespace gfx {
class ColorMode {
@@ -69,15 +69,15 @@ public:
}
std::size_t hash() const {
return mbgl::util::hash(blendFunction.which(),
blendColor.r,
blendColor.g,
blendColor.b,
blendColor.a,
mask.r,
mask.g,
mask.b,
mask.a);
return mln::util::hash(blendFunction.which(),
blendColor.r,
blendColor.g,
blendColor.b,
blendColor.a,
mask.r,
mask.g,
mask.b,
mask.a);
}
};
@@ -86,4 +86,4 @@ constexpr bool operator!=(const ColorMode::Mask& a, const ColorMode::Mask& b) {
}
} // namespace gfx
} // namespace mbgl
} // namespace mln

View File

@@ -1,11 +1,11 @@
#pragma once
#include <mbgl/gfx/debug_group.hpp>
#include <mln/gfx/debug_group.hpp>
#include <memory>
#include <string_view>
namespace mbgl {
namespace mln {
namespace gfx {
class RenderPassDescriptor;
@@ -36,4 +36,4 @@ public:
};
} // namespace gfx
} // namespace mbgl
} // namespace mln

Some files were not shown because too many files have changed in this diff Show More