From 57d829b1d36528547502442533b644aa54e0c0e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:02:15 +0000 Subject: [PATCH 1/5] Bump devtools-protocol from 0.0.1317765 to 0.0.1319565 (#4327) Bumps [devtools-protocol](https://github.com/ChromeDevTools/devtools-protocol) from 0.0.1317765 to 0.0.1319565. - [Changelog](https://github.com/ChromeDevTools/devtools-protocol/blob/master/changelog.md) - [Commits](https://github.com/ChromeDevTools/devtools-protocol/compare/v0.0.1317765...v0.0.1319565) --- updated-dependencies: - dependency-name: devtools-protocol dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffc95c0ebc..284f8cfb48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -78,7 +78,7 @@ "cssnano": "^7.0.3", "d3": "^7.9.0", "d3-queue": "^3.0.7", - "devtools-protocol": "^0.0.1317765", + "devtools-protocol": "^0.0.1319565", "diff": "^5.2.0", "dts-bundle-generator": "^9.5.1", "eslint": "^8.57.0", @@ -5157,9 +5157,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1317765", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1317765.tgz", - "integrity": "sha512-QaBEmuZ6j9HkVJdliOG0y3Cw06LxNzjEVwig1D0DiGlGX0D3TaEO4yk+YkpCyBWlxRMoNNSjRZl+JKsSq3Pnbg==", + "version": "0.0.1319565", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1319565.tgz", + "integrity": "sha512-Xc1Xrng6tSt5t0IIFCMeYUIqKEbvJVnKakfUCCq9WIk5m+9SbrPIXFtGcwwos8DucDyViEzwjy6PgIZWGUldyQ==", "dev": true }, "node_modules/diff": { diff --git a/package.json b/package.json index 6b7e822ac9..325642da37 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "cssnano": "^7.0.3", "d3": "^7.9.0", "d3-queue": "^3.0.7", - "devtools-protocol": "^0.0.1317765", + "devtools-protocol": "^0.0.1319565", "diff": "^5.2.0", "dts-bundle-generator": "^9.5.1", "eslint": "^8.57.0", From f1b60790e37d11a0ad96a3a7ce92aba5eb7a2145 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:41:40 +0000 Subject: [PATCH 2/5] Bump typedoc and typedoc-plugin-markdown (#4319) * Bump typedoc and typedoc-plugin-markdown Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) and [typedoc-plugin-markdown](https://github.com/typedoc2md/typedoc-plugin-markdown/tree/HEAD/packages/typedoc-plugin-markdown). These dependencies needed to be updated together. Updates `typedoc` from 0.25.13 to 0.26.2 - [Release notes](https://github.com/TypeStrong/TypeDoc/releases) - [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md) - [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.25.13...v0.26.2) Updates `typedoc-plugin-markdown` from 4.0.3 to 4.1.0 - [Release notes](https://github.com/typedoc2md/typedoc-plugin-markdown/releases) - [Changelog](https://github.com/typedoc2md/typedoc-plugin-markdown/blob/main/packages/typedoc-plugin-markdown/CHANGELOG.md) - [Commits](https://github.com/typedoc2md/typedoc-plugin-markdown/commits/typedoc-plugin-markdown@4.1.0/packages/typedoc-plugin-markdown) --- updated-dependencies: - dependency-name: typedoc dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: typedoc-plugin-markdown dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update typedoc-plugin-missing-exports as well * Fix docs generation --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harel M --- build/generate-struct-arrays.ts | 2 +- package-lock.json | 155 +++++++++++++++++++------------- package.json | 6 +- src/source/source.ts | 2 +- src/style/style.ts | 4 +- 5 files changed, 98 insertions(+), 71 deletions(-) diff --git a/build/generate-struct-arrays.ts b/build/generate-struct-arrays.ts index ab2dc0effb..257e06bdeb 100644 --- a/build/generate-struct-arrays.ts +++ b/build/generate-struct-arrays.ts @@ -233,7 +233,7 @@ function emitStructArrayLayout(locals) { for (const member of members) { output.push( - ` * [${member.offset}]: ${member.type}[${member.components}]`); + ` * [${member.offset}] - ${member.type}[${member.components}]`); } output.push( diff --git a/package-lock.json b/package-lock.json index 284f8cfb48..f7edb46f98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,9 +126,9 @@ "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "tslib": "^2.6.3", - "typedoc": "^0.25.13", - "typedoc-plugin-markdown": "^4.0.3", - "typedoc-plugin-missing-exports": "^2.3.0", + "typedoc": "^0.26.2", + "typedoc-plugin-markdown": "^4.1.0", + "typedoc-plugin-missing-exports": "^3.0.0", "typescript": "^5.4.5" }, "engines": { @@ -2163,6 +2163,12 @@ "win32" ] }, + "node_modules/@shikijs/core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.9.0.tgz", + "integrity": "sha512-cbSoY8P/jgGByG8UOl3jnP/CWg/Qk+1q+eAKWtcrU3pNoILF8wTsLB0jT44qUBV8Ce1SvA9uqcM9Xf+u3fJFBw==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3163,12 +3169,6 @@ "node": ">=4" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "node_modules/ansi-styles": { "version": "3.2.1", "dev": true, @@ -8948,12 +8948,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, "node_modules/jsonfile": { "version": "6.1.0", "dev": true, @@ -9081,6 +9075,15 @@ "dev": true, "license": "MIT" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/load-json-file": { "version": "4.0.0", "dev": true, @@ -9331,18 +9334,29 @@ "kdbush": "^3.0.0" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, - "engines": { - "node": ">= 12" + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -9359,6 +9373,12 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, "node_modules/memorystream": { "version": "0.3.1", "dev": true, @@ -11278,6 +11298,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/puppeteer": { "version": "22.12.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.0.tgz", @@ -11962,15 +11991,12 @@ "license": "MIT" }, "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.9.0.tgz", + "integrity": "sha512-i6//Lqgn7+7nZA0qVjoYH0085YdNk4MC+tJV4bo+HgjgRMJ0JmkLZzFAuvVioJqLkcGDK5GAMpghZEZkCnwxpQ==", "dev": true, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "@shikijs/core": "1.9.0" } }, "node_modules/shuffle-seed": { @@ -13581,42 +13607,46 @@ } }, "node_modules/typedoc": { - "version": "0.25.13", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", - "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.2.tgz", + "integrity": "sha512-q/t+M+PZqhN9gPWLBZ3CCvP+KT8O1tyYkSzEYbcQ6mo89avdIrMlBEl3vfo5BgSzwC6Lbmq0W64E8RkY+eVsLA==", "dev": true, "dependencies": { "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" + "markdown-it": "^14.1.0", + "minimatch": "^9.0.4", + "shiki": "^1.9.0", + "yaml": "^2.4.5" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 16" + "node": ">= 18" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x" } }, "node_modules/typedoc-plugin-markdown": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.0.3.tgz", - "integrity": "sha512-0tZbeVGGCd4+lpoIX+yHWgUfyaLZCQCgJOpuVdTtOtD3+jKaedJ4sl/tkNaYBPeWVKiyDkSHfGuHkq53jlzIFg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.1.0.tgz", + "integrity": "sha512-sUiEJVaa6+MOFShRy14j1OP/VXC5OLyHNecJ2nKeGuBy2M3YiMatSLoIiddFAqVptSuILJTZiJzCBIY6yzAVyg==", "dev": true, + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "typedoc": "0.25.x" + "typedoc": "0.26.x" } }, "node_modules/typedoc-plugin-missing-exports": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.3.0.tgz", - "integrity": "sha512-iI9ITNNLlbsLCBBeYDyu0Qqp3GN/9AGyWNKg8bctRXuZEPT7G1L+0+MNWG9MsHcf/BFmNbXL0nQ8mC/tXRicog==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.0.0.tgz", + "integrity": "sha512-R7D8fYrK34mBFZSlF1EqJxfqiUSlQSmyrCiQgTQD52nNm6+kUtqwiaqaNkuJ2rA2wBgWFecUA8JzHT7x2r7ePg==", "dev": true, "peerDependencies": { - "typedoc": "0.24.x || 0.25.x" + "typedoc": "0.26.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -13629,9 +13659,9 @@ } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -13669,6 +13699,12 @@ "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "dev": true, @@ -13834,18 +13870,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "node_modules/vt-pbf": { "version": "3.1.3", "license": "MIT", @@ -14239,10 +14263,13 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index 325642da37..6e09a4cc26 100644 --- a/package.json +++ b/package.json @@ -134,9 +134,9 @@ "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "tslib": "^2.6.3", - "typedoc": "^0.25.13", - "typedoc-plugin-markdown": "^4.0.3", - "typedoc-plugin-missing-exports": "^2.3.0", + "typedoc": "^0.26.2", + "typedoc-plugin-markdown": "^4.1.0", + "typedoc-plugin-missing-exports": "^3.0.0", "typescript": "^5.4.5" }, "overrides": { diff --git a/src/source/source.ts b/src/source/source.ts index 6dfffe1bdb..f2a410702a 100644 --- a/src/source/source.ts +++ b/src/source/source.ts @@ -175,7 +175,7 @@ const setSourceType = (name: string, type: SourceClass) => { /** * Adds a custom source type, making it available for use with {@link Map#addSource}. * @param name - The name of the source type; source definition objects use this name in the `{type: ...}` field. - * @param sourceType - A {@link SourceClass} - which is a constructor for the `Source` interface. + * @param SourceType - A {@link SourceClass} - which is a constructor for the `Source` interface. * @returns a promise that is resolved when the source type is ready or rejected with an error. */ export const addSourceType = async (name: string, SourceType: SourceClass): Promise => { diff --git a/src/style/style.ts b/src/style/style.ts index 2fe3aaf36c..1b6d55c2ae 100644 --- a/src/style/style.ts +++ b/src/style/style.ts @@ -114,8 +114,8 @@ export type StyleSetterOptions = { * when a desired style is a certain combination of previous and incoming style * when an incoming style requires modification based on external state * - * @param previousStyle - The current style. - * @param nextStyle - The next style. + * @param previous - The current style. + * @param next - The next style. * @returns resulting style that will to be applied to the map * * @example From 5e205b251541d3c908739d3f43beeea72306ad4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:53:35 +0000 Subject: [PATCH 3/5] Bump typescript from 5.4.5 to 5.5.2 (#4308) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.4.5 to 5.5.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.4.5...v5.5.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7edb46f98..f0214bc998 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,7 +129,7 @@ "typedoc": "^0.26.2", "typedoc-plugin-markdown": "^4.1.0", "typedoc-plugin-missing-exports": "^3.0.0", - "typescript": "^5.4.5" + "typescript": "^5.5.2" }, "engines": { "node": ">=16.14.0", @@ -13674,9 +13674,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index 6e09a4cc26..9efdbfb310 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "typedoc": "^0.26.2", "typedoc-plugin-markdown": "^4.1.0", "typedoc-plugin-missing-exports": "^3.0.0", - "typescript": "^5.4.5" + "typescript": "^5.5.2" }, "overrides": { "postcss-inline-svg": { From 8fe33a63a683e7ace9238ef8e79a8089d034bee7 Mon Sep 17 00:00:00 2001 From: Geordan Neukum Date: Wed, 26 Jun 2024 16:03:32 -0400 Subject: [PATCH 4/5] examples: disable kbd rotation (#4330) (#4331) The `disable-rotation` example currently disables camera rotation via right click + drag and touch gestures. However, keyboard-based rotation remains enabled. Let's ensure that rotation via keyboard input is also disabled such that we provide a comprehensive example of how to fully disable map rotation. Signed-off-by: Geordan Neukum --- test/examples/disable-rotation.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/examples/disable-rotation.html b/test/examples/disable-rotation.html index 1cadbbcb15..beb95e4443 100644 --- a/test/examples/disable-rotation.html +++ b/test/examples/disable-rotation.html @@ -26,6 +26,9 @@ // disable map rotation using right click + drag map.dragRotate.disable(); + // disable map rotation using keyboard + map.keyboard.disable(); + // disable map rotation using touch rotation gesture map.touchZoomRotate.disableRotation(); From 6612f1b520be2d2d8c6cb8b3b70aee7ed9f7d1cf Mon Sep 17 00:00:00 2001 From: Max Demmelbauer Date: Thu, 27 Jun 2024 09:14:57 +0200 Subject: [PATCH 5/5] Sky Implementation according to spec (#3645) * copy code from old sky branch, but this branch is not ready yet * add missing _fogMatrixCache clearance * change long comment from // to /** */ syntax * serialize sky in map.getStyle() * add sky/fog expect tests (#3649) * fix sky2 calculateFogMatrix error and build error (#3651) * try to fix calculateFogMatrix error * Raise expectedBytes for maplibre-gl.js size * Update test/build/min.test.ts * Update diff function to take into consideration sky, updated tests * Move gl logic to draw_sky file, added tests to cover serialization. * Update docs comment * Add missing tests to map.test.ts * Remove unneeded member variable * Fix build * Add cache to draw sky mesh buffer * Use globe's mesh idea, store mesh in sky object, similar to how it is done with buckets. * Fix tests * Fix names according to new spec * Fix render and build tests * Changed name to sky-horizon-blend * Fix lint * Add support for blend in fog and horizon * Terrain fog blending improvements (#4314) * Incorporate my own feedback * Fix shader * Make terrain fog shader blending gamma-correct, update render test * Move surface_color_linear into the branch * Added a debug page, fixed a bug * Update the example to show the values in the spec. * Added test to reproduce the issue * Move sky test to a different folder * Fix lint * Remove unneeded reference from example * Always initialize sky, remove ifs, fix tests * Update CHANGELOG.md * Expect build to fail due to missing image in examples * Fix docs build * Fix docs build * Compress image * Update readme --------- Co-authored-by: Max Demmelbauer Co-authored-by: Andrew Calcutt Co-authored-by: Harel M Co-authored-by: Jakub Pelc <57600346+kubapelc@users.noreply.github.com> --- .github/workflows/test-all.yml | 6 +- .gitignore | 1 + CHANGELOG.md | 1 + build/generate-doc-images.ts | 21 ++- docs/README.md | 2 +- .../examples/sky-with-fog-and-terrain.png | Bin 0 -> 124053 bytes docs/guides/large-data.md | 2 +- mkdocs.yml | 5 + src/geo/transform.ts | 56 +++++++- src/render/draw_sky.ts | 44 +++++++ src/render/draw_terrain.ts | 4 +- src/render/mesh.ts | 25 ++++ src/render/painter.ts | 6 +- src/render/program/program_uniforms.ts | 4 +- src/render/program/sky_program.ts | 28 ++++ src/render/program/terrain_program.ts | 33 ++++- src/render/render_to_texture.test.ts | 2 +- src/render/terrain.ts | 27 ++-- src/shaders/shaders.ts | 10 +- src/shaders/sky.fragment.glsl | 17 +++ src/shaders/sky.vertex.glsl | 5 + src/shaders/terrain.fragment.glsl | 27 +++- src/shaders/terrain.vertex.glsl | 14 +- src/shaders/terrain_coords.vertex.glsl | 13 ++ src/shaders/terrain_depth.vertex.glsl | 13 ++ src/style/light.ts | 16 +-- src/style/sky.ts | 116 +++++++++++++++++ src/style/style.test.ts | 79 +++++++++++- src/style/style.ts | 51 +++++++- src/style/validate_style.ts | 2 + src/ui/map.ts | 28 +++- src/ui/map_tests/map_style.test.ts | 40 ++++++ test/build/min.test.ts | 2 +- test/examples/3d-terrain.html | 5 +- test/examples/sky-with-fog-and-terrain.html | 122 ++++++++++++++++++ .../tiles/zero-elevation-terrain-tile.png | Bin 0 -> 759 bytes .../render/tests/sky/basic/expected.png | Bin 0 -> 2078 bytes .../render/tests/sky/basic/style.json | 38 ++++++ .../tests/terrain/fog-sky-blend/expected.png | Bin 0 -> 2066 bytes .../tests/terrain/fog-sky-blend/style.json | 62 +++++++++ .../render/tests/terrain/fog/expected.png | Bin 0 -> 86698 bytes .../render/tests/terrain/fog/style.json | 91 +++++++++++++ 42 files changed, 949 insertions(+), 69 deletions(-) create mode 100644 docs/assets/examples/sky-with-fog-and-terrain.png create mode 100644 src/render/draw_sky.ts create mode 100644 src/render/mesh.ts create mode 100644 src/render/program/sky_program.ts create mode 100644 src/shaders/sky.fragment.glsl create mode 100644 src/shaders/sky.vertex.glsl create mode 100644 src/shaders/terrain_coords.vertex.glsl create mode 100644 src/shaders/terrain_depth.vertex.glsl create mode 100644 src/style/sky.ts create mode 100644 test/examples/sky-with-fog-and-terrain.html create mode 100644 test/integration/assets/tiles/zero-elevation-terrain-tile.png create mode 100644 test/integration/render/tests/sky/basic/expected.png create mode 100644 test/integration/render/tests/sky/basic/style.json create mode 100644 test/integration/render/tests/terrain/fog-sky-blend/expected.png create mode 100644 test/integration/render/tests/terrain/fog-sky-blend/style.json create mode 100644 test/integration/render/tests/terrain/fog/expected.png create mode 100644 test/integration/render/tests/terrain/fog/style.json diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index e8212778fa..26f91556d6 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -30,7 +30,11 @@ jobs: - run: npm run typecheck if: '!cancelled()' - run: npm run generate-docs - - run: docker run --rm -v ${PWD}:/docs squidfunk/mkdocs-material build + - name: Build docs using docker and mkdocs-material + run: | + rm docs/README.md + docker run --rm -v ${PWD}:/docs squidfunk/mkdocs-material build --strict + unit-tests: name: Unit tests and Coverage diff --git a/.gitignore b/.gitignore index fd779aaba2..bb99e96551 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ /docs/API /docs/examples /docs/example +/site/ .cache/ *.es.js *.js.map diff --git a/CHANGELOG.md b/CHANGELOG.md index 754af36e40..de839bc836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## main ### ✨ Features and improvements +- Add sky implementation according to spec ([#3645](https://github.com/maplibre/maplibre-gl-js/pull/3645)) - _...Add new stuff here..._ ### 🐞 Bug fixes diff --git a/build/generate-doc-images.ts b/build/generate-doc-images.ts index 88b1b747c7..abf849f709 100644 --- a/build/generate-doc-images.ts +++ b/build/generate-doc-images.ts @@ -4,9 +4,10 @@ import puppeteer from 'puppeteer'; import packageJson from '../package.json' with { type: 'json' }; const exampleName = process.argv[2]; +const useLocalhost = (process.argv.length > 3) && (process.argv[3] === 'serve'); const examplePath = path.resolve('test', 'examples'); -const browser = await puppeteer.launch({headless: exampleName === 'all'}); +const browser = await puppeteer.launch({headless: true}); const page = await browser.newPage(); // set viewport and double deviceScaleFactor to get a closer shot of the map @@ -18,9 +19,13 @@ await page.setViewport({ async function createImage(exampleName) { // get the example contents - const html = fs.readFileSync(path.resolve(examplePath, `${exampleName}.html`), 'utf-8'); - - await page.setContent(html.replaceAll('../../dist', `https://unpkg.com/maplibre-gl@${packageJson.version}/dist`)); + if (useLocalhost) { + console.log('Using localhost to serve examples.'); + await page.goto(`http://localhost:9966/test/examples/${exampleName}.html`); + } else { + const html = fs.readFileSync(path.resolve(examplePath, `${exampleName}.html`), 'utf-8'); + await page.setContent(html.replaceAll('../../dist', `https://unpkg.com/maplibre-gl@${packageJson.version}/dist`)); + } // Wait for map to load, then wait two more seconds for images, etc. to load. try { @@ -61,8 +66,12 @@ if (exampleName === 'all') { } else if (exampleName) { await createImage(exampleName); } else { - throw new Error( - '\n Usage: npm run generate-images \nExample: npm run generate-images 3d-buildings' + throw new Error(` + Usage: npm run generate-images [serve] + file-name: the name of the example file in test/examples without the .html extension. + all: generate images for all examples. + serve: use localhost to serve examples - use 'npm run start' with this option, otherwise it will use the latest published version in npm. + Example: npm run generate-images 3d-buildings serve` ); } diff --git a/docs/README.md b/docs/README.md index 3f15e5f5f7..1fe4616a10 100644 --- a/docs/README.md +++ b/docs/README.md @@ -59,7 +59,7 @@ Examples are written as regular html files in `test/examples`. Each example shou When you create a new example, you **must** make an accompanying image. 1. Run `npm run generate-images `. The script will take a screenshot of the map in the example and save it to `docs/assets/examples/`. -2. Optimize the image with [Squoosh](https://squoosh.app/) to reduce the file size. (Optional) +2. Optimize the image with [compresspng](https://compresspng.com/) to reduce the file size. (Optional) 3. Commit the image. For some examples, `npm run generate-images` does not generate an ideal image. In these cases, you can interact with the map after running the command before the screenshot is taken, or take a screenshot yourself by running the site locally with `npm start`, take a screenshot and save it in the `docs/assets/examples/` folder. diff --git a/docs/assets/examples/sky-with-fog-and-terrain.png b/docs/assets/examples/sky-with-fog-and-terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..6a74b36451fad7c7bd2b2ca84b98030f83ddc4f2 GIT binary patch literal 124053 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 literal 0 HcmV?d00001 diff --git a/docs/guides/large-data.md b/docs/guides/large-data.md index 71a621ddfc..8815a32a97 100644 --- a/docs/guides/large-data.md +++ b/docs/guides/large-data.md @@ -63,7 +63,7 @@ Once the data is loaded, to ensure a smooth user experience, it's essential to o One simple approach is to visualise fewer points. If we are using a GeoJSON source (i.e. not vector tiles), we can use 'clustering' to group nearby points together. This approach reduces the number of features displayed on the map, improving rendering performance and maintaining map readability. -To do this, when we add the data, we can adjust the [cluster options](/maplibre-gl-js/docs/API/type-aliases/SetClusterOptions/). For example: +To do this, when we add the data, we can adjust the [cluster options](../API/type-aliases/SetClusterOptions.md). For example: ```javascript map.addSource('earthquakes', { diff --git a/mkdocs.yml b/mkdocs.yml index 68af756a4d..8193ad7994 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -67,3 +67,8 @@ plugins: - social: cards_layout_options: background_color: '#295DAA' +validation: + omitted_files: warn + absolute_links: warn + unrecognized_links: warn + anchors: warn diff --git a/src/geo/transform.ts b/src/geo/transform.ts index 388a0189d7..39eb5f5eb7 100644 --- a/src/geo/transform.ts +++ b/src/geo/transform.ts @@ -36,6 +36,7 @@ export class Transform { modelViewProjectionMatrix: mat4; invModelViewProjectionMatrix: mat4; alignedModelViewProjectionMatrix: mat4; + fogMatrix: mat4; pixelMatrix: mat4; pixelMatrix3D: mat4; pixelMatrixInverse: mat4; @@ -58,6 +59,7 @@ export class Transform { _constraining: boolean; _posMatrixCache: {[_: string]: mat4}; _alignedPosMatrixCache: {[_: string]: mat4}; + _fogMatrixCache: {[_: string]: mat4}; constructor(minZoom?: number, maxZoom?: number, minPitch?: number, maxPitch?: number, renderWorldCopies?: boolean) { this.tileSize = 512; // constant @@ -83,6 +85,7 @@ export class Transform { this._edgeInsets = new EdgeInsets(); this._posMatrixCache = {}; this._alignedPosMatrixCache = {}; + this._fogMatrixCache = {}; this.minElevationForCurrentTile = 0; } @@ -690,6 +693,17 @@ export class Transform { } } + calculateTileMatrix(unwrappedTileID: UnwrappedTileID): mat4 { + const canonical = unwrappedTileID.canonical; + const scale = this.worldSize / this.zoomScale(canonical.z); + const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; + + const worldMatrix = mat4.identity(new Float64Array(16) as any); + mat4.translate(worldMatrix, worldMatrix, [unwrappedX * scale, canonical.y * scale, 0]); + mat4.scale(worldMatrix, worldMatrix, [scale / EXTENT, scale / EXTENT, 1]); + return worldMatrix; + } + /** * Calculate the posMatrix that, given a tile coordinate, would be used to display the tile on a map. * @param unwrappedTileID - the tile ID @@ -701,19 +715,32 @@ export class Transform { return cache[posMatrixKey]; } - const canonical = unwrappedTileID.canonical; - const scale = this.worldSize / this.zoomScale(canonical.z); - const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; - - const posMatrix = mat4.identity(new Float64Array(16) as any); - mat4.translate(posMatrix, posMatrix, [unwrappedX * scale, canonical.y * scale, 0]); - mat4.scale(posMatrix, posMatrix, [scale / EXTENT, scale / EXTENT, 1]); + const posMatrix = this.calculateTileMatrix(unwrappedTileID); mat4.multiply(posMatrix, aligned ? this.alignedModelViewProjectionMatrix : this.modelViewProjectionMatrix, posMatrix); cache[posMatrixKey] = new Float32Array(posMatrix); return cache[posMatrixKey]; } + /** + * Calculate the fogMatrix that, given a tile coordinate, would be used to calculate fog on the map. + * @param unwrappedTileID - the tile ID + * @private + */ + calculateFogMatrix(unwrappedTileID: UnwrappedTileID): mat4 { + const posMatrixKey = unwrappedTileID.key; + const cache = this._fogMatrixCache; + if (cache[posMatrixKey]) { + return cache[posMatrixKey]; + } + + const fogMatrix = this.calculateTileMatrix(unwrappedTileID); + mat4.multiply(fogMatrix, this.fogMatrix, fogMatrix); + + cache[posMatrixKey] = new Float32Array(fogMatrix); + return cache[posMatrixKey]; + } + customLayerMatrix(): mat4 { return this.mercatorMatrix.slice() as any; } @@ -910,6 +937,20 @@ export class Transform { this.modelViewProjectionMatrix = m; this.invModelViewProjectionMatrix = mat4.invert([] as any, m); + // create a fog matrix, same es proj-matrix but with near clipping-plane in mapcenter + // needed to calculate a correct z-value for fog calculation, because projMatrix z value is not + this.fogMatrix = new Float64Array(16) as any; + mat4.perspective(this.fogMatrix, this._fov, this.width / this.height, cameraToSeaLevelDistance, farZ); + this.fogMatrix[8] = -offset.x * 2 / this.width; + this.fogMatrix[9] = offset.y * 2 / this.height; + mat4.scale(this.fogMatrix, this.fogMatrix, [1, -1, 1]); + mat4.translate(this.fogMatrix, this.fogMatrix, [0, 0, -this.cameraToCenterDistance]); + mat4.rotateX(this.fogMatrix, this.fogMatrix, this._pitch); + mat4.rotateZ(this.fogMatrix, this.fogMatrix, this.angle); + mat4.translate(this.fogMatrix, this.fogMatrix, [-x, -y, 0]); + mat4.scale(this.fogMatrix, this.fogMatrix, [1, 1, this._pixelPerMeter]); + mat4.translate(this.fogMatrix, this.fogMatrix, [0, 0, -this.elevation]); // elevate camera over terrain + // matrix for conversion from world space to screen coordinates in 3D this.pixelMatrix3D = mat4.multiply(new Float64Array(16) as any, this.labelPlaneMatrix, m); @@ -934,6 +975,7 @@ export class Transform { this._posMatrixCache = {}; this._alignedPosMatrixCache = {}; + this._fogMatrixCache = {}; } maxPitchScaleFactor() { diff --git a/src/render/draw_sky.ts b/src/render/draw_sky.ts new file mode 100644 index 0000000000..0ccfa8fbd9 --- /dev/null +++ b/src/render/draw_sky.ts @@ -0,0 +1,44 @@ +import {StencilMode} from '../gl/stencil_mode'; +import {DepthMode} from '../gl/depth_mode'; +import {CullFaceMode} from '../gl/cull_face_mode'; +import {PosArray, TriangleIndexArray} from '../data/array_types.g'; +import posAttributes from '../data/pos_attributes'; +import {SegmentVector} from '../data/segment'; +import {skyUniformValues} from './program/sky_program'; +import {Sky} from '../style/sky'; +import {Mesh} from './mesh'; +import type {Painter} from './painter'; + +export function drawSky(painter: Painter, sky: Sky) { + const context = painter.context; + const gl = context.gl; + + const skyUniforms = skyUniformValues(sky, painter.style.map.transform, painter.pixelRatio); + + const depthMode = new DepthMode(gl.LEQUAL, DepthMode.ReadWrite, [0, 1]); + const stencilMode = StencilMode.disabled; + const colorMode = painter.colorModeForRenderPass(); + const program = painter.useProgram('sky'); + + if (!sky.mesh) { + const vertexArray = new PosArray(); + vertexArray.emplaceBack(-1, -1); + vertexArray.emplaceBack(1, -1); + vertexArray.emplaceBack(1, 1); + vertexArray.emplaceBack(-1, 1); + + const indexArray = new TriangleIndexArray(); + indexArray.emplaceBack(0, 1, 2); + indexArray.emplaceBack(0, 2, 3); + + sky.mesh = new Mesh( + context.createVertexBuffer(vertexArray, posAttributes.members), + context.createIndexBuffer(indexArray), + SegmentVector.simpleSegment(0, 0, vertexArray.length, indexArray.length) + ); + } + + program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, + CullFaceMode.disabled, skyUniforms, undefined, 'sky', sky.mesh.vertexBuffer, + sky.mesh.indexBuffer, sky.mesh.segments); +} diff --git a/src/render/draw_terrain.ts b/src/render/draw_terrain.ts index 688c578146..aa3cfc2221 100644 --- a/src/render/draw_terrain.ts +++ b/src/render/draw_terrain.ts @@ -84,7 +84,9 @@ function drawTerrain(painter: Painter, terrain: Terrain, tiles: Array) { context.activeTexture.set(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture.texture); const posMatrix = painter.transform.calculatePosMatrix(tile.tileID.toUnwrapped()); - const uniformValues = terrainUniformValues(posMatrix, terrain.getMeshFrameDelta(painter.transform.zoom)); + const eleDelta = terrain.getMeshFrameDelta(painter.transform.zoom); + const fogMatrix = painter.transform.calculateFogMatrix(tile.tileID.toUnwrapped()); + const uniformValues = terrainUniformValues(posMatrix, eleDelta, fogMatrix, painter.style.sky, painter.transform.pitch); program.draw(context, gl.TRIANGLES, depthMode, StencilMode.disabled, colorMode, CullFaceMode.backCCW, uniformValues, terrainData, 'terrain', mesh.vertexBuffer, mesh.indexBuffer, mesh.segments); } diff --git a/src/render/mesh.ts b/src/render/mesh.ts new file mode 100644 index 0000000000..0d2986ee45 --- /dev/null +++ b/src/render/mesh.ts @@ -0,0 +1,25 @@ +import {SegmentVector} from '../data/segment'; +import {VertexBuffer} from '../gl/vertex_buffer'; +import {IndexBuffer} from '../gl/index_buffer'; + +export class Mesh { + vertexBuffer: VertexBuffer; + indexBuffer: IndexBuffer; + segments: SegmentVector; + + constructor(vertexBuffer: VertexBuffer, indexBuffer: IndexBuffer, segments: SegmentVector) { + this.vertexBuffer = vertexBuffer; + this.indexBuffer = indexBuffer; + this.segments = segments; + } + + destroy(): void { + this.vertexBuffer.destroy(); + this.indexBuffer.destroy(); + this.segments.destroy(); + + this.vertexBuffer = null; + this.indexBuffer = null; + this.segments = null; + } +} diff --git a/src/render/painter.ts b/src/render/painter.ts index 55c28328e9..abb4d06636 100644 --- a/src/render/painter.ts +++ b/src/render/painter.ts @@ -33,6 +33,8 @@ import {drawDebug, drawDebugPadding, selectDebugSource} from './draw_debug'; import {drawCustom} from './draw_custom'; import {drawDepth, drawCoords} from './draw_terrain'; import {OverscaledTileID} from '../source/tile_id'; +import {RenderToTexture} from './render_to_texture'; +import {drawSky} from './draw_sky'; import type {Transform} from '../geo/transform'; import type {Tile} from '../source/tile'; @@ -46,7 +48,6 @@ import type {VertexBuffer} from '../gl/vertex_buffer'; import type {IndexBuffer} from '../gl/index_buffer'; import type {DepthRangeType, DepthMaskType, DepthFuncType} from '../gl/types'; import type {ResolvedImage} from '@maplibre/maplibre-gl-style-spec'; -import {RenderToTexture} from './render_to_texture'; export type RenderPass = 'offscreen' | 'opaque' | 'translucent'; @@ -407,6 +408,9 @@ export class Painter { this.context.clear({color: options.showOverdrawInspector ? Color.black : Color.transparent, depth: 1}); this.clearStencil(); + // draw sky first to not overwrite symbols + if (this.style.stylesheet.sky) drawSky(this, this.style.sky); + this._showOverdrawInspector = options.showOverdrawInspector; this.depthRangeFor3D = [0, 1 - ((style._order.length + 2) * this.numSublayers * this.depthEpsilon)]; diff --git a/src/render/program/program_uniforms.ts b/src/render/program/program_uniforms.ts index f1723ccac7..a080bb9578 100644 --- a/src/render/program/program_uniforms.ts +++ b/src/render/program/program_uniforms.ts @@ -11,6 +11,7 @@ import {rasterUniforms} from './raster_program'; import {symbolIconUniforms, symbolSDFUniforms, symbolTextAndIconUniforms} from './symbol_program'; import {backgroundUniforms, backgroundPatternUniforms} from './background_program'; import {terrainUniforms, terrainDepthUniforms, terrainCoordsUniforms} from './terrain_program'; +import {skyUniforms} from './sky_program'; export const programUniforms = { fillExtrusion: fillExtrusionUniforms, @@ -40,5 +41,6 @@ export const programUniforms = { backgroundPattern: backgroundPatternUniforms, terrain: terrainUniforms, terrainDepth: terrainDepthUniforms, - terrainCoords: terrainCoordsUniforms + terrainCoords: terrainCoordsUniforms, + sky: skyUniforms }; diff --git a/src/render/program/sky_program.ts b/src/render/program/sky_program.ts new file mode 100644 index 0000000000..18457ca5b5 --- /dev/null +++ b/src/render/program/sky_program.ts @@ -0,0 +1,28 @@ +import {UniformColor, Uniform1f} from '../uniform_binding'; +import type {Context} from '../../gl/context'; +import type {UniformValues, UniformLocations} from '../uniform_binding'; +import {Transform} from '../../geo/transform'; +import {Sky} from '../../style/sky'; + +export type SkyUniformsType = { + 'u_sky_color': UniformColor; + 'u_horizon_color': UniformColor; + 'u_horizon': Uniform1f; + 'u_sky_horizon_blend': Uniform1f; +}; + +const skyUniforms = (context: Context, locations: UniformLocations): SkyUniformsType => ({ + 'u_sky_color': new UniformColor(context, locations.u_sky_color), + 'u_horizon_color': new UniformColor(context, locations.u_horizon_color), + 'u_horizon': new Uniform1f(context, locations.u_horizon), + 'u_sky_horizon_blend': new Uniform1f(context, locations.u_sky_horizon_blend), +}); + +const skyUniformValues = (sky: Sky, transform: Transform, pixelRatio: number): UniformValues => ({ + 'u_sky_color': sky.properties.get('sky-color'), + 'u_horizon_color': sky.properties.get('horizon-color'), + 'u_horizon': (transform.height / 2 + transform.getHorizon()) * pixelRatio, + 'u_sky_horizon_blend': (sky.properties.get('sky-horizon-blend') * transform.height / 2) * pixelRatio, +}); + +export {skyUniforms, skyUniformValues}; diff --git a/src/render/program/terrain_program.ts b/src/render/program/terrain_program.ts index a0c13ef4cc..f6275e0927 100644 --- a/src/render/program/terrain_program.ts +++ b/src/render/program/terrain_program.ts @@ -2,11 +2,14 @@ import { Uniform1i, Uniform1f, Uniform4f, - UniformMatrix4f + UniformMatrix4f, + UniformColor } from '../uniform_binding'; import type {Context} from '../../gl/context'; import type {UniformValues, UniformLocations} from '../../render/uniform_binding'; import {mat4} from 'gl-matrix'; +import {Sky} from '../../style/sky'; +import {Color} from '@maplibre/maplibre-gl-style-spec'; export type TerrainPreludeUniformsType = { 'u_depth': Uniform1i; @@ -21,6 +24,12 @@ export type TerrainUniformsType = { 'u_matrix': UniformMatrix4f; 'u_texture': Uniform1i; 'u_ele_delta': Uniform1f; + 'u_fog_matrix': UniformMatrix4f; + 'u_fog_color': UniformColor; + 'u_fog_ground_blend': Uniform1f; + 'u_fog_ground_blend_opacity': Uniform1f; + 'u_horizon_color': UniformColor; + 'u_horizon_fog_blend': Uniform1f; }; export type TerrainDepthUniformsType = { @@ -47,7 +56,13 @@ const terrainPreludeUniforms = (context: Context, locations: UniformLocations): const terrainUniforms = (context: Context, locations: UniformLocations): TerrainUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), 'u_texture': new Uniform1i(context, locations.u_texture), - 'u_ele_delta': new Uniform1f(context, locations.u_ele_delta) + 'u_ele_delta': new Uniform1f(context, locations.u_ele_delta), + 'u_fog_matrix': new UniformMatrix4f(context, locations.u_fog_matrix), + 'u_fog_color': new UniformColor(context, locations.u_fog_color), + 'u_fog_ground_blend': new Uniform1f(context, locations.u_fog_ground_blend), + 'u_fog_ground_blend_opacity': new Uniform1f(context, locations.u_fog_ground_blend_opacity), + 'u_horizon_color': new UniformColor(context, locations.u_horizon_color), + 'u_horizon_fog_blend': new Uniform1f(context, locations.u_horizon_fog_blend) }); const terrainDepthUniforms = (context: Context, locations: UniformLocations): TerrainDepthUniformsType => ({ @@ -64,11 +79,19 @@ const terrainCoordsUniforms = (context: Context, locations: UniformLocations): T const terrainUniformValues = ( matrix: mat4, - eleDelta: number -): UniformValues => ({ + eleDelta: number, + fogMatrix: mat4, + sky: Sky, + pitch: number): UniformValues => ({ 'u_matrix': matrix, 'u_texture': 0, - 'u_ele_delta': eleDelta + 'u_ele_delta': eleDelta, + 'u_fog_matrix': fogMatrix, + 'u_fog_color': sky ? sky.properties.get('fog-color') : Color.white, + 'u_fog_ground_blend': sky ? sky.properties.get('fog-ground-blend') : 1, + 'u_fog_ground_blend_opacity': sky ? sky.calculateFogBlendOpacity(pitch) : 0, + 'u_horizon_color': sky ? sky.properties.get('horizon-color') : Color.white, + 'u_horizon_fog_blend': sky ? sky.properties.get('horizon-fog-blend') : 1 }); const terrainDepthUniformValues = ( diff --git a/src/render/render_to_texture.test.ts b/src/render/render_to_texture.test.ts index 6b8ae3fde4..40da47e7db 100644 --- a/src/render/render_to_texture.test.ts +++ b/src/render/render_to_texture.test.ts @@ -64,7 +64,7 @@ describe('render to texture', () => { const painter = { layersDrawn: 0, context: new Context(gl), - transform: {zoom: 10, calculatePosMatrix: () => {}}, + transform: {zoom: 10, calculatePosMatrix: () => {}, calculateFogMatrix: () => {}}, colorModeForRenderPass: () => ColorMode.alphaBlended, useProgram: () => { return {draw: () => { layersDrawn++; }}; }, _renderTileClippingMasks: () => {}, diff --git a/src/render/terrain.ts b/src/render/terrain.ts index d523d2feb7..6dd87013aa 100644 --- a/src/render/terrain.ts +++ b/src/render/terrain.ts @@ -7,8 +7,6 @@ import {warnOnce} from '../util/util'; import {Pos3dArray, TriangleIndexArray} from '../data/array_types.g'; import pos3dAttributes from '../data/pos3d_attributes'; import {SegmentVector} from '../data/segment'; -import {VertexBuffer} from '../gl/vertex_buffer'; -import {IndexBuffer} from '../gl/index_buffer'; import {Painter} from './painter'; import {Texture} from '../render/texture'; import type {Framebuffer} from '../gl/framebuffer'; @@ -19,6 +17,7 @@ import {SourceCache} from '../source/source_cache'; import {EXTENT} from '../data/extent'; import type {TerrainSpecification} from '@maplibre/maplibre-gl-style-spec'; import {LngLat, earthRadius} from '../geo/lng_lat'; +import {Mesh} from './mesh'; /** * @internal @@ -36,16 +35,6 @@ export type TerrainData = { tile: Tile; } -/** - * @internal - * A terrain mesh object - */ -export type TerrainMesh = { - indexBuffer: IndexBuffer; - vertexBuffer: VertexBuffer; - segments: SegmentVector; -} - /** * @internal * This is the main class which handles most of the 3D Terrain logic. It has the following topics: @@ -118,7 +107,7 @@ export class Terrain { * GL Objects for the terrain-mesh * The mesh is a regular mesh, which has the advantage that it can be reused for all tiles. */ - _mesh: TerrainMesh; + _mesh: Mesh; /** * coords index contains a list of tileID.keys. This index is used to identify * the tile via the alpha-cannel in the coords-texture. @@ -381,7 +370,7 @@ export class Terrain { * create a regular mesh which will be used by all terrain-tiles * @returns the created regular mesh */ - getTerrainMesh(): TerrainMesh { + getTerrainMesh(): Mesh { if (this._mesh) return this._mesh; const context = this.painter.context; const vertexArray = new Pos3dArray(); @@ -415,11 +404,11 @@ export class Terrain { indexArray.emplaceBack(offsetRight + y, offsetRight + y + 3, offsetRight + y + 1); indexArray.emplaceBack(offsetRight + y, offsetRight + y + 2, offsetRight + y + 3); } - this._mesh = { - indexBuffer: context.createIndexBuffer(indexArray), - vertexBuffer: context.createVertexBuffer(vertexArray, pos3dAttributes.members), - segments: SegmentVector.simpleSegment(0, 0, vertexArray.length, indexArray.length) - }; + this._mesh = new Mesh( + context.createVertexBuffer(vertexArray, pos3dAttributes.members), + context.createIndexBuffer(indexArray), + SegmentVector.simpleSegment(0, 0, vertexArray.length, indexArray.length) + ); return this._mesh; } diff --git a/src/shaders/shaders.ts b/src/shaders/shaders.ts index 383df3c9f7..12711ad4e3 100644 --- a/src/shaders/shaders.ts +++ b/src/shaders/shaders.ts @@ -56,7 +56,11 @@ import symbolTextAndIconVert from './symbol_text_and_icon.vertex.glsl.g'; import terrainDepthFrag from './terrain_depth.fragment.glsl.g'; import terrainCoordsFrag from './terrain_coords.fragment.glsl.g'; import terrainFrag from './terrain.fragment.glsl.g'; +import terrainDepthVert from './terrain_depth.vertex.glsl.g'; +import terrainCoordsVert from './terrain_coords.vertex.glsl.g'; import terrainVert from './terrain.vertex.glsl.g'; +import skyFrag from './sky.fragment.glsl.g'; +import skyVert from './sky.vertex.glsl.g'; export const shaders = { prelude: compile(preludeFrag, preludeVert), @@ -86,9 +90,9 @@ export const shaders = { symbolSDF: compile(symbolSDFFrag, symbolSDFVert), symbolTextAndIcon: compile(symbolTextAndIconFrag, symbolTextAndIconVert), terrain: compile(terrainFrag, terrainVert), - terrainDepth: compile(terrainDepthFrag, terrainVert), - terrainCoords: compile(terrainCoordsFrag, terrainVert) -}; + terrainDepth: compile(terrainDepthFrag, terrainDepthVert), + terrainCoords: compile(terrainCoordsFrag, terrainCoordsVert), + sky: compile(skyFrag, skyVert)}; // Expand #pragmas to #ifdefs. diff --git a/src/shaders/sky.fragment.glsl b/src/shaders/sky.fragment.glsl new file mode 100644 index 0000000000..e65b97c030 --- /dev/null +++ b/src/shaders/sky.fragment.glsl @@ -0,0 +1,17 @@ +uniform vec4 u_sky_color; +uniform vec4 u_horizon_color; + +uniform float u_horizon; +uniform float u_sky_horizon_blend; + +void main() { + float y = gl_FragCoord.y; + if (y > u_horizon) { + float blend = y - u_horizon; + if (blend < u_sky_horizon_blend) { + gl_FragColor = mix(u_sky_color, u_horizon_color, pow(1.0 - blend / u_sky_horizon_blend, 2.0)); + } else { + gl_FragColor = u_sky_color; + } + } +} \ No newline at end of file diff --git a/src/shaders/sky.vertex.glsl b/src/shaders/sky.vertex.glsl new file mode 100644 index 0000000000..3425b29a21 --- /dev/null +++ b/src/shaders/sky.vertex.glsl @@ -0,0 +1,5 @@ +attribute vec2 a_pos; + +void main() { + gl_Position = vec4(a_pos, 1.0, 1.0); +} \ No newline at end of file diff --git a/src/shaders/terrain.fragment.glsl b/src/shaders/terrain.fragment.glsl index de44a497e1..56b1fcb8f6 100644 --- a/src/shaders/terrain.fragment.glsl +++ b/src/shaders/terrain.fragment.glsl @@ -1,7 +1,32 @@ uniform sampler2D u_texture; +uniform vec4 u_fog_color; +uniform vec4 u_horizon_color; +uniform float u_fog_ground_blend; +uniform float u_fog_ground_blend_opacity; +uniform float u_horizon_fog_blend; in vec2 v_texture_pos; +in float v_fog_depth; + +const float gamma = 2.2; + +vec4 gammaToLinear(vec4 color) { + return pow(color, vec4(gamma)); +} + +vec4 linearToGamma(vec4 color) { + return pow(color, vec4(1.0 / gamma)); +} void main() { - fragColor = texture(u_texture, v_texture_pos); + vec4 surface_color = texture2D(u_texture, v_texture_pos); + if (v_fog_depth > u_fog_ground_blend) { + vec4 surface_color_linear = gammaToLinear(surface_color); + float blend_color = smoothstep(0.0, 1.0, max((v_fog_depth - u_horizon_fog_blend) / (1.0 - u_horizon_fog_blend), 0.0)); + vec4 fog_horizon_color_linear = mix(gammaToLinear(u_fog_color), gammaToLinear(u_horizon_color), blend_color); + float factor_fog = max(v_fog_depth - u_fog_ground_blend, 0.0) / (1.0 - u_fog_ground_blend); + gl_FragColor = linearToGamma(mix(surface_color_linear, fog_horizon_color_linear, pow(factor_fog, 2.0) * u_fog_ground_blend_opacity)); + } else { + gl_FragColor = surface_color; + } } diff --git a/src/shaders/terrain.vertex.glsl b/src/shaders/terrain.vertex.glsl index 6e09194480..2a80424204 100644 --- a/src/shaders/terrain.vertex.glsl +++ b/src/shaders/terrain.vertex.glsl @@ -1,15 +1,17 @@ in vec3 a_pos3d; uniform mat4 u_matrix; +uniform mat4 u_fog_matrix; uniform float u_ele_delta; out vec2 v_texture_pos; -out float v_depth; +out float v_fog_depth; void main() { - float extent = 8192.0; // 8192.0 is the hardcoded vector-tiles coordinates resolution + float ele = get_elevation(a_pos3d.xy); float ele_delta = a_pos3d.z == 1.0 ? u_ele_delta : 0.0; - v_texture_pos = a_pos3d.xy / extent; - gl_Position = u_matrix * vec4(a_pos3d.xy, get_elevation(a_pos3d.xy) - ele_delta, 1.0); - v_depth = gl_Position.z / gl_Position.w; -} + v_texture_pos = a_pos3d.xy / 8192.0; + gl_Position = u_matrix * vec4(a_pos3d.xy, ele - ele_delta, 1.0); + vec4 pos = u_fog_matrix * vec4(a_pos3d.xy, ele, 1.0); + v_fog_depth = pos.z / pos.w * 0.5 + 0.5; +} \ No newline at end of file diff --git a/src/shaders/terrain_coords.vertex.glsl b/src/shaders/terrain_coords.vertex.glsl new file mode 100644 index 0000000000..08d29ba981 --- /dev/null +++ b/src/shaders/terrain_coords.vertex.glsl @@ -0,0 +1,13 @@ +attribute vec3 a_pos3d; + +uniform mat4 u_matrix; +uniform float u_ele_delta; + +out vec2 v_texture_pos; + +void main() { + float ele = get_elevation(a_pos3d.xy); + float ele_delta = a_pos3d.z == 1.0 ? u_ele_delta : 0.0; + v_texture_pos = a_pos3d.xy / 8192.0; + gl_Position = u_matrix * vec4(a_pos3d.xy, ele - ele_delta, 1.0); +} \ No newline at end of file diff --git a/src/shaders/terrain_depth.vertex.glsl b/src/shaders/terrain_depth.vertex.glsl new file mode 100644 index 0000000000..9c080b4c22 --- /dev/null +++ b/src/shaders/terrain_depth.vertex.glsl @@ -0,0 +1,13 @@ +attribute vec3 a_pos3d; + +uniform mat4 u_matrix; +uniform float u_ele_delta; + +out float v_depth; + +void main() { + float ele = get_elevation(a_pos3d.xy); + float ele_delta = a_pos3d.z == 1.0 ? u_ele_delta : 0.0; + gl_Position = u_matrix * vec4(a_pos3d.xy, ele - ele_delta, 1.0); + v_depth = gl_Position.z / gl_Position.w; +} \ No newline at end of file diff --git a/src/style/light.ts b/src/style/light.ts index 348045f6f2..a99e329b4b 100644 --- a/src/style/light.ts +++ b/src/style/light.ts @@ -48,14 +48,14 @@ class LightPositionProperty implements Property<[number, number, number], LightP } } -type Props = { +type LightProps = { 'anchor': DataConstantProperty<'map' | 'viewport'>; 'position': LightPositionProperty; 'color': DataConstantProperty; 'intensity': DataConstantProperty; }; -type PropsPossiblyEvaluated = { +type LightPropsPossiblyEvaluated = { 'anchor': 'map' | 'viewport'; 'position': LightPosition; 'color': Color; @@ -64,15 +64,15 @@ type PropsPossiblyEvaluated = { const TRANSITION_SUFFIX = '-transition'; -let lightProperties: Properties; +let lightProperties: Properties; /* * Represents the light used to light extruded features. */ export class Light extends Evented { - _transitionable: Transitionable; - _transitioning: Transitioning; - properties: PossiblyEvaluated; + _transitionable: Transitionable; + _transitioning: Transitioning; + properties: PossiblyEvaluated; constructor(lightOptions?: LightSpecification) { super(); @@ -99,9 +99,9 @@ export class Light extends Evented { for (const name in light) { const value = light[name]; if (name.endsWith(TRANSITION_SUFFIX)) { - this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length) as keyof Props, value); + this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length) as keyof LightProps, value); } else { - this._transitionable.setValue(name as keyof Props, value); + this._transitionable.setValue(name as keyof LightProps, value); } } } diff --git a/src/style/sky.ts b/src/style/sky.ts new file mode 100644 index 0000000000..261407d9fc --- /dev/null +++ b/src/style/sky.ts @@ -0,0 +1,116 @@ +import {DataConstantProperty, PossiblyEvaluated, Properties, Transitionable, Transitioning, TransitionParameters} from './properties'; +import {Evented} from '../util/evented'; +import {EvaluationParameters} from './evaluation_parameters'; +import {emitValidationErrors, validateSky, validateStyle} from './validate_style'; +import {extend} from '../util/util'; +import {Color, latest as styleSpec} from '@maplibre/maplibre-gl-style-spec'; +import {Mesh} from '../render/mesh'; +import type {StylePropertySpecification, SkySpecification} from '@maplibre/maplibre-gl-style-spec'; +import type {StyleSetterOptions} from './style'; + +type SkyProps = { + 'sky-color': DataConstantProperty; + 'horizon-color': DataConstantProperty; + 'fog-color': DataConstantProperty; + 'fog-ground-blend': DataConstantProperty; + 'horizon-fog-blend': DataConstantProperty; + 'sky-horizon-blend': DataConstantProperty; + 'atmosphere-blend': DataConstantProperty; +}; + +type SkyPropsPossiblyEvaluated = { + 'sky-color': Color; + 'horizon-color': Color; + 'fog-color': Color; + 'fog-ground-blend': number; + 'horizon-fog-blend': number; + 'sky-horizon-blend': number; + 'atmosphere-blend': number; +}; + +const properties: Properties = new Properties({ + 'sky-color': new DataConstantProperty(styleSpec.sky['sky-color'] as StylePropertySpecification), + 'horizon-color': new DataConstantProperty(styleSpec.sky['horizon-color'] as StylePropertySpecification), + 'fog-color': new DataConstantProperty(styleSpec.sky['fog-color'] as StylePropertySpecification), + 'fog-ground-blend': new DataConstantProperty(styleSpec.sky['fog-ground-blend'] as StylePropertySpecification), + 'horizon-fog-blend': new DataConstantProperty(styleSpec.sky['horizon-fog-blend'] as StylePropertySpecification), + 'sky-horizon-blend': new DataConstantProperty(styleSpec.sky['sky-horizon-blend'] as StylePropertySpecification), + 'atmosphere-blend': new DataConstantProperty(styleSpec.sky['atmosphere-blend'] as StylePropertySpecification) +}); + +const TRANSITION_SUFFIX = '-transition'; + +export class Sky extends Evented { + properties: PossiblyEvaluated; + + /** + * This is used to cache the gl mesh for the sky, it should be initialized only once. + */ + mesh: Mesh | undefined; + _transitionable: Transitionable; + _transitioning: Transitioning; + + constructor(sky?: SkySpecification) { + super(); + this._transitionable = new Transitionable(properties); + this.setSky(sky); + this._transitioning = this._transitionable.untransitioned(); + } + + setSky(sky?: SkySpecification, options: StyleSetterOptions = {}) { + if (this._validate(validateSky, sky, options)) return; + + for (const name in sky) { + const value = sky[name]; + if (name.endsWith(TRANSITION_SUFFIX)) { + this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length) as keyof SkyProps, value); + } else { + this._transitionable.setValue(name as keyof SkyProps, value); + } + } + } + + getSky(): SkySpecification { + return this._transitionable.serialize(); + } + + updateTransitions(parameters: TransitionParameters) { + this._transitioning = this._transitionable.transitioned(parameters, this._transitioning); + } + + hasTransition() { + return this._transitioning.hasTransition(); + } + + recalculate(parameters: EvaluationParameters) { + this.properties = this._transitioning.possiblyEvaluate(parameters); + } + + _validate(validate: Function, value: unknown, options: StyleSetterOptions = {}) { + if (options?.validate === false) { + return false; + } + return emitValidationErrors(this, validate.call(validateStyle, extend({ + value, + // Workaround for https://github.com/mapbox/mapbox-gl-js/issues/2407 + style: {glyphs: true, sprite: true}, + styleSpec + }))); + } + + /** + * Currently fog is a very simple implementation, and should only used + * to create an atmosphere near the horizon. + * But because the fog is drawn from the far-clipping-plane to + * map-center, and because the fog does nothing know about the horizon, + * this method does a fadeout in respect of pitch. So, when the horizon + * gets out of view, which is at about pitch 70, this methods calculates + * the corresponding opacity values. Below pitch 60 the fog is completely + * invisible. + */ + calculateFogBlendOpacity(pitch: number) { + if (pitch < 60) return 0; // disable + if (pitch < 70) return (pitch - 60) / 10; // fade in + return 1; + } +} diff --git a/src/style/style.test.ts b/src/style/style.test.ts index e4cb370604..fc10b7b5d5 100644 --- a/src/style/style.test.ts +++ b/src/style/style.test.ts @@ -12,7 +12,7 @@ import {OverscaledTileID} from '../source/tile_id'; import {fakeServer, type FakeServer} from 'nise'; import {EvaluationParameters} from './evaluation_parameters'; -import {LayerSpecification, GeoJSONSourceSpecification, FilterSpecification, SourceSpecification, StyleSpecification, SymbolLayerSpecification, TerrainSpecification} from '@maplibre/maplibre-gl-style-spec'; +import {LayerSpecification, GeoJSONSourceSpecification, FilterSpecification, SourceSpecification, StyleSpecification, SymbolLayerSpecification, TerrainSpecification, SkySpecification} from '@maplibre/maplibre-gl-style-spec'; import {GeoJSONSource} from '../source/geojson_source'; import {sleep} from '../util/test/util'; import {RTLPluginLoadedEventName} from '../source/rtl_text_plugin_status'; @@ -695,6 +695,7 @@ describe('Style#setState', () => { spys.push(jest.spyOn(style, 'setGeoJSONSourceData').mockImplementation((() => {}) as any)); spys.push(jest.spyOn(style, 'setGlyphs').mockImplementation((() => {}) as any)); spys.push(jest.spyOn(style, 'setSprite').mockImplementation((() => {}) as any)); + spys.push(jest.spyOn(style, 'setSky').mockImplementation((() => {}) as any)); spys.push(jest.spyOn(style.map, 'setTerrain').mockImplementation((() => {}) as any)); const newStyle = JSON.parse(JSON.stringify(styleJson)) as StyleSpecification; @@ -723,6 +724,11 @@ describe('Style#setState', () => { exaggeration: 0.5 }; newStyle.zoom = 2; + newStyle.sky = { + 'fog-color': '#000001', + 'sky-color': '#000002', + 'horizon-fog-blend': 0.5, + }; const didChange = style.setState(newStyle); expect(didChange).toBeTruthy(); for (const spy of spys) { @@ -2530,4 +2536,75 @@ describe('Style#serialize', () => { await style.once('style.load'); expect(style.serialize().terrain).toBeUndefined(); }); + + test('include sky property when map has sky', async () => { + const sky: SkySpecification = { + 'horizon-fog-blend': 0.5, + 'fog-color': '#fff' + }; + const styleJson = createStyleJSON({sky}); + const style = new Style(getStubMap()); + style.loadJSON(styleJson); + + await style.once('style.load'); + expect(style.serialize().sky).toStrictEqual(sky); + }); + + test('do not include sky property when map does not have sky', async () => { + const style = new Style(getStubMap()); + style.loadJSON(createStyleJSON()); + + await style.once('style.load'); + expect(style.serialize().sky).toBeUndefined(); + }); + + test('sky should be undefined when map does not have sky', async () => { + const style = new Style(getStubMap()); + style.loadJSON(createStyleJSON()); + + await style.once('style.load'); + expect(style.getSky()).toBeUndefined(); + }); + + test('do not include sky property after removing sky from the map', async () => { + const sky: SkySpecification = { + 'horizon-fog-blend': 0.5, + 'fog-color': '#fff' + }; + const styleJson = createStyleJSON({sky}); + const style = new Style(getStubMap()); + style.loadJSON(styleJson); + + await style.once('style.load'); + style.setSky(undefined); + expect(style.serialize().sky).toBeUndefined(); + }); + + test('include sky property when setting it after map loads', async () => { + const style = new Style(getStubMap()); + style.loadJSON(createStyleJSON()); + + await style.once('style.load'); + style.setSky({ + 'horizon-fog-blend': 0.5, + 'fog-color': '#fff' + }); + expect(style.serialize().sky).toBeDefined(); + }); + + test('update sky properties after setting the sky on initial load', async () => { + const sky: SkySpecification = { + 'fog-color': '#FF0000' + }; + const style = new Style(getStubMap()); + style.loadJSON(createStyleJSON({sky, transition: {duration: 0, delay: 0}})); + + await style.once('style.load'); + style.setSky({ + 'fog-color': '#00FF00' + }); + style.update({transition: {duration: 0, delay: 0}} as EvaluationParameters); + expect(style.sky.properties.get('fog-color').g).toBe(1); + expect(style.sky.properties.get('fog-color').r).toBe(0); + }); }); diff --git a/src/style/style.ts b/src/style/style.ts index 1b6d55c2ae..67da36936c 100644 --- a/src/style/style.ts +++ b/src/style/style.ts @@ -5,6 +5,7 @@ import {loadSprite} from './load_sprite'; import {ImageManager} from '../render/image_manager'; import {GlyphManager} from '../render/glyph_manager'; import {Light} from './light'; +import {Sky} from './sky'; import {LineAtlas} from '../render/line_atlas'; import {clone, extend, deepEqual, filterObject, mapObject} from '../util/util'; import {coerceSpriteToArray} from '../util/style'; @@ -48,7 +49,8 @@ import type { LightSpecification, SourceSpecification, SpriteSpecification, - DiffOperations + DiffOperations, + SkySpecification } from '@maplibre/maplibre-gl-style-spec'; import type {CustomLayerInterface} from './style_layer/custom_style_layer'; import type {Validator} from './validate_style'; @@ -184,6 +186,7 @@ export class Style extends Evented { glyphManager: GlyphManager; lineAtlas: LineAtlas; light: Light; + sky: Sky; _frameRequest: AbortController; _loadStyleRequest: AbortController; @@ -337,6 +340,7 @@ export class Style extends Evented { this._createLayers(); this.light = new Light(this.stylesheet.light); + this.sky = new Sky(this.stylesheet.sky); this.map.setTerrain(this.stylesheet.terrain ?? null); @@ -522,6 +526,10 @@ export class Style extends Evented { return true; } + if (this.sky && this.sky.hasTransition()) { + return true; + } + for (const id in this.sourceCaches) { if (this.sourceCaches[id].hasTransition()) { return true; @@ -580,6 +588,7 @@ export class Style extends Evented { } this.light.updateTransitions(parameters); + this.sky.updateTransitions(parameters); this._resetUpdates(); } @@ -624,6 +633,7 @@ export class Style extends Evented { } this.light.recalculate(parameters); + this.sky.recalculate(parameters); this.z = parameters.zoom; if (changed) { @@ -762,6 +772,9 @@ export class Style extends Evented { case 'setSprite': operations.push(() => this.setSprite.apply(this, op.args)); break; + case 'setSky': + operations.push(() => this.setSky.apply(this, op.args)); + break; case 'setTerrain': operations.push(() => this.map.setTerrain.apply(this, op.args)); break; @@ -1260,7 +1273,7 @@ export class Style extends Evented { return extend({duration: 300, delay: 0}, this.stylesheet && this.stylesheet.transition); } - serialize(): StyleSpecification { + serialize(): StyleSpecification | undefined { // We return undefined before we're loaded, following the pattern of Map.getStyle() before // the Style object is initialized. // Internally, Style._validate() calls Style.serialize() but callers are responsible for @@ -1277,6 +1290,7 @@ export class Style extends Evented { name: myStyleSheet.name, metadata: myStyleSheet.metadata, light: myStyleSheet.light, + sky: myStyleSheet.sky, center: myStyleSheet.center, zoom: myStyleSheet.zoom, bearing: myStyleSheet.bearing, @@ -1474,6 +1488,39 @@ export class Style extends Evented { this.light.updateTransitions(parameters); } + getSky(): SkySpecification { + return this.stylesheet?.sky; + } + + setSky(skyOptions?: SkySpecification, options: StyleSetterOptions = {}) { + const sky = this.sky.getSky(); + let update = false; + if (!skyOptions) { + if (sky) { + update = true; + } + } + for (const key in skyOptions) { + if (!deepEqual(skyOptions[key], sky[key])) { + update = true; + break; + } + } + if (!update) return; + + const parameters = { + now: browser.now(), + transition: extend({ + duration: 300, + delay: 0 + }, this.stylesheet.transition) + }; + + this.stylesheet.sky = skyOptions; + this.sky.setSky(skyOptions, options); + this.sky.updateTransitions(parameters); + } + _validate(validate: Validator, key: string, value: any, props: any, options: { validate?: boolean; } = {}) { diff --git a/src/style/validate_style.ts b/src/style/validate_style.ts index 9af298694f..3f8c00566c 100644 --- a/src/style/validate_style.ts +++ b/src/style/validate_style.ts @@ -17,6 +17,7 @@ type ValidateStyle = { glyphs: Validator; layer: Validator; light: Validator; + sky: Validator; terrain: Validator; filter: Validator; paintProperty: Validator; @@ -28,6 +29,7 @@ export const validateStyle = (validateStyleMin as unknown as ValidateStyle); export const validateSource = validateStyle.source; export const validateLight = validateStyle.light; +export const validateSky = validateStyle.sky; export const validateTerrain = validateStyle.terrain; export const validateFilter = validateStyle.filter; export const validatePaintProperty = validateStyle.paintProperty; diff --git a/src/ui/map.ts b/src/ui/map.ts index 9843440db9..463dd46e13 100644 --- a/src/ui/map.ts +++ b/src/ui/map.ts @@ -53,7 +53,8 @@ import type { StyleSpecification, LightSpecification, SourceSpecification, - TerrainSpecification + TerrainSpecification, + SkySpecification } from '@maplibre/maplibre-gl-style-spec'; import type {MapGeoJSONFeature} from '../util/vectortile_to_geojson'; import type {ControlPosition, IControl} from './control/control'; @@ -2661,6 +2662,31 @@ export class Map extends Camera { return this.style.getLight(); } + /** + * Loads sky and fog defined by {@link SkySpecification} onto the map. + * Note: The fog only shows when using the terrain 3D feature. + * @param sky - Sky properties to set. Must conform to the [MapLibre Style Specification](https://maplibre.org/maplibre-gl-js-docs/style-spec/#sky). + * @returns `this` + * @example + * ```ts + * map.setSky({ 'sky-color': '#00f' }); + * ``` + */ + setSky(sky: SkySpecification) { + this._lazyInitEmptyStyle(); + this.style.setSky(sky); + return this._update(true); + } + + /** + * Returns the value of the sky object. + * + * @returns sky Sky properties of the style. + */ + getSky() { + return this.style.getSky(); + } + /** * Sets the `state` of a feature. * A feature's `state` is a set of user-defined key-value pairs that are assigned to a feature at runtime. diff --git a/src/ui/map_tests/map_style.test.ts b/src/ui/map_tests/map_style.test.ts index 5279a20b85..ce7f50a24c 100644 --- a/src/ui/map_tests/map_style.test.ts +++ b/src/ui/map_tests/map_style.test.ts @@ -475,4 +475,44 @@ describe('#getStyle', () => { expect(spy).not.toHaveBeenCalled(); }); + describe('#setSky', () => { + test('calls style setSky when set', () => { + const map = createMap(); + const spy = jest.fn(); + map.style.setSky = spy; + map.setSky({'horizon-fog-blend': 0.5}); + + expect(spy).toHaveBeenCalled(); + }); + }); + + describe('#getSky', () => { + test('returns undefined when not set', () => { + const map = createMap(); + expect(map.getSky()).toBeUndefined(); + }); + }); + + describe('#setLight', () => { + test('calls style setLight when set', () => { + const map = createMap(); + const spy = jest.fn(); + map.style.setLight = spy; + map.setLight({anchor: 'viewport'}); + + expect(spy).toHaveBeenCalled(); + }); + }); + + describe('#getLight', () => { + test('calls style getLight when invoked', () => { + const map = createMap(); + const spy = jest.fn(); + map.style.getLight = spy; + map.getLight(); + + expect(spy).toHaveBeenCalled(); + }); + }); + }); diff --git a/test/build/min.test.ts b/test/build/min.test.ts index db21651810..8cc9002488 100644 --- a/test/build/min.test.ts +++ b/test/build/min.test.ts @@ -36,7 +36,7 @@ describe('test min build', () => { const decreaseQuota = 4096; // feel free to update this value after you've checked that it has changed on purpose :-) - const expectedBytes = 793823; + const expectedBytes = 799999; expect(actualBytes - expectedBytes).toBeLessThan(increaseQuota); expect(expectedBytes - actualBytes).toBeLessThan(decreaseQuota); diff --git a/test/examples/3d-terrain.html b/test/examples/3d-terrain.html index 2028988521..8d8000d79d 100644 --- a/test/examples/3d-terrain.html +++ b/test/examples/3d-terrain.html @@ -19,7 +19,7 @@ container: 'map', zoom: 12, center: [11.39085, 47.27574], - pitch: 52, + pitch: 70, hash: true, style: { version: 8, @@ -60,7 +60,8 @@ terrain: { source: 'terrainSource', exaggeration: 1 - } + }, + sky: {} }, maxZoom: 18, maxPitch: 85 diff --git a/test/examples/sky-with-fog-and-terrain.html b/test/examples/sky-with-fog-and-terrain.html new file mode 100644 index 0000000000..9b47f27347 --- /dev/null +++ b/test/examples/sky-with-fog-and-terrain.html @@ -0,0 +1,122 @@ + + + + Sky, Fog, Terrain + + + + + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/test/integration/assets/tiles/zero-elevation-terrain-tile.png b/test/integration/assets/tiles/zero-elevation-terrain-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..a445db2d8ad05f16bb6ac7e2a5046fff55e8ba06 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911L)MWvCLk0$>eV#6kAr*7pUN&T8P~bUW z&{k2RASx;2EAr*#nVsCLzP)Goagt$)WP=IwgfxarJPxxMJ&YML*%Z!>3XTTIfG39P YHcMvpZ?|jT0TVQXr>mdKI;Vst04RakegFUf literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/sky/basic/expected.png b/test/integration/render/tests/sky/basic/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..72587cb408b049190af22db728271a2771bb5d4c GIT binary patch literal 2078 zcmeHIJxD@P6#m}xFBHM4AEBrzTGF5fr!0(;(tc=Y=tpRh+9DD`c(eu0AyTy266G49 zy_Tkk&E*V4S%?=ofHLr1+`wxYjX?&%BV&yTNWp$s_TJ&{nV3_?v> zkt{fnNwf1X)WcOMBNV;>*5eW$8^7&HxS?}HNkztKlwd?%2O=R8Zp$lBh6qQTEm$fn zvu{~o!;MJT12t8Wv0tVDu*JDp@(cw8m>{Gx6{c!t6!UepM6ILIK~j?Ffs2IV%R1mq zlc1)VT#=AUvbar+k~lNzzGNneW}YqR`To^|E@O+wxX1oqFXUHYp)n7FmbM?3cMKjWR)A$XTRcf$F-cvu+ z10EN1Dbs3jJ}T9EUZWi&VvS3uDIxsUw7<~6xt`BjHzLz)>uKcmyCv=kTW#8qRwdL^yCZ9@+f{v{7(x literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/sky/basic/style.json b/test/integration/render/tests/sky/basic/style.json new file mode 100644 index 0000000000..e2e8c9ff8b --- /dev/null +++ b/test/integration/render/tests/sky/basic/style.json @@ -0,0 +1,38 @@ +{ + "version": 8, + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "timeout": 60000, + "metadata": { + "test": { + "height": 512, + "width": 512, + "maxPitch": 85, + "operations": [ + ["wait"] + ] + } + }, + "center": [ + 35.38, + 31.55 + ], + "zoom": 15, + "pitch": 85, + "sources": { }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "#ccaa83" + } + } + ], + "sky": { + "sky-color": "#199EF3", + "horizon-color": "#daeff0", + "sky-horizon-blend": 1, + "fog-ground-blend": 1 + } +} diff --git a/test/integration/render/tests/terrain/fog-sky-blend/expected.png b/test/integration/render/tests/terrain/fog-sky-blend/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b443b46ddd56315b8e23d31506ac47966deca5 GIT binary patch literal 2066 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
sky-color
horizon-color
fog-color
sky-horizon-blend
horizon-fog-blend
fog-ground-blend