From eff02999f4b7f2a8dabe5078fe2f6f0be4bf096a Mon Sep 17 00:00:00 2001 From: Mat Groves Date: Wed, 6 Jul 2022 21:12:51 +0100 Subject: [PATCH] Feature: Asset Package (modern alternative to Loader) (#8365) --- jest.config.js | 2 + package-lock.json | 555 ++++- package.json | 2 + packages/assets/README.md | 10 + packages/assets/package.json | 44 + packages/assets/src/Assets.ts | 808 +++++++ packages/assets/src/BackgroundLoader.ts | 107 + packages/assets/src/cache/Cache.ts | 198 ++ packages/assets/src/cache/CacheParser.ts | 35 + packages/assets/src/cache/index.ts | 3 + .../src/cache/parsers/cacheSpritesheet.ts | 39 + .../src/cache/parsers/cacheTextureArray.ts | 23 + packages/assets/src/cache/parsers/index.ts | 3 + packages/assets/src/index.ts | 6 + packages/assets/src/loader/Loader.ts | 219 ++ packages/assets/src/loader/index.ts | 2 + .../assets/src/loader/parsers/LoaderParser.ts | 69 + .../src/loader/parsers/WorkerManager.ts | 147 ++ packages/assets/src/loader/parsers/index.ts | 11 + .../assets/src/loader/parsers/loadBasis.ts | 79 + .../src/loader/parsers/loadBitmapFont.ts | 79 + packages/assets/src/loader/parsers/loadDDS.ts | 69 + .../assets/src/loader/parsers/loadJson.ts | 22 + packages/assets/src/loader/parsers/loadKTX.ts | 84 + .../src/loader/parsers/loadSpritesheet.ts | 108 + .../assets/src/loader/parsers/loadTexture.ts | 104 + packages/assets/src/loader/parsers/loadTxt.ts | 22 + .../assets/src/loader/parsers/loadWebFont.ts | 102 + packages/assets/src/loader/types.ts | 13 + packages/assets/src/resolver/Resolver.ts | 542 +++++ packages/assets/src/resolver/index.ts | 2 + packages/assets/src/resolver/parsers/index.ts | 2 + .../resolver/parsers/spriteSheetUrlParser.ts | 31 + .../src/resolver/parsers/textureUrlParser.ts | 16 + packages/assets/src/resolver/types.ts | 66 + packages/assets/src/utils/convertToList.ts | 22 + .../src/utils/createStringVariations.ts | 55 + .../assets/src/utils/detections/detectAvif.ts | 10 + .../assets/src/utils/detections/detectWebp.ts | 9 + packages/assets/src/utils/detections/index.ts | 2 + packages/assets/src/utils/index.ts | 6 + packages/assets/src/utils/isSingleItem.ts | 5 + packages/assets/src/utils/path.ts | 151 ++ packages/assets/src/utils/url/index.ts | 3 + .../assets/src/utils/url/isAbsoluteUrl.ts | 21 + .../assets/src/utils/url/makeAbsoluteUrl.ts | 27 + packages/assets/src/utils/url/urlJoin.ts | 89 + packages/assets/test/assets.tests.ts | 337 +++ .../test/assets/bitmap-font/bmGlyph-test.png | Bin 0 -> 134415 bytes .../test/assets/bitmap-font/bmtxt-test.txt | 101 + .../test/assets/bitmap-font/desyrel.png | Bin 0 -> 310362 bytes .../test/assets/bitmap-font/desyrel.xml | 1922 +++++++++++++++++ .../assets/test/assets/bitmap-font/font.fnt | 18 + .../assets/test/assets/bitmap-font/font.png | Bin 0 -> 1992 bytes .../assets/test/assets/bitmap-font/msdf.fnt | 1140 ++++++++++ .../assets/test/assets/bitmap-font/msdf.png | Bin 0 -> 188631 bytes .../assets/test/assets/bitmap-font/sdf.fnt | 1140 ++++++++++ .../assets/test/assets/bitmap-font/sdf.png | Bin 0 -> 111218 bytes .../test/assets/bitmap-font/split_font.fnt | 16 + .../test/assets/bitmap-font/split_font_ab.png | Bin 0 -> 1145 bytes .../test/assets/bitmap-font/split_font_cd.png | Bin 0 -> 1204 bytes .../assets/test/assets/fonts/outfit.woff2 | Bin 0 -> 35084 bytes .../test/assets/json/asset-manifest-2.json | 52 + .../test/assets/json/asset-manifest.json | 47 + packages/assets/test/assets/json/test.json | 4 + .../test/assets/spritesheet/multi-pack-0.json | 48 + .../test/assets/spritesheet/multi-pack-0.png | Bin 0 -> 2435 bytes .../test/assets/spritesheet/multi-pack-1.json | 23 + .../test/assets/spritesheet/multi-pack-1.png | Bin 0 -> 69086 bytes .../test/assets/spritesheet/spritesheet.json | 55 + .../test/assets/spritesheet/spritesheet.png | Bin 0 -> 3463 bytes .../assets/test/assets/textures/bunny-2.png | Bin 0 -> 449 bytes .../assets/test/assets/textures/bunny.png | Bin 0 -> 449 bytes .../assets/test/assets/textures/bunny.webp | Bin 0 -> 368 bytes .../assets/textures/profile-abel@0.5x.jpg | Bin 0 -> 3353 bytes .../assets/textures/profile-abel@0.5x.webp | Bin 0 -> 2082 bytes .../test/assets/textures/profile-abel@2x.jpg | Bin 0 -> 25571 bytes .../test/assets/textures/profile-abel@2x.webp | Bin 0 -> 20830 bytes packages/assets/test/cache.tests.ts | 93 + .../assets/test/loader-compressed.tests.ts | 54 + packages/assets/test/loader.tests.ts | 356 +++ packages/assets/test/resolver.tests.ts | 486 +++++ packages/assets/test/sampleManifest.ts | 75 + packages/assets/test/sampleManifests.ts | 75 + packages/assets/test/utils.tests.ts | 35 + packages/basis/src/BasisLoader.ts | 392 +--- packages/basis/src/BasisParser.ts | 438 ++++ packages/basis/src/TranscoderWorker.ts | 12 +- packages/basis/src/index.ts | 2 + packages/compressed-textures/src/index.ts | 1 + .../src/loaders/DDSLoader.ts | 395 +--- .../src/loaders/KTXLoader.ts | 375 +--- .../compressed-textures/src/parsers/index.ts | 3 + .../src/parsers/parseDDS.ts | 402 ++++ .../src/parsers/parseKTX.ts | 374 ++++ packages/core/src/extensions.ts | 7 +- .../core/src/textures/resources/Resource.ts | 3 + packages/loaders/src/Loader.ts | 4 + packages/spritesheet/src/Spritesheet.ts | 6 + packages/text-bitmap/src/formats/index.ts | 2 + packages/text-bitmap/src/index.ts | 1 + test/jest-global-setup.ts | 19 + test/jest-global-teardown.ts | 7 + 103 files changed, 11398 insertions(+), 1146 deletions(-) create mode 100644 packages/assets/README.md create mode 100644 packages/assets/package.json create mode 100644 packages/assets/src/Assets.ts create mode 100644 packages/assets/src/BackgroundLoader.ts create mode 100644 packages/assets/src/cache/Cache.ts create mode 100644 packages/assets/src/cache/CacheParser.ts create mode 100644 packages/assets/src/cache/index.ts create mode 100644 packages/assets/src/cache/parsers/cacheSpritesheet.ts create mode 100644 packages/assets/src/cache/parsers/cacheTextureArray.ts create mode 100644 packages/assets/src/cache/parsers/index.ts create mode 100644 packages/assets/src/index.ts create mode 100644 packages/assets/src/loader/Loader.ts create mode 100644 packages/assets/src/loader/index.ts create mode 100644 packages/assets/src/loader/parsers/LoaderParser.ts create mode 100644 packages/assets/src/loader/parsers/WorkerManager.ts create mode 100644 packages/assets/src/loader/parsers/index.ts create mode 100644 packages/assets/src/loader/parsers/loadBasis.ts create mode 100644 packages/assets/src/loader/parsers/loadBitmapFont.ts create mode 100644 packages/assets/src/loader/parsers/loadDDS.ts create mode 100644 packages/assets/src/loader/parsers/loadJson.ts create mode 100644 packages/assets/src/loader/parsers/loadKTX.ts create mode 100644 packages/assets/src/loader/parsers/loadSpritesheet.ts create mode 100644 packages/assets/src/loader/parsers/loadTexture.ts create mode 100644 packages/assets/src/loader/parsers/loadTxt.ts create mode 100644 packages/assets/src/loader/parsers/loadWebFont.ts create mode 100644 packages/assets/src/loader/types.ts create mode 100644 packages/assets/src/resolver/Resolver.ts create mode 100644 packages/assets/src/resolver/index.ts create mode 100644 packages/assets/src/resolver/parsers/index.ts create mode 100644 packages/assets/src/resolver/parsers/spriteSheetUrlParser.ts create mode 100644 packages/assets/src/resolver/parsers/textureUrlParser.ts create mode 100644 packages/assets/src/resolver/types.ts create mode 100644 packages/assets/src/utils/convertToList.ts create mode 100644 packages/assets/src/utils/createStringVariations.ts create mode 100644 packages/assets/src/utils/detections/detectAvif.ts create mode 100644 packages/assets/src/utils/detections/detectWebp.ts create mode 100644 packages/assets/src/utils/detections/index.ts create mode 100644 packages/assets/src/utils/index.ts create mode 100644 packages/assets/src/utils/isSingleItem.ts create mode 100644 packages/assets/src/utils/path.ts create mode 100644 packages/assets/src/utils/url/index.ts create mode 100644 packages/assets/src/utils/url/isAbsoluteUrl.ts create mode 100644 packages/assets/src/utils/url/makeAbsoluteUrl.ts create mode 100644 packages/assets/src/utils/url/urlJoin.ts create mode 100644 packages/assets/test/assets.tests.ts create mode 100644 packages/assets/test/assets/bitmap-font/bmGlyph-test.png create mode 100644 packages/assets/test/assets/bitmap-font/bmtxt-test.txt create mode 100755 packages/assets/test/assets/bitmap-font/desyrel.png create mode 100755 packages/assets/test/assets/bitmap-font/desyrel.xml create mode 100644 packages/assets/test/assets/bitmap-font/font.fnt create mode 100644 packages/assets/test/assets/bitmap-font/font.png create mode 100644 packages/assets/test/assets/bitmap-font/msdf.fnt create mode 100644 packages/assets/test/assets/bitmap-font/msdf.png create mode 100644 packages/assets/test/assets/bitmap-font/sdf.fnt create mode 100644 packages/assets/test/assets/bitmap-font/sdf.png create mode 100644 packages/assets/test/assets/bitmap-font/split_font.fnt create mode 100644 packages/assets/test/assets/bitmap-font/split_font_ab.png create mode 100644 packages/assets/test/assets/bitmap-font/split_font_cd.png create mode 100644 packages/assets/test/assets/fonts/outfit.woff2 create mode 100644 packages/assets/test/assets/json/asset-manifest-2.json create mode 100644 packages/assets/test/assets/json/asset-manifest.json create mode 100644 packages/assets/test/assets/json/test.json create mode 100644 packages/assets/test/assets/spritesheet/multi-pack-0.json create mode 100644 packages/assets/test/assets/spritesheet/multi-pack-0.png create mode 100644 packages/assets/test/assets/spritesheet/multi-pack-1.json create mode 100644 packages/assets/test/assets/spritesheet/multi-pack-1.png create mode 100644 packages/assets/test/assets/spritesheet/spritesheet.json create mode 100644 packages/assets/test/assets/spritesheet/spritesheet.png create mode 100755 packages/assets/test/assets/textures/bunny-2.png create mode 100755 packages/assets/test/assets/textures/bunny.png create mode 100644 packages/assets/test/assets/textures/bunny.webp create mode 100644 packages/assets/test/assets/textures/profile-abel@0.5x.jpg create mode 100644 packages/assets/test/assets/textures/profile-abel@0.5x.webp create mode 100644 packages/assets/test/assets/textures/profile-abel@2x.jpg create mode 100644 packages/assets/test/assets/textures/profile-abel@2x.webp create mode 100644 packages/assets/test/cache.tests.ts create mode 100644 packages/assets/test/loader-compressed.tests.ts create mode 100644 packages/assets/test/loader.tests.ts create mode 100644 packages/assets/test/resolver.tests.ts create mode 100644 packages/assets/test/sampleManifest.ts create mode 100644 packages/assets/test/sampleManifests.ts create mode 100644 packages/assets/test/utils.tests.ts create mode 100644 packages/basis/src/BasisParser.ts create mode 100644 packages/compressed-textures/src/parsers/index.ts create mode 100644 packages/compressed-textures/src/parsers/parseDDS.ts create mode 100644 packages/compressed-textures/src/parsers/parseKTX.ts create mode 100644 test/jest-global-setup.ts create mode 100644 test/jest-global-teardown.ts diff --git a/jest.config.js b/jest.config.js index 0ba320f418..8d2583a9ee 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,6 +6,8 @@ module.exports = { setupFilesAfterEnv: [ 'jest-extended/all', ], + globalSetup: '/test/jest-global-setup.ts', + globalTeardown: '/test/jest-global-teardown.ts', transform: { '\\.vert$': 'jest-raw-loader', '\\.frag$': 'jest-raw-loader', diff --git a/package-lock.json b/package-lock.json index cfbe5dbb22..60a6d29ffa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@rollup/plugin-node-resolve": "^9.0.0", "@rollup/plugin-typescript": "^6.0.0", "@types/chai": "^4.3.1", + "@types/css-font-loading-module": "^0.0.7", "@types/jest": "^26.0.0", "@webdoc/cli": "^1.5.5", "copyfiles": "^2.1.0", @@ -30,6 +31,7 @@ "eslint": "^7.2.0", "eslint-plugin-jsdoc": "^39.2.9", "glob": "^7.1.3", + "http-server": "^14.1.1", "jest": "^26.0.0", "jest-electron": "^0.1.12", "jest-extended": "^1.2.1", @@ -5861,6 +5863,10 @@ "resolved": "packages/app", "link": true }, + "node_modules/@pixi/assets": { + "resolved": "packages/assets", + "link": true + }, "node_modules/@pixi/basis": { "resolved": "packages/basis", "link": true @@ -6558,6 +6564,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/css-font-loading-module": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz", + "integrity": "sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==", + "dev": true + }, "node_modules/@types/earcut": { "version": "2.1.1", "license": "MIT" @@ -8148,6 +8160,15 @@ "node": ">=4" } }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -8451,6 +8472,18 @@ "node": ">=0.10.0" } }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -9848,6 +9881,15 @@ "dev": true, "license": "MIT" }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/cross-env": { "version": "5.2.0", "dev": true, @@ -11791,6 +11833,26 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -12898,6 +12960,15 @@ "node": ">=0.10.0" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -12946,6 +13017,20 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -12983,6 +13068,139 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/http-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/http-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/http-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-server/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-server/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-server/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -18773,6 +18991,18 @@ "node": ">=0.10.0" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", @@ -18831,9 +19061,10 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -19954,6 +20185,15 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, "node_modules/optionator": { "version": "0.9.1", "dev": true, @@ -20673,6 +20913,35 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/posix-character-classes": { "version": "0.1.1", "dev": true, @@ -21334,6 +21603,12 @@ "dev": true, "license": "ISC" }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -21628,9 +21903,10 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.1", - "dev": true, - "license": "MIT" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safe-regex": { "version": "1.1.0", @@ -21755,6 +22031,12 @@ "node": ">=10" } }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true + }, "node_modules/semver": { "version": "5.5.0", "dev": true, @@ -23401,6 +23683,18 @@ "node": ">=4" } }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/union-value": { "version": "1.0.0", "dev": true, @@ -23560,6 +23854,12 @@ "querystring": "0.2.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "node_modules/url-parse-lax": { "version": "3.0.0", "dev": true, @@ -24564,6 +24864,17 @@ "@pixi/display": "6.4.2" } }, + "packages/assets": { + "name": "@pixi/assets", + "version": "6.4.2", + "license": "MIT", + "peerDependencies": { + "@pixi/core": "6.4.2", + "@pixi/settings": "6.4.2", + "@pixi/spritesheet": "6.4.2", + "@pixi/text-bitmap": "6.4.2" + } + }, "packages/basis": { "name": "@pixi/basis", "version": "6.4.2", @@ -29534,6 +29845,9 @@ "@pixi/app": { "version": "file:packages/app" }, + "@pixi/assets": { + "version": "file:packages/assets" + }, "@pixi/basis": { "version": "file:packages/basis" }, @@ -30084,6 +30398,12 @@ "version": "1.1.1", "dev": true }, + "@types/css-font-loading-module": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz", + "integrity": "sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==", + "dev": true + }, "@types/earcut": { "version": "2.1.1" }, @@ -31241,6 +31561,15 @@ "version": "1.0.0", "dev": true }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -31463,6 +31792,15 @@ } } }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -32505,6 +32843,12 @@ "version": "1.0.2", "dev": true }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true + }, "cross-env": { "version": "5.2.0", "dev": true, @@ -33901,6 +34245,12 @@ "version": "2.0.2", "dev": true }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -34705,6 +35055,12 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -34741,6 +35097,25 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -34769,6 +35144,99 @@ } } }, + "http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "requires": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -39154,6 +39622,12 @@ } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, "mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", @@ -39191,7 +39665,9 @@ } }, "minimist": { - "version": "1.2.5", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minimist-options": { @@ -40047,6 +40523,12 @@ "version": "1.6.2", "dev": true }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, "optionator": { "version": "0.9.1", "dev": true, @@ -40593,6 +41075,34 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, "posix-character-classes": { "version": "0.1.1", "dev": true @@ -41087,6 +41597,12 @@ "version": "1.0.1", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -41287,7 +41803,9 @@ } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safe-regex": { @@ -41391,6 +41909,12 @@ "xmlchars": "^2.2.0" } }, + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true + }, "semver": { "version": "5.5.0", "dev": true @@ -42556,6 +43080,15 @@ "version": "1.0.4", "dev": true }, + "union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "requires": { + "qs": "^6.4.0" + } + }, "union-value": { "version": "1.0.0", "dev": true, @@ -42682,6 +43215,12 @@ } } }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "url-parse-lax": { "version": "3.0.0", "dev": true, diff --git a/package.json b/package.json index 066aef4bf3..affbabc66d 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@rollup/plugin-node-resolve": "^9.0.0", "@rollup/plugin-typescript": "^6.0.0", "@types/chai": "^4.3.1", + "@types/css-font-loading-module": "^0.0.7", "@types/jest": "^26.0.0", "@webdoc/cli": "^1.5.5", "copyfiles": "^2.1.0", @@ -64,6 +65,7 @@ "eslint": "^7.2.0", "eslint-plugin-jsdoc": "^39.2.9", "glob": "^7.1.3", + "http-server": "^14.1.1", "jest": "^26.0.0", "jest-electron": "^0.1.12", "jest-extended": "^1.2.1", diff --git a/packages/assets/README.md b/packages/assets/README.md new file mode 100644 index 0000000000..e05dfb21df --- /dev/null +++ b/packages/assets/README.md @@ -0,0 +1,10 @@ +# @pixi/assets + +This package contains the assets class for PixiJS +managing the resolving and loading of assets. + +## Installation + +```bash +npm install @pixi/assets +``` diff --git a/packages/assets/package.json b/packages/assets/package.json new file mode 100644 index 0000000000..ca9da4eefd --- /dev/null +++ b/packages/assets/package.json @@ -0,0 +1,44 @@ +{ + "name": "@pixi/assets", + "version": "6.4.2", + "description": "Asset manager for PixiJS, loading resolving and Cacheing", + "keywords": [ + "pixi", + "caching", + "resolving", + "loaders" + ], + "author": "Mat Groves ", + "homepage": "https://github.com/pixijs/pixi.js#readme", + "license": "MIT", + "main": "dist/cjs/assets.js", + "module": "dist/esm/assets.js", + "bundle": "dist/browser/assets.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "*.d.ts" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/pixijs/pixi.js.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/pixijs/pixi.js/issues" + }, + "peerDependencies": { + "@pixi/basis": "6.4.2", + "@pixi/compressed-textures": "6.4.2", + "@pixi/constants": "6.4.2", + "@pixi/core": "6.4.2", + "@pixi/settings": "6.4.2", + "@pixi/spritesheet": "6.4.2", + "@pixi/text-bitmap": "6.4.2", + "@pixi/utils": "6.4.2" + } +} diff --git a/packages/assets/src/Assets.ts b/packages/assets/src/Assets.ts new file mode 100644 index 0000000000..8ef21e87c3 --- /dev/null +++ b/packages/assets/src/Assets.ts @@ -0,0 +1,808 @@ +import { extensions, ExtensionType } from '@pixi/core'; +import { BackgroundLoader } from './BackgroundLoader'; +import { Cache } from './cache/Cache'; +import { cacheSpritesheet, cacheTextureArray } from './cache/parsers'; +import type { + LoadAsset, + LoaderParser } from './loader'; +import { + loadJson, + loadSpritesheet, + loadTextures, + loadTxt, + loadWebFont +} from './loader'; +import { Loader } from './loader/Loader'; +import { loadBitmapFont } from './loader/parsers/loadBitmapFont'; +import type { PreferOrder, ResolveAsset, ResolverBundle, ResolverManifest, ResolveURLParser } from './resolver'; +import { spriteSheetUrlParser, textureUrlParser } from './resolver'; +import { Resolver } from './resolver/Resolver'; +import { convertToList } from './utils/convertToList'; +import { detectAvif } from './utils/detections/detectAvif'; +import { detectWebp } from './utils/detections/detectWebp'; +import { isSingleItem } from './utils/isSingleItem'; + +export type ProgressCallback = (progress: number) => void; + +/** + * Initialization options object for Asset Class. + * @memberof PIXI + */ +export interface AssetInitOptions +{ + // basic... + /** a base path for any assets loaded */ + basePath?: string; + /** + * a manifest to tell the asset loader upfront what all your assets are + * this can be the manifest object itself, or a URL to the manifest. + */ + manifest?: string | ResolverManifest; + /** + * optional preferences for which textures preferences you have when resolving assets + * for example you might set the resolution to 0.5 if the user is on a rubbish old phone + * or you might set the resolution to 2 if the user is on a retina display + */ + texturePreference?: { + /** the resolution order you prefer, can be an array (priority order - first is prefered) or a single resolutions */ + resolution?: number | number[]; + /** the formats you prefer, by default this will be: ['avif', 'webp', 'png', 'jpg', 'jpeg'] */ + format?: string | string[]; + }; + + // advanced users can add custom parsers and and preferences for how things are resolved + /** loader options to configure the loader with, currently only parsers! */ + loader?: { + /** custom parsers can be added here, for example something that could load a sound or a 3D model */ + parsers?: LoaderParser[]; + // more... + }; + /** resolver specific options */ + resolver?: { + /** + * a list of urlParsers, these can read the URL and pick put the various options. + * for example there is a texture URL parser that picks our resolution and file format. + * You can add custom ways to read URLs and extract information here. + */ + urlParsers?: ResolveURLParser[]; + /** + * a list of preferOrders that let the resolver know which asset to pick. + * already built-in we have a texture preferOrders that let the resolve know which asset to prefer + * if it has multiple assets to pick from (resolution/formats etc) + */ + preferOrders?: PreferOrder[]; + }; +} + +/** + * A one stop shop for all Pixi resource management! + * Super modern and easy to use, with enough flexibility to customize and do what you need! + * @memberof PIXI + * @namespace Assets + * + * Only one Asset Class exists accessed via the Global Asset object. + * + * It has four main responsibilities: + * 1. Allows users to map URLs to keys and resolve them according to the user's browser capabilities + * 2. Loads the resources and transforms them into assets that developers understand. + * 3. Caches the assets and provides a way to access them. + * 4: Allow developers to unload assets and clear the cache. + * + * It also has a few advanced features: + * 1. Allows developers to provide a manifest upfront of all assets and help manage them via 'bundles' + * 2. Allows users to background load assets. Shortening (or eliminating) load times and improving UX. With this feature, + * in-game loading bars can be a thing of the past! + * + * + * Do not be afraid to load things multiple times - under the hood, it will NEVER load anything more than once. + * + * for example: + * + * ``` + * promise1 = PIXI.Assets.load('bunny.png') + * promise2 = PIXI.Assets.load('bunny.png') + * + * //promise1 === promise2 + * ``` + * here both promises will be the same. Once resolved.. forever resolved! It makes for really easy resource management! + * + * Out of the box it supports the following files: + * * textures (avif, webp, png, jpg, gif) + * * sprite sheets (json) + * * bitmap fonts (xml, fnt, txt) + * * web fonts (ttf, woff, woff2) + * * json files (json) + * * text files (txt) + * + * More types can be added fairly easily by creating additional loader parsers. + * + * ### Textures + * - Textures are loaded as ImageBitmap on a worker thread where possible. + * Leading to much less janky load + parse times. + * - By default, we will prefer to load AVIF and WebP image files if you specify them. + * But if the browser doesn't support AVIF or WebP we will fall back to png and jpg. + * - Textures can also be accessed via Texture.from(...) and now use this asset manager under the hood! + * - Don't worry if you set preferences for textures that don't exist (for example you prefer 2x resolutions images + * but only 1x is available for that texture, the Asset manager will pick that up as a fallback automatically) + * #### Sprite sheets + * - it's hard to know what resolution a sprite sheet is without loading it first, to address this + * there is a naming convention we have added that will let Pixi understand the image format and resolution + * of the spritesheet via its file name: + * + * `my-spritesheet{resolution}.{imageFormat}.json` + * + * for example: + * + * `my-spritesheet@2x.webp.json` // 2x resolution, WebP sprite sheet + * `my-spritesheet@0.5x.png.json` // 0.5x resolution, png sprite sheet + * + * This is optional! you can just load a sprite sheet as normal, + * This is only useful if you have a bunch of different res / formatted spritesheets + * + * ### Fonts + * * Web fonts will be loaded with all weights. + * it is possible to load only specific weights by doing the following: + * + * ``` + * // load specific weights.. + * await PIXI.Assets.load({ + * data: { + * weights: ['normal'], // only loads the weight + * }, + * src: `outfit.woff2`, + * }); + * + * // load everything... + * await PIXI.Assets.load(`outfit.woff2`); + * ``` + * ### Background Loading + * Background loading will load stuff for you passively behind the scenes. To minimize jank, + * it will only load one asset at a time. As soon as a developer calls `PIXI.Assets.load(...)` the + * background loader is paused and requested assets are loaded as a priority. + * Don't worry if something is in there that's already loaded, it will just get skipped! + * + * You still need to call `PIXI.Assets.load(...)` to get an asset that has been loaded in the background. + * It's just that this promise will resolve instantly if the asset + * has already been loaded. + * + * ### Manifest and Bundles + * - Manifest is a JSON file that contains a list of all assets and their properties. + * - Bundles are a way to group assets together. + * + * ``` + * // manifest example + * const manifest = { + * bundles:[{ + * name:'load-screen', + * assets:[ + * { + * name: 'background', + * srcs: 'sunset.png', + * }, + * { + * name: 'bar', + * srcs: 'load-bar.{png,webp}', + * } + * ] + * }, + * { + * name:'game-screen', + * assets:[ + * { + * name: 'character', + * srcs: 'robot.png', + * }, + * { + * name: 'enemy', + * srcs: 'bad-guy.png', + * } + * ] + * }] + * }} + * + * await PIXI.Asset.init({ + * manifest + * }); + * + * // load a bundle.. + * loadScreenAssets = await PIXI.Assets.loadBundle('load-screen'); + * // load another.. + * gameScreenAssets = await PIXI.Assets.loadBundle('game-screen'); + * ``` + * @example + * const bunny = await PIXI.Assets.load('bunny.png'); + */ +export class AssetsClass +{ + /** the resolver to map various urls */ + public resolver: Resolver; + /** + * The loader, loads stuff! + * @type {PIXI.AssetLoader} + */ + public loader: Loader; + /** + * The global cache of all assets within PixiJS + * @type {PIXI.Cache} + */ + public cache: typeof Cache; + + /** takes care of loading assets in the background */ + private readonly _backgroundLoader: BackgroundLoader; + + private _initialized = false; + + constructor() + { + this.resolver = new Resolver(); + this.loader = new Loader(); + this.cache = Cache; + + this._backgroundLoader = new BackgroundLoader(this.loader); + this._backgroundLoader.active = true; + + this.reset(); + } + + /** + * Best practice is to call this function before any loading commences + * Initiating is the best time to add any customization to the way things are loaded. + * + * you do not need to call this for the Asset class to work, only if you want to set any initial properties + * @param options - options to initialize the Asset manager with + */ + public async init(options: AssetInitOptions = {}): Promise + { + if (this._initialized) + { + // #if _DEBUG + console.warn('[Assets]AssetManager already initialized, did you load before calling this Asset.init()?'); + // #endif + + return; + } + + this._initialized = true; + + if (options.basePath) + { + this.resolver.basePath = options.basePath; + } + + if (options.manifest) + { + let manifest = options.manifest; + + if (typeof manifest === 'string') + { + manifest = await this.load(manifest) as ResolverManifest; + } + + this.resolver.addManifest(manifest); + } + + const resolutionPref = options.texturePreference?.resolution ?? 1; + const resolution = (typeof resolutionPref === 'number') ? [resolutionPref] : resolutionPref; + + let format: string[]; + + if (options.texturePreference?.format) + { + const formatPref = options.texturePreference?.format; + + format = (typeof formatPref === 'string') ? [formatPref] : formatPref; + } + else + { + format = ['avif', 'webp', 'png', 'jpg', 'jpeg']; + } + + if (!(await detectWebp())) + { + format = format.filter((format) => format !== 'webp'); + } + + if (!(await detectAvif())) + { + format = format.filter((format) => format !== 'avif'); + } + + this.resolver.prefer({ + params: { + format, + resolution, + }, + }); + } + + /** + * Allows you to specify how to resolve any assets load requests. + * There are a few ways to add things here as shown below: + * @example + * // simple + * PIXI.Assets.add('bunnyBooBoo', 'bunny.png'); + * const bunny = await PIXI.Assets.load('bunnyBooBoo'); + * + * // multiple keys: + * PIXI.Assets.add(['burger', 'chicken'], 'bunny.png'); + * + * const bunny = await PIXI.Assets.load('burger'); + * const bunny2 = await PIXI.Assets.load('chicken'); + * + * // passing options to to the object + * PIXI.Assets.add( + * 'bunnyBooBooSmooth', + * 'bunny{png,webp}', + * {scaleMode:SCALE_MODES.NEAREST} // base texture options + * ); + * + * // multiple assets, + * + * // the following all do the same thing: + * + * PIXI.Assets.add('bunnyBooBoo', 'bunny{png,webp}'); + * + * PIXI.Assets.add('bunnyBooBoo', [ + * 'bunny.png', + * 'bunny.webp' + * ]); + * + * PIXI.Assets.add('bunnyBooBoo', [ + * { + * format:'png', + * src:'bunny.png', + * }, + * { + * format:'webp', + * src:'bunny.webp', + * } + * ]); + * + * const bunny = await PIXI.Assets.load('bunnyBooBoo'); // will try to load WebP if available + * @param keysIn - the key or keys that you will reference when loading this asset + * @param assetsIn - the asset or assets that will be chosen from when loading via the specified key + * @param data - asset-specific data that will be passed to the loaders + * - Useful if you want to initiate loaded objects with specific data + */ + public add(keysIn: string | string[], assetsIn: string | (ResolveAsset | string)[], data?: unknown): void + { + this.resolver.add(keysIn, assetsIn, data); + } + + /** + * Loads your assets! You pass in a key or URL and it will return a promise that + * resolves to the loaded asset. If multiple assets a requested, it will return a hash of assets. + * + * Don't worry about loading things multiple times, behind the scenes assets are only ever loaded + * once and the same promise reused behind the scenes so you can safely call this function multiple + * times with the same key and it will always return the same asset. + * @example + * // load a URL: + * const myImageTexture = await PIXI.Assets.load('http://some.url.com/image.png'); // => returns a texture + * + * PIXI.Assets.add('thumper', 'bunny.png'); + * PIXI.Assets.add('chicko', 'chicken.png'); + * + * // load multiple assets: + * const textures = await PIXI.Assets.load(['thumper', 'chicko']); // => {thumper: Texture, chicko: Texture} + * @param urls - the urls to load + * @param onProgress - optional function that is called when progress on asset loading is made. + * The function is passed a single parameter, `progress`, which represents the percentage + * (0.0 - 1.0) of the assets loaded. + * @returns - the assets that were loaded, either a single asset or a hash of assets + */ + public async load( + urls: string | string[] | LoadAsset | LoadAsset[], + onProgress?: ProgressCallback, + ): Promise> + { + if (!this._initialized) + { + await this.init(); + } + + const singleAsset = isSingleItem(urls); + + const urlArray = convertToList(urls) + .map((url) => + { + if (typeof url !== 'string') + { + this.resolver.add(url.src as string, url); + + return url.src; + } + + return url; + }); + + // check cache first... + const resolveResults = this.resolver.resolve(urlArray); + + // remap to the keys used.. + const out: Record = await this._mapLoadToResolve(resolveResults, onProgress); + + return singleAsset ? out[urlArray[0] as string] : out; + } + + /** + * This adds a bundle of assets in one go so that you can load them as a group. + * For example you could add a bundle for each screen in you pixi app + * @example + * PIXI.Assets.addBundle('animals', { + * bunny: 'bunny.png', + * chicken: 'chicken.png', + * thumper: 'thumper.png', + * }); + * + * const assets = await PIXI.Assets.loadBundle('animals'); + * @param bundleId - the id of the bundle to add + * @param assets - a record of the asset or assets that will be chosen from when loading via the specified key + */ + public addBundle(bundleId: string, assets: ResolverBundle['assets']): void + { + this.resolver.addBundle(bundleId, assets); + } + + /** + * Bundles are a way to load multiple assets at once. + * If a manifest has been provided to the init function then you can load a bundle, or bundles. + * you can also add bundles via `addBundle` + * @example + * // manifest example + * const manifest = { + * bundles:[{ + * name:'load-screen', + * assets:[ + * { + * name: 'background', + * srcs: 'sunset.png', + * }, + * { + * name: 'bar', + * srcs: 'load-bar.{png,webp}', + * } + * ] + * }, + * { + * name:'game-screen', + * assets:[ + * { + * name: 'character', + * srcs: 'robot.png', + * }, + * { + * name: 'enemy', + * srcs: 'bad-guy.png', + * } + * ] + * }] + * }} + * + * await Asset.init({ + * manifest + * }); + * + * // load a bundle.. + * loadScreenAssets = await PIXI.Assets.loadBundle('load-screen'); + * // load another.. + * gameScreenAssets = await PIXI.Assets.loadBundle('game-screen'); + * @param bundleIds - the bundle id or ids to load + * @param onProgress - optional function that is called when progress on asset loading is made. + * The function is passed a single parameter, `progress`, which represents the percentage (0.0 - 1.0) + * of the assets loaded. + * @returns all the bundles assets or a hash of assets for each bundle specified + */ + public async loadBundle(bundleIds: string | string[], onProgress?: ProgressCallback): Promise + { + if (!this._initialized) + { + await this.init(); + } + + let singleAsset = false; + + if (typeof bundleIds === 'string') + { + singleAsset = true; + bundleIds = [bundleIds]; + } + + const resolveResults = this.resolver.resolveBundle(bundleIds); + + const out: Record> = {}; + + const promises = Object.keys(resolveResults).map((bundleId) => + { + const resolveResult = resolveResults[bundleId]; + + return this._mapLoadToResolve(resolveResult, onProgress) + .then((resolveResult) => + { + out[bundleId] = resolveResult; + }); + }); + + await Promise.all(promises); + + return singleAsset ? out[bundleIds[0]] : out; + } + + /** + * Initiate a background load of some assets. it will passively begin to load these assets in the background. + * So when you actually come to loading them you will get a promise that resolves to the loaded assets immediately + * + * An example of this might be that you would background load game assets after your inital load. + * then when you got to actually load your game screen assets when a player goes to the game - the loading + * would already have stared or may even be complete, saving you having to show an interim load bar. + * @example + * PIXI.Assets.backgroundLoad('bunny.png'); + * + * // later on in your app... + * await PIXI.Assets.loadBundle('bunny.png'); // will resolve quicker as loading may have completed! + * @param urls - the url / urls you want to background load + */ + public async backgroundLoad(urls: string | string[]): Promise + { + if (!this._initialized) + { + await this.init(); + } + + if (typeof urls === 'string') + { + urls = [urls]; + } + + const resolveResults = this.resolver.resolve(urls); + + this._backgroundLoader.add(Object.values(resolveResults)); + } + + /** + * Initiate a background of a bundle, works exactly like backgroundLoad but for bundles. + * this can only be used if the loader has been initiated with a manifest + * @example + * await PIXI.Assets.init({ + * manifest: { + * bundles: [ + * { + * name:'load-screen', + * assets:[...] + * } + * ...] + * } + * }); + * + * PIXI.Assets.backgroundLoadBundle('load-screen'); + * + * // later on in your app... + * await PIXI.Assets.loadBundle('load-screen'); // will resolve quicker as loading may have completed! + * @param bundleIds - the bundleId / bundleIds you want to background load + */ + public async backgroundLoadBundle(bundleIds: string | string[]): Promise + { + if (!this._initialized) + { + await this.init(); + } + + if (typeof bundleIds === 'string') + { + bundleIds = [bundleIds]; + } + + const resolveResults = this.resolver.resolveBundle(bundleIds); + + Object.values(resolveResults).forEach((resolveResult) => + { + this._backgroundLoader.add(Object.values(resolveResult)); + }); + } + + /** + * Only intended for development purposes. + * This will wipe the resolver and caches. + * You will need to reinitialize the Asset + */ + public reset(): void + { + this.resolver.reset(); + this.loader.reset(); + this.cache.reset(); + + this._initialized = false; + } + + /** + * Instantly gets an asset already loaded from the cache. If the asset has not yet been loaded, + * it will return undefined. So it's on you! When in doubt just use `PIXI.Assets.load` instead. + * (remember, the loader will never load things more than once!) + * @param keys - The key or keys for the assets that you want to access + * @returns - The assets or hash of assets requested + */ + public get(keys: string | string[]): T | Record + { + if (typeof keys === 'string') + { + return Cache.get(keys); + } + + const assets: Record = {}; + + for (let i = 0; i < keys.length; i++) + { + assets[i] = Cache.get(keys[i]); + } + + return assets; + } + + /** + * helper function to map resolved assets back to loaded assets + * @param resolveResults - the resolve results from the resolver + * @param onProgress - the progress callback + */ + private async _mapLoadToResolve( + resolveResults: ResolveAsset | Record, + onProgress?: ProgressCallback + ): Promise> + { + const resolveArray = Object.values(resolveResults); + const resolveKeys = Object.keys(resolveResults); + + // pause background loader... + this._backgroundLoader.active = false; + + const loadedAssets = await this.loader.load(resolveArray, onProgress); + + // resume background loader... + this._backgroundLoader.active = true; + + // remap to the keys used.. + + const out: Record = {}; + + resolveArray.forEach((resolveResult, i) => + { + const asset = loadedAssets[resolveResult.src]; + + const keys = [resolveResult.src]; + + if (resolveResult.alias) + { + keys.push(...resolveResult.alias); + } + + out[resolveKeys[i]] = asset; + + Cache.set(keys, asset); + }); + + return out; + } + + /** + * Unload an asset or assets. As the Assets class is responsible for creating the assets via the `load` function + * this will make sure to destroy any assets and release them from memory. + * Once unloaded, you will need to load the asset again. + * + * Use this to help manage assets if you find that you have a large app and you want to free up memory. + * + * * it's up to you as the developer to make sure that textures are not actively being used when you unload them, + * Pixi won't break but you will end up with missing assets. Not a good look for the user! + * @example + * // load a URL: + * const myImageTexture = await PIXI.Assets.load('http://some.url.com/image.png'); // => returns a texture + * + * await PIXI.Assets.unload('http://some.url.com/image.png') + * + * myImageTexture <-- will now be destroyed. + * + * // unload multiple assets: + * const textures = await PIXI.Assets.unload(['thumper', 'chicko']); + * @param urls - the urls to unload + */ + public async unload( + urls: string | string[] | LoadAsset | LoadAsset[] + ): Promise + { + if (!this._initialized) + { + await this.init(); + } + + const urlArray = convertToList(urls) + .map((url) => + ((typeof url !== 'string') ? url.src : url)); + + // check cache first... + const resolveResults = this.resolver.resolve(urlArray); + + await this._unloadFromResolved(resolveResults); + } + + /** + * Bundles are a way to manage multiple assets at once. + * this will unload all files in a bundle. + * + * once a bundle has been unloaded, you need to load it again to have access to the assets. + * @example + * PIXI.Assets.addBundle({ + * 'thumper': 'http://some.url.com/thumper.png', + * }) + * + * const assets = await PIXI.Assets.loadBundle('thumper'); + * + * // now to unload.. + * + * await await PIXI.Assets.unloadBundle('thumper'); + * + * // all assets in the assets object will now have been destroyed and purged from the cache + * @param bundleIds - the bundle id or ids to unload + */ + public async unloadBundle(bundleIds: string | string[]): Promise + { + if (!this._initialized) + { + await this.init(); + } + + bundleIds = convertToList(bundleIds); + + const resolveResults = this.resolver.resolveBundle(bundleIds); + + const promises = Object.keys(resolveResults).map((bundleId) => + this._unloadFromResolved(resolveResults[bundleId])); + + await Promise.all(promises); + } + + private async _unloadFromResolved(resolveResult: ResolveAsset | Record) + { + const resolveArray = Object.values(resolveResult); + + resolveArray.forEach((resolveResult) => + { + Cache.remove(resolveResult.src); + }); + + await this.loader.unload(resolveArray); + } +} + +export const Assets = new AssetsClass(); + +// Handle registration of extensions +extensions.handle( + ExtensionType.LoadParser, + (extension) => { Assets.loader.addParser(extension.ref); }, + (extension) => { Assets.loader.removeParser(extension.ref); } +); +extensions.handle( + ExtensionType.ResolveParser, + (extension) => { Assets.resolver.addUrlParser(extension.ref); }, + (extension) => { Assets.resolver.removeUrlParser(extension.ref); } +); +extensions.handle( + ExtensionType.CacheParser, + (extension) => { Assets.cache.addParser(extension.ref); }, + (extension) => { Assets.cache.removeParser(extension.ref); } +); + +extensions.add( + loadTextures, + loadTxt, + loadJson, + loadSpritesheet, + loadBitmapFont, + loadWebFont, + + // cache extensions + cacheSpritesheet, + cacheTextureArray, + + // resolve extensions + textureUrlParser, + spriteSheetUrlParser +); diff --git a/packages/assets/src/BackgroundLoader.ts b/packages/assets/src/BackgroundLoader.ts new file mode 100644 index 0000000000..8d348fdb64 --- /dev/null +++ b/packages/assets/src/BackgroundLoader.ts @@ -0,0 +1,107 @@ +import type { LoadAsset } from './loader'; +import type { Loader } from './loader/Loader'; + +/** + * Quietly Loads assets in the background. + * @memberof PIXI + */ +export class BackgroundLoader +{ + /** Whether or not the loader should continue loading. */ + private _isActive: boolean; + + /** Assets to load. */ + private readonly _assetList: LoadAsset[]; + + /** Whether or not the loader is loading. */ + private _isLoading: boolean; + + /** Number of assets to load at a time. */ + private readonly _maxConcurrent: number; + + /** Should the loader log to the console. */ + public verbose: boolean; + private readonly _loader: Loader; + + /** + * @param loader + * @param verbose - should the loader log to the console + */ + constructor(loader: Loader, verbose = false) + { + this._loader = loader; + this._assetList = []; + this._isLoading = false; + this._maxConcurrent = 1; + this.verbose = verbose; + } + + /** + * Adds an array of assets to load. + * @param assetUrls - assets to load + */ + public add(assetUrls: LoadAsset[]): void + { + assetUrls.forEach((a) => + { + this._assetList.push(a); + }); + + // eslint-disable-next-line no-console + if (this.verbose)console.log('[BackgroundLoader] assets: ', this._assetList); + + if (this._isActive && !this._isLoading) + { + this._next(); + } + } + + /** + * Loads the next set of assets. Will try to load as many assets as it can at the same time. + * + * The max assets it will try to load at one time will be 4. + */ + private async _next(): Promise + { + if (this._assetList.length && this._isActive) + { + this._isLoading = true; + + const toLoad = []; + + const toLoadAmount = Math.min(this._assetList.length, this._maxConcurrent); + + for (let i = 0; i < toLoadAmount; i++) + { + toLoad.push(this._assetList.pop()); + } + + await this._loader.load(toLoad); + + this._isLoading = false; + + this._next(); + } + } + + /** + * @returns whether the class is active + */ + get active(): boolean + { + return this._isActive; + } + + /** Activate/Deactivate the loading. If set to true then it will immediately continue to load the next asset. */ + set active(value: boolean) + { + if (this._isActive === value) return; + + this._isActive = value; + + if (value && !this._isLoading) + { + this._next(); + } + } +} diff --git a/packages/assets/src/cache/Cache.ts b/packages/assets/src/cache/Cache.ts new file mode 100644 index 0000000000..c3f4cd51ba --- /dev/null +++ b/packages/assets/src/cache/Cache.ts @@ -0,0 +1,198 @@ +import { BaseTexture, Texture } from '@pixi/core'; +import { convertToList } from '../utils'; +import type { CacheParser } from './CacheParser'; + +/** + * A single Cache for all assets. + * + * When assets are added to the cache via set they normally are added to the cache as key-value pairs. + * + * With this cache, you can add parsers that will take the object and convert it to a list of assets that can be cached. + * for example a cacheSprite Sheet parser will add all of the textures found within its sprite sheet directly to the cache. + * + * This gives devs the flexibility to cache any type of object however we want. + * + * It is not intended that this class is created by developers - it is part of the Asset package. + * This is the first major system of PixiJS' main Assets class. + * @memberof PIXI + * @class Cache + */ +class CacheClass +{ + /** All loader parsers registered */ + public parsers: CacheParser[] = []; + + private readonly _cache: Map = new Map(); + private readonly _cacheMap: Map = new Map(); + + /** + * Use this to add any parsers to the `cache.set` function to + * @param newParsers - An array of parsers to add to the cache or just a single one + */ + public addParser(...newParsers: CacheParser[]): void + { + this.parsers.push(...newParsers); + } + + /** + * For exceptional situations where a cache parser might be causing some trouble, + * @param parsersToRemove - An array of parsers to remove from the cache, or just a single one + */ + public removeParser(...parsersToRemove: CacheParser[]): void + { + for (const parser of parsersToRemove) + { + const index = this.parsers.indexOf(parser); + + if (index >= 0) this.parsers.splice(index, 1); + } + } + + /** Clear all entries. */ + public reset(): void + { + this._cacheMap.clear(); + this._cache.clear(); + } + + /** + * Check if the key exists + * @param key - The key to check + */ + public has(key: string): boolean + { + return this._cache.has(key); + } + + /** + * Fetch entry by key + * @param key - The key of the entry to get + */ + public get(key: string): T + { + const result = this._cache.get(key); + + if (!result) + { + // #if _DEBUG + console.warn(`[Assets] Asset id ${key} was not found in the Cache`); + // #endif + } + + return result as T; + } + + /** + * Set a value by key or keys name + * @param key - The key or keys to set + * @param value - The value to store in the cache or from which cacheable assets will be derived. + */ + public set(key: string | string[], value: unknown): void + { + const keys = convertToList(key); + + let cacheableAssets: Record; + + for (let i = 0; i < this.parsers.length; i++) + { + const parser = this.parsers[i]; + + if (parser.test(value)) + { + cacheableAssets = parser.getCacheableAssets(keys, value); + + break; + } + } + + if (!cacheableAssets) + { + cacheableAssets = {}; + + keys.forEach((key) => + { + cacheableAssets[key] = value; + }); + } + + const cacheKeys = Object.keys(cacheableAssets); + + const cachedAssets = { + cacheKeys, + keys + }; + + // this is so we can remove them later.. + keys.forEach((key) => + { + this._cacheMap.set(key, cachedAssets); + }); + + cacheKeys.forEach((key) => + { + if (this._cache.has(key) && this._cache.get(key) !== value) + { + // #if _DEBUG + console.warn('[Cache] already has key:', key); + // #endif + } + + this._cache.set(key, cacheableAssets[key]); + }); + + // temporary to keep compatible with existing texture caching.. until we remove them! + if (value instanceof Texture) + { + const texture: Texture = value; + + keys.forEach((key) => + { + if (texture.baseTexture !== Texture.EMPTY.baseTexture) + { + BaseTexture.addToCache(texture.baseTexture, key); + } + + Texture.addToCache(texture, key); + }); + } + } + + /** + * Remove entry by key + * + * This function will also remove any associated alias from the cache also. + * @param key - The key of the entry to remove + */ + public remove(key: string): void + { + this._cacheMap.get(key); + + if (!this._cacheMap.has(key)) + { + // #if _DEBUG + console.warn(`[Assets] Asset id ${key} was not found in the Cache`); + // #endif + + return; + } + + const cacheMap = this._cacheMap.get(key); + + const cacheKeys = cacheMap.cacheKeys; + + cacheKeys.forEach((key) => + { + this._cache.delete(key); + }); + + cacheMap.keys.forEach((key: string) => + { + this._cacheMap.delete(key); + }); + } +} + +export const Cache = new CacheClass(); diff --git a/packages/assets/src/cache/CacheParser.ts b/packages/assets/src/cache/CacheParser.ts new file mode 100644 index 0000000000..7a8d868cac --- /dev/null +++ b/packages/assets/src/cache/CacheParser.ts @@ -0,0 +1,35 @@ +import type { ExtensionMetadata } from '@pixi/core'; + +/** + * For every asset that is cached, it will call the parsers test function + * the flow is as follows: + * + * 1. `cacheParser.test()`: Test the asset. + * 2. `cacheParser.getCacheableAssets()`: If the test passes call the getCacheableAssets function with the asset + * + * Useful if you want to add more than just a raw asset to the cache + * (for example a spritesheet will want to make all its sub textures easily accessible in the cache) + */ +export interface CacheParser +{ + extension?: ExtensionMetadata; + + /** A config to adjust the parser */ + config?: Record + + /** + * Gets called by the cache when a dev caches an asset + * @param asset - the asset to test + */ + test: (asset: T) => boolean; + + /** + * If the test passes, this function is called to get the cacheable assets + * an example may be that a spritesheet object will return all the sub textures it has so they can + * be cached. + * @param keys - The keys to cache the assets under + * @param asset - The asset to get the cacheable assets from + * @returns A key-value pair of cacheable assets + */ + getCacheableAssets: (keys: string[], asset: T) => Record; +} diff --git a/packages/assets/src/cache/index.ts b/packages/assets/src/cache/index.ts new file mode 100644 index 0000000000..51b4329803 --- /dev/null +++ b/packages/assets/src/cache/index.ts @@ -0,0 +1,3 @@ +export * from './Cache'; +export * from './parsers'; +export * from './CacheParser'; diff --git a/packages/assets/src/cache/parsers/cacheSpritesheet.ts b/packages/assets/src/cache/parsers/cacheSpritesheet.ts new file mode 100644 index 0000000000..921865ec9f --- /dev/null +++ b/packages/assets/src/cache/parsers/cacheSpritesheet.ts @@ -0,0 +1,39 @@ +import { ExtensionType } from '@pixi/core'; +import { Spritesheet } from '@pixi/spritesheet'; +import { dirname } from '../../utils'; +import type { CacheParser } from '../CacheParser'; + +function getCacheableAssets(keys: string[], asset: Spritesheet, ignoreMultiPack: boolean) +{ + const out: Record = {}; + + keys.forEach((key: string) => + { + out[key] = asset; + }); + + Object.keys(asset.textures).forEach((key) => + { + out[key] = asset.textures[key]; + }); + + if (!ignoreMultiPack) + { + const basePath = dirname(keys[0]); + + asset.linkedSheets.forEach((item: Spritesheet, i) => + { + const out2 = getCacheableAssets([`${basePath}/${asset.data.meta.related_multi_packs[i]}`], item, true); + + Object.assign(out, out2); + }); + } + + return out; +} + +export const cacheSpritesheet: CacheParser = { + extension: ExtensionType.CacheParser, + test: (asset: Spritesheet) => asset instanceof Spritesheet, + getCacheableAssets: (keys: string[], asset: Spritesheet) => getCacheableAssets(keys, asset, false) +}; diff --git a/packages/assets/src/cache/parsers/cacheTextureArray.ts b/packages/assets/src/cache/parsers/cacheTextureArray.ts new file mode 100644 index 0000000000..aacc74b9a0 --- /dev/null +++ b/packages/assets/src/cache/parsers/cacheTextureArray.ts @@ -0,0 +1,23 @@ +import { ExtensionType, Texture } from '@pixi/core'; +import type { CacheParser } from '../CacheParser'; + +export const cacheTextureArray: CacheParser = { + extension: ExtensionType.CacheParser, + + test: (asset: any[]) => Array.isArray(asset) && asset.every((t) => t instanceof Texture), + + getCacheableAssets: (keys: string[], asset: Texture[]) => + { + const out: Record = {}; + + keys.forEach((key: string) => + { + asset.forEach((item: Texture, i: number) => + { + out[key + (i === 0 ? '' : i + 1)] = item; + }); + }); + + return out; + } +}; diff --git a/packages/assets/src/cache/parsers/index.ts b/packages/assets/src/cache/parsers/index.ts new file mode 100644 index 0000000000..6c4b99e747 --- /dev/null +++ b/packages/assets/src/cache/parsers/index.ts @@ -0,0 +1,3 @@ +export * from './cacheSpritesheet'; +export * from './cacheTextureArray'; + diff --git a/packages/assets/src/index.ts b/packages/assets/src/index.ts new file mode 100644 index 0000000000..d3b2cfaff2 --- /dev/null +++ b/packages/assets/src/index.ts @@ -0,0 +1,6 @@ +export * from './Assets'; +export * from './utils'; +export * from './cache'; +export * from './loader'; +export * from './resolver'; + diff --git a/packages/assets/src/loader/Loader.ts b/packages/assets/src/loader/Loader.ts new file mode 100644 index 0000000000..61aecd888f --- /dev/null +++ b/packages/assets/src/loader/Loader.ts @@ -0,0 +1,219 @@ +import { convertToList, isSingleItem, makeAbsoluteUrl } from '../utils'; +import type { LoaderParser } from './parsers/LoaderParser'; +import type { PromiseAndParser, LoadAsset } from './types'; + +/** + * The Loader is responsible for loading all assets, such as images, spritesheets, audio files, etc. + * It does not do anything clever with URLs - it just loads stuff! + * Behind the scenes all things are cached using promises. This means it's impossible to load an asset more than once. + * Through the use of LoaderParsers, the loader can understand how to load any kind of file! + * + * It is not intended that this class is created by developers - its part of the Asset class + * This is the second major system of PixiJS' main Assets class + * @memberof PIXI + * @class AssetLoader + */ +export class Loader +{ + /** All loader parsers registered */ + public parsers: LoaderParser[] = []; + + /** Cache loading promises that ae currently active */ + public promiseCache: Record = {}; + + /** function used for testing */ + public reset(): void + { + this.promiseCache = {}; + } + + /** + * Use this to add any parsers to the loadAssets function to use + * @param newParsers - An array of parsers to add to the loader, or just a single one + */ + public addParser(...newParsers: LoaderParser[]): void + { + this.parsers.push(...newParsers); + } + + /** + * Use this to remove any parsers you've added or any of the default ones. + * @param parsersToRemove - An array of parsers to remove from the loader, or just a single one + */ + public removeParser(...parsersToRemove: LoaderParser[]): void + { + for (const parser of parsersToRemove) + { + const index = this.parsers.indexOf(parser); + + if (index >= 0) this.parsers.splice(index, 1); + } + } + + /** + * Used internally to generate a promise for the asset to be loaded. + * @param url - The URL to be loaded + * @param data - any custom additional information relevant to the asset being loaded + * @returns - a promise that will resolve to an Asset for example a Texture of a JSON object + */ + private _getLoadPromiseAndParser(url: string, data?: LoadAsset): PromiseAndParser + { + const result: PromiseAndParser = { + promise: null, + parser: null + }; + + result.promise = (async () => + { + let asset = null; + + for (let i = 0; i < this.parsers.length; i++) + { + const parser = this.parsers[i]; + + if (parser.load && parser.test?.(url, data, this)) + { + asset = await parser.load(url, data, this); + result.parser = parser; + + break; + } + } + + if (!result.parser) + { + // #if _DEBUG + // eslint-disable-next-line max-len + console.warn(`[Assets] ${url} could not be loaded as we don't know how to parse it, ensure the correct parser has being added`); + // #endif + + return null; + } + + for (let i = 0; i < this.parsers.length; i++) + { + const parser = this.parsers[i]; + + if (parser.parse) + { + if (parser.parse && parser.testParse?.(asset, data, this)) + { + // transform the asset.. + asset = await parser.parse(asset, data, this) || asset; + + result.parser = parser; + } + } + } + + return asset; + })(); + + return result; + } + + /** + * Loads an asset(s) using the parsers added to the Loader. + * @example + * // single asset: + * const asset = await Loader.load('cool.png'); + * console.log(asset); + * @example + * // multiple assets: + * const assets = await Loader.load(['cool.png', 'cooler.png']); + * console.log(assets); + * @param assetsToLoadIn - urls that you want to load, or a single one! + * @param onProgress - a function that gets called when the progress changes + */ + public async load( + assetsToLoadIn: string | string[] | LoadAsset | LoadAsset[], + onProgress?: (progress: number) => void, + ): Promise<{[key: string]: any} | any> + { + let count = 0; + + const assets: Record> = {}; + + const singleAsset = isSingleItem(assetsToLoadIn); + + const assetsToLoad = convertToList(assetsToLoadIn, (item) => ({ + src: item, + })); + + const total = assetsToLoad.length; + + const promises: Promise[] = assetsToLoad.map(async (asset: LoadAsset) => + { + const url = makeAbsoluteUrl(asset.src); + + if (!assets[asset.src]) + { + try + { + if (!this.promiseCache[url]) + { + this.promiseCache[url] = this._getLoadPromiseAndParser(url, asset); + } + + assets[asset.src] = await this.promiseCache[url].promise; + + // Only progress if nothing goes wrong + if (onProgress) onProgress(++count / total); + } + catch (e) + { + // Delete eventually registered file and promises from internal cache + // so they can be eligible for another loading attempt + delete this.promiseCache[url]; + delete assets[asset.src]; + + // Stop further execution + throw new Error(`[Loader.load] Failed to load ${url}.\n${e}`); + } + } + }); + + await Promise.all(promises); + + return singleAsset ? assets[assetsToLoad[0].src] : assets; + } + + /** + * Unloads an asset(s). Any unloaded assets will be destroyed, freeing up memory for your app. + * The parser that created the asset, will be the one that unloads it. + * @example + * // single asset: + * const asset = await Loader.load('cool.png'); + * + * await Loader.unload('cool.png'); + * + * console.log(asset.destroyed); // true + * @param assetsToUnloadIn - urls that you want to unload, or a single one! + */ + public async unload( + assetsToUnloadIn: string | string[] | LoadAsset | LoadAsset[], + ): Promise + { + const assetsToUnload = convertToList(assetsToUnloadIn, (item) => ({ + src: item, + })); + + const promises: Promise[] = assetsToUnload.map(async (asset: LoadAsset) => + { + const url = makeAbsoluteUrl(asset.src); + + const loadPromise = this.promiseCache[url]; + + if (loadPromise) + { + const loadedAsset = await loadPromise.promise; + + loadPromise.parser?.unload?.(loadedAsset, asset, this); + + delete this.promiseCache[url]; + } + }); + + await Promise.all(promises); + } +} diff --git a/packages/assets/src/loader/index.ts b/packages/assets/src/loader/index.ts new file mode 100644 index 0000000000..78f56d4593 --- /dev/null +++ b/packages/assets/src/loader/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './parsers'; diff --git a/packages/assets/src/loader/parsers/LoaderParser.ts b/packages/assets/src/loader/parsers/LoaderParser.ts new file mode 100644 index 0000000000..b98b5dadf1 --- /dev/null +++ b/packages/assets/src/loader/parsers/LoaderParser.ts @@ -0,0 +1,69 @@ +import type { ExtensionMetadata } from '@pixi/core'; +import type { Loader } from '../Loader'; +import type { LoadAsset } from '../types'; + +/** + * All functions are optional here. The flow: + * + * for every asset, + * + * 1. `parser.test()`: Test the asset url. + * 2. `parser.load()`: If test passes call the load function with the url + * 3. `parser.testParse()`: Test to see if the asset should be parsed by the plugin + * 4. `parse.parse()`: If test is parsed, then run the parse function on the asset. + * + * some plugins may only be used for parsing, + * some only for loading + * and some for both! + */ +export interface LoaderParser +{ + extension?: ExtensionMetadata; + + /** A config to adjust the parser */ + config?: Record + /** + * each URL to load will be tested here, + * if the test is passed the assets are loaded using the load function below. + * Good place to test for things like file extensions! + * @param url - The URL to test + * @param loadAsset - Any custom additional information relevant to the asset being loaded + * @param loader - The loader instance + */ + test?: (url: string, loadAsset?: LoadAsset, loader?: Loader) => boolean; + + /** + * This is the promise that loads the URL provided + * resolves with a loaded asset if returned by the parser. + * @param url - The URL to load + * @param loadAsset - Any custom additional information relevant to the asset being loaded + * @param loader - The loader instance + */ + load?: (url: string, loadAsset?: LoadAsset, loader?: Loader) => Promise; + + /** + * This function is used to test if the parse function should be run on the asset + * If this returns true then parse is called with the asset + * @param asset - The loaded asset data + * @param loadAsset - Any custom additional information relevant to the asset being loaded + * @param loader - The loader instance + */ + testParse?: (asset: ASSET, loadAsset?: LoadAsset, loader?: Loader) => boolean; + + /** + * Gets called on the asset it testParse passes. Useful to convert a raw asset into something more useful than + * @param asset - The loaded asset data + * @param loadAsset - Any custom additional information relevant to the asset being loaded + * @param loader - The loader instance + */ + parse?: (asset: ASSET, loadAsset?: LoadAsset, loader?: Loader) => Promise; + + /** + * If an asset is parsed using this parser, the unload function will be called when the user requests an asset + * to be unloaded. This is useful for things like sounds or textures that can be unloaded from memory + * @param asset - The asset to unload/destroy + * @param loadAsset - Any custom additional information relevant to the asset being loaded + * @param loader - The loader instance + */ + unload?: (asset: ASSET, loadAsset?: LoadAsset, loader?: Loader) => void; +} diff --git a/packages/assets/src/loader/parsers/WorkerManager.ts b/packages/assets/src/loader/parsers/WorkerManager.ts new file mode 100644 index 0000000000..5b259cbbf1 --- /dev/null +++ b/packages/assets/src/loader/parsers/WorkerManager.ts @@ -0,0 +1,147 @@ +let UUID = 0; +const MAX_WORKERS = navigator.hardwareConcurrency || 4; + +const workerCode = { + id: 'loadImageBitmap', + code: ` + self.onmessage = function(event) { + + async function loadImageBitmap(url) + { + const response = await fetch(url); + const imageBlob = await response.blob(); + const imageBitmap = await createImageBitmap(imageBlob); + return imageBitmap; + } + + loadImageBitmap(event.data.data[0]).then(imageBitmap => { + self.postMessage({ + data: imageBitmap, + uuid: event.data.uuid, + id: event.data.id, + }, [imageBitmap]); + }).catch(error => { + self.postMessage({ + data: null, + uuid: event.data.uuid, + id: event.data.id, + }); + }); + }`, +}; + +const blob = new Blob([workerCode.code], { type: 'application/javascript' }); +const workerURL = URL.createObjectURL(blob); + +class WorkerManagerClass +{ + public worker: Worker; + private resolveHash: {[key: string]: (...param: any[]) => void}; + private readonly workerPool: Worker[]; + private readonly queue: { id: string; arguments: any[]; resolve: (...param: any[]) => void }[]; + private _initialized = false; + private _createdWorkers = 0; + + constructor() + { + this.workerPool = []; + this.queue = []; + + this.resolveHash = {}; + } + + public loadImageBitmap(src: string): Promise + { + return this._run('loadImageBitmap', [src]) as Promise; + } + + private async _initWorkers() + { + if (this._initialized) return; + + this._initialized = true; + } + + private getWorker(): Worker + { + let worker = this.workerPool.pop(); + + if (!worker && this._createdWorkers < MAX_WORKERS) + { + // only create as many as MAX_WORKERS allows.. + this._createdWorkers++; + worker = new Worker(workerURL); + + worker.addEventListener('message', (event: MessageEvent) => + { + this.complete(event.data); + + this.returnWorker(event.target as Worker); + this.next(); + }); + } + + return worker; + } + + private returnWorker(worker: Worker) + { + this.workerPool.push(worker); + } + + private complete(data: any): void + { + const result = data.data; + + this.resolveHash[data.uuid](result); + + this.resolveHash[data.uuid] = null; + } + + private _run(id: string, args: any[]): Promise + { + this._initWorkers(); + // push into the queue... + + const promise = new Promise((resolve) => + { + this.queue.push({ id, arguments: args, resolve }); + }); + + this.next(); + + return promise; + } + + private next(): void + { + // nothing to do + if (!this.queue.length) return; + + const worker = this.getWorker(); + + // no workers available... + if (!worker) + { + return; + } + + const toDo = this.queue.pop(); + + const id = toDo.id; + + this.resolveHash[UUID] = toDo.resolve; + + worker.postMessage({ + data: toDo.arguments, + uuid: UUID++, + id, + }); + } +} + +const WorkerManager = new WorkerManagerClass(); + +export { + WorkerManager, +}; diff --git a/packages/assets/src/loader/parsers/index.ts b/packages/assets/src/loader/parsers/index.ts new file mode 100644 index 0000000000..eb12fd6763 --- /dev/null +++ b/packages/assets/src/loader/parsers/index.ts @@ -0,0 +1,11 @@ +export * from './loadBitmapFont'; +export * from './LoaderParser'; +export * from './loadJson'; +export * from './loadSpritesheet'; +export * from './loadTexture'; +export * from './loadTxt'; +export * from './loadWebFont'; +export * from './loadBasis'; +export * from './loadDDS'; +export * from './loadKTX'; + diff --git a/packages/assets/src/loader/parsers/loadBasis.ts b/packages/assets/src/loader/parsers/loadBasis.ts new file mode 100644 index 0000000000..d837f0ed1a --- /dev/null +++ b/packages/assets/src/loader/parsers/loadBasis.ts @@ -0,0 +1,79 @@ +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; + +import type { LoaderParser } from './LoaderParser'; +import { BasisParser, BASIS_FORMATS, BASIS_FORMAT_TO_TYPE, TranscoderWorker } from '@pixi/basis'; +import type { TYPES } from '@pixi/constants'; +import { ALPHA_MODES, FORMATS, MIPMAP_MODES } from '@pixi/constants'; +import { CompressedTextureResource } from '@pixi/compressed-textures'; +import type { LoadAsset } from '../types'; +import type { Loader } from '../Loader'; +import type { LoadTextureData } from './loadTexture'; + +const validImages = ['basis']; + +/** Load BASIS textures! */ +export const loadBasis = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + const tempURL = url.split('?')[0]; + const extension = tempURL.split('.').pop(); + + return validImages.includes(extension.toLowerCase()); + }, + + async load(url: string, asset: LoadAsset, loader: Loader): Promise + { + await TranscoderWorker.onTranscoderInitialized; + + // get an array buffer... + const response = await fetch(url); + + const arrayBuffer = await response.arrayBuffer(); + + const resources = await BasisParser.transcode(arrayBuffer); + + const type: TYPES = BASIS_FORMAT_TO_TYPE[resources.basisFormat]; + const format: FORMATS = resources.basisFormat !== BASIS_FORMATS.cTFRGBA32 ? FORMATS.RGB : FORMATS.RGBA; + + const textures = resources.map((resource) => + { + const base = new BaseTexture(resource, { + mipmap: resource instanceof CompressedTextureResource && resource.levels > 1 + ? MIPMAP_MODES.ON_MANUAL + : MIPMAP_MODES.OFF, + alphaMode: ALPHA_MODES.NO_PREMULTIPLIED_ALPHA, + type, + format, + ...asset.data, + }); + + const texture = new Texture(base); + + // make sure to nuke the promise if a texture is destroyed.. + texture.baseTexture.on('dispose', () => + { + delete loader.promiseCache[url]; + }); + + return texture; + }); + + return textures.length === 1 ? textures[0] : textures; + }, + + unload(texture): void + { + if (Array.isArray(texture)) + { + texture.forEach((t) => t.destroy(true)); + } + else + { + texture.destroy(true); + } + } + +} as LoaderParser; + diff --git a/packages/assets/src/loader/parsers/loadBitmapFont.ts b/packages/assets/src/loader/parsers/loadBitmapFont.ts new file mode 100644 index 0000000000..a73274226f --- /dev/null +++ b/packages/assets/src/loader/parsers/loadBitmapFont.ts @@ -0,0 +1,79 @@ +import type { Texture } from '@pixi/core'; +import { ExtensionType } from '@pixi/core'; +import type { BitmapFontData } from '@pixi/text-bitmap'; +import { BitmapFont, TextFormat, XMLFormat, XMLStringFormat } from '@pixi/text-bitmap'; +import { dirname, extname, join } from '../../utils/path'; + +import type { Loader } from '../Loader'; +import type { LoadAsset } from '../types'; + +import type { LoaderParser } from './LoaderParser'; + +async function _loadBitmap(src: string, data: BitmapFontData, loader: Loader): Promise +{ + const pages = data.page; + + const textureUrls = []; + + for (let i = 0; i < pages.length; ++i) + { + const pageFile = pages[i].file; + + const imagePath = join(dirname(src), pageFile); + + textureUrls.push(imagePath); + } + + const textures: Texture[] = Object.values(await loader.load(textureUrls)); + + return BitmapFont.install(data, textures, true); +} +const validExtensions = ['.xml', '.fnt']; + +/** simple loader plugin for loading in bitmap fonts! */ +export const loadBitmapFont = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + return validExtensions.includes(extname(url)); + }, + + testParse(data: string): boolean + { + const isText = TextFormat.test(data); + const isXMLText = XMLStringFormat.test(data); + + return isText || isXMLText; + }, + + async parse(asset: string, data: LoadAsset, loader: Loader): Promise + { + const isText = TextFormat.test(asset); + + if (isText) + { + const parsed = TextFormat.parse(asset); + + return await _loadBitmap(data.src, parsed, loader); + } + + return await _loadBitmap(data.src, XMLStringFormat.parse(asset), loader); + }, + + async load(url: string, _options: LoadAsset, loader: Loader): Promise + { + const response = await fetch(url); + + const text = await response.text(); + + const data = new window.DOMParser().parseFromString(text, 'text/xml'); + + return await _loadBitmap(url, XMLFormat.parse(data), loader); + }, + + unload(bitmapFont: Texture): void + { + bitmapFont.destroy(true); + } +} as LoaderParser; diff --git a/packages/assets/src/loader/parsers/loadDDS.ts b/packages/assets/src/loader/parsers/loadDDS.ts new file mode 100644 index 0000000000..49922d6d52 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadDDS.ts @@ -0,0 +1,69 @@ +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; +import { getResolutionOfUrl } from '@pixi/utils'; +import { parseDDS } from '@pixi/compressed-textures'; +import type { Loader } from '../Loader'; + +import type { LoaderParser } from './LoaderParser'; +import type { LoadAsset } from '../types'; +import { ALPHA_MODES, MIPMAP_MODES } from '@pixi/constants'; +import type { LoadTextureData } from './loadTexture'; + +const validImages = ['dds']; + +/** Load our DDS textures! */ +export const loadDDS: LoaderParser = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + const tempURL = url.split('?')[0]; + const extension = tempURL.split('.').pop(); + + return validImages.includes(extension.toLowerCase()); + }, + + async load(url: string, asset: LoadAsset, loader: Loader): Promise + { + // get an array buffer... + const response = await fetch(url); + + const arrayBuffer = await response.arrayBuffer(); + + const resources = parseDDS(arrayBuffer); + + const textures = resources.map((resource) => + { + const base = new BaseTexture(resource, { + mipmap: MIPMAP_MODES.OFF, + alphaMode: ALPHA_MODES.NO_PREMULTIPLIED_ALPHA, + resolution: getResolutionOfUrl(url), + ...asset.data, + }); + + const texture = new Texture(base); + + texture.baseTexture.on('dispose', () => + { + delete loader.promiseCache[url]; + }); + + return texture; + }); + + return textures.length === 1 ? textures[0] : textures; + }, + + unload(texture: Texture | Texture[]): void + { + if (Array.isArray(texture)) + { + texture.forEach((t) => t.destroy(true)); + } + else + { + texture.destroy(true); + } + } + +} as LoaderParser; + diff --git a/packages/assets/src/loader/parsers/loadJson.ts b/packages/assets/src/loader/parsers/loadJson.ts new file mode 100644 index 0000000000..8031af2ea5 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadJson.ts @@ -0,0 +1,22 @@ +import { ExtensionType } from '@pixi/core'; +import { extname } from '../../utils/path'; +import type { LoaderParser } from './LoaderParser'; + +/** simple loader plugin for loading json data */ +export const loadJson = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + return (extname(url).includes('.json')); + }, + + async load(url: string): Promise + { + const response = await fetch(url); + + const json = await response.json(); + + return json as T; + }, +} as LoaderParser; diff --git a/packages/assets/src/loader/parsers/loadKTX.ts b/packages/assets/src/loader/parsers/loadKTX.ts new file mode 100644 index 0000000000..e1c8db4a75 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadKTX.ts @@ -0,0 +1,84 @@ +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; +import { parseKTX } from '@pixi/compressed-textures'; +import type { Loader } from '../Loader'; + +import type { LoaderParser } from './LoaderParser'; + +import { getResolutionOfUrl } from '@pixi/utils'; +import type { LoadAsset } from '../types'; +import { ALPHA_MODES, MIPMAP_MODES } from '@pixi/constants'; +import type { LoadTextureData } from './loadTexture'; + +const validImages = ['ktx']; + +/** Loads KTX textures! */ +export const loadKTX = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + const tempURL = url.split('?')[0]; + const extension = tempURL.split('.').pop(); + + return validImages.includes(extension.toLowerCase()); + }, + + async load(url: string, asset: LoadAsset, loader: Loader): Promise + { + // get an array buffer... + const response = await fetch(url); + + const arrayBuffer = await response.arrayBuffer(); + + const { compressed, uncompressed, kvData } = parseKTX(url, arrayBuffer); + + const resources = compressed ?? uncompressed; + + const options = { + mipmap: MIPMAP_MODES.OFF, + alphaMode: ALPHA_MODES.NO_PREMULTIPLIED_ALPHA, + resolution: getResolutionOfUrl(url), + ...asset.data, + }; + + const textures = resources.map((resource) => + { + if (resources === uncompressed) + { + Object.assign(options, { + type: (resource as typeof uncompressed[0]).type, + format: (resource as typeof uncompressed[0]).format, + }); + } + + const base = new BaseTexture(resource, options); + + base.ktxKeyValueData = kvData; + + const texture = new Texture(base); + + texture.baseTexture.on('dispose', () => + { + delete loader.promiseCache[url]; + }); + + return texture; + }); + + return textures.length === 1 ? textures[0] : textures; + }, + + unload(texture: Texture | Texture[]): void + { + if (Array.isArray(texture)) + { + texture.forEach((t) => t.destroy(true)); + } + else + { + texture.destroy(true); + } + } + +} as LoaderParser; + diff --git a/packages/assets/src/loader/parsers/loadSpritesheet.ts b/packages/assets/src/loader/parsers/loadSpritesheet.ts new file mode 100644 index 0000000000..2a2c07c6c2 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadSpritesheet.ts @@ -0,0 +1,108 @@ +import type { Texture } from '@pixi/core'; +import { ExtensionType } from '@pixi/core'; +import type { ISpritesheetData } from '@pixi/spritesheet'; +import { Spritesheet } from '@pixi/spritesheet'; + +import { dirname, extname } from '../../utils/path'; + +import type { Loader } from '../Loader'; +import type { LoadAsset } from '../types'; +import type { LoaderParser } from './LoaderParser'; + +interface SpriteSheetJson extends ISpritesheetData +{ + meta: { + image: string; + scale: string; + // eslint-disable-next-line camelcase + related_multi_packs?: string[]; + }; +} + +/** + * Loader plugin that parses sprite sheets! + * once the JSON has been loaded this checks to see if the JSON is spritesheet data. + * If it is, we load the spritesheets image and parse the data into PIXI.Spritesheet + * All textures in the sprite sheet are then added to the cache + */ +export const loadSpritesheet = { + extension: ExtensionType.LoadParser, + + testParse(asset: SpriteSheetJson, options: LoadAsset): boolean + { + return (extname(options.src).includes('.json') && !!asset.frames); + }, + + async parse(asset: SpriteSheetJson, options: LoadAsset, loader: Loader): Promise + { + let basePath = dirname(options.src); + + if (basePath && basePath.lastIndexOf('/') !== (basePath.length - 1)) + { + basePath += '/'; + } + + const imagePath = basePath + asset.meta.image; + + const assets = await loader.load([imagePath]) as Record; + + const texture = assets[imagePath]; + + const spritesheet = new Spritesheet( + texture.baseTexture, + asset, + options.src, + ); + + await spritesheet.parse(); + + // Check and add the multi atlas + // Heavily influenced and based on https://github.com/rocket-ua/pixi-tps-loader/blob/master/src/ResourceLoader.js + // eslint-disable-next-line camelcase + const multiPacks = asset?.meta?.related_multi_packs; + + if (Array.isArray(multiPacks)) + { + const promises: Promise[] = []; + + for (const item of multiPacks) + { + if (typeof item !== 'string') + { + continue; + } + + const itemUrl = basePath + item; + + // Check if the file wasn't already added as multipack + if (options.data?.ignoreMultiPack) + { + continue; + } + + promises.push(loader.load({ + src: itemUrl, + data: { + ignoreMultiPack: true, + } + })); + } + + const res = await Promise.all(promises); + + spritesheet.linkedSheets = res; + res.forEach((item) => + { + item.linkedSheets = [spritesheet].concat(spritesheet.linkedSheets.filter((sp) => (sp !== item))); + }); + } + + return spritesheet; + }, + + unload(spritesheet: Spritesheet) + { + spritesheet.destroy(true); + }, + +} as LoaderParser; diff --git a/packages/assets/src/loader/parsers/loadTexture.ts b/packages/assets/src/loader/parsers/loadTexture.ts new file mode 100644 index 0000000000..164eb7f4b1 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadTexture.ts @@ -0,0 +1,104 @@ +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; +import { getResolutionOfUrl } from '@pixi/utils'; +import type { Loader } from '../Loader'; +import type { LoadAsset } from '../types'; + +import type { LoaderParser } from './LoaderParser'; +import { WorkerManager } from './WorkerManager'; + +const validImages = ['jpg', 'png', 'jpeg', 'avif', 'webp']; + +/** + * Returns a promise that resolves an ImageBitmaps. + * This function is designed to be used by a worker. + * Part of WorkerManager! + * @param url - The image to load an image bitmap for + */ +export async function loadImageBitmap(url: string): Promise +{ + const response = await fetch(url); + const imageBlob = await response.blob(); + const imageBitmap = await createImageBitmap(imageBlob); + + return imageBitmap; +} + +export type LoadTextureData = { + baseTexture: BaseTexture; +}; + +/** + * Loads our textures! + * this makes use of imageBitmaps where available. + * We load the ImageBitmap on a different thread using the WorkerManager + * We can then use the ImageBitmap as a source for a Pixi Texture + */ +export const loadTextures = { + extension: ExtensionType.LoadParser, + + config: { + preferWorkers: true, + }, + + test(url: string): boolean + { + const tempURL = url.split('?')[0]; + const extension = tempURL.split('.').pop(); + + return validImages.includes(extension); + }, + + async load(url: string, asset: LoadAsset, loader: Loader): Promise + { + let src: any = null; + + if (window.createImageBitmap) + { + src = this.config.preferWorkers ? await WorkerManager.loadImageBitmap(url) : await loadImageBitmap(url); + } + else + { + src = await new Promise((resolve) => + { + src = new Image(); + src.crossOrigin = 'anonymous'; + + src.src = url; + if (src.complete) + { + resolve(src); + } + else + { + src.onload = (): void => + { + resolve(src); + }; + } + }); + } + + const base = new BaseTexture(src, { + resolution: getResolutionOfUrl(url), + ...asset.data, + }); + + base.resource.src = url; + + const texture = new Texture(base); + + // make sure to nuke the promise if a texture is destroyed.. + texture.baseTexture.on('dispose', () => + { + delete loader.promiseCache[url]; + }); + + return texture; + }, + + unload(texture: Texture): void + { + texture.destroy(true); + } + +} as LoaderParser; diff --git a/packages/assets/src/loader/parsers/loadTxt.ts b/packages/assets/src/loader/parsers/loadTxt.ts new file mode 100644 index 0000000000..bc7ac77926 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadTxt.ts @@ -0,0 +1,22 @@ +import { ExtensionType } from '@pixi/core'; +import { extname } from '../../utils/path'; +import type { LoaderParser } from './LoaderParser'; + +/** Simple loader plugin for loading text data */ +export const loadTxt = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + return (extname(url).includes('.txt')); + }, + + async load(url: string): Promise + { + const response = await fetch(url); + + const txt = await response.text(); + + return txt; + }, +} as LoaderParser; diff --git a/packages/assets/src/loader/parsers/loadWebFont.ts b/packages/assets/src/loader/parsers/loadWebFont.ts new file mode 100644 index 0000000000..8c92d2a2f6 --- /dev/null +++ b/packages/assets/src/loader/parsers/loadWebFont.ts @@ -0,0 +1,102 @@ +import { ExtensionType } from '@pixi/core'; +import { basename, extname } from '../../utils/path'; +import type { LoadAsset } from '../types'; +import type { LoaderParser } from './LoaderParser'; + +const validWeights = ['normal', 'bold', + '100', '200', '300', '400', '500', '600', '700', '800', '900', +]; +const validFonts = ['woff', 'woff2', 'ttf', 'otf']; + +export type LoadFontData = { + family: string; + display: string; + featureSettings: string; + stretch: string; + style: string; + unicodeRange: string; + variant: string; + weights: string[]; +}; + +/** + * Return font face name from a file name + * Ex.: 'fonts/tital-one.woff' turns into 'Titan One' + * @param url - File url + */ +export function getFontFamilyName(url: string): string +{ + const ext = extname(url); + const name = basename(url, ext); + + // Replace dashes by white spaces + const nameWithSpaces = name.replace(/(-|_)/g, ' '); + + // Upper case first character of each word + const nameTitleCase = nameWithSpaces.toLowerCase() + .split(' ') + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); + + return nameTitleCase; +} + +/** Web font loader plugin */ +export const loadWebFont = { + extension: ExtensionType.LoadParser, + + test(url: string): boolean + { + const tempURL = url.split('?')[0]; + const extension = tempURL.split('.').pop(); + + return validFonts.includes(extension); + }, + + async load(url: string, options?: LoadAsset): Promise + { + // Prevent loading font if navigator is not online + if (!window.navigator.onLine) + { + throw new Error('[loadWebFont] Cannot load font - navigator is offline'); + } + + if ('FontFace' in window) + { + const fontFaces: FontFace[] = []; + const name = options.data?.family ?? getFontFamilyName(url); + const weights = options.data?.weights?.filter((weight) => validWeights.includes(weight)) ?? ['normal']; + const data = options.data ?? {}; + + for (let i = 0; i < weights.length; i++) + { + const weight = weights[i]; + + const font = new FontFace(name, `url(${url})`, { + ...data, + weight, + }); + + await font.load(); + + document.fonts.add(font); + + fontFaces.push(font); + } + + return fontFaces.length === 1 ? fontFaces[0] : fontFaces; + } + + // #if _DEBUG + console.warn('[loadWebFont] FontFace API is not supported. Skipping loading font'); + // #endif + + return null; + }, + + unload(font: FontFace | FontFace[]): void + { + (Array.isArray(font) ? font : [font]) + .forEach((t) => document.fonts.delete(t)); + } +} as LoaderParser; diff --git a/packages/assets/src/loader/types.ts b/packages/assets/src/loader/types.ts new file mode 100644 index 0000000000..f9d1166aa1 --- /dev/null +++ b/packages/assets/src/loader/types.ts @@ -0,0 +1,13 @@ +import type { LoaderParser } from './parsers'; + +export interface LoadAsset +{ + src: string; + data?: T; +} + +export interface PromiseAndParser +{ + promise: Promise + parser: LoaderParser +} diff --git a/packages/assets/src/resolver/Resolver.ts b/packages/assets/src/resolver/Resolver.ts new file mode 100644 index 0000000000..85bd4cdeea --- /dev/null +++ b/packages/assets/src/resolver/Resolver.ts @@ -0,0 +1,542 @@ +import { convertToList } from '../utils/convertToList'; +import { createStringVariations } from '../utils/createStringVariations'; +import { isSingleItem } from '../utils/isSingleItem'; +import { getBaseUrl, makeAbsoluteUrl } from '../utils/url/makeAbsoluteUrl'; +import type { ResolveAsset, PreferOrder, ResolveURLParser, ResolverManifest, ResolverBundle } from './types'; + +/** + * A class that is responsible for resolving mapping asset URLs to keys. + * At its most basic it can be used for Aliases: + * + * ``` + * resolver.add('foo', 'bar'); + * resolver.resolveUrl('foo') // => 'bar' + * ``` + * + * It can also be used to resolve the most appropriate asset for a given URL: + * + * ``` + * resolver.prefer({ + * params:{ + * format:'webp', + * resolution: 2, + * } + * }) + * + * resolver.add('foo', ['bar@2x.webp', 'bar@2x.png', 'bar.webp', 'bar.png']); + * + * resolver.resolveUrl('foo') // => 'bar@2x.webp' + * ``` + * Other features include: + * - Ability to process a manifest file to get the correct understanding of how to resolve all assets + * - Ability to add custom parsers for specific file types + * - Ability to add custom prefer rules + * + * This class only cares about the URL, not the loading of the asset itself. + * + * It is not intended that this class is created by developers - its part of the Asset class + * This is the third major system of PixiJS' main Assets class + * @memberof PIXI + */ +export class Resolver +{ + private _assetMap: Record = {}; + private _preferredOrder: PreferOrder[] = []; + + private _parsers: ResolveURLParser[] = []; + + private _resolverHash: Record = {}; + private _basePath: string; + private _manifest: ResolverManifest; + private _bundles: Record = {}; + + /** + * Let the resolver know which assets you prefer to use when resolving assets. + * Multiple prefer user defined rules can be added. + * @example + * resolver.prefer({ + * // first look for something with the correct format, and then then correct resolution + * priority: ['format', 'resolution'], + * params:{ + * format:'webp', // prefer webp images + * resolution: 2, // prefer a resolution of 2 + * } + * }) + * resolver.add('foo', ['bar@2x.webp', 'bar@2x.png', 'bar.webp', 'bar.png']); + * resolver.resolveUrl('foo') // => 'bar@2x.webp' + * @param preferOrders - the prefer options + */ + public prefer(...preferOrders: PreferOrder[]): void + { + preferOrders.forEach((prefer) => + { + this._preferredOrder.push(prefer); + + if (!prefer.priority) + { + // generate the priority based on the order of the object + prefer.priority = Object.keys(prefer.params); + } + }); + + this._resolverHash = {}; + } + + /** + * Set the base path to append to all urls when resolving + * @example + * resolver.basePath = 'https://home.com/'; + * resolver.add('foo', 'bar.ong'); + * resolver.resolveUrl('foo', 'bar.png'); // => 'https://home.com/bar.png' + * @param basePath - the base path to use + */ + public set basePath(basePath: string) + { + this._basePath = getBaseUrl(basePath); + } + + public get basePath(): string + { + return this._basePath; + } + + /** Used for testing, this resets the resolver to its initial state */ + public reset(): void + { + this._preferredOrder = []; + + this._resolverHash = {}; + this._assetMap = {}; + this._basePath = null; + this._manifest = null; + } + + /** + * A URL parser helps the parser to extract information and create an asset object-based on parsing the URL itself. + * @example + * resolver.add('foo', [ + * { + * resolution:2, + * format:'png' + * src: 'image@2x.png' + * }, + * { + * resolution:1, + * format:'png' + * src: 'image.png' + * } + * ]); + * + * + * // with a url parser the information such as resolution and file format could extracted from the url itself: + * resolver.addUrlParser({ + * test: loadTextures.test, // test if url ends in an image + * parse: (value: string) => + * ({ + * resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'), + * format: value.split('.').pop(), + * src: value, + * }), + * }); + * + * // now resolution and format can be extracted from the url + * resolver.add('foo', [ + * 'image@2x.png' + * 'image.png' + * ]); + * @param urlParsers - The URL parser that you want to add to the resolver + */ + public addUrlParser(...urlParsers: ResolveURLParser[]): void + { + urlParsers.forEach((parser) => + { + if (this._parsers.includes(parser)) return; + + this._parsers.push(parser); + }); + } + + /** + * Remove a URL parser from the resolver + * @param urlParsers - the URL parser that you want to remove from the resolver + */ + public removeUrlParser(...urlParsers: ResolveURLParser[]): void + { + for (let i = urlParsers.length - 1; i >= 0; i--) + { + const parser = urlParsers[i]; + const index = this._parsers.indexOf(parser); + + if (index !== -1) + { + this._parsers.splice(index, 1); + } + } + } + + /** + * Add a manifest to the asset resolver. This is a nice way to add all the asset information in one go. + * generally a manifest would be built using a tool. + * @param manifest - the manifest to add to the resolver + */ + public addManifest(manifest: ResolverManifest): void + { + if (this._manifest) + { + // #if _DEBUG + console.warn('[Resolver] Manifest already exists, this will be overwritten'); + // #endif + } + + this._manifest = manifest; + + manifest.bundles.forEach((bundle) => + { + this.addBundle(bundle.name, bundle.assets); + }); + } + + /** + * This adds a bundle of assets in one go so that you can resolve them as a group. + * For example you could add a bundle for each screen in you pixi app + * @example + * resolver.addBundle('animals', { + * bunny: 'bunny.png', + * chicken: 'chicken.png', + * thumper: 'thumper.png', + * }); + * + * const resolvedAssets = await resolver.resolveBundle('animals'); + * @param bundleId - The id of the bundle to add + * @param assets - A record of the asset or assets that will be chosen from when loading via the specified key + */ + public addBundle(bundleId: string, assets: ResolverBundle['assets']): void + { + const assetNames: string[] = []; + + if (Array.isArray(assets)) + { + assets.forEach((asset) => + { + if (typeof asset.name === 'string') + { + assetNames.push(asset.name); + } + else + { + assetNames.push(...asset.name); + } + + this.add(asset.name, asset.srcs); + }); + } + else + { + Object.keys(assets).forEach((key) => + { + assetNames.push(key); + this.add(key, assets[key]); + }); + } + + this._bundles[bundleId] = assetNames; + } + + /** + * Tells the resolver what keys are associated with witch asset. + * The most important thing the resolver does + * @example + * // single key, single asset: + * resolver.add('foo', 'bar.png'); + * resolver.resolveUrl('foo') // => 'bar.png' + * + * // multiple keys, single asset: + * resolver.add(['foo', 'boo'], 'bar.png'); + * resolver.resolveUrl('foo') // => 'bar.png' + * resolver.resolveUrl('boo') // => 'bar.png' + * + * // multiple keys, multiple assets: + * resolver.add(['foo', 'boo'], ['bar.png', 'bar.webp']); + * resolver.resolveUrl('foo') // => 'bar.png' + * + * // add custom data attached to the resolver + * Resolver.add( + * 'bunnyBooBooSmooth', + * 'bunny{png,webp}', + * {scaleMode:SCALE_MODES.NEAREST} // base texture options + * ); + * + * resolver.resolve('bunnyBooBooSmooth') // => {src: 'bunny.png', data: {scaleMode: SCALE_MODES.NEAREST}} + * @param keysIn - The keys to map, can be an array or a single key + * @param assetsIn - The assets to associate with the key(s) + * @param data - The data that will be attached to the object that resolved object. + */ + public add(keysIn: string | string[], assetsIn: string | ResolveAsset | (ResolveAsset | string)[], data?: unknown): void + { + const keys: string[] = convertToList(keysIn); + + keys.forEach((key) => + { + if (this._assetMap[key]) + { + // #if _DEBUG + console.warn(`[Resolver] already has key: ${key} overwriting`); + // #endif + } + }); + + if (!Array.isArray(assetsIn)) + { + if (typeof assetsIn === 'string') + { + assetsIn = createStringVariations(assetsIn); + } + else + { + assetsIn = [assetsIn]; + } + } + + const assetMap: ResolveAsset[] = assetsIn.map((asset): ResolveAsset => + { + let formattedAsset = asset as ResolveAsset; + + // check if is a string + if (typeof asset === 'string') + { + // first see if it contains any {} tags... + + let parsed = false; + + for (let i = 0; i < this._parsers.length; i++) + { + const parser = this._parsers[i]; + + if (parser.test(asset)) + { + formattedAsset = parser.parse(asset); + parsed = true; + break; + } + } + + if (!parsed) + { + formattedAsset = { + src: asset, + }; + } + } + + if (!formattedAsset.format) + { + formattedAsset.format = formattedAsset.src.split('.').pop(); + } + + if (!formattedAsset.alias) + { + formattedAsset.alias = keys; + } + + if (this._basePath) + { + formattedAsset.src = makeAbsoluteUrl(formattedAsset.src, this._basePath); + } + + formattedAsset.data = formattedAsset.data ?? data; + + return formattedAsset; + }); + + keys.forEach((key) => + { + this._assetMap[key] = assetMap; + }); + } + + /** + * If the resolver has had a manifest set via setManifest, this will return the assets urls for + * a given bundleId or bundleIds. + * @example + * // manifest example + * const manifest = { + * bundles:[{ + * name:'load-screen', + * assets:[ + * { + * name: 'background', + * srcs: 'sunset.png', + * }, + * { + * name: 'bar', + * srcs: 'load-bar.{png,webp}', + * } + * ] + * }, + * { + * name:'game-screen', + * assets:[ + * { + * name: 'character', + * srcs: 'robot.png', + * }, + * { + * name: 'enemy', + * srcs: 'bad-guy.png', + * } + * ] + * }] + * }} + * resolver.setManifest(manifest); + * const resolved = resolver.resolveBundle('load-screen'); + * @param bundleIds - The bundle ids to resolve + * @returns All the bundles assets or a hash of assets for each bundle specified + */ + public resolveBundle(bundleIds: string | string[]): + Record | Record> + { + const singleAsset = isSingleItem(bundleIds); + + bundleIds = convertToList(bundleIds); + + const out: Record> = {}; + + bundleIds.forEach((bundleId) => + { + const assetNames = this._bundles[bundleId]; + + if (assetNames) + { + out[bundleId] = this.resolve(assetNames) as Record; + } + }); + + return singleAsset ? out[bundleIds[0]] : out; + } + + /** + * Does exactly what resolve does, but returns just the URL rather than the whole asset object + * @param key - The key or keys to resolve + * @returns - The URLs associated with the key(s) + */ + public resolveUrl(key: string | string[]): string | Record + { + const result = this.resolve(key); + + if (typeof key !== 'string') + { + const out: Record = {}; + + for (const i in result) + { + out[i] = (result as Record)[i].src; + } + + return out; + } + + return (result as ResolveAsset).src; + } + + /** + * Resolves each key in the list to an asset object. + * Another key function of the resolver! After adding all the various key/asset pairs. this will run the logic + * of finding which asset to return based on any preferences set using the `prefer` function + * by default the same key passed in will be returned if nothing is matched by the resolver. + * @example + * resolver.add('boo', 'bunny.png'); + * + * resolver.resolve('boo') // => {src:'bunny.png'} + * + * // will return the same string as no key was added for this value.. + * resolver.resolve('another-thing.png') // => {src:'another-thing.png'} + * @param keys - key or keys to resolve + * @returns - the resolve asset or a hash of resolve assets for each key specified + */ + public resolve(keys: string | string[]): ResolveAsset | Record + { + const singleAsset = isSingleItem(keys); + + keys = convertToList(keys); + + const result: Record = {}; + + keys.forEach((key) => + { + if (!this._resolverHash[key]) + { + if (this._assetMap[key]) + { + let assets = this._assetMap[key]; + + const preferredOrder = this._getPreferredOrder(assets); + + const bestAsset = assets[0]; + + preferredOrder?.priority.forEach((priorityKey) => + { + preferredOrder.params[priorityKey].forEach((value: unknown) => + { + const filteredAssets = assets.filter((asset) => + { + if (asset[priorityKey]) + { + return asset[priorityKey] === value; + } + + return false; + }); + + if (filteredAssets.length) + { + assets = filteredAssets; + } + }); + }); + + this._resolverHash[key] = (assets[0] ?? bestAsset); + } + else + { + let src = key; + + if (this._basePath) + { + src = makeAbsoluteUrl(src, this._basePath); + } + + // if the resolver fails we just pass back the key assuming its a url + this._resolverHash[key] = { + src, + }; + } + } + + result[key] = this._resolverHash[key]; + }); + + return singleAsset ? result[keys[0]] : result; + } + + /** + * Internal function for figuring out what prefer criteria an asset should use. + * @param assets + */ + private _getPreferredOrder(assets: ResolveAsset[]): PreferOrder + { + for (let i = 0; i < assets.length; i++) + { + const asset = assets[0]; + + const preferred = this._preferredOrder.find((preference: PreferOrder) => + preference.params.format.includes(asset.format)); + + if (preferred) + { + return preferred; + } + } + + return this._preferredOrder[0]; + } +} diff --git a/packages/assets/src/resolver/index.ts b/packages/assets/src/resolver/index.ts new file mode 100644 index 0000000000..78f56d4593 --- /dev/null +++ b/packages/assets/src/resolver/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './parsers'; diff --git a/packages/assets/src/resolver/parsers/index.ts b/packages/assets/src/resolver/parsers/index.ts new file mode 100644 index 0000000000..59c17b3cc5 --- /dev/null +++ b/packages/assets/src/resolver/parsers/index.ts @@ -0,0 +1,2 @@ +export * from './spriteSheetUrlParser'; +export * from './textureUrlParser'; diff --git a/packages/assets/src/resolver/parsers/spriteSheetUrlParser.ts b/packages/assets/src/resolver/parsers/spriteSheetUrlParser.ts new file mode 100644 index 0000000000..0530a0f065 --- /dev/null +++ b/packages/assets/src/resolver/parsers/spriteSheetUrlParser.ts @@ -0,0 +1,31 @@ +import { ExtensionType } from '@pixi/core'; +import { settings } from '@pixi/settings'; +import type { ResolveAsset, ResolveURLParser } from '../types'; + +const validImages = ['jpg', 'png', 'jpeg', 'avif', 'webp']; + +export const spriteSheetUrlParser = { + extension: ExtensionType.ResolveParser, + + test: (value: string): boolean => + { + const tempURL = value.split('?')[0]; + + const split = tempURL.split('.'); + + const extension = split.pop(); + const format = split.pop(); + + return extension === 'json' && validImages.includes(format); + }, + parse: (value: string): ResolveAsset => + { + const split = value.split('.'); + + return { + resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'), + format: split[split.length - 2], + src: value, + }; + }, +} as ResolveURLParser; diff --git a/packages/assets/src/resolver/parsers/textureUrlParser.ts b/packages/assets/src/resolver/parsers/textureUrlParser.ts new file mode 100644 index 0000000000..17007ecaca --- /dev/null +++ b/packages/assets/src/resolver/parsers/textureUrlParser.ts @@ -0,0 +1,16 @@ +import { ExtensionType } from '@pixi/core'; +import { settings } from '@pixi/settings'; + +import { loadTextures } from '../../loader'; +import type { ResolveAsset, ResolveURLParser } from '../types'; + +export const textureUrlParser = { + extension: ExtensionType.ResolveParser, + test: loadTextures.test, + parse: (value: string): ResolveAsset => + ({ + resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'), + format: value.split('.').pop(), + src: value, + }), +} as ResolveURLParser; diff --git a/packages/assets/src/resolver/types.ts b/packages/assets/src/resolver/types.ts new file mode 100644 index 0000000000..4c6bd43e21 --- /dev/null +++ b/packages/assets/src/resolver/types.ts @@ -0,0 +1,66 @@ +import type { ExtensionMetadata } from '@pixi/core'; + +/** + * A prefer order lets the resolver know which assets to prefere depending on the various parameters passed to it. + * @memberof PIXI + */ +export interface PreferOrder +{ + /** the importance order of the params */ + priority?: string[]; + params: { + [key: string]: any; + }; +} + +/** + * the object returned when a key is resolved to an asset. + * it will contain any additional information passed in the asset was added. + * @memberof PIXI + */ +export interface ResolveAsset extends Record +{ + alias?: string[]; + src: string; +} + +export type ResolverAssetsArray = { + name: string | string[]; + srcs: string | ResolveAsset[]; +}[]; + +export type ResolverAssetsObject = Record; + +/** + * Structure of a bundle found in a manfest file + * @memberof PIXI + */ +export interface ResolverBundle +{ + name: string; + assets: ResolverAssetsArray | ResolverAssetsObject +} + +/** + * The expected format of a manifest. This would normally be auto generated ar made by the developer + * @memberof PIXI + */ +export type ResolverManifest = { + // room for more props as we go! + bundles: ResolverBundle[]; +}; + +/** + * Format for url parser, will test a string and if it pass will then parse it, turning it into an ResolveAsset + * @memberof PIXI + */ +export interface ResolveURLParser +{ + extension?: ExtensionMetadata; + /** A config to adjust the parser */ + config?: Record + /** the test to perform on the url to determin if it should be parsed */ + test: (url: string) => boolean; + /** the function that will convert the url into an object */ + parse: (value: string) => ResolveAsset; +} diff --git a/packages/assets/src/utils/convertToList.ts b/packages/assets/src/utils/convertToList.ts new file mode 100644 index 0000000000..8154d76b6c --- /dev/null +++ b/packages/assets/src/utils/convertToList.ts @@ -0,0 +1,22 @@ +export const convertToList = (input: string | T | (string | T)[], transform?: (input: string) => T): T[] => +{ + if (!Array.isArray(input)) + { + input = [input as T]; + } + + if (!transform) + { + return input as T[]; + } + + return (input as (string | T)[]).map((item): T => + { + if (typeof item === 'string') + { + return transform(item as string); + } + + return item as T; + }); +}; diff --git a/packages/assets/src/utils/createStringVariations.ts b/packages/assets/src/utils/createStringVariations.ts new file mode 100644 index 0000000000..1f2c2d9658 --- /dev/null +++ b/packages/assets/src/utils/createStringVariations.ts @@ -0,0 +1,55 @@ +function processX(base: string, ids: string[][], depth: number, result: string[], tags: string[]) +{ + const id = ids[depth]; + + for (let i = 0; i < id.length; i++) + { + const value = id[i]; + + if (depth < ids.length - 1) + { + processX(base.replace(result[depth], value), ids, depth + 1, result, tags); + } + else + { + tags.push(base.replace(result[depth], value)); + } + } +} + +/** + * Creates a list of all possible combinations of the given strings. + * @example + * const out2 = createStringVariations('name is {chicken,wolf,sheep}'); + * console.log(out2); // [ 'name is chicken', 'name is wolf', 'name is sheep' ] + * @param string - The string to process + */ +export function createStringVariations(string: string): string[] +{ + const regex = /\{(.*?)\}/g; + + const result = string.match(regex); + + const tags: string[] = []; + + if (result) + { + const ids: string[][] = []; + + result.forEach((vars) => + { + // first remove the brackets... + const split = vars.substring(1, vars.length - 1).split(','); + + ids.push(split); + }); + + processX(string, ids, 0, result, tags); + } + else + { + tags.push(string); + } + + return tags; +} diff --git a/packages/assets/src/utils/detections/detectAvif.ts b/packages/assets/src/utils/detections/detectAvif.ts new file mode 100644 index 0000000000..627e6c8875 --- /dev/null +++ b/packages/assets/src/utils/detections/detectAvif.ts @@ -0,0 +1,10 @@ +export async function detectAvif(): Promise +{ + if (!globalThis.createImageBitmap) return false; + + // eslint-disable-next-line max-len + const avifData = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A='; + const blob = await fetch(avifData).then((r) => r.blob()); + + return createImageBitmap(blob).then(() => true, () => false); +} diff --git a/packages/assets/src/utils/detections/detectWebp.ts b/packages/assets/src/utils/detections/detectWebp.ts new file mode 100644 index 0000000000..c52452dbb4 --- /dev/null +++ b/packages/assets/src/utils/detections/detectWebp.ts @@ -0,0 +1,9 @@ +export async function detectWebp(): Promise +{ + if (!globalThis.createImageBitmap) return false; + + const webpData = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA='; + const blob = await fetch(webpData).then((r) => r.blob()); + + return createImageBitmap(blob).then(() => true, () => false); +} diff --git a/packages/assets/src/utils/detections/index.ts b/packages/assets/src/utils/detections/index.ts new file mode 100644 index 0000000000..9090a8684a --- /dev/null +++ b/packages/assets/src/utils/detections/index.ts @@ -0,0 +1,2 @@ +export * from './detectAvif'; +export * from './detectWebp'; diff --git a/packages/assets/src/utils/index.ts b/packages/assets/src/utils/index.ts new file mode 100644 index 0000000000..99cb83b954 --- /dev/null +++ b/packages/assets/src/utils/index.ts @@ -0,0 +1,6 @@ +export * from './path'; +export * from './detections'; +export * from './url'; +export * from './convertToList'; +export * from './createStringVariations'; +export * from './isSingleItem'; diff --git a/packages/assets/src/utils/isSingleItem.ts b/packages/assets/src/utils/isSingleItem.ts new file mode 100644 index 0000000000..2c6c4fcdf2 --- /dev/null +++ b/packages/assets/src/utils/isSingleItem.ts @@ -0,0 +1,5 @@ +/** + * Checks if the given value is an array. + * @param item - The item to test + */ +export const isSingleItem = (item: unknown): boolean => (!Array.isArray(item)); diff --git a/packages/assets/src/utils/path.ts b/packages/assets/src/utils/path.ts new file mode 100644 index 0000000000..064cc2b5ad --- /dev/null +++ b/packages/assets/src/utils/path.ts @@ -0,0 +1,151 @@ +function isAbsolute(path: string): boolean +{ + return path.charAt(0) === '/'; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +const splitPathRe + = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + +function splitPath(filename: string): string[] +{ + return splitPathRe.exec(filename).slice(1); +} + +/** + * Returns the last portion of a path + * @param path - The path to get the last portion of + * @param ext - An optional extension to add to the end of the path + */ +export function basename(path: string, ext: string): string +{ + let f = splitPath(path)[2]; + + if (ext && f.substring(-1 * ext.length) === ext) + { + f = f.substring(0, f.length - ext.length); + } + + return f; +} + +/** + * Returns the extension of the path, from the last occurrence of the . (period) character + * to end of the string in the last portion of the path + * @param path - The path to get the extension of + */ +export function extname(path: string): string +{ + return splitPath(path)[3]; +} + +/** + * Returns the extension of the path, from the last occurrence of the . (period) character to the end of + * string in the last portion of the path. + * @param parts - The path parts to join + */ +export function join(...parts: string[]): string +{ + let path = ''; + + for (let i = 0; i < parts.length; i++) + { + const segment = parts[i]; + + if (segment) + { + if (!path) + { + path += segment; + } + else + { + path += `/${segment}`; + } + } + } + + return normalize(path); +} + +/** + * Returns the directory name of a path + * @param path - The path to resolve. + */ +export function dirname(path: string): string +{ + const result = splitPath(path); + const root = result[0]; + let dir = result[1]; + + if (!root && !dir) + { + // No dirname whatsoever + return '.'; + } + + if (dir) + { + // It has a dirname, strip trailing slash + dir = dir.substring(0, dir.length - 1); + } + + return root + dir; +} + +function normalize(path: string): string +{ + const _isAbsolute = isAbsolute(path); + const trailingSlash = path && path[path.length - 1] === '/'; + + // Normalize the path + path = normalizeArray(path.split('/'), !_isAbsolute).join('/'); + + if (!path && !_isAbsolute) + { + path = '.'; + } + if (path && trailingSlash) + { + path += '/'; + } + + return (_isAbsolute ? '/' : '') + path; +} + +// resolves . and .. elements in a path array with directory names there +// must be no slashes or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts: string[], allowAboveRoot: boolean): string[] +{ + const res = []; + + for (let i = 0; i < parts.length; i++) + { + const p = parts[i]; + + // ignore empty parts + if (!p || p === '.') + { continue; } + + if (p === '..') + { + if (res.length && res[res.length - 1] !== '..') + { + res.pop(); + } + else if (allowAboveRoot) + { + res.push('..'); + } + } + else + { + res.push(p); + } + } + + return res; +} diff --git a/packages/assets/src/utils/url/index.ts b/packages/assets/src/utils/url/index.ts new file mode 100644 index 0000000000..60e4cd4515 --- /dev/null +++ b/packages/assets/src/utils/url/index.ts @@ -0,0 +1,3 @@ +export * from './urlJoin'; +export * from './isAbsoluteUrl'; +export * from './makeAbsoluteUrl'; diff --git a/packages/assets/src/utils/url/isAbsoluteUrl.ts b/packages/assets/src/utils/url/isAbsoluteUrl.ts new file mode 100644 index 0000000000..7ab0b2f118 --- /dev/null +++ b/packages/assets/src/utils/url/isAbsoluteUrl.ts @@ -0,0 +1,21 @@ +/** + * Used to check whether the given URL is an absolute URL or not. + * An absolute URL is defined as a URL that contains the complete details needed to locate a file + * + * Taken directly from here: https://github.com/sindresorhus/is-absolute-url/blob/master/index.js + * + * returns true if the URL is absolute, false if relative. + * @param url - The URL to test + */ +export function isAbsoluteUrl(url: string): boolean +{ + // Don't match Windows paths `c:\` + if ((/^[a-zA-Z]:\\/).test(url)) + { + return false; + } + + // Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + // Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + return (/^[a-zA-Z][a-zA-Z\d+\-.]*:/).test(url); +} diff --git a/packages/assets/src/utils/url/makeAbsoluteUrl.ts b/packages/assets/src/utils/url/makeAbsoluteUrl.ts new file mode 100644 index 0000000000..380e800d3e --- /dev/null +++ b/packages/assets/src/utils/url/makeAbsoluteUrl.ts @@ -0,0 +1,27 @@ +import { isAbsoluteUrl } from './isAbsoluteUrl'; +import { urlJoin } from './urlJoin'; + +export function getBaseUrl(url: string): string +{ + const re = new RegExp(/^.*\//); + + return re.exec(url.split('?')[0])[0].replace(new RegExp(/#\/|#/), ''); +} + +const baseUrl = getBaseUrl(document.baseURI ?? window.location.href); + +/** + * Converts URL to an absolute path. + * When loading from a Web Worker, we must use absolute paths. + * If the URL is already absolute we return it as is + * If it's not, we convert it + * @param url - The URL to test + * @param customBaseUrl - The base URL to use + */ +export function makeAbsoluteUrl(url: string, customBaseUrl?: string): string +{ + const base = customBaseUrl !== undefined ? getBaseUrl(customBaseUrl) : baseUrl; + const absolutePath = isAbsoluteUrl(url) ? url : urlJoin(base, url); + + return absolutePath; +} diff --git a/packages/assets/src/utils/url/urlJoin.ts b/packages/assets/src/utils/url/urlJoin.ts new file mode 100644 index 0000000000..f9db50f027 --- /dev/null +++ b/packages/assets/src/utils/url/urlJoin.ts @@ -0,0 +1,89 @@ +function normalize(strArray: string[]): string +{ + const resultArray = []; + + if (strArray.length === 0) { return ''; } + + if (typeof strArray[0] !== 'string') + { + throw new TypeError(`Url must be a string. Received ${strArray[0]}`); + } + + // If the first part is a plain protocol, we combine it with the next part. + if (((/^[^/:]+:\/*$/).exec(strArray[0])) && strArray.length > 1) + { + const first = strArray.shift(); + + strArray[0] = first + strArray[0]; + } + + // There must be two or three slashes in the file protocol, two slashes in anything else. + if ((/^file:\/\/\//).exec(strArray[0])) + { + strArray[0] = strArray[0].replace(/^([^/:]+):\/*/, '$1:///'); + } + else + { + strArray[0] = strArray[0].replace(/^([^/:]+):\/*/, '$1://'); + } + + for (let i = 0; i < strArray.length; i++) + { + let component = strArray[i]; + + if (typeof component !== 'string') + { + throw new TypeError(`Url must be a string. Received ${component}`); + } + + if (component === '') { continue; } + + if (i > 0) + { + // Removing the starting slashes for each component but the first. + component = component.replace(/^[/]+/, ''); + } + if (i < strArray.length - 1) + { + // Removing the ending slashes for each component but the last. + component = component.replace(/[/]+$/, ''); + } + else + { + // For the last component we will combine multiple slashes to a single one. + component = component.replace(/[/]+$/, '/'); + } + + resultArray.push(component); + } + + let str = resultArray.join('/'); + // Each input component is now separated by a single slash except the possible first plain protocol part. + + // remove trailing slash before parameters or hash + str = str.replace(/\/(\?|&|#[^!])/g, '$1'); + + // replace ? in parameters with & + const parts = str.split('?'); + + str = parts.shift() + (parts.length > 0 ? '?' : '') + parts.join('&'); + + return str; +} + +export function urlJoin(...arg: string[]): string +{ + let input; + + if (typeof arg[0] === 'object') + { + input = arg[0]; + } + else + { + input = [].slice.call(arg); + } + + return normalize(input); +} + diff --git a/packages/assets/test/assets.tests.ts b/packages/assets/test/assets.tests.ts new file mode 100644 index 0000000000..bfed561094 --- /dev/null +++ b/packages/assets/test/assets.tests.ts @@ -0,0 +1,337 @@ +import { BaseTexture, Texture } from '@pixi/core'; +import { Spritesheet } from '@pixi/spritesheet'; + +import { Assets } from '@pixi/assets'; + +function wait(value = 500) +{ + // wait a bit... + return new Promise((resolve) => + setTimeout(() => resolve(), value)); +} + +describe('Assets', () => +{ + const basePath = process.env.GITHUB_ACTIONS + ? `https://raw.githubusercontent.com/pixijs/pixijs/${process.env.GITHUB_SHA}/packages/assets/test/assets/` + : 'http://localhost:8080/assets/test/assets/'; + + beforeEach(() => + { + // reset the loader + Assets.reset(); + }); + + it('should load assets', async () => + { + await Assets.init({ + basePath, + }); + + const bunny = await Assets.load('textures/bunny.png'); + + expect(bunny).toBeInstanceOf(Texture); + }); + + it('should get assets once loaded', async () => + { + await Assets.init({ + basePath, + }); + + Assets.add('test', 'textures/bunny.png'); + + // not loaded yet! + const bunny0 = Assets.get('test'); + + expect(bunny0).toBe(undefined); + + const bunny = await Assets.load('test'); + + const bunny2 = Assets.get('test'); + + expect(bunny).toBeInstanceOf(Texture); + expect(bunny2).toBe(bunny); + }); + + it('should load a webp if available by default', async () => + { + await Assets.init({ + basePath, + texturePreference: { + resolution: 2, + }, + }); + + Assets.add('test', [ + 'textures/profile-abel@0.5x.jpg', + 'textures/profile-abel@2x.jpg', + 'textures/profile-abel@0.5x.webp', + 'textures/profile-abel@2x.webp', + ]); + + // not loaded yet! + const bunny = await Assets.load('test'); + + expect(bunny.baseTexture.resource.src).toBe(`${basePath}textures/profile-abel@2x.webp`); + }); + + it('should load a correct texture based on preference', async () => + { + await Assets.init({ + basePath, + texturePreference: { + format: 'jpg', + resolution: 2, + }, + }); + + Assets.add('test', [ + 'textures/profile-abel@0.5x.jpg', + 'textures/profile-abel@2x.jpg', + 'textures/profile-abel@0.5x.webp', + 'textures/profile-abel@2x.webp', + ]); + + // not loaded yet! + const bunny = await Assets.load('test'); + + expect(bunny.baseTexture.resource.src).toBe(`${basePath}textures/profile-abel@2x.jpg`); + }); + + it('should add and load bundle', async () => + { + await Assets.init({ + basePath, + }); + + Assets.addBundle('testBundle', { + bunny: 'textures/bunny.{png,webp}', + spritesheet: 'spritesheet/spritesheet.json', + }); + + const assets = await Assets.loadBundle('testBundle'); + + expect(assets.bunny).toBeInstanceOf(Texture); + expect(assets.spritesheet).toBeInstanceOf(Spritesheet); + }); + + it('should load a bundle found in the manifest', async () => + { + await Assets.init({ + basePath, + manifest: 'json/asset-manifest-2.json', + }); + + const assets = await Assets.loadBundle('default'); + + expect(assets.bunny).toBeInstanceOf(Texture); + expect(assets['profile-abel']).toBeInstanceOf(Texture); + expect(assets.spritesheet).toBeInstanceOf(Spritesheet); + }); + + it('should load multiple bundles', async () => + { + await Assets.init({ + basePath, + manifest: 'json/asset-manifest-2.json', + }); + + const assets = await Assets.loadBundle(['default', 'data']); + + expect(assets.default.bunny).toBeInstanceOf(Texture); + expect(assets.default['profile-abel']).toBeInstanceOf(Texture); + expect(assets.default.spritesheet).toBeInstanceOf(Spritesheet); + + expect(assets.data[`test.json`]).toEqual({ testNumber: 23, testString: 'Test String 23' }); + }); + + it('should map all names', async () => + { + Assets.init({ + basePath, + }); + + Assets.add(['fish', 'chicken'], 'textures/bunny.png'); + + const bunny = await Assets.load('fish'); + + // this should be the same as bunny + const bunny2 = await Assets.get('chicken'); + + expect(bunny).toBeInstanceOf(Texture); + expect(bunny).toBe(bunny2); + }); + + it('should split url versions correctly', async () => + { + await Assets.init({ + basePath, + }); + + Assets.add('fish', 'textures/bunny.{png,webp}'); + + const bunny = await Assets.load('fish'); + + expect(bunny.baseTexture.resource.src).toBe(`${basePath}textures/bunny.webp`); + }); + + it('should background load correctly', async () => + { + await Assets.init({ + basePath, + }); + + Assets.backgroundLoad(['textures/bunny.png']); + + // wait a bit... + await wait(); + + const asset = await Assets.loader.promiseCache[`${basePath}textures/bunny.png`].promise; + + expect(asset).toBeInstanceOf(Texture); + expect(asset.baseTexture.resource.src).toBe(`${basePath}textures/bunny.png`); + }); + + it('should background load bundles', async () => + { + await Assets.init({ + basePath, + manifest: 'json/asset-manifest-2.json', + }); + + Assets.backgroundLoadBundle('default'); + + // wait a bit... + await wait(); + + const expectTypes = { + 'json/asset-manifest-2.json': Object, + 'textures/bunny.png': Texture, + 'textures/profile-abel@2x.webp': Texture, + 'spritesheet/spritesheet.json': Spritesheet, + 'spritesheet/spritesheet.png': Texture, + }; + + for (const [key, type] of Object.entries(expectTypes)) + { + const asset = await Assets.loader.promiseCache[basePath + key].promise; + + expect(asset).toBeInstanceOf(type); + } + }); + + it('should error out if loader fails', async () => + { + Assets.load('chickenSandwich.png').catch((e) => + { + expect(e).toBeInstanceOf(Error); + }); + }); + + it('should add sprite textures to the cache', async () => + { + await Assets.init({ + basePath, + }); + + await Assets.load('spritesheet/spritesheet.json'); + + const texture = Assets.get('pic-sensei.jpg'); + + expect(texture).toBeInstanceOf(Texture); + }); + + it('should dispose of a texture correctly', async () => + { + await Assets.init({ + basePath, + }); + + const bunny = await Assets.load('textures/bunny.png') as Texture; + + bunny.destroy(true); + + expect(bunny.baseTexture).toBe(null); + + const bunnyReloaded = await Assets.load('textures/bunny.png') as Texture; + + expect(bunnyReloaded.baseTexture).toBeInstanceOf(BaseTexture); + }); + + it('should load texture array correctly', async () => + { + await Assets.init({ + basePath, + }); + + Assets.addBundle('testBundle', { + bunny: 'textures/bunny.{png,webp}', + spritesheet: 'spritesheet/spritesheet.json', + }); + + const assets = await Assets.loadBundle('testBundle'); + + expect(assets.bunny).toBeInstanceOf(Texture); + expect(assets.spritesheet).toBeInstanceOf(Spritesheet); + + await Assets.unloadBundle('testBundle'); + + expect(assets.bunny.baseTexture).toBe(null); + }); + + it('should unload and remove from the cache correctly', async () => + { + await Assets.init({ + basePath, + }); + + Assets.add(['chickenSheet', 'alias'], 'spritesheet/spritesheet.json'); + + await Assets.load('chickenSheet'); + + const texture = Assets.get('pic-sensei.jpg'); + + expect(texture).toBeInstanceOf(Texture); + + await Assets.unload('chickenSheet'); + + const texture2 = Assets.get('pic-sensei.jpg'); + + expect(texture2).toBe(undefined); + }); + + it('should unload assets correctly', async () => + { + await Assets.init({ + basePath, + }); + + const bunny = await Assets.load('textures/bunny.png') as Texture; + + await Assets.unload('textures/bunny.png'); + + expect(bunny.baseTexture).toBe(null); + }); + + it('should unload bundles correctly', async () => + { + await Assets.init({ + basePath, + }); + + Assets.addBundle('testBundle', { + bunny: 'textures/bunny.{png,webp}', + spritesheet: 'spritesheet/spritesheet.json', + }); + + const assets = await Assets.loadBundle('testBundle'); + + expect(assets.bunny).toBeInstanceOf(Texture); + expect(assets.spritesheet).toBeInstanceOf(Spritesheet); + + await Assets.unloadBundle('testBundle'); + + expect(assets.bunny.baseTexture).toBe(null); + }); +}); diff --git a/packages/assets/test/assets/bitmap-font/bmGlyph-test.png b/packages/assets/test/assets/bitmap-font/bmGlyph-test.png new file mode 100644 index 0000000000000000000000000000000000000000..793bd79588650d104186ac454990c45b358a5a3d GIT binary patch literal 134415 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 J<#Oi1{|h)WJ*fZy literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/bitmap-font/bmtxt-test.txt b/packages/assets/test/assets/bitmap-font/bmtxt-test.txt new file mode 100644 index 0000000000..285d2eb73d --- /dev/null +++ b/packages/assets/test/assets/bitmap-font/bmtxt-test.txt @@ -0,0 +1,101 @@ +info face="AnisetteStd" size=25 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0 +common lineHeight=40 base=36 scaleW=1024 scaleH=512 pages=1 packed=0 +page id=0 file="bmGlyph-test.png" +chars count=95 +char id=32 x=40 y=30 width=0 height=0 xoffset=0 yoffset=27 xadvance=7 page=0 chnl=0 +char id=33 x=87 y=469 width=16 height=28 xoffset=2 yoffset=9 xadvance=8 page=0 chnl=0 +char id=34 x=135 y=370 width=18 height=18 xoffset=3 yoffset=9 xadvance=12 page=0 chnl=0 +char id=35 x=135 y=146 width=26 height=28 xoffset=0 yoffset=9 xadvance=14 page=0 chnl=0 +char id=36 x=87 y=1 width=22 height=32 xoffset=2 yoffset=6 xadvance=14 page=0 chnl=0 +char id=37 x=52 y=450 width=32 height=30 xoffset=1 yoffset=7 xadvance=23 page=0 chnl=0 +char id=38 x=1 y=208 width=38 height=28 xoffset=2 yoffset=9 xadvance=30 page=0 chnl=0 +char id=39 x=36 y=429 width=14 height=18 xoffset=3 yoffset=9 xadvance=7 page=0 chnl=0 +char id=40 x=69 y=175 width=16 height=34 xoffset=2 yoffset=6 xadvance=8 page=0 chnl=0 +char id=41 x=52 y=175 width=16 height=34 xoffset=1 yoffset=6 xadvance=8 page=0 chnl=0 +char id=42 x=135 y=315 width=20 height=20 xoffset=1 yoffset=8 xadvance=10 page=0 chnl=0 +char id=43 x=135 y=292 width=22 height=22 xoffset=2 yoffset=12 xadvance=14 page=0 chnl=0 +char id=44 x=135 y=351 width=16 height=18 xoffset=1 yoffset=23 xadvance=7 page=0 chnl=0 +char id=45 x=135 y=336 width=18 height=14 xoffset=1 yoffset=16 xadvance=7 page=0 chnl=0 +char id=46 x=36 y=458 width=14 height=14 xoffset=2 yoffset=23 xadvance=7 page=0 chnl=0 +char id=47 x=18 y=365 width=22 height=34 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 +char id=48 x=135 y=117 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=49 x=87 y=440 width=20 height=28 xoffset=2 yoffset=9 xadvance=14 page=0 chnl=0 +char id=50 x=135 y=88 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=51 x=87 y=411 width=22 height=28 xoffset=2 yoffset=9 xadvance=14 page=0 chnl=0 +char id=52 x=135 y=59 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=53 x=87 y=382 width=22 height=28 xoffset=2 yoffset=9 xadvance=14 page=0 chnl=0 +char id=54 x=110 y=465 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=55 x=110 y=436 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=56 x=110 y=407 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=57 x=110 y=378 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=58 x=36 y=400 width=14 height=22 xoffset=2 yoffset=15 xadvance=7 page=0 chnl=0 +char id=59 x=135 y=175 width=16 height=26 xoffset=1 yoffset=15 xadvance=7 page=0 chnl=0 +char id=60 x=135 y=269 width=22 height=22 xoffset=2 yoffset=12 xadvance=14 page=0 chnl=0 +char id=61 x=135 y=248 width=22 height=20 xoffset=2 yoffset=12 xadvance=14 page=0 chnl=0 +char id=62 x=135 y=225 width=22 height=22 xoffset=2 yoffset=12 xadvance=14 page=0 chnl=0 +char id=63 x=87 y=353 width=20 height=28 xoffset=2 yoffset=9 xadvance=12 page=0 chnl=0 +char id=64 x=1 y=266 width=36 height=28 xoffset=2 yoffset=9 xadvance=27 page=0 chnl=0 +char id=65 x=1 y=179 width=38 height=28 xoffset=1 yoffset=9 xadvance=28 page=0 chnl=0 +char id=66 x=52 y=146 width=34 height=28 xoffset=2 yoffset=9 xadvance=26 page=0 chnl=0 +char id=67 x=52 y=117 width=34 height=28 xoffset=1 yoffset=9 xadvance=25 page=0 chnl=0 +char id=68 x=52 y=88 width=34 height=28 xoffset=2 yoffset=9 xadvance=27 page=0 chnl=0 +char id=69 x=52 y=421 width=32 height=28 xoffset=2 yoffset=9 xadvance=24 page=0 chnl=0 +char id=70 x=52 y=392 width=32 height=28 xoffset=2 yoffset=9 xadvance=23 page=0 chnl=0 +char id=71 x=52 y=59 width=34 height=28 xoffset=1 yoffset=9 xadvance=25 page=0 chnl=0 +char id=72 x=52 y=30 width=34 height=28 xoffset=2 yoffset=9 xadvance=26 page=0 chnl=0 +char id=73 x=87 y=324 width=16 height=28 xoffset=2 yoffset=9 xadvance=9 page=0 chnl=0 +char id=74 x=52 y=359 width=18 height=32 xoffset=-1 yoffset=9 xadvance=9 page=0 chnl=0 +char id=75 x=52 y=1 width=34 height=28 xoffset=2 yoffset=9 xadvance=25 page=0 chnl=0 +char id=76 x=52 y=481 width=30 height=28 xoffset=2 yoffset=9 xadvance=23 page=0 chnl=0 +char id=77 x=1 y=150 width=38 height=28 xoffset=2 yoffset=9 xadvance=30 page=0 chnl=0 +char id=78 x=1 y=458 width=34 height=28 xoffset=2 yoffset=9 xadvance=27 page=0 chnl=0 +char id=79 x=1 y=237 width=36 height=28 xoffset=1 yoffset=9 xadvance=27 page=0 chnl=0 +char id=80 x=52 y=330 width=32 height=28 xoffset=2 yoffset=9 xadvance=25 page=0 chnl=0 +char id=81 x=1 y=117 width=38 height=32 xoffset=1 yoffset=9 xadvance=27 page=0 chnl=0 +char id=82 x=52 y=301 width=32 height=28 xoffset=2 yoffset=9 xadvance=25 page=0 chnl=0 +char id=83 x=52 y=272 width=32 height=28 xoffset=1 yoffset=9 xadvance=24 page=0 chnl=0 +char id=84 x=1 y=429 width=34 height=28 xoffset=1 yoffset=9 xadvance=25 page=0 chnl=0 +char id=85 x=1 y=400 width=34 height=28 xoffset=2 yoffset=9 xadvance=26 page=0 chnl=0 +char id=86 x=1 y=88 width=38 height=28 xoffset=1 yoffset=9 xadvance=28 page=0 chnl=0 +char id=87 x=1 y=1 width=50 height=28 xoffset=1 yoffset=9 xadvance=39 page=0 chnl=0 +char id=88 x=1 y=59 width=38 height=28 xoffset=1 yoffset=9 xadvance=28 page=0 chnl=0 +char id=89 x=1 y=30 width=38 height=28 xoffset=1 yoffset=9 xadvance=28 page=0 chnl=0 +char id=90 x=52 y=243 width=32 height=28 xoffset=1 yoffset=9 xadvance=24 page=0 chnl=0 +char id=91 x=1 y=365 width=16 height=34 xoffset=2 yoffset=5 xadvance=7 page=0 chnl=0 +char id=92 x=20 y=330 width=22 height=34 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 +char id=93 x=35 y=295 width=16 height=34 xoffset=1 yoffset=5 xadvance=7 page=0 chnl=0 +char id=94 x=135 y=202 width=22 height=22 xoffset=2 yoffset=8 xadvance=15 page=0 chnl=0 +char id=95 x=1 y=487 width=26 height=14 xoffset=0 yoffset=27 xadvance=14 page=0 chnl=0 +char id=96 x=110 y=494 width=18 height=14 xoffset=5 yoffset=5 xadvance=15 page=0 chnl=0 +char id=97 x=110 y=349 width=24 height=28 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=0 +char id=98 x=110 y=320 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=99 x=87 y=295 width=22 height=28 xoffset=1 yoffset=9 xadvance=12 page=0 chnl=0 +char id=100 x=110 y=291 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=101 x=87 y=266 width=22 height=28 xoffset=2 yoffset=9 xadvance=13 page=0 chnl=0 +char id=102 x=87 y=237 width=20 height=28 xoffset=2 yoffset=9 xadvance=13 page=0 chnl=0 +char id=103 x=87 y=208 width=22 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=104 x=110 y=262 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=105 x=87 y=179 width=16 height=28 xoffset=2 yoffset=9 xadvance=8 page=0 chnl=0 +char id=106 x=87 y=150 width=20 height=28 xoffset=1 yoffset=9 xadvance=11 page=0 chnl=0 +char id=107 x=110 y=233 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=108 x=87 y=121 width=20 height=28 xoffset=2 yoffset=9 xadvance=12 page=0 chnl=0 +char id=109 x=135 y=30 width=26 height=28 xoffset=2 yoffset=9 xadvance=19 page=0 chnl=0 +char id=110 x=110 y=204 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=111 x=110 y=175 width=24 height=28 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=0 +char id=112 x=110 y=146 width=24 height=28 xoffset=2 yoffset=9 xadvance=15 page=0 chnl=0 +char id=113 x=52 y=210 width=24 height=32 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=0 +char id=114 x=110 y=117 width=24 height=28 xoffset=2 yoffset=9 xadvance=15 page=0 chnl=0 +char id=115 x=87 y=92 width=22 height=28 xoffset=1 yoffset=9 xadvance=12 page=0 chnl=0 +char id=116 x=87 y=63 width=22 height=28 xoffset=1 yoffset=9 xadvance=12 page=0 chnl=0 +char id=117 x=110 y=88 width=24 height=28 xoffset=2 yoffset=9 xadvance=16 page=0 chnl=0 +char id=118 x=110 y=59 width=24 height=28 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=0 +char id=119 x=135 y=1 width=28 height=28 xoffset=1 yoffset=9 xadvance=20 page=0 chnl=0 +char id=120 x=110 y=30 width=24 height=28 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=0 +char id=121 x=110 y=1 width=24 height=28 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=0 +char id=122 x=87 y=34 width=22 height=28 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=0 +char id=123 x=1 y=330 width=18 height=34 xoffset=1 yoffset=5 xadvance=8 page=0 chnl=0 +char id=124 x=20 y=295 width=14 height=34 xoffset=3 yoffset=5 xadvance=8 page=0 chnl=0 +char id=125 x=1 y=295 width=18 height=34 xoffset=1 yoffset=5 xadvance=8 page=0 chnl=0 +char id=126 x=28 y=487 width=22 height=16 xoffset=2 yoffset=14 xadvance=14 page=0 chnl=0 +kernings count=1 +kerning first=32 second=32 amount=-2 diff --git a/packages/assets/test/assets/bitmap-font/desyrel.png b/packages/assets/test/assets/bitmap-font/desyrel.png new file mode 100755 index 0000000000000000000000000000000000000000..c3559e1c80629bfba14ba0839120cd46950552ed GIT binary patch literal 310362 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

D_HoE?I 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%0A5SHfZQ`ci?KI%+PsdR# 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

PsKos5G0@ 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⁣6P%Zi=nv^v5(%ltF}yOXmKlJy`v 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 z48≷lnf3ql(idEg7&77{URCyz&ll(rrsM6-o@pk8}s2 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%0Db`` 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/bitmap-font/desyrel.xml b/packages/assets/test/assets/bitmap-font/desyrel.xml new file mode 100755 index 0000000000..54fcdbba5c --- /dev/null +++ b/packages/assets/test/assets/bitmap-font/desyrel.xml @@ -0,0 +1,1922 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/assets/test/assets/bitmap-font/font.fnt b/packages/assets/test/assets/bitmap-font/font.fnt new file mode 100644 index 0000000000..56e1060472 --- /dev/null +++ b/packages/assets/test/assets/bitmap-font/font.fnt @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/assets/test/assets/bitmap-font/font.png b/packages/assets/test/assets/bitmap-font/font.png new file mode 100644 index 0000000000000000000000000000000000000000..cf772e9df2518d3be397cfde1af65ec271153ff9 GIT binary patch literal 1992 zcmV;(2RHbMP)Su(6utj|pTJMZhkgTsfh?>gC5aR41h2u_NC?@Ski~?gArPoj5+c?*h$TdYT2R`Q zMOcD@=q4jnflymUpwf+^L8UAO+ShyMG4Xhrv7M4ksOCyXp1e8l_`UnyytzIBFv1AU z=<~p=UKfP7xPeJ*js1;HI+kpNWzjIHOOYnnjXlXpTM zC6D^wss?svT{Ny&ac#dF#K|UjN}}5V!q0WU{%Pc(Yitu~HB;5-ae%+y3GCXsh>jX= z)&Se?1aY$qGIXDO*BUSl;K2Xh2<$;KuzQXCdN)1_UAEM=EAdFj@5KppmV)?wGw=6j zJFo*~yf13|J21f$D21S`PdI@I!M;A-CQpNJvw(OX2lL`xV23=w`fdFB(Pn%MN`SRm zz@(*t{q2Le`Y(GpKEz3Fv?fj*X|-8_eb>sl_d9{%-=b~_Xe|Q!2u}LNHekPX1M?Pv z*isC_-A%mhBtEMxMcRiUY6LGfAb%@IYcayCo;1>X-vR6_o-=#!F{AI(Edh;%5W0%1 z@q7SS2)A&P83NemJ6g@#e(jUmm{;RD#rxqqxSG%Xc+%r%Q=#^RNUOO3?9KQ+*w^IM z>kMefhuLkoT7T{0pzXe46_{e%hj5h|3ShmeP66_UI4rzSO5>r z>gCCIfF~Pf(HN?i=~NARmOx+}Px>dvQ^SwAy5&oO(ZFN1Dwaa%i+<#dVWH!bc)?_o z$36m8jTOs~zYN4gx>GlK{4#egh<6WR#dZ>(+ge~{ixUG+YKcR@I-iy0#uqKf^B-=) z1O$Qoehk>!CBWPoD_gb%d^;;RpWwysaOF;8N$ku5yB`Pec$}kZ1rB&o;sHByAbe$z z^XSu&9e)_o;OUIGe*$@@@!gJ9B_=rGE+DQe2gF+e&b_uJSe$pS2h&T#%{m&A`--O`1Sf#(XlF^aqp z$5||l`f;aic5u+O^8N=cz)BY+|E=*_WA%J|{_vIe$5js8e#|;Y`y{qxLh!R8&cFRB zFw6YJeXN;~=UxorC9EADT~>#HTYo=RpH>ru&2LR}6=NE7r+IGj6)

    1MC7nIl$@oic|0Yx+BhS zEFRWG+}kfJf#C$iL>9J|hSCAPgc?UYl1_NWB%#NV+_9DMq#oEH{vzykMjv|VXb{d+ zNDi|wGaO(WcYFyWYbDoLLZ6-gO&G7jGPQ+suHdfNv?jXnQPUvE8lxWWFv~ni$EKt8 zB}Zpz#E~WER%ufyom<+v#384b9N$zlB!^knD8c972I9Ak5$+D$Ii1$T^~1D9n}s{R zgncoCpWs+wwvtEJ>1xP2-6bH%j`Jm~KsT<|*)D4-=58;6{_&B}v@C{<0SD)hJ4}7j z)lj<5V^t9?a-DTe06Dzm_7aBO-0_t`4l$u)HU3QP;GAHs)GlagXnkM(D#)O%FY`&8 zOjq3!AUU|N++Lv%*v+1JJRFGJug?dOCZVP=lq3O(_~bn6=>$toZ!(C(+zsxs#Jjvo zjh(LK35ezEngDWpWv7>%U~+zC(BG%Lz|OS;`)L>F&}UNth)VNPso_r{0kM2tU1PGp zWT$sW%-}1RgB|bt$o<7_Kf$}$6YU6VX~ahP3dm5p&vZ>~x+Q>|UD@f~=2RcNXDI}) z4|3jvBis>ASL2oY?Au?PSVxy2r&sCns`7Hdcf38qrGDvZkkLx+^Q{A%dts}(Svq}= za8ASx?o}B)+2-W_UfaugcaKR1r z(^NIEKe^8OxWE6^F;3Mj)^v~Gl!+T*gb_vPDe5{ aMQ&qnWMy)w27m4V0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/assets/test/assets/bitmap-font/msdf.png b/packages/assets/test/assets/bitmap-font/msdf.png new file mode 100644 index 0000000000000000000000000000000000000000..d1256c7e7227047ba8bad24b3f6106752cf9df04 GIT binary patch literal 188631 zcmZU*2|SeT_dou5dRkPT7F3cb2{9oi#H7udEo9%aXV1R#lqiG{LU^)<5JH2Yl6{#X zWSwjc29tHH`Jely=kxjg{@3*?)l4(@eVyx^^FHtQx$fXw%Cdj$W7+qg|NQ4Kc{wSy z|NLhM{Bg&B=yt=81&^<*|Jm_9SzhYeZI3^uJ}Bj4_okj2MISePpcXFzLx&3_Po7g z=;q;+k)B6;A6#QzRU8@^-)H8#e!ujtwuIe=d0f1_Edm>* zB=p~Z{&?_&CwX{yIJM(A{V$K*>>Nt+>ch`xpPyp(6sBLeY}Y&?)$!T2N}VhEX01u2 z+^L@yg5!&AZOY0lVTRNj<~=*gw(c7)?Sbs?OS>oQ{5|>!dQHfyk>8zvzw)l%Q9N>k z{@?$^QCI!(_nLAwez#f0Bd{o1{enMv5NTDD-;ds!s zZr3()ai$gPfjz#YHT(DimM}TK7Qq^NVIwhHmz|Z>P}bgmc0bk(|Yr_uA{6rrp==U*W%`DcMh`p11j^=Qj~y3M<=Ysmy&~ z&yqL)G3vDD-$pB6?0qJXb?vk+QC1EQN0w_-#kj%crs`92`Z@XQOoxO1lnJ_DMfUmO zGJNk&wPnTFy`RcF*ozuGqfYUP7!i@9bd|^H#gjBC*?vW#twFm#%82^@BXD6 zh-V*pAYt^}_(#39Be}qLA@0=NnIqE1h1&1R%hfbuQh7M#Ip}ZH2;S}M@~bWzus7)^SYhnJ3djCz<=TOt?b zv$Q8NGrPw&6QdB_D3y>oEOs>LrD%=dczN4|OFK4fz}~XB$HUk6B7J~E`JzVg@syTZ zFRuqS9kc%WN;OR;jKx)9BU{vey5>o}VwPeS(=Jct*htPN^-_ngeNQs}hdKc(7cQF+ zw2?dzJ{?=Wbf(|SGO*tp?&{H~wx>U>YPjH@!egV=nhJenkr4yCNtEhMCREV^>wzhn zt;pAl_1*D3Rum@x#)aWZ)cGrNdeTFT1q*&`uw;zUVrZ*ODc!E*Bl8SF#d zeky_ZgN`4P3KETf+$ecB|6_aI6}cEiMMX7pV`@!|B~$pC)nd&*3S#L4Iws7jNqPm{ zMHpeWh%lKm2M->snu(}9)k7XMKE#|zKR0qgbyUGu zrQ1=`8P|@TqD{HkmVLcQxoAL^&CO{tDHKd0DrKolt2PuVveu{a%vmt+w(Ap5QaQ9-_T@I)zH^^c7*r#t9w_&SkR5WX!)A`5*uN~hUy?0ESF2=bRVEkZ?2k#|nu97-jUnp;{QJJmCv$K?o6-fv0Q55(_{jP>eQ2FYc4pz|4 z+Y=av<9@y2KUN+-AD?LqTgANiC69-%dBq|DzWQ$?PlwI>4)5NLFN!A>7e`0SjC{Z2 z;9zNKV`FM+I&#nsXHoclGNk88j)`~%_+0xl#6V@cYXsZTuSf4(#MB)Bc~t8M(OJXb zT+F^eef~)16Z-=P>31i!HOi+s-g{G0QmD#1=0r@kv-K&^qbj~x_``2n;`VcI_GA4k zZo(~<1xMW_SDP7DuBtNWV2;K%XCx+`$n9)eTrA1S0lTR(9S{02>+!b77XISMdLm3_ zwaQ&Q>8tCsyFDR#s7^v*VZ3tOMLcO^a}mE%DV(CNar=mQquKT3=*&+Sj2rHLLPB-v zzncnOu;{%40=8w6-+Uy?bn`HA3fq40@FQtuhu1W@Lha6iLFKTJEkXtO^ zGUU-v;;6`Uc<12p-K)u^V=lvp+m@MDWaOVy;9^Wp@$|D`u6(3tRD69#;_bWnmrk#J z%DhQKU2)gf+u7U3u6H|%JBqy_75CigX4<7wH!rNBQq_@Hu-h`ZdYNc6&2(rc3h@cQKt@M1G& zJ*J%SVyp+cC?%ZoPh`#*bYEhNSXv`Mx^TiTf6Nmwe`g%5oXa=~wwxpra&w8Wh-7pT z1>>J)a_;@FEw?tm8xkO-uf;}Y;x5mwPZ1!v!gt~Eg{Vojw6t<^gyIz;%7$=2ejjuC zQks`(HRUE@uG3Vc$RsV37Fk90UFxx1t)d0`-`~`Xx&=E&Lt4X81EM3#MeDEJlPcLZ zlL_USc7y_qDc-E`PT?I%%Pp5wn0tXa6Mj4bO+mgYkbt&h0k|V_O`M-DsHnUk`n}I{ z&^}G`hJ;iImhB)=9Vs@5W$VVSBS}l_Oi(a6qzR*C zl>rK_yqbu#Fb>4;Nx7Ofw1l1*DxwwSlwJ}Uy&W>NKlU^Vn{na|~ zI#;yZldxSo9Fi}uX_i%4JjkHV+EBAU_Lt$mx2?q+|EPfN`Nb%+VGrGdt2(in9guQ< zOin_?``O5yqRk%%9>giX;OkJ<*I1-@XlHL}Cz5-z@@=G5zuAgZ-J{qD9Tj!yf>4;X zX-OC&Cs8PEKELitTB3V%PxM|LnW#h3Ph{x-MAlRM%T{cK^^D$YbrW8Bc>3T$zgx^f z`T6*^XX%A;CSi-!CcZ?kR&-ALj$INJ#l*ops&C}%T5DV9a#Kf*$?P}^ z2f&B7QZI@Iz=I($gGX5a6!G-(8uR?mO?=YIZ$=0di|vr27ojwF+hI6YlaGmu%L#v* zH_~I_Rp;t0)lW{1*0rsF2|l?Y}7f5Jn6(IS4;#uQE z9Jf+1hs+rOTUmCO*sNH#@B`%AGxE$4dv74G)XS1=#FG+QEx_2hxqR^D)+J8P&LgX< zx*8gDI2xo`V`l5VF8ea%O2SPY&@_QnGOZ@{*_SD2MT>fF2kx|-SG+kPiTh-~3Vcmb z>;8HX;)EnJGT}S5{>spf!CLb0r&R^1~Md2Xl-jNH&;{b*zVkwu{Aa2_C z*z!R5E_#9(KZH4~a(;#UHjjFbB9ZsB?A`pMDAPc1>QGnNzFCDUN+f5=4lKX~5eVQi ztc>Uu2h`f!99n>1G}y7;6!)w5VEMao7u~!x7y$uENqKo;VQSg88pgm;ZEZ0Oow%n|iaTX8~0G}EyVisxx=@9d0$U|)SC=w;2&KRo+9lNCB{v%;H1*djLC z@*H}#&5~xWP+dfm>^tS-l4?_(eFrM4W?IO4#XWZbSUgvhQzw0PMc|Ar**4TO zblMo0dD?mJ@Wv%35bC$EPbx-UokVd$&=cbCTZIQ0oOw6@vDIXvq$%^dr_PG<>HH0s zM}LBQD1Qi6^1q2X%e%NSMb?jvHr+iVleR>w3ViEK$(SIzh+9&d$ zAWIlz7AIF{lw7Yut% zspFe{nMh(-Di4#iu~58+mzP>>i$#kCU-9wn*;Cx(Hf>F?Kxbw?Wbxj$^77%;gxUwS z4?05hs4{xY;3gzs<`e6febb^aOxp85w}dDQo>bJqNRSErfqK=jXqxvcQ{_4F3p9JaKft z(L4Qb_Es#tvBsz9gjF)v;c6E0 zOy&!@jzWnqcSoW4t*HrETl01`pp+{oWI~#!uepO`TN{m5`Rba-vk!{fWHJyA=JA;3 z+ZqtXb0TwCP{fv`A)UAS7PT|t)Y&#}64W!qcq0C{$;YA+PuSaQ^Xp(LJ6s_wOuI=u zs`;?u)8(2ZdhHOzG>9DWii%n4@Etl)=76E34tbEBULxT>NelwM80-4VyZOtKw6ri8 zsl!$`RRt5{6?bf#{RI)qF(_D(5N})N_qlpOqxwUw`|;y@134n4IAWT{obcCQ-r|95 zu9l64^W(^%N1T)BVk=3OHu%IEMCk#5*i2vN@bN=H|v2HMEXCC**bN;sZItMy{H8_!B_r#N23@n*<1LXF=#b##Xh!DOj1`>$mrXnnxFv|s$vs!7HZ5Vp*N3^f^ znzo7J1pWf6lwrlIq^=X&INy)bNO5t;AimE~sc@O*I+JULQJjE05?e<-`4MO#-*G#N zGm7(YePNC@x(N_acOkLU!u7m98q~K!yG{Y2AjbqyJ9#pMVsmu=(fzRsntb^MgyJ6C z%F0UZg6`73ybV99i}*x&TjD9YPmY*oA!*fDIZZy2?!La~L$0UzT>pRf!q#p$DM^cd zBJ-r)?0CnywacM_V$GO1B&^k+K{5f73v`MGRt-0E9p+Ey`y@t2-nwgxiEJ=)!mC*! zj7CC}nMq+`p&aKS4`Jp7uO#K%PV38F3kF<_ArFeo#4~c9w?0R=aPP4$8#Xo%zaNV+ z1K}OP#-~CWgfi6+?CFh7+|*78ALw5vEq!RmJ!kyMQ0YO(hTB8z`q0b&?b0608-kD7 z&aCi@UUa?p*?QnzWV1nqo6Fm>GPEc^vX7B5_)}w}Ec?c}P@lgc0$8!EZ49D|kFZn2 zN*&lJPDrn|WqJYv0uYT~cOy2oFLM@S#VU(}AfBt?P`I4M#?F5E z@?}pyKiCo06$8D~Za}`~Q^1k2EWsn%37IH(oTho#kEnLL0+j0vLHV^*D=0;$zfFI$ zePt8$Ar5%KSr1IOsUxdGlvEUFJ9cq(b@HCrw`sS@@}=eF@x{eXqTiCRXL8@P8}KTb zR_Rs%`5ak8N3>b%;Xn7-+M+eOsR$A#WR4VQ97GE_Bojb{u&Rt`dl%)@b{b?YP9*~aDC42n6HHQLV%inGSN`L~sNRM% zi7fhV+4szum!H3B^TsqX?aNTh5E6DCyU8&te1$Q1=MD#?!dK4f6bI_e3hUBEEW2p*^l`A3k{l9cqo_KfnW>r=eH{^6SHZ~k=5KqrS!vcuHN*zFd3ep4Us4v7c0|pRDv`Uca zE9H+1{c_h#BoSZr1F2(yra%BUl97vNm6?M8Rs_8iqz7yg!Z9-Y?Jm{{qM0&xR)>5C z7Ob}Dm6yYd#x218^D7vl^T@0=ll1og($GjpDgbM=+}FrOaUi-c5V){Z1Uut6@iR=r^&d$pt5Yo~D1J$goCR*=&rnrjdb@lXof$;%GZLQW>sFf3< z%ttRp?~UGTF0Zrt(W|w2zlusfY5wPX3g6o0xc!bTE;l>w;SWitpNrnxaqe&paX018 z^jVKtW?cEfnaev58U|=R`hJIQxBS!RyVdKz-_<_I5qaC%B=r^#Fnqzm`ux%I8EV_rfXS41(BHvowZKLMiiZ_;kSo={cgwdGP{W3}*3`T*L+wMW8nac!NQ z)y9x>VAp^{1GfgrAGSzAK>=(YkZXJ-PXt{%v=edz8K08_fDlsEn9~K8Fez2eaMKPe zdxS+RHU?JfoC30Nt#uOD4goX49Q09;Dd^=Xx}Delp?dq0C~Jn@t|-L$jcm%55oB|0 z=Y8Zor?$ZDXWOG_FhBxAtD8kyiPJWCMD|2x{-qQ`#O(9be|V5RIPq-aS&oUwnGhhe zl2cMHOG=hkSG)WBQzs@Gp{4_LLG!ljV+p#(98`o+kIev2*vc+~^tBK)bdN{G6MK+o z2YVXGUATJen8!jEwN1-s=Fz%Bzsc~PCo*Qo=Pwz^9(u~D$o1^3xs{Ny&}m{LaIo03 zO7aY(pVXB@05KfGo=9;NYV%&apvtSk>+Ky@*Q1l$Noj4toCg=s{2%IQYO2y}QNyvt zLyzvz_nN&OQKK8P_l8#$?~OGqFD(oJMva74;|GAaB9 zX(c<<=bz@W;fV=(=Agm1cDYt8t_ICTip)WPKP6MZ{ap>bJw0c^{;+gz6^k$P^N)h( zcXw++zDZ6_#-U3~`}y-bfJ49|ebXA^{4=`qie8dby_V0h%u6`P{Pc&0 z$Kw&ct<}@@%YX3?J^}LwOL3|5C@M`)v9i8+@m7~Gn0WP$wYBlk)D$qccR^`!gHc*4 zBH~3L?Yoisn1>^TIU*Qj%;9gx!ezr{k<2xjK!)1#MHY8&Y*9K@o}npfBe~{&=1c0{ z8?v%tb%TR|!oK=fFU@HQNbZ-MXT?z-C?C1a|3R98v+19=``r$x>C@ljyC|2!bdvICDc4U&%mb_;rG%>34la!+i$+<%XI zY_mkOSSA$^+X^2Q;3$xWz!k%0AQFiXcn3%%Zx4^3b8{xeJz{JTuulZ(&2=oqldKbD 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/bitmap-font/sdf.fnt b/packages/assets/test/assets/bitmap-font/sdf.fnt new file mode 100644 index 0000000000..6d2c6bd49e --- /dev/null +++ b/packages/assets/test/assets/bitmap-font/sdf.fnt @@ -0,0 +1,1140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/assets/test/assets/bitmap-font/sdf.png b/packages/assets/test/assets/bitmap-font/sdf.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3f62d31fdf3cb27621123e603dd857c8c1957b GIT binary patch literal 111218 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≪~uGhJNdT4G9r7EzQ*7M-O_@C-e`nFR>v@ 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/bitmap-font/split_font.fnt b/packages/assets/test/assets/bitmap-font/split_font.fnt new file mode 100644 index 0000000000..35cbf49ac1 --- /dev/null +++ b/packages/assets/test/assets/bitmap-font/split_font.fnt @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/assets/test/assets/bitmap-font/split_font_ab.png b/packages/assets/test/assets/bitmap-font/split_font_ab.png new file mode 100644 index 0000000000000000000000000000000000000000..dca61378d942e249794909e0e70ecc05b25ed46b GIT binary patch literal 1145 zcmV-<1cv*GP)nZZ;5`qDg5bVY3KoQJSY=TVP(UpeK_sq3kQj|AhTxKzG@9pm&}h=c zs4+%^@rAxo8;QFyW8C-SIdd~~z?QinFN~A?Gk5O&-!q-N{Z4_u_Ua5_T1NmwJA)uo z0VLXkm_8-JIauW1H6W@{k}}strzCir4~eI>pdSrNQsz2CzUa3Cx0WKi%Mbd#8T4us z=y8K8AL8L@Era*Bf`>~Gz05=LEdsi+0rX#0vfNUFp-BgBbYt2U4~&-_?CTCte+aa@ zOqJhm=b3p@b+=Que(4m+CYtkFq(>x7~ZDp&a4A96;5(u8wwD=)(ra6 z1&Z@{Z*(Kdb&=y$s_uEGSx54P6AE1K!t^agpw9=DWC%7aNA}qI9-i3x6{wj|@Y-dF z^jCvE9RWSq1LEg|tu20~MYYM@-lla`FG1oyfBL6B&?#OS>z0hx{(x!|ZCt^1i!~>< zf{pU&ACK$lL_Mf-q2|Pf<{>)BE8@dxJw1wo*31Wm<~U5O7=rmQhWkP9&wviE2bIrF ztxW~WBkJT`T%M1}xWWCo@a|vB9R`&u7lDE~sZT&(9)_-VE1%qba~vkNG#Bv;`#|q5 z@=E9hmF1-0;$^w0>8({>QLT&pv#~U#xtM=p`8?j*my~+AWAUu?YuL?0STc(@(|P4T z(Q5i*Da|WqB65J2-J5GlfqXV+jt>RT48+d$DF1{1L7tgu`na$c9ZHNNqSPI8%4`vRjf&KonjHx)oNQ*m|>G zkDpBO5vnIRZMfV1t6p~{+v{8~>Xsuzm-r^pon-VX>bH8#bVF~g3)L;63-N{UmgM4@65ZzAmv_7W%>8(kx^m7dE&r4FjBTaBgJ%sYN4lCdANt61{yOe1@ zLh?2aF3%&%K|(SEDcgyEb|;AIozE8`xkdgvr$9H4{VJ>7@<_JenXPd$3b`%vkEdsG z&;b7#kj#wx=&f^st3~ngB!n-_LQEInj+Z?%n6jXM^z{=b{(>r}RXSDx001p?MObuG zZ)S9NVRB^vVtFoNY;SL5WO*)Qa(QrcZ!T$VVP|D7P)Z)9b1s0M%T00000 LNkvXXu0mjfI2tzz literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/bitmap-font/split_font_cd.png b/packages/assets/test/assets/bitmap-font/split_font_cd.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3c77ec28928ca3962b58dbf5346dc7e71a660a GIT binary patch literal 1204 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 VPSxwx>AU@(TvYn&xAeaN004S%>wN$K literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/json/asset-manifest-2.json b/packages/assets/test/assets/json/asset-manifest-2.json new file mode 100644 index 0000000000..2855d9efa5 --- /dev/null +++ b/packages/assets/test/assets/json/asset-manifest-2.json @@ -0,0 +1,52 @@ +{ + "bundles": [ + { + "name": "default", + "assets": [ + { + "name": "bunny", + "srcs": [ + { + "resolution": 1, + "format": "png", + "src": "textures/bunny.png" + } + ] + }, + { + "name": "spritesheet", + "srcs": [ + { + "resolution": 1, + "format": "png", + "src": "spritesheet/spritesheet.json" + }, + { + "resolution": 1, + "format": "png", + "src": "spritesheet/spritesheet.json" + } + ] + }, + { + "name": "profile-abel", + "srcs": [ + "textures/profile-abel@0.5x.jpg", + "textures/profile-abel@2x.webp", + "textures/profile-abel@0.5x.jpg", + "textures/profile-abel@2x.webp" + ] + } + ] + }, + { + "name": "data", + "assets": [ + { + "name": "test.json", + "srcs": "json/test.json" + } + ] + } + ] +} diff --git a/packages/assets/test/assets/json/asset-manifest.json b/packages/assets/test/assets/json/asset-manifest.json new file mode 100644 index 0000000000..b149b8417a --- /dev/null +++ b/packages/assets/test/assets/json/asset-manifest.json @@ -0,0 +1,47 @@ +{ + "bundles": [ + { + "name": "default", + "assets": [ + { + "name": "bunny", + "srcs": [ + { + "resolution": 1, + "format": "png", + "src": "textures/bunny.png" + } + ] + }, + { + "name": "spritesheet", + "srcs": [ + { + "resolution": 1, + "format": "png", + "src": "spritesheet/spritesheet.json" + } + ] + }, + { + "name": "profile-abel", + "srcs": [ + "textures/profile-abel@0.5x.jpg", + "textures/profile-abel@2x.webp", + "textures/profile-abel@0.5x.jpg", + "textures/profile-abel@2x.webp" + ] + } + ] + }, + { + "name": "data", + "assets": [ + { + "name": "test.json", + "srcs": "json/test.json" + } + ] + } + ] +} diff --git a/packages/assets/test/assets/json/test.json b/packages/assets/test/assets/json/test.json new file mode 100644 index 0000000000..e0ebf283f1 --- /dev/null +++ b/packages/assets/test/assets/json/test.json @@ -0,0 +1,4 @@ +{ + "testNumber": 23, + "testString": "Test String 23" +} diff --git a/packages/assets/test/assets/spritesheet/multi-pack-0.json b/packages/assets/test/assets/spritesheet/multi-pack-0.json new file mode 100644 index 0000000000..e05acdb9da --- /dev/null +++ b/packages/assets/test/assets/spritesheet/multi-pack-0.json @@ -0,0 +1,48 @@ +{"frames": { + +"star1.png": +{ + "frame": {"x":0,"y":0,"w":64,"h":64}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, + "sourceSize": {"w":64,"h":64} +}, +"star2.png": +{ + "frame": {"x":64,"y":0,"w":64,"h":64}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, + "sourceSize": {"w":64,"h":64} +}, +"star3.png": +{ + "frame": {"x":128,"y":0,"w":64,"h":64}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, + "sourceSize": {"w":64,"h":64} +}, +"star4.png": +{ + "frame": {"x":192,"y":0,"w":64,"h":64}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, + "sourceSize": {"w":64,"h":64} +}}, +"animations": { + "star": ["star1.png","star2.png","star3.png","star4.png"] +}, +"meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.0", + "image": "multi-pack-0.png", + "format": "RGBA8888", + "size": {"w":256,"h":64}, + "scale": "1", + "related_multi_packs": [ "multi-pack-1.json" ], + "smartupdate": "$TexturePacker:SmartUpdate:5f1e3e3af16b7f3e5f4097ccfd45634f:8acde9d234ecca966a410602c71bffad:e9ee6f100f514069f43ab3a680b02726$" +} +} diff --git a/packages/assets/test/assets/spritesheet/multi-pack-0.png b/packages/assets/test/assets/spritesheet/multi-pack-0.png new file mode 100644 index 0000000000000000000000000000000000000000..52c1171d0156238ca9f9a7787f047257c63f0ec9 GIT binary patch literal 2435 zcmV-}34Hd6P)UDWP;i z$aG2>p_EJsWz)G+Mku8-GM$ntnNFwG$&^g0)5>&GsZJ)-Y9&&cXMfz2_TJn3@xJdp zAHVbFJRB-@-+O-_?>WEk0|W#F1Ox;G1Ox;G1Ox;G1Ox;G1O%7_^MMBeX;<>Dz=N86 z*$ePS;6q*hv;`jcFT{3$F97Zjyr|$y4&Wj{0-Ol^sNhW&U=iSS;D!If992rb1@Lg- z$7{ZvR(v7Ab%33LCp#_?XBA(T0zdp0=vO5Lvb^2fnZk;LR$&bbIpK zhwL11%mEzsMW6+M8&v`&z*D>2yuDL{Cj@wK7xSg7bmG6o6HnYD9#_A2!Hm1h9Kdma zs{n8LX8zY&yVSqqsRle*-kn(i_5oa}!xK+}q&!*myXOH8XgV;)06r>v_JS{hoo%4( z1o&-%*LbE6u@UC$nE!m+_hnAg zPANQX^p<~HYi$AS7f#19O{d$Th&nRrfxe$>vWd+^Plt09;DZLwd*s6ga5#csch+2d z)0cf}hb$_;i^+FdEBu&YoLy=|nJ)Q+HO=UC!Mx~>VETI${NhxD-@T+Z<)if@ z_&gJn7whs}#aR0OO!1&lW(h6E`@DSf|5;2SQ!!yrDT>NTfLB!1Gs}2RDTrULjXSm*i?Ue31l9+Rrbt30RIBe zWARHzgr9o01JDHk&s&zHffpnTU=4uH)XggZ?*W-j1N5{3SaBfWsQ9x?5nchfSN4BD z0GXc*ZG^J`j##Gk10Zuxs0FYLpx5FTz7J&nmdJ>M4$Q+lhG{zEfTmX03$tCA4GWrf znVSayT(iszEhWvUXLc5jeH!n=# zEu_m>Xi~B&X?<=<9~OnsdtbR}eGU&p+cewi2;`tD{8$pI?8_DfJ?X*AzpAISIubu- z1k(RN>FZvLdU4bNou)HwJO}Wp2MT}DqM!>7f<1AU#d!-H6V8iA0MC{VF(dSMMre35 zwYC&(Ig=;R5@mmbfi5oB`FPD((FvXqEZi+O12jZh0e2kmp-s4(xKt`z z)|T~{t})6@n#*His+8zL7zg$8%nMZfeGYiAApB*}R0zcbRTFunuS*7IV?^qAc4+=s z-vmwyqJPdo-g{nnCPYJh06SDCBRyPenllB=mRfGb5 zhKWiX6B6WWbzRk15-#5CvphPg;b4rEx2A>=*1Kt(k2S5##?`3Id8w1+z4z*r=?}3Qzyl zOMwoVJ{9%}t`=O@mjm{q4!~5o>!|QzuoITtpZTmK zf%69BJ0kq#vpgP~*;1#aSe>7@+#bzAPwK!m?uI-om{yG@ABR2Z1#vJrnY|8%fHre^ zU0j|bsu;#Xs*Ih&Yu`29qsN@^T))HqhYCK83y6bVba*3{cqO^3%9u4>wZ)xja>=v1klk1==!b%ajC#)rJ%UOR87e zzYCrAU0pqBl~?_WDA@5JlHn@bw9DBTgbgAM@Q29)iO8h`&Az>~L4)68Sb z4BNTK(58txxXU(xm#)qK0}jl*X?O<~TFjK(u{-3`TbF6e-YE3CG+VCock2Qqxs>1` zfFE1P?FnT3tg^6$1FF(=Hlh`E(lO0z2{KvZYN$-y?8$YP zgjSD&exd5^r&T&ALIDmB$1El(dcFa4#T4?QpQe8W&9`FC@M{uNVz;`1r&#Bfs!NXP zU5P>KM5W8Zc12gzcVgBhp*<=Ec)Ycl{M;Yor5J|yh}=SKdB&eHdM9I)v?d6YvY@QX zDP@t~bxiMrCUibk6{`6rn_QHUYZs9Ya4405)ogx;kF zoq8wZ74ERFNuNy-=>hwi%-Fw>B3cKU_{I<1N3*rk`>4sZ+I)&=y;Y+`{Zwn^=^Rw< zbxIG3O1Gk(vK&Ymt;GhW|4_#>RS&V1f z{!PxQ)Saw=PC%ms=F92~Mp8`YoW1s4=O^QanX%mgX;qq>N;T$FOyf>%z)Z?zc`zMm z+<*Z6FUPU;q`?9L0s;a80s;a80s;a80s;c0;(rKYI3Kg$!;1g_002ovPDHLkV1nza Bj$i-) literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/spritesheet/multi-pack-1.json b/packages/assets/test/assets/spritesheet/multi-pack-1.json new file mode 100644 index 0000000000..ff4c21ff7b --- /dev/null +++ b/packages/assets/test/assets/spritesheet/multi-pack-1.json @@ -0,0 +1,23 @@ +{"frames": { + +"goldmine_10_5.png": +{ + "frame": {"x":0,"y":0,"w":190,"h":229}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":190,"h":229}, + "sourceSize": {"w":190,"h":229} +}}, +"animations": { +}, +"meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "1.0", + "image": "multi-pack-1.png", + "format": "RGBA8888", + "size": {"w":190,"h":229}, + "scale": "1", + "related_multi_packs": [ "multi-pack-0.json" ], + "smartupdate": "$TexturePacker:SmartUpdate:5f1e3e3af16b7f3e5f4097ccfd45634f:8acde9d234ecca966a410602c71bffad:e9ee6f100f514069f43ab3a680b02726$" +} +} diff --git a/packages/assets/test/assets/spritesheet/multi-pack-1.png b/packages/assets/test/assets/spritesheet/multi-pack-1.png new file mode 100644 index 0000000000000000000000000000000000000000..639b33f660e934acaf06a86ff945d63d730b2e9a GIT binary patch literal 69086 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 s$8|d{ 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/spritesheet/spritesheet.json b/packages/assets/test/assets/spritesheet/spritesheet.json new file mode 100644 index 0000000000..2b1d2609fd --- /dev/null +++ b/packages/assets/test/assets/spritesheet/spritesheet.json @@ -0,0 +1,55 @@ +{ + "frames": { + "pic-sensei.jpg": { + "frame": { + "x": 1, + "y": 1, + "w": 125, + "h": 125 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 125, + "h": 125 + }, + "sourceSize": { + "w": 125, + "h": 125 + } + }, + "bunny.png": { + "frame": { + "x": 127, + "y": 1, + "w": 7, + "h": 10 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 7, + "h": 10 + }, + "sourceSize": { + "w": 7, + "h": 10 + } + } + }, + "meta": { + "app": "http://github.com/odrick/free-tex-packer-core", + "version": "0.3.4", + "image": "spritesheet.png", + "format": "RGBA8888", + "size": { + "w": 134, + "h": 126 + }, + "scale": 1 + } +} \ No newline at end of file diff --git a/packages/assets/test/assets/spritesheet/spritesheet.png b/packages/assets/test/assets/spritesheet/spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..16a05ed0aed5e6514c77b37294d316fee70c25c8 GIT binary patch literal 3463 zcmV;24S4d2P)Px#nNUnrMMrQa^97-`F;cV#(FPfxGX?Wok_ zuF~zBaS$FC5H%9%LE(e6}KRBz3!Ys;vatkdL$*1GA*i?_)&01k9gPE!Dn--(a;j*l4Mh!bDpyGT3$ z000bfNkl9@fKmYpq^z^q0a+2|NHIf z$NTgBm%+ea`!*M^Vi6>~4^ z^}%}KPZ%}ckJc!P*&KTbeh0s&q6?PHCsHtsrytAz-JV^fC~i5)w!={(V}$6DeaB#c zQGyyuhy%rx2|6&xc%qamGlQt<*9-FQHaEQ%lM3^+Ek z=re*E-fsxTm~SNFN2$gPo*~lS!o5kUNDV1_rmrb$PM5l_muA5Kms5k>c*r9d4aOi> zGG=3wWts~Byy5{cmy?obV|l)nd;{kMe|8nmEB48$rU)LTKB;7&L_QN^D0#jVb4C)v zj{3x^4eleff)RZq6Xpq&GsYnt2(B$ugu(oGG*ZO6>M{ah#-+(p^J<)56KW{-i2XG? z)vu2X5JUy*s!W`5yVns0moB!ZgE~c0ESJaQaT&jS8mvF?oJ%m|8k6NwMsYmu_b+bj z_W(mUE;Ip0vyHzxjFFfP>1PPV^4KHvV^2VULsV1^W>LA)Aaxg}SaODr1cO|}Sva!2 zkiOEDH>Ehfqy|#N`$s%?4@Qb&>kvHSW=%aNMQ<8`LoCT-jG>vJdo@rThbW97A#R&2 zUE2?;A+E_x?tH)?F~=nv8H#1mxPHQqs#!ixfjE$R$g{kX>kXVSQ7xWb{1?Bxe1)S< zmQH>>8~Fy$6MjwzVl4L$VZ1D<9I0BqtIT;8RcICqe10g@t- zVmMfFed5zN5hFa=*ZTqQIMMD8i$uli4O%H;-@XW9)a_()vuEGmuGi}=?H#q4pA&h5 zba@n6sY*7fC%<8|=I~~Ye&5noQSvIXw@tDZ<$Z}|?4a)4*BTBj(CD!8cF**XcXfz)tBZ8}yinUXuK!m2IN2{dpQAx`$j z6wWcNn@s8<479$8>ng!F_=?J{Or&tFZ*AMT<^I;*_5+!t#@*w%x|7sk7)dq0l1P`z zcSY5xZ?JV03fhM;>RQHV2D>E#t2VNdXBf9ziekb%WZBmoF$T&?(TZN)EnvQJyZ&x# zi2~kmp(7Y2UcrVuI#7#}N|a!jlR=1ZkbNCzv3*b@lXo-h{{z(*I%Y1~<*jRb3-eiB z-zMG5w`9ORQj02~!{-;DbY^R>-5IZw){Wh@dx_bEV<@4MEKF@FZ|>*$WAFiST$zVP z$z0yE5+g;}J5g*-sap|b!gE-d+Emm*LV-CFDgK$C==Z4Dh?IyEsV~3cy*IXzF&HU6 zwuQ21U$-q(JJ;XlVbb2}fwG6zerj|Lo9g(VmSRO*_hUa;6JJP87aN8}N|x*o50u3F z2TNj9bg7~K#z40`%(2Utf3!dt-qnp}SS9VRnopd*zFg|Xcs&j7kVUnqO7_PArT)i@ z$E8a3ofBC!YFHy}yd29ft{q=bG$SdVLeyBdhdirazhoBNSYYw0Xe}n@4RN29_TP?Q zaSZDjD(;Gg9SV6PBiW-0eU{@FC~7sn&mV7Okgf*n3)T-ezfdc%$<$!yD{8aQ`!0kv z1!{{9w*qNHGSy`bo+57RDALnK-GAJk9q4o5KJjH}N7nmHqD!3UbRhRg3xayHK%oY9 zWE1O@Xs0z=&7uxi0)+PNYn3Q66wM(cyGwDGitQ{d!#;-H$)LL&wTila;yn~Hh9dnK zMfQZCEL{qlI!9q+XL(Wl7KNB%V1|u%K1l4GmJe-mz2EOA`MwygvQh~Q`R<5dNG_L{b`*#7QiC(Z{AsFSiTP` zUM_Ld&z+g^`v$XluB0!CouiWoM{0l zjHL(!@a_s+v0bUgnz}iCCEdJY)qn zdg~x&vqK}?Q0pT|r7#q09X8DwzN;z^`J&kQ1V$s&*~FU5*lIN|s##A_S`J|qB;DI1 z-pXi=VZW>@XR{3iz$Rc6i*A5@7QtT%9hkWH9UZ;s>FSUsV=cU?1bnjW`~{OSj47)QG@_q%~$2r4Fhu6 zIvN`@{NATTw+C;CdkFAOYv{wya*QO>MWC=G<+i_;^I7aSrtaTRREa~bOMS@myaWez zX{zWaj!}x~bX(5+aDohC&^z6lo&nCU%PKcxy|C#ET*6UUcc3|}h$yOUd6*Fp;qF=9 zkn9&Yjb|_vrKQL}=NpnWR-J1OQ2<7WnGR&gH%R^6IAi46oW0uW9%HqMQ`I8G4(P)v z42EVL=PWhDD$?v~dLbM|)g5gYi@^lCiYc@<7@C7LDK*HQD@KP-0WgWV90#-j--OFg z1d61E#jpp2V|Gpltgo^T@F`1Re)M*`?Oe2ij9?vNA(b5P#v-Dq%I&(EYI7I~qEf!$ z#@SIIIo8{$Jt|BN?F$Rz6)QWnTP8!XWfbs97@&p*S@bmFs`72CXJGFby2o-|I(0r> zR1_cFX75*I`appfi8 z-LA`rF*-3igE&WZKL*1(hhFnQvGd#3Q^;ql)*@c83dT4SF>)U>_L*BRMcJ#s4k}Y< zJMnJ^QwPR4Xp%xT8m0=g>7!tQf*rISOJFMz`0@qn1GK$9W|wOohG3Lai}FkWLtiT<2<{JbM8>W7|R$! zUuNqg#gmKmsTnILy&K;zJjd^_40xy)%EA1>FWWk~LFpr>Et|!Hv(V>Hs9!2xEQJ>~!qz76HLsxFXdG zs5~GjUDeD6dXvG$_#HtoUok|M-X@BSTy{VK4P?TJZcz}O&FVzD0fZu8Yajr@?2aYL r_Q@_>J=ju&>AqoA-=wzwF98MsNX4SOJFMz`0@qn1GK$9W|wOohG3Lai}FkWLtiT<2<{JbM8>W7|R$! zUuNqg#gmKmsTnILy&K;zJjd^_40xy)%EA1>FWWk~LFpr>Et|!Hv(V>Hs9!2xEQJ>~!qz76HLsxFXdG zs5~GjUDeD6dXvG$_#HtoUok|M-X@BSTy{VK4P?TJZcz}O&FVzD0fZu8Yajr@?2aYL r_Q@_>J=ju&>AqoA-=wzwF98MsNX44jK3I&u?@C5kWR-W9Ie{KyR5y30oZie6mt1(*N)p#RTWx(FB500LcnwFXV^XUL^=>Hgv zvDpDuP&gpa0000G1pu7^Dh&V=06vj8mq(?eA|Wsc0I(7XYyh1ygm5Cj3j9p}+@q0o z=Yd#vlee4z0RGU~wWIzldvkd`4GjO0=iEG z1VL6sK#C$DSZJam3l_wu2o_xO29SOGzRz#}dG}7fZ|<3Me!p|>Ip_`W_lsgY7PF)x3^l=8 zEV5!e9Gx&$Ts{Y5pbz3$1OfqLK+|VKOo+u~>S2fkB8VrD@gNyTAkaxPI+=|5KCmzy zpB+edv9|qA2Cq!8-=o^Qcd!0ll0KKe2M^L{G(3TbClYb622KzgA%tRZ5dw`B1Z$3f z#Si8QgSioyMMQ|njS`w*VON)92VUwIIz0LiZQ%-|4g)~2zx{Si60DS1q!p~vZBH{5kiKw2^M~$&kknO*(?%~LLnO9 zND#*mN2XCg9E}FiaAZ;-g-j(9$YcX>1?NZhWNT{+8ktHa*^p@dbO0S0J zy0tPgYu72s%E40!tGH1SzObsAs><+>s;i}?OEo1E$)-E3t#|l)`6nclA^u+gQ8OSX z1(*ZoD1pP37`rIVbVPoAygDU|#%>xuY5fEvVS%EX}RC$^grC1;)d=zECj!P*k zy_^K|Y(^~dEW<5xiAf+);*tPji3TYP3n%tz*Y~B$^f;X4g{imudyo4rxapSBRPK&`WqC zPu4jv?d+9#k!pMJ*+`M5#Yq$A%0;F~y>a*}W zoOdkxgv))uI@t%qN)wweg|gF+;mB?2)T&1l@pPZ!QyCdQ;nts1Z0|o<9`*S;DVWqQ zxIAI{AphlVO5K(*pW9w*U$6bs1D$yHp4mvolZSrKy+)krI1~EJ%1%+dqEv9tQmdz%T@J=x(GHt!EtuTj^~dR} zadtOLPjZC)e&VX+Jw80U0O!Of)eeImow<9CT&NAK@A*Asq{6xI%B5=sJ(|aLD(-O~ z7*R_;RBjT~_u?ES{9^}uU!gw*O~tBvZU#0L?Wna=Ix%N)gDVEm-lCf$YkHDi@pSZLUZPMeFePY)S3A%wTG zy1LzZKJtCRF}pLbS9MEqyXJ?>h8R7nS6OSO3Lj18n#M{5yKdEub0bmW;;d}n46Ob< zyW_X>^A?}Z`{dexQEop16l){Kb0rg2GJ}y%-?=FAe-7B7js~$ zAti5>BAqecNkuyhFdchJ6*L4l>6`|Yim0%bp#n$~RJx~z;^%%mD+01Z2zq@jnt^ui zYnZqiA@#EzA(P-eEV&aW!27I)sEhl+UaLdSCXpvA*&-5?X^W`m-7+2as!tg)H29B9`@Ao+>1)R zEZys#q^6cwa=n~`^j37u`ocMRS@f$q1N(Z*!kBA?`E1|$ckw!E>f7}#w^v4e6E`S} zd|)$tI5xX-jepqjp7vcn)mL|cv^{%k%Xij9=2)r+yEiH2ta4DRahsm$I07Eh+P~hz z&5hUPr}N~9CVg;Pb3pN}qgaZYMZdLEi)@23qRM6Gs|UH`SMKg%J-O4>oT=w2bFyMS zyH(n?*4)c#79%e?-s|JbsX6$i;$q5|h`BFc3UZX*+{K;PV&edsnd^iU|o!WYS`eSJvOgddtrZ zRp#I5ERT5~ubQG#rF+5jqkl%H%VV`Qbxp1pdY(_UZWzAM@XLUTXN9Y#)6YuIWyjjS zy8iLR(YxI6SXX@#qc^4Gu*UVK&in)s@L^USd{K5<+ssvA*6gHDx|FU_Ub0sEYsM4a z@7u< za1-I=03;HD6i14~$M@2Jn@A3Tn@C&%bhd!7#7KUz1llr_nY`RUNCd(R$gS91>xp(> znEJ!G*4?ly+cD4GM50b(p9tvf89aZmzkJw9>t4vaq|wOB474Dd?r~O8^=z*nUzQ&d`)toE(M_Jbomx1V2EK{f!V>ULzb& z=0vkCV6XN-p+@GReQKQK2k}w)ucK`xE_X5N)@#Xw1eug0BQ1a@ag)BCb2xV6Nd-<)qm>89uto{*x?3lNGqgZy^G^5P@Q-C5W z1Pp!jG(BYgLu`Q}seW43VB1|8LBT`_v*ktQ<8&+Z7K=YZnFVIX+*?ZMzr{bWO j`KEnm7wCet4TRSzKBpUn=T(v4| literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/textures/profile-abel@0.5x.webp b/packages/assets/test/assets/textures/profile-abel@0.5x.webp new file mode 100644 index 0000000000000000000000000000000000000000..a9c370a3d257deab8f53a1b265d1bd72646121df GIT binary patch literal 2082 zcmV+-2;KKmNk&E*2mkHTi;}#x}MHowC>NLcctHvvO5@7%}fT6ERzx+iae`iD#xDBK8ax!KJSRn z$ygyKKxe}LWxW!=9^tlSvbbpAWPyb-c%%_~3zYEXAOQZuMfG`8Z!-A9G;5h5%GKcV zuC8siomdcoFF+vBMuP#9BC)gwUs;RMPbvt8g*bnqy`3ufVMgedQkP5>U%B%C09#5+MyUDyK! zzXo5VFaTjd3!MMsy4X~@o%zs0ebN?W2y10S6fEBuO$V!<)tZ4*F{(kn_El?*uAOVf z5|K{!W;F(Ra?_g}BSGh;i^gwqlSze8qo=v!R7_l*%(F5hR$XnCv->FrQoIFV>ZDyMZio0Ki<20L&=vG*1P8vQiY=HApIIY1l%&`IY~%L zFod>QgM{TaXQH-oelaKESe2{(xnn$z7$DZie1uG+@{B*08Vl+{w}+S_w06X+|Ty(63!P&*6z)zz1N_5mSi~ z$rf^FmT;3o#w#P^=p&FTfvEjSz;=JxVlqwJ+my5Sy3MQ4g+?tLitQdS&Eq@ad z7k82Q(yj6J4c!PZ87yCTO}DaYLS0#K>}B<7^v_x|E?@@Eht%gFOe{4{XMLXzZ&DewQ@zZJEx?mtKjQ=nNzRotbo2+7p4iXK#sVc8&(5%A~iy>>D2)Pm5A0Al>O1+ zgIXT_ywBhTm{sd^2@Sx9mH^UX76X>DZI@%q38NW!!PVAJNgc*6YlYfkCF+HvsuCQ} zX5^!a#usuk%Gd|_pJ7{UC#pE>QQ>}+1MFWlg~c!Tt<*cO_koFcfBpflwmP#p#S2oG zKL@=DuhQw9@KB8%3fZC%}a@bhF*J)BuD=Wa|eH^;P4E0SI%;~BMS-c)Gt)!x8 zpH0w%%4E6;^EYp`vsUaMMG07iEBExo9P&~cB`oYUBmjj#^fUU#u&`;csUaE;9k>5^ zU9iD~BsJS8UAwJA=mnQX{iv7S29ar^nCa|rdUP7BSD7ZY9*Hi5!to?*)6V8FCprd| zf$J9Qe_lQd!aa83?4upp`H;f2jK(xArpQ5qjW#9}udEo-f!NAH9T=wr>W{>Pd0>-D z3R-uICoc+es-NaMQ1gicD}_+Q&KG;4N3@Bels9u48}%gX9EUBO?Ur!V&5qo%g%)ii z?OpUT^>vAT(NGci?82yaMKy0Cv36B4 zV9HM6rF=;QuY2P(E+UD@v7Ysi&Z0iL6=MLDKIGq z9zbH$0R?j2dy8@Y33eMF2>G_ccZ$ttI$=hB{QvFgWw6Njc99Zp6`^LJ`#tNSjeQ+o zFo-iF9($uS?>mp5o^9HhvDUKb^7FPH3rP%)asg*l)6h#i#l`JhqH`XM(2&l-@|l*h zWbcp!qllVUYip<*rARQt1oy6yW$dE6>08yYiGxvb+sA8nB5&@TLA*J+5g+?3SC%zU zvt48yqBbfSBBZYmW4eNvCOMxgP62KtqVwINId0Tx%RzCq1f-Y~$r8uEf|i=iuRfquq3A!) zF2w@J{HaKp6EX8}oQiTNAv?^J5tq7O|V5 MX}S^aurpu)09On7LI3~& literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/textures/profile-abel@2x.jpg b/packages/assets/test/assets/textures/profile-abel@2x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4624b746ac3371ae68d4d85219a58d0056c607ce GIT binary patch literal 25571 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/assets/textures/profile-abel@2x.webp b/packages/assets/test/assets/textures/profile-abel@2x.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d9789607613296c4c028b4bcffa3c5cef6b3192 GIT binary patch literal 20830 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 literal 0 HcmV?d00001 diff --git a/packages/assets/test/cache.tests.ts b/packages/assets/test/cache.tests.ts new file mode 100644 index 0000000000..7061dd0009 --- /dev/null +++ b/packages/assets/test/cache.tests.ts @@ -0,0 +1,93 @@ +import type { CacheParser } from '@pixi/assets'; +import { Cache } from '@pixi/assets'; + +const testParser = { + test: (asset: string) => typeof asset === 'string', + getCacheableAssets: (keys: string[], asset: string) => + { + const out: Record = {}; + + keys.forEach((key) => + { + out[key] = `${asset}-${key}`; + }); + + return out; + } +}as CacheParser; + +describe('Cache', () => +{ + beforeEach(() => + { + Cache.reset(); + Cache.removeParser(testParser); + }); + + it('should add and remove a plugin', () => + { + Cache.addParser(testParser); + + expect(Cache.parsers).toHaveLength(3); + + Cache.removeParser(testParser); + + expect(Cache.parsers).toHaveLength(2); + }); + + it('should process a custom parsers correctly', () => + { + Cache.addParser(testParser); + + Cache.set('test', 'hello'); + + const out = Cache.get('test'); + + expect(out).toBe('hello-test'); + }); + + it('should process multiple keys with a custom parser correctly', () => + { + Cache.addParser(testParser); + + Cache.set(['test', 'chicken'], 'hello'); + + const out = Cache.get('test'); + + expect(out).toBe('hello-test'); + + const chicken = Cache.get('chicken'); + + expect(chicken).toBe('hello-chicken'); + }); + + it('should remove keys with a custom parsers correctly', () => + { + Cache.addParser(testParser); + + Cache.set('test', 'hello'); + + Cache.remove('test'); + + const out = Cache.get('test'); + + expect(out).toBe(undefined); + }); + + it('should remove multiple keys with a custom parser correctly', () => + { + Cache.addParser(testParser); + + Cache.set(['test', 'chicken'], 'hello'); + + Cache.remove('test'); + + const out = Cache.get('test'); + + expect(out).toBe(undefined); + + const chicken = Cache.get('chicken'); + + expect(chicken).toBe(undefined); + }); +}); diff --git a/packages/assets/test/loader-compressed.tests.ts b/packages/assets/test/loader-compressed.tests.ts new file mode 100644 index 0000000000..8f8e993aa2 --- /dev/null +++ b/packages/assets/test/loader-compressed.tests.ts @@ -0,0 +1,54 @@ +import type { Texture } from '@pixi/core'; +import { Loader } from '../src/loader/Loader'; +import { loadDDS, loadKTX } from '@pixi/assets'; + +describe('Compressed Loader', () => +{ + it('should load a ktx image', async () => + { + const loader = new Loader(); + + loader.addParser(loadKTX); + + // eslint-disable-next-line max-len + const texture: Texture = await loader.load(`https://pixijs.io/compressed-textures-example/images/PixiJS-Logo_PNG_BC3_KTX.KTX`); + + expect(texture.baseTexture.valid).toBe(true); + expect(texture.width).toBe(898); + expect(texture.height).toBe(227); + }); + + it('should load a a DDS image', async () => + { + const loader = new Loader(); + + loader.addParser(loadDDS); + + // eslint-disable-next-line max-len + const texture: Texture = await loader.load(`https://pixijs.io/compressed-textures-example/images/airplane-boeing_JPG_BC3_1.DDS`); + + expect(texture.baseTexture.valid).toBe(true); + expect(texture.width).toBe(1000); + expect(texture.height).toBe(664); + }); + + // CRASHES JEST - ELECTRON + // it.only('should load a a Basis image', async () => + // { + // await BasisLoader.loadTranscoder( + // 'https://cdn.jsdelivr.net/npm/@pixi/basis@6.3.2/assets/basis_transcoder.js', + // 'https://cdn.jsdelivr.net/npm/@pixi/basis@6.3.2/assets/basis_transcoder.wasm' + // ); + + // // console.log('DOING!!'); + // const loader = new Loader(); + + // loader.addParser(loadBasis); + + // const texture: Texture = await loader.load(`https://pixijs.io/compressed-textures-example/images/kodim20.basis`); + + // // expect(texture.baseTexture.valid).toBe(true); + // // expect(texture.width).toBe(1000); + // // expect(texture.height).toBe(664); + // }); +}); diff --git a/packages/assets/test/loader.tests.ts b/packages/assets/test/loader.tests.ts new file mode 100644 index 0000000000..d7b3ad7cf7 --- /dev/null +++ b/packages/assets/test/loader.tests.ts @@ -0,0 +1,356 @@ +import { Texture } from '@pixi/core'; +import type { Spritesheet } from '@pixi/spritesheet'; +import { BitmapFont } from '@pixi/text-bitmap'; + +import type { + LoaderParser } from '@pixi/assets'; +import { + Cache, + cacheSpritesheet, + loadBitmapFont, + loadJson, + loadSpritesheet, + loadTextures, + loadTxt, + loadWebFont +} from '@pixi/assets'; +import { Loader } from '../src/loader/Loader'; + +const dummyPlugin: LoaderParser = { + async load(url: string): Promise + { + return url; + }, +} as LoaderParser; + +describe('Loader', () => +{ + const serverPath = process.env.GITHUB_ACTIONS + ? `https://raw.githubusercontent.com/pixijs/pixijs/${process.env.GITHUB_SHA}/packages/assets/test/assets/` + : 'http://localhost:8080/assets/test/assets/'; + + beforeEach(() => + { + Cache.reset(); + }); + + it('should add and remove a plugin', () => + { + const loader = new Loader(); + + loader.addParser(dummyPlugin); + + expect(loader.parsers).toHaveLength(1); + + loader.removeParser(dummyPlugin); + + expect(loader.parsers).toHaveLength(0); + }); + + it('should load a single image', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures); + + const texture: Texture = await loader.load(`${serverPath}textures/bunny.png`); + + expect(texture.baseTexture.valid).toBe(true); + expect(texture.width).toBe(26); + expect(texture.height).toBe(37); + }); + + it('should load a single image one after multiple loads', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures); + + const texturesPromises = []; + + for (let i = 0; i < 10; i++) + { + texturesPromises.push(loader.load(`${serverPath}textures/bunny.png`)); + } + + const textures = await Promise.all(texturesPromises); + + const ogTexture = textures[0]; + + textures.forEach((texture) => + { + expect(texture).toBe(ogTexture); + }); + }); + + it('should load multiple images', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures); + + const assetsUrls = [`${serverPath}textures/bunny.png`, `${serverPath}textures/bunny-2.png`]; + + const textures = await loader.load(assetsUrls); + + expect(textures[`${serverPath}textures/bunny.png`]).toBeInstanceOf(Texture); + expect(textures[`${serverPath}textures/bunny-2.png`]).toBeInstanceOf(Texture); + }); + + it('should load json file', async () => + { + const loader = new Loader(); + + loader.addParser(loadJson); + + const json = await loader.load(`${serverPath}json/test.json`); + + expect(json).toEqual({ + testNumber: 23, + testString: 'Test String 23', + }); + }); + + it('should load a spritesheet', async () => + { + const loader = new Loader(); + + loader.addParser(loadJson, loadTextures, loadSpritesheet); + + const spriteSheet: Spritesheet = await loader.load(`${serverPath}spritesheet/spritesheet.json`); + + const bunnyTexture = spriteSheet.textures['bunny.png']; + const senseiTexture = spriteSheet.textures['pic-sensei.jpg']; + + expect(bunnyTexture).toBeInstanceOf(Texture); + expect(senseiTexture).toBeInstanceOf(Texture); + + expect(bunnyTexture.baseTexture).toBe(senseiTexture.baseTexture); + + expect(bunnyTexture.baseTexture.valid).toBe(true); + expect(bunnyTexture.width).toBe(7); + expect(bunnyTexture.height).toBe(10); + + expect(senseiTexture.baseTexture.valid).toBe(true); + expect(senseiTexture.width).toBe(125); + expect(senseiTexture.height).toBe(125); + }); + + it('should load a multi packed spritesheet', async () => + { + const loader = new Loader(); + + Cache.addParser(cacheSpritesheet); + + loader.addParser(loadJson, loadTextures, loadSpritesheet); + + const spritesheet = await loader.load(`${serverPath}spritesheet/multi-pack-0.json`) as Spritesheet; + + Cache.set('spritesheet/multi-pack-0.json', spritesheet); + + const pack0 = Cache.get('star1.png'); + const pack1 = Cache.get('goldmine_10_5.png'); + + expect(pack0).toBeInstanceOf(Texture); + expect(pack1).toBeInstanceOf(Texture); + + expect(pack0.baseTexture.valid).toBe(true); + expect(pack0.width).toBe(64); + expect(pack0.height).toBe(64); + + expect(pack1.baseTexture.valid).toBe(true); + expect(pack1.width).toBe(190); + expect(pack1.height).toBe(229); + }); + + it('should load a bitmap font', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures, loadBitmapFont); + + const bitmapFont: BitmapFont = await loader.load(`${serverPath}bitmap-font/desyrel.xml`); + const bitmapFont2: BitmapFont = await loader.load(`${serverPath}bitmap-font/font.fnt`); + + expect(bitmapFont).toBeInstanceOf(BitmapFont); + expect(bitmapFont2).toBeInstanceOf(BitmapFont); + }); + + it('should load a bitmap font text file', async () => + { + const loader = new Loader(); + + loader.addParser(loadTxt, loadTextures, loadBitmapFont); + + const bitmapFont: BitmapFont = await loader.load(`${serverPath}bitmap-font/bmtxt-test.txt`); + + expect(bitmapFont).toBeInstanceOf(BitmapFont); + }); + + it('should load a bitmap font sdf / msdf', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures, loadBitmapFont); + + const bitmapFont: BitmapFont = await loader.load(`${serverPath}bitmap-font/msdf.fnt`); + const bitmapFont2: BitmapFont = await loader.load(`${serverPath}bitmap-font/sdf.fnt`); + + expect(bitmapFont).toBeInstanceOf(BitmapFont); + expect(bitmapFont2).toBeInstanceOf(BitmapFont); + expect(bitmapFont.distanceFieldType).toEqual('msdf'); + expect(bitmapFont2.distanceFieldType).toEqual('sdf'); + }); + + it('should load a split bitmap font', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures, loadBitmapFont); + + const bitmapFont: BitmapFont = await loader.load(`${serverPath}bitmap-font/split_font.fnt`); + + expect(bitmapFont).toBeInstanceOf(BitmapFont); + }); + + it('should load a web font', async () => + { + const loader = new Loader(); + + loader.addParser(loadWebFont); + + const font = await loader.load(`${serverPath}fonts/outfit.woff2`); + + let foundFont = false; + + document.fonts.forEach((f: FontFace) => + { + if (f.family === 'Outfit.woff2') + { + foundFont = true; + } + }); + + document.fonts.delete(font); + + expect(foundFont).toBe(true); + }); + + it('should load a web font with custom attributes', async () => + { + const loader = new Loader(); + + document.fonts.clear(); + loader.addParser(loadWebFont); + + const font = await loader.load({ + data: { + family: 'Overridden', + style: 'italic', + weights: ['normal'], + }, + src: `${serverPath}fonts/outfit.woff2`, + }); + + let count = 0; + + document.fonts.forEach((f: FontFace) => + { + count++; + expect(f.family).toBe('Overridden'); + expect(f.weight).toBe('normal'); + expect(f.style).toBe('italic'); + }); + + document.fonts.delete(font); + + expect(count).toBe(1); + }); + + it('should load with metaData', async () => + { + const loader = new Loader(); + + loader.addParser({ + test: () => true, + load: async (url, options) => + url + options.data.whatever, + } as LoaderParser); + + const sillyID: string = await loader.load({ + src: `${serverPath}textures/bunny.png`, + data: { whatever: 23 }, + }); + + expect(sillyID).toBe(`${serverPath}textures/bunny.png23`); + }); + + it('should unload a texture', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures); + + const texture: Texture = await loader.load(`${serverPath}textures/bunny.png`); + + expect(texture.baseTexture.destroyed).toBe(false); + + const baseTexture = texture.baseTexture; + + await loader.unload(`${serverPath}textures/bunny.png`); + + expect(texture.baseTexture).toBe(null); + expect(baseTexture.destroyed).toBe(true); + }); + + it('should unload a spritesheet', async () => + { + const loader = new Loader(); + + loader.addParser(loadJson, loadTextures, loadSpritesheet); + + const spriteSheet: Spritesheet = await loader.load(`${serverPath}spritesheet/spritesheet.json`); + + await loader.unload(`${serverPath}spritesheet/spritesheet.json`); + + expect(spriteSheet.baseTexture).toBe(null); + }); + + it('should unload a bitmap font', async () => + { + const loader = new Loader(); + + loader.addParser(loadTextures, loadBitmapFont); + + const bitmapFont: BitmapFont = await loader.load(`${serverPath}bitmap-font/desyrel.xml`); + + expect(bitmapFont).toBeInstanceOf(BitmapFont); + + await loader.unload(`${serverPath}bitmap-font/desyrel.xml`); + + expect(bitmapFont.pageTextures).toBe(null); + }); + + it('should unload a web font', async () => + { + const loader = new Loader(); + + loader.addParser(loadWebFont); + + await loader.load(`${serverPath}fonts/outfit.woff2`); + + await loader.unload(`${serverPath}fonts/outfit.woff2`); + + let foundFont = false; + + document.fonts.forEach((f: FontFace) => + { + if (f.family === 'Outfit.woff2') + { + foundFont = true; + } + }); + + expect(foundFont).toBe(false); + }); +}); diff --git a/packages/assets/test/resolver.tests.ts b/packages/assets/test/resolver.tests.ts new file mode 100644 index 0000000000..464aca4ac7 --- /dev/null +++ b/packages/assets/test/resolver.tests.ts @@ -0,0 +1,486 @@ +import { spriteSheetUrlParser, textureUrlParser } from '@pixi/assets'; +import { Resolver } from '../src/resolver/Resolver'; +import { manifest } from './sampleManifest'; + +describe('Resolver', () => +{ + it('should resolve asset', () => + { + const resolver = new Resolver(); + + [ + { + preferOrder: { + priority: ['resolution', 'format'], + params: { + format: ['png', 'webp'], + resolution: [2, 1], + }, + }, + expected: 'my-image@2x.png', + }, + { + preferOrder: { + params: { + resolution: [1], + format: ['png', 'webp'], + }, + priority: ['resolution', 'format'], + }, + expected: 'my-image.png', + }, + { + preferOrder: { + params: { + resolution: [1], + format: ['webp', 'png'], + }, + priority: ['resolution', 'format'], + }, + expected: 'my-image.webp', + }, + { + preferOrder: { + params: { + resolution: [2, 1], + format: ['webp', 'png'], + }, + priority: ['format', 'resolution'], + }, + expected: 'my-image.webp', + }, + { + preferOrder: { + params: { + resolution: [2, 1], + format: ['webp', 'png'], + }, + priority: ['resolution', 'format'], + }, + expected: 'my-image@2x.png', + }, + + ].forEach((testData, i) => + { + if (i !== 0) return; + + resolver.reset(); + + resolver.prefer(testData.preferOrder); + + resolver.add('test', [ + { + resolution: 1, + format: 'png', + src: 'my-image.png', + }, + { + resolution: 2, + format: 'png', + src: 'my-image@2x.png', + }, + { + resolution: 1, + format: 'webp', + src: 'my-image.webp', + }, + ]); + + const asset = resolver.resolveUrl('test'); + + expect(asset).toBe(testData.expected); + }); + }); + + it('should resolve the correct texture', () => + { + const resolver = new Resolver(); + + resolver.prefer({ + priority: ['resolution', 'format'], + params: { + format: ['jpg'], + resolution: [2], + }, + }); + + resolver.addUrlParser(textureUrlParser); + + resolver.add('test', [ + 'profile-abel@0.5x.jpg', + 'profile-abel@2x.jpg', + 'profile-abel@0.5x.webp', + 'profile-abel@2x.webp', + ]); + + expect(resolver.resolveUrl('test')).toBe('profile-abel@2x.jpg'); + }); + + it('should resolve asset without priority', () => + { + const resolver = new Resolver(); + + [ + { + preferOrder: { + params: { + resolution: [2], + format: ['webp', 'png'], + }, + }, + expected: 'my-image@2x.png', + }, + { + preferOrder: { + params: { + format: ['webp', 'png'], + resolution: [2], + }, + }, + expected: 'my-image.webp', + }, + ].forEach((testData) => + { + resolver.reset(); + + resolver.add('test', [ + { + resolution: 1, + format: 'png', + src: 'my-image.png', + }, + { + resolution: 2, + format: 'png', + src: 'my-image@2x.png', + }, + { + resolution: 1, + format: 'webp', + src: 'my-image.webp', + }, + ]); + + resolver.prefer(testData.preferOrder); + + const asset = resolver.resolveUrl('test'); + + expect(asset).toBe(testData.expected); + }); + }); + + it('should be able to have resolve to a different string', () => + { + const resolver = new Resolver(); + + resolver.add('test', 'hello'); + + expect(resolver.resolveUrl('test')).toBe('hello'); + }); + + it('should be able to have multiple aliases', () => + { + const resolver = new Resolver(); + + resolver.prefer({ + params: { + resolution: [2, 1], + format: ['webp', 'png'], + }, + priority: ['resolution', 'format'], + }); + + resolver.add(['test', 'test-2', 'test-3'], [{ + resolution: 2, + format: 'png', + src: 'my-image.png', + }]); + + expect(resolver.resolveUrl('test')).toBe('my-image.png'); + expect(resolver.resolveUrl('test-2')).toBe('my-image.png'); + expect(resolver.resolveUrl('test-3')).toBe('my-image.png'); + }); + + it('should set base path correctly on urls', () => + { + const resolver = new Resolver(); + + resolver.basePath = 'http://localhost:8080/'; + + resolver.add('test', 'bunny.png'); + + expect(resolver.resolveUrl('test')).toBe('http://localhost:8080/bunny.png'); + }); + + it('should be able to have multiple preferences', () => + { + const resolver = new Resolver(); + + // check the params when adding! + resolver.prefer({ + params: { + format: ['ogg', 'mp3'], + }, + }); + + resolver.prefer({ + params: { + format: ['webp', 'png'], + resolution: [2, 1], + }, + }); + + resolver.add('test', [{ + resolution: 2, + format: 'png', + src: 'my-image.png', + }]); + + // TODO add default parser that just extracts file format + resolver.add('explode-sound', [ + `explode.mp3`, + `explode.ogg`, + ]); + + expect(resolver.resolveUrl('test')).toBe('my-image.png'); + expect(resolver.resolveUrl('explode-sound')).toBe('explode.ogg'); + }); + + it('should be able to parse strings', () => + { + const resolver = new Resolver(); + + resolver.prefer({ + priority: ['format'], + params: { + format: ['png', 'webp'], + }, + }); + + resolver.add('test', [ + 'my-image.webp', + 'my-image.png', + ]); + + expect(resolver.resolveUrl('test')).toBe('my-image.png'); + }); + + it('should be able to parse strings in a custom way', () => + { + const resolver = new Resolver(); + + resolver.prefer({ + priority: ['resolution', 'format'], + params: { + resolution: [2, 1], + format: ['webp', 'png'], + }, + }); + + resolver.addUrlParser(textureUrlParser); + + resolver.add('test', [ + 'my-image@4x.webp', + 'my-image@2x.webp', + 'my-image@2x.png', + 'my-image.png', + ]); + + expect(resolver.resolveUrl('test')).toBe('my-image@2x.webp'); + }); + + it('should resolve multiple assets', () => + { + const resolver = new Resolver(); + + resolver.add('test', 'out1.png'); + resolver.add('test2', 'out2.png'); + resolver.add('test3', 'out4.png'); + + expect(resolver.resolve(['test', 'test2', 'test3'])).toEqual({ + test: { + alias: ['test'], + format: 'png', + src: 'out1.png', + }, + test2: { + alias: ['test2'], + format: 'png', + src: 'out2.png', + }, + test3: { + alias: ['test3'], + format: 'png', + src: 'out4.png', + }, + }); + + expect(resolver.resolveUrl(['test', 'test2', 'test3'])).toEqual({ + test: 'out1.png', + test2: 'out2.png', + test3: 'out4.png', + }); + }); + + it('should resolve a bundle id correctly', () => + { + const resolver = new Resolver(); + + resolver.prefer({ + params: { + resolution: [2, 1], + format: ['webp', 'png'], + }, + }); + + resolver.add('test', [ + { + resolution: 2, + format: 'webp', + src: 'my-spritesheet@2x.webp.json', + }, + { + resolution: 0.5, + format: 'webp', + src: 'my-spritesheet@0.5x.webp.json', + }, + { + resolution: 2, + format: 'png', + src: 'my-spritesheet@2x.png.json', + }, + { + resolution: 0.5, + format: 'png', + src: 'my-spritesheet@0.5x.png.json', + }, + ]); + + expect(resolver.resolveUrl('test')).toBe('my-spritesheet@2x.webp.json'); + }); + + it('should get multiple bundle ids correctly', () => + { + const resolver = new Resolver(); + + resolver.addManifest(manifest); + + const assets = resolver.resolveBundle(['default', 'level']); + + expect(assets.level).toEqual({ + image3: { + alias: ['image3'], + format: 'png', + resolution: 1, + src: 'chicken.png', + }, + }); + + expect(assets.default).toEqual({ + image1: { + alias: ['image1'], + format: 'png', + resolution: 1, + src: 'my-sprite@2x.png', + }, + levelData: { + alias: [ + 'levelData', + ], + format: 'json', + src: 'levelData.json', + }, + spriteSheet1: { + alias: ['spriteSheet1'], + format: 'png', + resolution: 1, + src: 'my-sprite-sheet.json', + }, + spriteSheet2: { + alias: ['spriteSheet2'], + format: 'png', + resolution: 1, + src: 'my-sprite-sheet-2.json', + }, + }); + }); + + it('should resolve a bundle correctly', () => + { + const resolver = new Resolver(); + + resolver.addManifest(manifest); + + const assets = resolver.resolveUrl(['image1', 'levelData', 'spriteSheet1', 'spriteSheet2']); + + expect(assets).toEqual({ + image1: 'my-sprite@2x.png', + levelData: 'levelData.json', + spriteSheet1: 'my-sprite-sheet.json', + spriteSheet2: 'my-sprite-sheet-2.json', + }); + }); + + it('should parse a string sprite sheet correctly', () => + { + [ + { + url: 'my-sprite-sheet.json', + pass: false, + }, + { + url: 'my-sprite-sheet@0.5x.webp.json', + pass: true, + result: { + format: 'webp', + resolution: 0.5, + src: 'my-sprite-sheet@0.5x.webp.json', + }, + }, + { + url: 'my-sprite-sheet@2x.png.json', + pass: true, + result: { + format: 'png', + resolution: 2, + src: 'my-sprite-sheet@2x.png.json', + }, + }, + { + url: 'my-sprite-sheet@2x.json', + pass: false, + }, + ].forEach((toTest) => + { + const pass = spriteSheetUrlParser.test(toTest.url); + + expect(pass).toBe(toTest.pass); + + if (pass) + { + expect(spriteSheetUrlParser.parse(toTest.url)).toEqual(toTest.result); + } + }); + }); + + it('should be able to have resolve with a single string with {} options', () => + { + const resolver = new Resolver(); + + resolver.add('test', 'my-image.{png, webp}'); + + expect(resolver.resolveUrl('test')).toBe('my-image.png'); + + resolver.reset(); + + resolver.add('test', 'my-image.{png,webp}'); + + resolver.prefer({ + params: { + format: ['webp', 'png'], + }, + }); + + expect(resolver.resolveUrl('test')).toBe('my-image.webp'); + }); +}); diff --git a/packages/assets/test/sampleManifest.ts b/packages/assets/test/sampleManifest.ts new file mode 100644 index 0000000000..f041aa1ed3 --- /dev/null +++ b/packages/assets/test/sampleManifest.ts @@ -0,0 +1,75 @@ +import type { ResolverManifest } from '../src/resolver/types'; + +export const manifest: ResolverManifest = { + bundles: [ + { + name: 'default', + assets: [ + { + name: 'image1', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite@2x.png', + }, + { + resolution: 2, + format: 'png', + src: 'my-image@2x.png', + }, + ], + }, + { + name: 'spriteSheet1', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite-sheet.json', + }, + { + resolution: 2, + format: 'png', + src: 'my-sprite-sheet@2x.json', + }, + ], + }, + { + name: `spriteSheet2`, + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite-sheet-2.json', + }, + ], + }, + { + name: 'levelData', + srcs: 'levelData.json', + }, + ], + }, + { + name: 'level', + assets: [ + { + name: 'image3', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'chicken.png', + }, + { + resolution: 2, + format: 'png', + src: 'chicken@2x.png', + }, + ], + }, + ], + }, + ], +}; diff --git a/packages/assets/test/sampleManifests.ts b/packages/assets/test/sampleManifests.ts new file mode 100644 index 0000000000..f041aa1ed3 --- /dev/null +++ b/packages/assets/test/sampleManifests.ts @@ -0,0 +1,75 @@ +import type { ResolverManifest } from '../src/resolver/types'; + +export const manifest: ResolverManifest = { + bundles: [ + { + name: 'default', + assets: [ + { + name: 'image1', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite@2x.png', + }, + { + resolution: 2, + format: 'png', + src: 'my-image@2x.png', + }, + ], + }, + { + name: 'spriteSheet1', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite-sheet.json', + }, + { + resolution: 2, + format: 'png', + src: 'my-sprite-sheet@2x.json', + }, + ], + }, + { + name: `spriteSheet2`, + srcs: [ + { + resolution: 1, + format: 'png', + src: 'my-sprite-sheet-2.json', + }, + ], + }, + { + name: 'levelData', + srcs: 'levelData.json', + }, + ], + }, + { + name: 'level', + assets: [ + { + name: 'image3', + srcs: [ + { + resolution: 1, + format: 'png', + src: 'chicken.png', + }, + { + resolution: 2, + format: 'png', + src: 'chicken@2x.png', + }, + ], + }, + ], + }, + ], +}; diff --git a/packages/assets/test/utils.tests.ts b/packages/assets/test/utils.tests.ts new file mode 100644 index 0000000000..976d948374 --- /dev/null +++ b/packages/assets/test/utils.tests.ts @@ -0,0 +1,35 @@ +import { createStringVariations } from '@pixi/assets'; + +describe('Utils', () => +{ + it('createStringVariations should parse correctly', () => + { + const out = createStringVariations('hell@{2,1,0.5}x.{png,webp,avif}'); + + expect(out).toEqual([ + 'hell@2x.png', + 'hell@2x.webp', + 'hell@2x.avif', + 'hell@1x.png', + 'hell@1x.webp', + 'hell@1x.avif', + 'hell@0.5x.png', + 'hell@0.5x.webp', + 'hell@0.5x.avif', + ]); + + const out2 = createStringVariations('name is {chicken,wolf,sheep}'); + + expect(out2).toEqual([ + 'name is chicken', + 'name is wolf', + 'name is sheep', + ]); + + const out3 = createStringVariations('hell@2x.png'); + + expect(out3).toEqual([ + 'hell@2x.png', + ]); + }); +}); diff --git a/packages/basis/src/BasisLoader.ts b/packages/basis/src/BasisLoader.ts index 4789e20f62..1995f01eaa 100644 --- a/packages/basis/src/BasisLoader.ts +++ b/packages/basis/src/BasisLoader.ts @@ -1,26 +1,20 @@ -import { TYPES, MIPMAP_MODES, ALPHA_MODES, FORMATS } from '@pixi/constants'; -import type { ExtensionMetadata } from '@pixi/core'; -import { BaseTexture, BufferResource, ExtensionType, Texture } from '@pixi/core'; +import type { TYPES } from '@pixi/constants'; +import { MIPMAP_MODES, ALPHA_MODES, FORMATS } from '@pixi/constants'; +import type { BufferResource, ExtensionMetadata } from '@pixi/core'; +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; import { CompressedTextureResource } from '@pixi/compressed-textures'; import type { - BasisTextureExtensions, BasisBinding } from './Basis'; import { BASIS_FORMATS, - BASIS_FORMAT_TO_INTERNAL_FORMAT, - INTERNAL_FORMAT_TO_BASIS_FORMAT, - BASIS_FORMATS_ALPHA, BASIS_FORMAT_TO_TYPE, } from './Basis'; import { TranscoderWorker } from './TranscoderWorker'; import { LoaderResource } from '@pixi/loaders'; import type { IResourceMetadata } from '@pixi/loaders'; -import type { CompressedLevelBuffer, INTERNAL_FORMATS } from '@pixi/compressed-textures'; - -type TranscodedResourcesArray = (Array | Array) & { - basisFormat: BASIS_FORMATS -}; +import type { TranscodedResourcesArray } from './BasisParser'; +import { BasisParser } from './BasisParser'; /** * Result when calling registerCompressedTextures. @@ -69,12 +63,6 @@ export class BasisLoader /** @ignore */ static extension: ExtensionMetadata = ExtensionType.Loader; - private static basisBinding: BasisBinding; - private static defaultRGBFormat: { basisFormat: BASIS_FORMATS, textureFormat: INTERNAL_FORMATS | TYPES }; - private static defaultRGBAFormat: { basisFormat: BASIS_FORMATS, textureFormat: INTERNAL_FORMATS | TYPES }; - private static fallbackMode = false; - private static workerPool: TranscoderWorker[] = []; - /** * Transcodes the *.basis data when the data is loaded. If the transcoder is not bound yet, it * will hook transcoding to {@link BasisResource#onTranscoderInitialized}. @@ -86,59 +74,28 @@ export class BasisLoader { if (resource.extension === 'basis' && resource.data) { - if (!!BasisLoader.basisBinding || (!!BasisLoader.TranscoderWorker.wasmSource)) + (async () => { - BasisLoader.transcode(resource, next); - } - else - { - TranscoderWorker.onTranscoderInitialized.add(() => + if (!BasisParser.basisBinding && (!BasisParser.TranscoderWorker.wasmSource)) { - BasisLoader.transcode(resource, next); - }); - } - } - else - { - next(); - } - } + await TranscoderWorker.onTranscoderInitialized; + } - /** - * Runs transcoding and populates {@link imageArray}. It will run the transcoding in a web worker - * if they are available. - * @private - */ - private static async transcode(resource: LoaderResource, next: (...args: any[]) => void): Promise - { - try - { - const data: ArrayBuffer = resource.data; - let resources: TranscodedResourcesArray; + const resources = await BasisParser.transcode(resource.data); - if (typeof Worker !== 'undefined' && BasisLoader.TranscoderWorker.wasmSource) - { - resources = await BasisLoader.transcodeAsync(data); - } - else - { - resources = BasisLoader.transcodeSync(data); - } + Object.assign(resource, BasisLoader.registerTextures( + resource.url, + resources, + resource.metadata, + )); - Object.assign(resource, BasisLoader.registerTextures( - resource.url, - resources, - resource.metadata, - )); + next(); + })(); } - catch (err) + else { - next(err); - - return; + next(); } - - next(); } /** @@ -202,290 +159,6 @@ export class BasisLoader return result; } - /** - * Finds a suitable worker for transcoding and sends a transcoding request - * @private - * @async - */ - private static async transcodeAsync(arrayBuffer: ArrayBuffer): Promise - { - const workerPool = BasisLoader.workerPool; - - let leastLoad = 0x10000000; - let worker = null; - - for (let i = 0, j = workerPool.length; i < j; i++) - { - if (workerPool[i].load < leastLoad) - { - worker = workerPool[i]; - leastLoad = worker.load; - } - } - - if (!worker) - { - /* eslint-disable-next-line no-use-before-define */ - worker = new TranscoderWorker(); - - workerPool.push(worker); - } - - // Wait until worker is ready - await worker.initAsync(); - - const response = await worker.transcodeAsync( - new Uint8Array(arrayBuffer), - BasisLoader.defaultRGBAFormat.basisFormat, - BasisLoader.defaultRGBFormat.basisFormat, - ); - - const basisFormat = response.basisFormat; - const imageArray = response.imageArray; - - // whether it is an uncompressed format - const fallbackMode = basisFormat > 12; - let imageResources: TranscodedResourcesArray; - - if (!fallbackMode) - { - const format = BASIS_FORMAT_TO_INTERNAL_FORMAT[response.basisFormat]; - - // HINT: this.imageArray is CompressedTextureResource[] - imageResources = new Array(imageArray.length) as TranscodedResourcesArray; - - for (let i = 0, j = imageArray.length; i < j; i++) - { - imageResources[i] = new CompressedTextureResource(null, { - format, - width: imageArray[i].width, - height: imageArray[i].height, - levelBuffers: imageArray[i].levelArray, - levels: imageArray[i].levelArray.length, - }); - } - } - else - { - // TODO: BufferResource does not support manual mipmapping. - imageResources = imageArray.map((image) => new BufferResource( - new Uint16Array(image.levelArray[0].levelBuffer.buffer), { - width: image.width, - height: image.height, - }), - ) as TranscodedResourcesArray; - } - - imageResources.basisFormat = basisFormat; - - return imageResources; - } - - /** - * Runs transcoding on the main thread. - * @private - */ - private static transcodeSync(arrayBuffer: ArrayBuffer): TranscodedResourcesArray - { - const BASIS = BasisLoader.basisBinding; - - const data = new Uint8Array(arrayBuffer); - const basisFile = new BASIS.BasisFile(data); - const imageCount = basisFile.getNumImages(); - const hasAlpha = basisFile.getHasAlpha(); - - const basisFormat = hasAlpha - ? BasisLoader.defaultRGBAFormat.basisFormat - : BasisLoader.defaultRGBFormat.basisFormat; - const basisFallbackFormat = BASIS_FORMATS.cTFRGB565; - const imageResources = new Array(imageCount); - - let fallbackMode = BasisLoader.fallbackMode; - - if (!basisFile.startTranscoding()) - { - // #if _DEBUG - console.error(`Basis failed to start transcoding!`); - // #endif - - basisFile.close(); - basisFile.delete(); - - return null; - } - - for (let i = 0; i < imageCount; i++) - { - // Don't transcode all mipmap levels in fallback mode! - const levels = !fallbackMode ? basisFile.getNumLevels(i) : 1; - const width = basisFile.getImageWidth(i, 0); - const height = basisFile.getImageHeight(i, 0); - const alignedWidth = (width + 3) & ~3; - const alignedHeight = (height + 3) & ~3; - - const imageLevels = new Array(levels); - - // Transcode mipmap levels into "imageLevels" - for (let j = 0; j < levels; j++) - { - const levelWidth = basisFile.getImageWidth(i, j); - const levelHeight = basisFile.getImageHeight(i, j); - const byteSize = basisFile.getImageTranscodedSizeInBytes( - i, 0, !fallbackMode ? basisFormat : basisFallbackFormat); - - imageLevels[j] = { - levelID: j, - levelBuffer: new Uint8Array(byteSize), - levelWidth, - levelHeight, - }; - - if (!basisFile.transcodeImage( - imageLevels[j].levelBuffer, i, 0, !fallbackMode ? basisFormat : basisFallbackFormat, false, false)) - { - if (fallbackMode) - { - // #if _DEBUG - console.error(`Basis failed to transcode image ${i}, level ${0}!`); - // #endif - break; - } - else - { - // Try transcoding to an uncompressed format before giving up! - // NOTE: We must start all over again as all Resources must be in compressed OR uncompressed. - i = -1; - fallbackMode = true; - - // #if _DEBUG - /* eslint-disable-next-line max-len */ - console.warn(`Basis failed to transcode image ${i}, level ${0} to a compressed texture format. Retrying to an uncompressed fallback format!`); - // #endif - continue; - } - } - } - - let imageResource; - - if (!fallbackMode) - { - imageResource = new CompressedTextureResource(null, { - format: BASIS_FORMAT_TO_INTERNAL_FORMAT[basisFormat], - width: alignedWidth, - height: alignedHeight, - levelBuffers: imageLevels, - levels, - }); - } - else - { - // TODO: BufferResource doesn't support manual mipmap levels - imageResource = new BufferResource( - new Uint16Array(imageLevels[0].levelBuffer.buffer), { width, height }); - } - - imageResources[i] = imageResource; - } - - basisFile.close(); - basisFile.delete(); - - const transcodedResources = imageResources as TranscodedResourcesArray; - - transcodedResources.basisFormat = !fallbackMode ? basisFormat : basisFallbackFormat; - - return transcodedResources; - } - - /** - * Detects the available compressed texture formats on the device. - * @param extensions - extensions provided by a WebGL context - * @ignore - */ - static autoDetectFormats(extensions?: Partial): void - { - // Auto-detect WebGL compressed-texture extensions - if (!extensions) - { - const canvas = document.createElement('canvas'); - const gl = canvas.getContext('webgl'); - - if (!gl) - { - console.error('WebGL not available for BASIS transcoding. Silently failing.'); - - return; - } - - extensions = { - s3tc: gl.getExtension('WEBGL_compressed_texture_s3tc'), - s3tc_sRGB: gl.getExtension('WEBGL_compressed_texture_s3tc_srgb'), /* eslint-disable-line camelcase */ - etc: gl.getExtension('WEBGL_compressed_texture_etc'), - etc1: gl.getExtension('WEBGL_compressed_texture_etc1'), - pvrtc: gl.getExtension('WEBGL_compressed_texture_pvrtc') - || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'), - atc: gl.getExtension('WEBGL_compressed_texture_atc'), - astc: gl.getExtension('WEBGL_compressed_texture_astc'), - }; - } - - // Discover the available texture formats - const supportedFormats: { [id: string]: INTERNAL_FORMATS } = {}; - - for (const key in extensions) - { - const extension = (extensions as any)[key]; - - if (!extension) - { - continue; - } - - Object.assign(supportedFormats, Object.getPrototypeOf(extension)); - } - - // Set the default alpha/non-alpha output formats for basisu transcoding - for (let i = 0; i < 2; i++) - { - const detectWithAlpha = !!i; - let internalFormat: number; - let basisFormat: number; - - for (const id in supportedFormats) - { - internalFormat = supportedFormats[id]; - basisFormat = INTERNAL_FORMAT_TO_BASIS_FORMAT[internalFormat]; - - if (basisFormat !== undefined) - { - if ((detectWithAlpha && BASIS_FORMATS_ALPHA[basisFormat]) - || (!detectWithAlpha && !BASIS_FORMATS_ALPHA[basisFormat])) - { - break; - } - } - } - - if (internalFormat) - { - BasisLoader[detectWithAlpha ? 'defaultRGBAFormat' : 'defaultRGBFormat'] = { - textureFormat: internalFormat, - basisFormat, - }; - } - else - { - BasisLoader[detectWithAlpha ? 'defaultRGBAFormat' : 'defaultRGBFormat'] = { - textureFormat: TYPES.UNSIGNED_SHORT_5_6_5, - basisFormat: BASIS_FORMATS.cTFRGB565, - }; - - BasisLoader.fallbackMode = true; - } - } - } - /** * Binds the basis_universal transcoder to decompress *.basis files. You must initialize the transcoder library yourself. * @@ -508,7 +181,7 @@ export class BasisLoader */ static bindTranscoder(basisLibrary: BasisBinding): void { - BasisLoader.basisBinding = basisLibrary; + BasisParser.basisBinding = basisLibrary; } /** @@ -519,7 +192,7 @@ export class BasisLoader */ static loadTranscoder(jsURL: string, wasmURL: string): Promise<[void, void]> { - return BasisLoader.TranscoderWorker.loadTranscoder(jsURL, wasmURL); + return BasisParser.TranscoderWorker.loadTranscoder(jsURL, wasmURL); } /** @@ -530,26 +203,7 @@ export class BasisLoader */ static setTranscoder(jsSource: string, wasmSource: ArrayBuffer): void { - BasisLoader.TranscoderWorker.setTranscoder(jsSource, wasmSource); - } - - static TranscoderWorker: typeof TranscoderWorker = TranscoderWorker; - - static get TRANSCODER_WORKER_POOL_LIMIT(): number - { - return this.workerPool.length || 1; - } - - static set TRANSCODER_WORKER_POOL_LIMIT(limit: number) - { - // TODO: Destroy workers? - for (let i = this.workerPool.length; i < limit; i++) - { - this.workerPool[i] = new TranscoderWorker(); - this.workerPool[i].initAsync(); - } + BasisParser.TranscoderWorker.setTranscoder(jsSource, wasmSource); } } -// Auto-detect compressed texture formats once @pixi/basis is imported! -BasisLoader.autoDetectFormats(); diff --git a/packages/basis/src/BasisParser.ts b/packages/basis/src/BasisParser.ts new file mode 100644 index 0000000000..b425269e69 --- /dev/null +++ b/packages/basis/src/BasisParser.ts @@ -0,0 +1,438 @@ +import { TYPES } from '@pixi/constants'; +import type { ExtensionMetadata } from '@pixi/core'; +import { BufferResource, ExtensionType } from '@pixi/core'; +import { CompressedTextureResource } from '@pixi/compressed-textures'; +import type { + BasisTextureExtensions, + BasisBinding } from './Basis'; +import { + BASIS_FORMATS, + BASIS_FORMAT_TO_INTERNAL_FORMAT, + INTERNAL_FORMAT_TO_BASIS_FORMAT, + BASIS_FORMATS_ALPHA +} from './Basis'; +import { TranscoderWorker } from './TranscoderWorker'; + +import type { CompressedLevelBuffer, INTERNAL_FORMATS } from '@pixi/compressed-textures'; + +export type TranscodedResourcesArray = (Array | Array) & { + basisFormat: BASIS_FORMATS +}; + +/** + * Loader plugin for handling BASIS supercompressed texture files. + * + * To use this loader, you must bind the basis_universal WebAssembly transcoder. There are two ways of + * doing this: + * + * 1. Adding a <script> tag to your HTML page to the transcoder bundle in this package, and serving + * the WASM binary from the same location. + * + * ```js + * // Copy ./node_modules/@pixi/basis/assets/basis_.wasm into your assets directory + * // as well, so it is served from the same folder as the JavaScript! + * <script src="./node_modules/@pixi/basis/assets/basis_transcoder.js" /> + * ``` + * + * NOTE: `basis_transcoder.js` expects the WebAssembly binary to be named `basis_transcoder.wasm`. + * NOTE-2: This method supports transcoding on the main-thread. Only use this if you have 1 or 2 *.basis + * files. + * + * 2. Loading the transcoder source from a URL. + * + * ```js + * // Use this if you to use the default CDN url for @pixi/basis + * BasisParser.loadTranscoder(); + * + * // Use this if you want to serve the transcoder on your own + * BasisParser.loadTranscoder('./basis_transcoder.js', './basis_transcoder.wasm'); + * ``` + * + * NOTE: This can only be used with web-workers. + * @class + * @memberof PIXI + * @implements {PIXI.ILoaderPlugin} + */ +export class BasisParser +{ + /** @ignore */ + static extension: ExtensionMetadata = ExtensionType.Loader; + + public static basisBinding: BasisBinding; + private static defaultRGBFormat: { basisFormat: BASIS_FORMATS, textureFormat: INTERNAL_FORMATS | TYPES }; + private static defaultRGBAFormat: { basisFormat: BASIS_FORMATS, textureFormat: INTERNAL_FORMATS | TYPES }; + private static fallbackMode = false; + private static workerPool: TranscoderWorker[] = []; + + /** + * Runs transcoding and populates {@link imageArray}. It will run the transcoding in a web worker + * if they are available. + * @private + */ + public static async transcode(arrayBuffer: ArrayBuffer): Promise + { + let resources: TranscodedResourcesArray; + + if (typeof Worker !== 'undefined' && BasisParser.TranscoderWorker.wasmSource) + { + resources = await BasisParser.transcodeAsync(arrayBuffer); + } + else + { + resources = BasisParser.transcodeSync(arrayBuffer); + } + + return resources; + } + + /** + * Finds a suitable worker for transcoding and sends a transcoding request + * @private + * @async + */ + public static async transcodeAsync(arrayBuffer: ArrayBuffer): Promise + { + const workerPool = BasisParser.workerPool; + + let leastLoad = 0x10000000; + let worker = null; + + for (let i = 0, j = workerPool.length; i < j; i++) + { + if (workerPool[i].load < leastLoad) + { + worker = workerPool[i]; + leastLoad = worker.load; + } + } + + if (!worker) + { + /* eslint-disable-next-line no-use-before-define */ + worker = new TranscoderWorker(); + + workerPool.push(worker); + } + + // Wait until worker is ready + await worker.initAsync(); + + const response = await worker.transcodeAsync( + new Uint8Array(arrayBuffer), + BasisParser.defaultRGBAFormat.basisFormat, + BasisParser.defaultRGBFormat.basisFormat, + ); + + const basisFormat = response.basisFormat; + const imageArray = response.imageArray; + + // whether it is an uncompressed format + const fallbackMode = basisFormat > 12; + let imageResources: TranscodedResourcesArray; + + if (!fallbackMode) + { + const format = BASIS_FORMAT_TO_INTERNAL_FORMAT[response.basisFormat]; + + // HINT: this.imageArray is CompressedTextureResource[] + imageResources = new Array(imageArray.length) as TranscodedResourcesArray; + + for (let i = 0, j = imageArray.length; i < j; i++) + { + imageResources[i] = new CompressedTextureResource(null, { + format, + width: imageArray[i].width, + height: imageArray[i].height, + levelBuffers: imageArray[i].levelArray, + levels: imageArray[i].levelArray.length, + }); + } + } + else + { + // TODO: BufferResource does not support manual mipmapping. + imageResources = imageArray.map((image) => new BufferResource( + new Uint16Array(image.levelArray[0].levelBuffer.buffer), { + width: image.width, + height: image.height, + }), + ) as TranscodedResourcesArray; + } + + imageResources.basisFormat = basisFormat; + + return imageResources; + } + + /** + * Runs transcoding on the main thread. + * @private + */ + public static transcodeSync(arrayBuffer: ArrayBuffer): TranscodedResourcesArray + { + const BASIS = BasisParser.basisBinding; + + const data = new Uint8Array(arrayBuffer); + const basisFile = new BASIS.BasisFile(data); + const imageCount = basisFile.getNumImages(); + const hasAlpha = basisFile.getHasAlpha(); + + const basisFormat = hasAlpha + ? BasisParser.defaultRGBAFormat.basisFormat + : BasisParser.defaultRGBFormat.basisFormat; + const basisFallbackFormat = BASIS_FORMATS.cTFRGB565; + const imageResources = new Array(imageCount); + + let fallbackMode = BasisParser.fallbackMode; + + if (!basisFile.startTranscoding()) + { + // #if _DEBUG + console.error(`Basis failed to start transcoding!`); + // #endif + + basisFile.close(); + basisFile.delete(); + + return null; + } + + for (let i = 0; i < imageCount; i++) + { + // Don't transcode all mipmap levels in fallback mode! + const levels = !fallbackMode ? basisFile.getNumLevels(i) : 1; + const width = basisFile.getImageWidth(i, 0); + const height = basisFile.getImageHeight(i, 0); + const alignedWidth = (width + 3) & ~3; + const alignedHeight = (height + 3) & ~3; + + const imageLevels = new Array(levels); + + // Transcode mipmap levels into "imageLevels" + for (let j = 0; j < levels; j++) + { + const levelWidth = basisFile.getImageWidth(i, j); + const levelHeight = basisFile.getImageHeight(i, j); + const byteSize = basisFile.getImageTranscodedSizeInBytes( + i, 0, !fallbackMode ? basisFormat : basisFallbackFormat); + + imageLevels[j] = { + levelID: j, + levelBuffer: new Uint8Array(byteSize), + levelWidth, + levelHeight, + }; + + if (!basisFile.transcodeImage( + imageLevels[j].levelBuffer, i, 0, !fallbackMode ? basisFormat : basisFallbackFormat, false, false)) + { + if (fallbackMode) + { + // #if _DEBUG + console.error(`Basis failed to transcode image ${i}, level ${0}!`); + // #endif + break; + } + else + { + // Try transcoding to an uncompressed format before giving up! + // NOTE: We must start all over again as all Resources must be in compressed OR uncompressed. + i = -1; + fallbackMode = true; + + // #if _DEBUG + /* eslint-disable-next-line max-len */ + console.warn(`Basis failed to transcode image ${i}, level ${0} to a compressed texture format. Retrying to an uncompressed fallback format!`); + // #endif + continue; + } + } + } + + let imageResource; + + if (!fallbackMode) + { + imageResource = new CompressedTextureResource(null, { + format: BASIS_FORMAT_TO_INTERNAL_FORMAT[basisFormat], + width: alignedWidth, + height: alignedHeight, + levelBuffers: imageLevels, + levels, + }); + } + else + { + // TODO: BufferResource doesn't support manual mipmap levels + imageResource = new BufferResource( + new Uint16Array(imageLevels[0].levelBuffer.buffer), { width, height }); + } + + imageResources[i] = imageResource; + } + + basisFile.close(); + basisFile.delete(); + + const transcodedResources = imageResources as TranscodedResourcesArray; + + transcodedResources.basisFormat = !fallbackMode ? basisFormat : basisFallbackFormat; + + return transcodedResources; + } + + /** + * Detects the available compressed texture formats on the device. + * @param extensions - extensions provided by a WebGL context + * @ignore + */ + static autoDetectFormats(extensions?: Partial): void + { + // Auto-detect WebGL compressed-texture extensions + if (!extensions) + { + const canvas = document.createElement('canvas'); + const gl = canvas.getContext('webgl'); + + if (!gl) + { + console.error('WebGL not available for BASIS transcoding. Silently failing.'); + + return; + } + + extensions = { + s3tc: gl.getExtension('WEBGL_compressed_texture_s3tc'), + s3tc_sRGB: gl.getExtension('WEBGL_compressed_texture_s3tc_srgb'), /* eslint-disable-line camelcase */ + etc: gl.getExtension('WEBGL_compressed_texture_etc'), + etc1: gl.getExtension('WEBGL_compressed_texture_etc1'), + pvrtc: gl.getExtension('WEBGL_compressed_texture_pvrtc') + || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'), + atc: gl.getExtension('WEBGL_compressed_texture_atc'), + astc: gl.getExtension('WEBGL_compressed_texture_astc'), + }; + } + + // Discover the available texture formats + const supportedFormats: { [id: string]: INTERNAL_FORMATS } = {}; + + for (const key in extensions) + { + const extension = (extensions as any)[key]; + + if (!extension) + { + continue; + } + + Object.assign(supportedFormats, Object.getPrototypeOf(extension)); + } + + // Set the default alpha/non-alpha output formats for basisu transcoding + for (let i = 0; i < 2; i++) + { + const detectWithAlpha = !!i; + let internalFormat: number; + let basisFormat: number; + + for (const id in supportedFormats) + { + internalFormat = supportedFormats[id]; + basisFormat = INTERNAL_FORMAT_TO_BASIS_FORMAT[internalFormat]; + + if (basisFormat !== undefined) + { + if ((detectWithAlpha && BASIS_FORMATS_ALPHA[basisFormat]) + || (!detectWithAlpha && !BASIS_FORMATS_ALPHA[basisFormat])) + { + break; + } + } + } + + if (internalFormat) + { + BasisParser[detectWithAlpha ? 'defaultRGBAFormat' : 'defaultRGBFormat'] = { + textureFormat: internalFormat, + basisFormat, + }; + } + else + { + BasisParser[detectWithAlpha ? 'defaultRGBAFormat' : 'defaultRGBFormat'] = { + textureFormat: TYPES.UNSIGNED_SHORT_5_6_5, + basisFormat: BASIS_FORMATS.cTFRGB565, + }; + + BasisParser.fallbackMode = true; + } + } + } + + /** + * Binds the basis_universal transcoder to decompress *.basis files. You must initialize the transcoder library yourself. + * + * ```js + * import { BasisParser } from '@pixi/basis'; + * import { Loader } from '@pixi/loaders'; + * + * // window.BASIS() returns a Promise-like object + * window.BASIS().then((basisLibrary) => + * { + * // Initialize basis-library; otherwise, transcoded results maybe corrupt! + * basisLibrary.initializeBasis(); + * + * // Bind BasisParser to the transcoder + * BasisParser.bindTranscoder(basisLibrary); + * }); + * ``` + * @param basisLibrary - the initialized transcoder library + * @private + */ + static bindTranscoder(basisLibrary: BasisBinding): void + { + BasisParser.basisBinding = basisLibrary; + } + + /** + * Loads the transcoder source code for use in {@link PIXI.BasisParser.TranscoderWorker}. + * @private + * @param jsURL - URL to the javascript basis transcoder + * @param wasmURL - URL to the wasm basis transcoder + */ + static loadTranscoder(jsURL: string, wasmURL: string): Promise<[void, void]> + { + return BasisParser.TranscoderWorker.loadTranscoder(jsURL, wasmURL); + } + + /** + * Set the transcoder source code directly + * @private + * @param jsSource - source for the javascript basis transcoder + * @param wasmSource - source for the wasm basis transcoder + */ + static setTranscoder(jsSource: string, wasmSource: ArrayBuffer): void + { + BasisParser.TranscoderWorker.setTranscoder(jsSource, wasmSource); + } + + static TranscoderWorker: typeof TranscoderWorker = TranscoderWorker; + + static get TRANSCODER_WORKER_POOL_LIMIT(): number + { + return this.workerPool.length || 1; + } + + static set TRANSCODER_WORKER_POOL_LIMIT(limit: number) + { + // TODO: Destroy workers? + for (let i = this.workerPool.length; i < limit; i++) + { + this.workerPool[i] = new TranscoderWorker(); + this.workerPool[i].initAsync(); + } + } +} + +// Auto-detect compressed texture formats once @pixi/basis is imported! +BasisParser.autoDetectFormats(); diff --git a/packages/basis/src/TranscoderWorker.ts b/packages/basis/src/TranscoderWorker.ts index 7ee7189460..52dd362d7c 100644 --- a/packages/basis/src/TranscoderWorker.ts +++ b/packages/basis/src/TranscoderWorker.ts @@ -1,4 +1,3 @@ -import { Runner } from '@pixi/runner'; import type { BASIS_FORMATS } from './Basis'; import type { ITranscodeResponse } from './TranscoderWorkerWrapper'; import { TranscoderWorkerWrapper } from './TranscoderWorkerWrapper'; @@ -22,7 +21,13 @@ export class TranscoderWorker static jsSource: string; static wasmSource: ArrayBuffer; - public static onTranscoderInitialized = new Runner('onTranscoderInitialized'); + private static _onTranscoderInitializedResolve: () => void; + + /** a promise that when reslved means the transcoder is ready to be used */ + public static onTranscoderInitialized = new Promise((resolve) => + { + TranscoderWorker._onTranscoderInitializedResolve = resolve; + }); isInit: boolean; load: number; @@ -175,8 +180,9 @@ export class TranscoderWorker .then((arrayBuffer: ArrayBuffer) => { TranscoderWorker.wasmSource = arrayBuffer; }); return Promise.all([jsPromise, wasmPromise]).then((data) => + { - TranscoderWorker.onTranscoderInitialized.emit(); + this._onTranscoderInitializedResolve(); return data; }); diff --git a/packages/basis/src/index.ts b/packages/basis/src/index.ts index 1d20a0b567..8be6054983 100644 --- a/packages/basis/src/index.ts +++ b/packages/basis/src/index.ts @@ -3,5 +3,7 @@ import { BasisLoader } from './BasisLoader'; export * from './Basis'; export * from './BasisLoader'; +export * from './BasisParser'; +export * from './TranscoderWorker'; extensions.add(BasisLoader); diff --git a/packages/compressed-textures/src/index.ts b/packages/compressed-textures/src/index.ts index a7268776fb..ed9b174aa7 100644 --- a/packages/compressed-textures/src/index.ts +++ b/packages/compressed-textures/src/index.ts @@ -1,3 +1,4 @@ export * from './const'; export * from './resources'; export * from './loaders'; +export * from './parsers'; diff --git a/packages/compressed-textures/src/loaders/DDSLoader.ts b/packages/compressed-textures/src/loaders/DDSLoader.ts index ce073b9dd3..6506a341c6 100644 --- a/packages/compressed-textures/src/loaders/DDSLoader.ts +++ b/packages/compressed-textures/src/loaders/DDSLoader.ts @@ -1,251 +1,12 @@ -import { CompressedTextureResource } from '../resources'; -import { INTERNAL_FORMATS, INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const'; import { LoaderResource } from '@pixi/loaders'; import { registerCompressedTextures } from './registerCompressedTextures'; import type { ExtensionMetadata } from '@pixi/core'; import { ExtensionType } from '@pixi/core'; +import { parseDDS } from '../parsers'; // Set DDS files to be loaded as an ArrayBuffer LoaderResource.setExtensionXhrType('dds', LoaderResource.XHR_RESPONSE_TYPE.BUFFER); -const DDS_MAGIC_SIZE = 4; -const DDS_HEADER_SIZE = 124; -const DDS_HEADER_PF_SIZE = 32; -const DDS_HEADER_DX10_SIZE = 20; - -// DDS file format magic word -const DDS_MAGIC = 0x20534444; - -/** - * DWORD offsets of the DDS file header fields (relative to file start). - * @ignore - */ -const DDS_FIELDS = { - SIZE: 1, - FLAGS: 2, - HEIGHT: 3, - WIDTH: 4, - MIPMAP_COUNT: 7, - PIXEL_FORMAT: 19, -}; - -/** - * DWORD offsets of the DDS PIXEL_FORMAT fields. - * @ignore - */ -const DDS_PF_FIELDS = { - SIZE: 0, - FLAGS: 1, - FOURCC: 2, - RGB_BITCOUNT: 3, - R_BIT_MASK: 4, - G_BIT_MASK: 5, - B_BIT_MASK: 6, - A_BIT_MASK: 7 -}; - -/** - * DWORD offsets of the DDS_HEADER_DX10 fields. - * @ignore - */ -const DDS_DX10_FIELDS = { - DXGI_FORMAT: 0, - RESOURCE_DIMENSION: 1, - MISC_FLAG: 2, - ARRAY_SIZE: 3, - MISC_FLAGS2: 4 -}; - -/** - * @see https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format - * @ignore - */ -// This is way over-blown for us! Lend us a hand, and remove the ones that aren't used (but set the remaining -// ones to their correct value) -enum DXGI_FORMAT - { - DXGI_FORMAT_UNKNOWN, - DXGI_FORMAT_R32G32B32A32_TYPELESS, - DXGI_FORMAT_R32G32B32A32_FLOAT, - DXGI_FORMAT_R32G32B32A32_UINT, - DXGI_FORMAT_R32G32B32A32_SINT, - DXGI_FORMAT_R32G32B32_TYPELESS, - DXGI_FORMAT_R32G32B32_FLOAT, - DXGI_FORMAT_R32G32B32_UINT, - DXGI_FORMAT_R32G32B32_SINT, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R16G16B16A16_UNORM, - DXGI_FORMAT_R16G16B16A16_UINT, - DXGI_FORMAT_R16G16B16A16_SNORM, - DXGI_FORMAT_R16G16B16A16_SINT, - DXGI_FORMAT_R32G32_TYPELESS, - DXGI_FORMAT_R32G32_FLOAT, - DXGI_FORMAT_R32G32_UINT, - DXGI_FORMAT_R32G32_SINT, - DXGI_FORMAT_R32G8X24_TYPELESS, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, - DXGI_FORMAT_R10G10B10A2_TYPELESS, - DXGI_FORMAT_R10G10B10A2_UNORM, - DXGI_FORMAT_R10G10B10A2_UINT, - DXGI_FORMAT_R11G11B10_FLOAT, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, - DXGI_FORMAT_R8G8B8A8_UINT, - DXGI_FORMAT_R8G8B8A8_SNORM, - DXGI_FORMAT_R8G8B8A8_SINT, - DXGI_FORMAT_R16G16_TYPELESS, - DXGI_FORMAT_R16G16_FLOAT, - DXGI_FORMAT_R16G16_UNORM, - DXGI_FORMAT_R16G16_UINT, - DXGI_FORMAT_R16G16_SNORM, - DXGI_FORMAT_R16G16_SINT, - DXGI_FORMAT_R32_TYPELESS, - DXGI_FORMAT_D32_FLOAT, - DXGI_FORMAT_R32_FLOAT, - DXGI_FORMAT_R32_UINT, - DXGI_FORMAT_R32_SINT, - DXGI_FORMAT_R24G8_TYPELESS, - DXGI_FORMAT_D24_UNORM_S8_UINT, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS, - DXGI_FORMAT_X24_TYPELESS_G8_UINT, - DXGI_FORMAT_R8G8_TYPELESS, - DXGI_FORMAT_R8G8_UNORM, - DXGI_FORMAT_R8G8_UINT, - DXGI_FORMAT_R8G8_SNORM, - DXGI_FORMAT_R8G8_SINT, - DXGI_FORMAT_R16_TYPELESS, - DXGI_FORMAT_R16_FLOAT, - DXGI_FORMAT_D16_UNORM, - DXGI_FORMAT_R16_UNORM, - DXGI_FORMAT_R16_UINT, - DXGI_FORMAT_R16_SNORM, - DXGI_FORMAT_R16_SINT, - DXGI_FORMAT_R8_TYPELESS, - DXGI_FORMAT_R8_UNORM, - DXGI_FORMAT_R8_UINT, - DXGI_FORMAT_R8_SNORM, - DXGI_FORMAT_R8_SINT, - DXGI_FORMAT_A8_UNORM, - DXGI_FORMAT_R1_UNORM, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP, - DXGI_FORMAT_R8G8_B8G8_UNORM, - DXGI_FORMAT_G8R8_G8B8_UNORM, - DXGI_FORMAT_BC1_TYPELESS, - DXGI_FORMAT_BC1_UNORM, - DXGI_FORMAT_BC1_UNORM_SRGB, - DXGI_FORMAT_BC2_TYPELESS, - DXGI_FORMAT_BC2_UNORM, - DXGI_FORMAT_BC2_UNORM_SRGB, - DXGI_FORMAT_BC3_TYPELESS, - DXGI_FORMAT_BC3_UNORM, - DXGI_FORMAT_BC3_UNORM_SRGB, - DXGI_FORMAT_BC4_TYPELESS, - DXGI_FORMAT_BC4_UNORM, - DXGI_FORMAT_BC4_SNORM, - DXGI_FORMAT_BC5_TYPELESS, - DXGI_FORMAT_BC5_UNORM, - DXGI_FORMAT_BC5_SNORM, - DXGI_FORMAT_B5G6R5_UNORM, - DXGI_FORMAT_B5G5R5A1_UNORM, - DXGI_FORMAT_B8G8R8A8_UNORM, - DXGI_FORMAT_B8G8R8X8_UNORM, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, - DXGI_FORMAT_B8G8R8A8_TYPELESS, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, - DXGI_FORMAT_B8G8R8X8_TYPELESS, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, - DXGI_FORMAT_BC6H_TYPELESS, - DXGI_FORMAT_BC6H_UF16, - DXGI_FORMAT_BC6H_SF16, - DXGI_FORMAT_BC7_TYPELESS, - DXGI_FORMAT_BC7_UNORM, - DXGI_FORMAT_BC7_UNORM_SRGB, - DXGI_FORMAT_AYUV, - DXGI_FORMAT_Y410, - DXGI_FORMAT_Y416, - DXGI_FORMAT_NV12, - DXGI_FORMAT_P010, - DXGI_FORMAT_P016, - DXGI_FORMAT_420_OPAQUE, - DXGI_FORMAT_YUY2, - DXGI_FORMAT_Y210, - DXGI_FORMAT_Y216, - DXGI_FORMAT_NV11, - DXGI_FORMAT_AI44, - DXGI_FORMAT_IA44, - DXGI_FORMAT_P8, - DXGI_FORMAT_A8P8, - DXGI_FORMAT_B4G4R4A4_UNORM, - DXGI_FORMAT_P208, - DXGI_FORMAT_V208, - DXGI_FORMAT_V408, - DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE, - DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE, - DXGI_FORMAT_FORCE_UINT -} - -/** - * Possible values of the field {@link DDS_DX10_FIELDS.RESOURCE_DIMENSION} - * @ignore - */ -enum D3D10_RESOURCE_DIMENSION - { - DDS_DIMENSION_TEXTURE1D = 2, - DDS_DIMENSION_TEXTURE2D = 3, - DDS_DIMENSION_TEXTURE3D = 6 -} - -const PF_FLAGS = 1; - -// PIXEL_FORMAT flags -const DDPF_ALPHA = 0x2; -const DDPF_FOURCC = 0x4; -const DDPF_RGB = 0x40; -const DDPF_YUV = 0x200; -const DDPF_LUMINANCE = 0x20000; - -// Four character codes for DXTn formats -const FOURCC_DXT1 = 0x31545844; -const FOURCC_DXT3 = 0x33545844; -const FOURCC_DXT5 = 0x35545844; -const FOURCC_DX10 = 0x30315844; - -// Cubemap texture flag (for DDS_DX10_FIELDS.MISC_FLAG) -const DDS_RESOURCE_MISC_TEXTURECUBE = 0x4; - -/** - * Maps `FOURCC_*` formats to internal formats (see {@link PIXI.INTERNAL_FORMATS}). - * @ignore - */ -const FOURCC_TO_FORMAT: { [id: number]: number } = { - [FOURCC_DXT1]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, - [FOURCC_DXT3]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, - [FOURCC_DXT5]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT -}; - -/** - * Maps {@link DXGI_FORMAT} to types/internal-formats (see {@link PIXI.TYPES}, {@link PIXI.INTERNAL_FORMATS}) - * @ignore - */ -const DXGI_TO_FORMAT: { [id: number]: number } = { - // WEBGL_compressed_texture_s3tc - [DXGI_FORMAT.DXGI_FORMAT_BC1_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC2_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC3_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT, - - // WEBGL_compressed_texture_s3tc_srgb - [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, - [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT -}; - /** * @class * @memberof PIXI @@ -271,7 +32,7 @@ export class DDSLoader { Object.assign(resource, registerCompressedTextures( resource.name || resource.url, - DDSLoader.parse(resource.data), + parseDDS(resource.data), resource.metadata, )); } @@ -285,156 +46,4 @@ export class DDSLoader next(); } - - /** Parses the DDS file header, generates base-textures, and puts them into the texture cache. */ - private static parse(arrayBuffer: ArrayBuffer): CompressedTextureResource[] - { - const data = new Uint32Array(arrayBuffer); - const magicWord = data[0]; - - if (magicWord !== DDS_MAGIC) - { - throw new Error('Invalid DDS file magic word'); - } - - const header = new Uint32Array(arrayBuffer, 0, DDS_HEADER_SIZE / Uint32Array.BYTES_PER_ELEMENT); - - // DDS header fields - const height = header[DDS_FIELDS.HEIGHT]; - const width = header[DDS_FIELDS.WIDTH]; - const mipmapCount = header[DDS_FIELDS.MIPMAP_COUNT]; - - // PIXEL_FORMAT fields - const pixelFormat = new Uint32Array( - arrayBuffer, - DDS_FIELDS.PIXEL_FORMAT * Uint32Array.BYTES_PER_ELEMENT, - DDS_HEADER_PF_SIZE / Uint32Array.BYTES_PER_ELEMENT); - const formatFlags = pixelFormat[PF_FLAGS]; - - // File contains compressed texture(s) - if (formatFlags & DDPF_FOURCC) - { - const fourCC = pixelFormat[DDS_PF_FIELDS.FOURCC]; - - // File contains one DXTn compressed texture - if (fourCC !== FOURCC_DX10) - { - const internalFormat = FOURCC_TO_FORMAT[fourCC]; - - const dataOffset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE; - const texData = new Uint8Array(arrayBuffer, dataOffset); - - const resource = new CompressedTextureResource(texData, { - format: internalFormat, - width, - height, - levels: mipmapCount // CompressedTextureResource will separate the levelBuffers for us! - }); - - return [resource]; - } - - // FOURCC_DX10 indicates there is a 20-byte DDS_HEADER_DX10 after DDS_HEADER - const dx10Offset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE; - const dx10Header = new Uint32Array( - data.buffer, - dx10Offset, - DDS_HEADER_DX10_SIZE / Uint32Array.BYTES_PER_ELEMENT); - const dxgiFormat = dx10Header[DDS_DX10_FIELDS.DXGI_FORMAT]; - const resourceDimension = dx10Header[DDS_DX10_FIELDS.RESOURCE_DIMENSION]; - const miscFlag = dx10Header[DDS_DX10_FIELDS.MISC_FLAG]; - const arraySize = dx10Header[DDS_DX10_FIELDS.ARRAY_SIZE]; - - // Map dxgiFormat to PIXI.INTERNAL_FORMATS - const internalFormat = DXGI_TO_FORMAT[dxgiFormat]; - - if (internalFormat === undefined) - { - throw new Error(`DDSLoader cannot parse texture data with DXGI format ${dxgiFormat}`); - } - if (miscFlag === DDS_RESOURCE_MISC_TEXTURECUBE) - { - // FIXME: Anybody excited about cubemap compressed textures? - throw new Error('DDSLoader does not support cubemap textures'); - } - if (resourceDimension === D3D10_RESOURCE_DIMENSION.DDS_DIMENSION_TEXTURE3D) - { - // FIXME: Anybody excited about 3D compressed textures? - throw new Error('DDSLoader does not supported 3D texture data'); - } - - // Uint8Array buffers of image data, including all mipmap levels in each image - const imageBuffers = new Array(); - const dataOffset = DDS_MAGIC_SIZE - + DDS_HEADER_SIZE - + DDS_HEADER_DX10_SIZE; - - if (arraySize === 1) - { - // No need bothering with the imageSize calculation! - imageBuffers.push(new Uint8Array(arrayBuffer, dataOffset)); - } - else - { - // Calculate imageSize for each texture, and then locate each image's texture data - - const pixelSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[internalFormat]; - let imageSize = 0; - let levelWidth = width; - let levelHeight = height; - - for (let i = 0; i < mipmapCount; i++) - { - const alignedLevelWidth = Math.max(1, (levelWidth + 3) & ~3); - const alignedLevelHeight = Math.max(1, (levelHeight + 3) & ~3); - - const levelSize = alignedLevelWidth * alignedLevelHeight * pixelSize; - - imageSize += levelSize; - - levelWidth = levelWidth >>> 1; - levelHeight = levelHeight >>> 1; - } - - let imageOffset = dataOffset; - - // NOTE: Cubemaps have 6-images per texture (but they aren't supported so ^_^) - for (let i = 0; i < arraySize; i++) - { - imageBuffers.push(new Uint8Array(arrayBuffer, imageOffset, imageSize)); - imageOffset += imageSize; - } - } - - // Uint8Array -> CompressedTextureResource, and we're done! - return imageBuffers.map((buffer) => new CompressedTextureResource(buffer, { - format: internalFormat, - width, - height, - levels: mipmapCount - })); - } - if (formatFlags & DDPF_RGB) - { - // FIXME: We might want to allow uncompressed *.dds files? - throw new Error('DDSLoader does not support uncompressed texture data.'); - } - if (formatFlags & DDPF_YUV) - { - // FIXME: Does anybody need this feature? - throw new Error('DDSLoader does not supported YUV uncompressed texture data.'); - } - if (formatFlags & DDPF_LUMINANCE) - { - // FIXME: Microsoft says older DDS filers use this feature! Probably not worth the effort! - throw new Error('DDSLoader does not support single-channel (lumninance) texture data!'); - } - if (formatFlags & DDPF_ALPHA) - { - // FIXME: I'm tired! See above =) - throw new Error('DDSLoader does not support single-channel (alpha) texture data!'); - } - - throw new Error('DDSLoader failed to load a texture file due to an unknown reason!'); - } } diff --git a/packages/compressed-textures/src/loaders/KTXLoader.ts b/packages/compressed-textures/src/loaders/KTXLoader.ts index 5600d088a2..3bba514745 100644 --- a/packages/compressed-textures/src/loaders/KTXLoader.ts +++ b/packages/compressed-textures/src/loaders/KTXLoader.ts @@ -1,93 +1,13 @@ -import { ALPHA_MODES, FORMATS, MIPMAP_MODES, TYPES } from '@pixi/constants'; +import { ALPHA_MODES, MIPMAP_MODES } from '@pixi/constants'; import type { ExtensionMetadata } from '@pixi/core'; -import { BaseTexture, BufferResource, ExtensionType, Texture } from '@pixi/core'; -import type { CompressedLevelBuffer } from '../resources/CompressedTextureResource'; -import { CompressedTextureResource } from '../resources/CompressedTextureResource'; +import { BaseTexture, ExtensionType, Texture } from '@pixi/core'; import { LoaderResource } from '@pixi/loaders'; -import { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const'; import { registerCompressedTextures } from './registerCompressedTextures'; +import { parseKTX } from '../parsers'; // Set KTX files to be loaded as an ArrayBuffer LoaderResource.setExtensionXhrType('ktx', LoaderResource.XHR_RESPONSE_TYPE.BUFFER); -/** - * The 12-byte KTX file identifier - * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.1 - * @ignore - */ -const FILE_IDENTIFIER = [0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A]; - -/** - * The value stored in the "endianness" field. - * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.2 - * @ignore - */ -const ENDIANNESS = 0x04030201; - -/** - * Byte offsets of the KTX file header fields - * @ignore - */ -const KTX_FIELDS = { - FILE_IDENTIFIER: 0, - ENDIANNESS: 12, - GL_TYPE: 16, - GL_TYPE_SIZE: 20, - GL_FORMAT: 24, - GL_INTERNAL_FORMAT: 28, - GL_BASE_INTERNAL_FORMAT: 32, - PIXEL_WIDTH: 36, - PIXEL_HEIGHT: 40, - PIXEL_DEPTH: 44, - NUMBER_OF_ARRAY_ELEMENTS: 48, - NUMBER_OF_FACES: 52, - NUMBER_OF_MIPMAP_LEVELS: 56, - BYTES_OF_KEY_VALUE_DATA: 60 -}; - -/** - * Byte size of the file header fields in {@code KTX_FIELDS} - * @ignore - */ -const FILE_HEADER_SIZE = 64; - -/** - * Maps {@link PIXI.TYPES} to the bytes taken per component, excluding those ones that are bit-fields. - * @ignore - */ -export const TYPES_TO_BYTES_PER_COMPONENT: { [id: number]: number } = { - [TYPES.UNSIGNED_BYTE]: 1, - [TYPES.UNSIGNED_SHORT]: 2, - [TYPES.INT]: 4, - [TYPES.UNSIGNED_INT]: 4, - [TYPES.FLOAT]: 4, - [TYPES.HALF_FLOAT]: 8 -}; - -/** - * Number of components in each {@link PIXI.FORMATS} - * @ignore - */ -export const FORMATS_TO_COMPONENTS: { [id: number]: number } = { - [FORMATS.RGBA]: 4, - [FORMATS.RGB]: 3, - [FORMATS.RG]: 2, - [FORMATS.RED]: 1, - [FORMATS.LUMINANCE]: 1, - [FORMATS.LUMINANCE_ALPHA]: 2, - [FORMATS.ALPHA]: 1 -}; - -/** - * Number of bytes per pixel in bit-field types in {@link PIXI.TYPES} - * @ignore - */ -export const TYPES_TO_BYTES_PER_PIXEL: { [id: number]: number } = { - [TYPES.UNSIGNED_SHORT_4_4_4_4]: 2, - [TYPES.UNSIGNED_SHORT_5_5_5_1]: 2, - [TYPES.UNSIGNED_SHORT_5_6_5]: 2 -}; - /** * Loader plugin for handling KTX texture container files. * @@ -136,7 +56,7 @@ export class KTXLoader try { const url = resource.name || resource.url; - const { compressed, uncompressed, kvData } = KTXLoader.parse(url, resource.data); + const { compressed, uncompressed, kvData } = parseKTX(url, resource.data, this.loadKeyValueData); if (compressed) { @@ -201,291 +121,4 @@ export class KTXLoader next(); } - - /** Parses the KTX file header, generates base-textures, and puts them into the texture cache. */ - private static parse(url: string, arrayBuffer: ArrayBuffer): { - compressed?: CompressedTextureResource[] - uncompressed?: { resource: BufferResource, type: TYPES, format: FORMATS }[] - kvData: Map | null - } - { - const dataView = new DataView(arrayBuffer); - - if (!KTXLoader.validate(url, dataView)) - { - return null; - } - - const littleEndian = dataView.getUint32(KTX_FIELDS.ENDIANNESS, true) === ENDIANNESS; - const glType = dataView.getUint32(KTX_FIELDS.GL_TYPE, littleEndian); - // const glTypeSize = dataView.getUint32(KTX_FIELDS.GL_TYPE_SIZE, littleEndian); - const glFormat = dataView.getUint32(KTX_FIELDS.GL_FORMAT, littleEndian); - const glInternalFormat = dataView.getUint32(KTX_FIELDS.GL_INTERNAL_FORMAT, littleEndian); - const pixelWidth = dataView.getUint32(KTX_FIELDS.PIXEL_WIDTH, littleEndian); - const pixelHeight = dataView.getUint32(KTX_FIELDS.PIXEL_HEIGHT, littleEndian) || 1;// "pixelHeight = 0" -> "1" - const pixelDepth = dataView.getUint32(KTX_FIELDS.PIXEL_DEPTH, littleEndian) || 1;// ^^ - const numberOfArrayElements = dataView.getUint32(KTX_FIELDS.NUMBER_OF_ARRAY_ELEMENTS, littleEndian) || 1;// ^^ - const numberOfFaces = dataView.getUint32(KTX_FIELDS.NUMBER_OF_FACES, littleEndian); - const numberOfMipmapLevels = dataView.getUint32(KTX_FIELDS.NUMBER_OF_MIPMAP_LEVELS, littleEndian); - const bytesOfKeyValueData = dataView.getUint32(KTX_FIELDS.BYTES_OF_KEY_VALUE_DATA, littleEndian); - - // Whether the platform architecture is little endian. If littleEndian !== platformLittleEndian, then the - // file contents must be endian-converted! - // TODO: Endianness conversion - // const platformLittleEndian = new Uint8Array((new Uint32Array([ENDIANNESS])).buffer)[0] === 0x01; - - if (pixelHeight === 0 || pixelDepth !== 1) - { - throw new Error('Only 2D textures are supported'); - } - if (numberOfFaces !== 1) - { - throw new Error('CubeTextures are not supported by KTXLoader yet!'); - } - if (numberOfArrayElements !== 1) - { - // TODO: Support splitting array-textures into multiple BaseTextures - throw new Error('WebGL does not support array textures'); - } - - // TODO: 8x4 blocks for 2bpp pvrtc - const blockWidth = 4; - const blockHeight = 4; - - const alignedWidth = (pixelWidth + 3) & ~3; - const alignedHeight = (pixelHeight + 3) & ~3; - const imageBuffers = new Array(numberOfArrayElements); - let imagePixels = pixelWidth * pixelHeight; - - if (glType === 0) - { - // Align to 16 pixels (4x4 blocks) - imagePixels = alignedWidth * alignedHeight; - } - - let imagePixelByteSize: number; - - if (glType !== 0) - { - // Uncompressed texture format - if (TYPES_TO_BYTES_PER_COMPONENT[glType]) - { - imagePixelByteSize = TYPES_TO_BYTES_PER_COMPONENT[glType] * FORMATS_TO_COMPONENTS[glFormat]; - } - else - { - imagePixelByteSize = TYPES_TO_BYTES_PER_PIXEL[glType]; - } - } - else - { - imagePixelByteSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[glInternalFormat]; - } - - if (imagePixelByteSize === undefined) - { - throw new Error('Unable to resolve the pixel format stored in the *.ktx file!'); - } - - const kvData: Map | null = KTXLoader.loadKeyValueData - ? KTXLoader.parseKvData(dataView, bytesOfKeyValueData, littleEndian) - : null; - - const imageByteSize = imagePixels * imagePixelByteSize; - let mipByteSize = imageByteSize; - let mipWidth = pixelWidth; - let mipHeight = pixelHeight; - let alignedMipWidth = alignedWidth; - let alignedMipHeight = alignedHeight; - let imageOffset = FILE_HEADER_SIZE + bytesOfKeyValueData; - - for (let mipmapLevel = 0; mipmapLevel < numberOfMipmapLevels; mipmapLevel++) - { - const imageSize = dataView.getUint32(imageOffset, littleEndian); - let elementOffset = imageOffset + 4; - - for (let arrayElement = 0; arrayElement < numberOfArrayElements; arrayElement++) - { - // TODO: Maybe support 3D textures? :-) - // for (let zSlice = 0; zSlice < pixelDepth; zSlice) - - let mips = imageBuffers[arrayElement]; - - if (!mips) - { - mips = imageBuffers[arrayElement] = new Array(numberOfMipmapLevels); - } - - mips[mipmapLevel] = { - levelID: mipmapLevel, - - // don't align mipWidth when texture not compressed! (glType not zero) - levelWidth: numberOfMipmapLevels > 1 || glType !== 0 ? mipWidth : alignedMipWidth, - levelHeight: numberOfMipmapLevels > 1 || glType !== 0 ? mipHeight : alignedMipHeight, - levelBuffer: new Uint8Array(arrayBuffer, elementOffset, mipByteSize) - }; - elementOffset += mipByteSize; - } - - // HINT: Aligns to 4-byte boundary after jumping imageSize (in lieu of mipPadding) - imageOffset += imageSize + 4;// (+4 to jump the imageSize field itself) - imageOffset = imageOffset % 4 !== 0 ? imageOffset + 4 - (imageOffset % 4) : imageOffset; - - // Calculate mipWidth, mipHeight for _next_ iteration - mipWidth = (mipWidth >> 1) || 1; - mipHeight = (mipHeight >> 1) || 1; - alignedMipWidth = (mipWidth + blockWidth - 1) & ~(blockWidth - 1); - alignedMipHeight = (mipHeight + blockHeight - 1) & ~(blockHeight - 1); - - // Each mipmap level is 4-times smaller? - mipByteSize = alignedMipWidth * alignedMipHeight * imagePixelByteSize; - } - - // We use the levelBuffers feature of CompressedTextureResource b/c texture data is image-major, not level-major. - if (glType !== 0) - { - return { - uncompressed: imageBuffers.map((levelBuffers) => - { - let buffer: Float32Array | Uint32Array | Int32Array | Uint8Array = levelBuffers[0].levelBuffer; - let convertToInt = false; - - if (glType === TYPES.FLOAT) - { - buffer = new Float32Array( - levelBuffers[0].levelBuffer.buffer, - levelBuffers[0].levelBuffer.byteOffset, - levelBuffers[0].levelBuffer.byteLength / 4); - } - else if (glType === TYPES.UNSIGNED_INT) - { - convertToInt = true; - buffer = new Uint32Array( - levelBuffers[0].levelBuffer.buffer, - levelBuffers[0].levelBuffer.byteOffset, - levelBuffers[0].levelBuffer.byteLength / 4); - } - else if (glType === TYPES.INT) - { - convertToInt = true; - buffer = new Int32Array( - levelBuffers[0].levelBuffer.buffer, - levelBuffers[0].levelBuffer.byteOffset, - levelBuffers[0].levelBuffer.byteLength / 4); - } - - return { - resource: new BufferResource( - buffer, - { - width: levelBuffers[0].levelWidth, - height: levelBuffers[0].levelHeight, - } - ), - type: glType, - format: convertToInt ? KTXLoader.convertFormatToInteger(glFormat) : glFormat, - }; - }), - kvData - }; - } - - return { - compressed: imageBuffers.map((levelBuffers) => new CompressedTextureResource(null, { - format: glInternalFormat, - width: pixelWidth, - height: pixelHeight, - levels: numberOfMipmapLevels, - levelBuffers, - })), - kvData - }; - } - - /** Checks whether the arrayBuffer contains a valid *.ktx file. */ - private static validate(url: string, dataView: DataView): boolean - { - // NOTE: Do not optimize this into 3 32-bit integer comparison because the endianness - // of the data is not specified. - for (let i = 0; i < FILE_IDENTIFIER.length; i++) - { - if (dataView.getUint8(i) !== FILE_IDENTIFIER[i]) - { - // #if _DEBUG - console.error(`${url} is not a valid *.ktx file!`); - // #endif - - return false; - } - } - - return true; - } - - private static convertFormatToInteger(format: FORMATS) - { - switch (format) - { - case FORMATS.RGBA: return FORMATS.RGBA_INTEGER; - case FORMATS.RGB: return FORMATS.RGB_INTEGER; - case FORMATS.RG: return FORMATS.RG_INTEGER; - case FORMATS.RED: return FORMATS.RED_INTEGER; - default: return format; - } - } - - private static parseKvData(dataView: DataView, bytesOfKeyValueData: number, littleEndian: boolean): Map - { - const kvData = new Map(); - let bytesIntoKeyValueData = 0; - - while (bytesIntoKeyValueData < bytesOfKeyValueData) - { - const keyAndValueByteSize = dataView.getUint32(FILE_HEADER_SIZE + bytesIntoKeyValueData, littleEndian); - const keyAndValueByteOffset = FILE_HEADER_SIZE + bytesIntoKeyValueData + 4; - const valuePadding = 3 - ((keyAndValueByteSize + 3) % 4); - - // Bounds check - if (keyAndValueByteSize === 0 || keyAndValueByteSize > bytesOfKeyValueData - bytesIntoKeyValueData) - { - console.error('KTXLoader: keyAndValueByteSize out of bounds'); - break; - } - - // Note: keyNulByte can't be 0 otherwise the key is an empty string. - let keyNulByte = 0; - - for (; keyNulByte < keyAndValueByteSize; keyNulByte++) - { - if (dataView.getUint8(keyAndValueByteOffset + keyNulByte) === 0x00) - { - break; - } - } - - if (keyNulByte === -1) - { - console.error('KTXLoader: Failed to find null byte terminating kvData key'); - break; - } - - const key = new TextDecoder().decode( - new Uint8Array(dataView.buffer, keyAndValueByteOffset, keyNulByte) - ); - const value = new DataView( - dataView.buffer, - keyAndValueByteOffset + keyNulByte + 1, - keyAndValueByteSize - keyNulByte - 1, - ); - - kvData.set(key, value); - - // 4 = the keyAndValueByteSize field itself - // keyAndValueByteSize = the bytes taken by the key and value - // valuePadding = extra padding to align with 4 bytes - bytesIntoKeyValueData += 4 + keyAndValueByteSize + valuePadding; - } - - return kvData; - } } diff --git a/packages/compressed-textures/src/parsers/index.ts b/packages/compressed-textures/src/parsers/index.ts new file mode 100644 index 0000000000..64586560a3 --- /dev/null +++ b/packages/compressed-textures/src/parsers/index.ts @@ -0,0 +1,3 @@ +export * from './parseDDS'; +export * from './parseKTX'; + diff --git a/packages/compressed-textures/src/parsers/parseDDS.ts b/packages/compressed-textures/src/parsers/parseDDS.ts new file mode 100644 index 0000000000..ec5b10e0ac --- /dev/null +++ b/packages/compressed-textures/src/parsers/parseDDS.ts @@ -0,0 +1,402 @@ +import { CompressedTextureResource } from '../resources'; +import { INTERNAL_FORMATS, INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const'; + +const DDS_MAGIC_SIZE = 4; +const DDS_HEADER_SIZE = 124; +const DDS_HEADER_PF_SIZE = 32; +const DDS_HEADER_DX10_SIZE = 20; + +// DDS file format magic word +const DDS_MAGIC = 0x20534444; + +/** + * DWORD offsets of the DDS file header fields (relative to file start). + * @ignore + */ +const DDS_FIELDS = { + SIZE: 1, + FLAGS: 2, + HEIGHT: 3, + WIDTH: 4, + MIPMAP_COUNT: 7, + PIXEL_FORMAT: 19, +}; + +/** + * DWORD offsets of the DDS PIXEL_FORMAT fields. + * @ignore + */ +const DDS_PF_FIELDS = { + SIZE: 0, + FLAGS: 1, + FOURCC: 2, + RGB_BITCOUNT: 3, + R_BIT_MASK: 4, + G_BIT_MASK: 5, + B_BIT_MASK: 6, + A_BIT_MASK: 7 +}; + +/** + * DWORD offsets of the DDS_HEADER_DX10 fields. + * @ignore + */ +const DDS_DX10_FIELDS = { + DXGI_FORMAT: 0, + RESOURCE_DIMENSION: 1, + MISC_FLAG: 2, + ARRAY_SIZE: 3, + MISC_FLAGS2: 4 +}; + +/** + * @see https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format + * @ignore + */ +// This is way over-blown for us! Lend us a hand, and remove the ones that aren't used (but set the remaining +// ones to their correct value) +enum DXGI_FORMAT + { + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_R32G32B32A32_TYPELESS, + DXGI_FORMAT_R32G32B32A32_FLOAT, + DXGI_FORMAT_R32G32B32A32_UINT, + DXGI_FORMAT_R32G32B32A32_SINT, + DXGI_FORMAT_R32G32B32_TYPELESS, + DXGI_FORMAT_R32G32B32_FLOAT, + DXGI_FORMAT_R32G32B32_UINT, + DXGI_FORMAT_R32G32B32_SINT, + DXGI_FORMAT_R16G16B16A16_TYPELESS, + DXGI_FORMAT_R16G16B16A16_FLOAT, + DXGI_FORMAT_R16G16B16A16_UNORM, + DXGI_FORMAT_R16G16B16A16_UINT, + DXGI_FORMAT_R16G16B16A16_SNORM, + DXGI_FORMAT_R16G16B16A16_SINT, + DXGI_FORMAT_R32G32_TYPELESS, + DXGI_FORMAT_R32G32_FLOAT, + DXGI_FORMAT_R32G32_UINT, + DXGI_FORMAT_R32G32_SINT, + DXGI_FORMAT_R32G8X24_TYPELESS, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT, + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, + DXGI_FORMAT_R10G10B10A2_TYPELESS, + DXGI_FORMAT_R10G10B10A2_UNORM, + DXGI_FORMAT_R10G10B10A2_UINT, + DXGI_FORMAT_R11G11B10_FLOAT, + DXGI_FORMAT_R8G8B8A8_TYPELESS, + DXGI_FORMAT_R8G8B8A8_UNORM, + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, + DXGI_FORMAT_R8G8B8A8_UINT, + DXGI_FORMAT_R8G8B8A8_SNORM, + DXGI_FORMAT_R8G8B8A8_SINT, + DXGI_FORMAT_R16G16_TYPELESS, + DXGI_FORMAT_R16G16_FLOAT, + DXGI_FORMAT_R16G16_UNORM, + DXGI_FORMAT_R16G16_UINT, + DXGI_FORMAT_R16G16_SNORM, + DXGI_FORMAT_R16G16_SINT, + DXGI_FORMAT_R32_TYPELESS, + DXGI_FORMAT_D32_FLOAT, + DXGI_FORMAT_R32_FLOAT, + DXGI_FORMAT_R32_UINT, + DXGI_FORMAT_R32_SINT, + DXGI_FORMAT_R24G8_TYPELESS, + DXGI_FORMAT_D24_UNORM_S8_UINT, + DXGI_FORMAT_R24_UNORM_X8_TYPELESS, + DXGI_FORMAT_X24_TYPELESS_G8_UINT, + DXGI_FORMAT_R8G8_TYPELESS, + DXGI_FORMAT_R8G8_UNORM, + DXGI_FORMAT_R8G8_UINT, + DXGI_FORMAT_R8G8_SNORM, + DXGI_FORMAT_R8G8_SINT, + DXGI_FORMAT_R16_TYPELESS, + DXGI_FORMAT_R16_FLOAT, + DXGI_FORMAT_D16_UNORM, + DXGI_FORMAT_R16_UNORM, + DXGI_FORMAT_R16_UINT, + DXGI_FORMAT_R16_SNORM, + DXGI_FORMAT_R16_SINT, + DXGI_FORMAT_R8_TYPELESS, + DXGI_FORMAT_R8_UNORM, + DXGI_FORMAT_R8_UINT, + DXGI_FORMAT_R8_SNORM, + DXGI_FORMAT_R8_SINT, + DXGI_FORMAT_A8_UNORM, + DXGI_FORMAT_R1_UNORM, + DXGI_FORMAT_R9G9B9E5_SHAREDEXP, + DXGI_FORMAT_R8G8_B8G8_UNORM, + DXGI_FORMAT_G8R8_G8B8_UNORM, + DXGI_FORMAT_BC1_TYPELESS, + DXGI_FORMAT_BC1_UNORM, + DXGI_FORMAT_BC1_UNORM_SRGB, + DXGI_FORMAT_BC2_TYPELESS, + DXGI_FORMAT_BC2_UNORM, + DXGI_FORMAT_BC2_UNORM_SRGB, + DXGI_FORMAT_BC3_TYPELESS, + DXGI_FORMAT_BC3_UNORM, + DXGI_FORMAT_BC3_UNORM_SRGB, + DXGI_FORMAT_BC4_TYPELESS, + DXGI_FORMAT_BC4_UNORM, + DXGI_FORMAT_BC4_SNORM, + DXGI_FORMAT_BC5_TYPELESS, + DXGI_FORMAT_BC5_UNORM, + DXGI_FORMAT_BC5_SNORM, + DXGI_FORMAT_B5G6R5_UNORM, + DXGI_FORMAT_B5G5R5A1_UNORM, + DXGI_FORMAT_B8G8R8A8_UNORM, + DXGI_FORMAT_B8G8R8X8_UNORM, + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, + DXGI_FORMAT_B8G8R8A8_TYPELESS, + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, + DXGI_FORMAT_B8G8R8X8_TYPELESS, + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, + DXGI_FORMAT_BC6H_TYPELESS, + DXGI_FORMAT_BC6H_UF16, + DXGI_FORMAT_BC6H_SF16, + DXGI_FORMAT_BC7_TYPELESS, + DXGI_FORMAT_BC7_UNORM, + DXGI_FORMAT_BC7_UNORM_SRGB, + DXGI_FORMAT_AYUV, + DXGI_FORMAT_Y410, + DXGI_FORMAT_Y416, + DXGI_FORMAT_NV12, + DXGI_FORMAT_P010, + DXGI_FORMAT_P016, + DXGI_FORMAT_420_OPAQUE, + DXGI_FORMAT_YUY2, + DXGI_FORMAT_Y210, + DXGI_FORMAT_Y216, + DXGI_FORMAT_NV11, + DXGI_FORMAT_AI44, + DXGI_FORMAT_IA44, + DXGI_FORMAT_P8, + DXGI_FORMAT_A8P8, + DXGI_FORMAT_B4G4R4A4_UNORM, + DXGI_FORMAT_P208, + DXGI_FORMAT_V208, + DXGI_FORMAT_V408, + DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE, + DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE, + DXGI_FORMAT_FORCE_UINT +} + +/** + * Possible values of the field {@link DDS_DX10_FIELDS.RESOURCE_DIMENSION} + * @ignore + */ +enum D3D10_RESOURCE_DIMENSION + { + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 6 +} + +const PF_FLAGS = 1; + +// PIXEL_FORMAT flags +const DDPF_ALPHA = 0x2; +const DDPF_FOURCC = 0x4; +const DDPF_RGB = 0x40; +const DDPF_YUV = 0x200; +const DDPF_LUMINANCE = 0x20000; + +// Four character codes for DXTn formats +const FOURCC_DXT1 = 0x31545844; +const FOURCC_DXT3 = 0x33545844; +const FOURCC_DXT5 = 0x35545844; +const FOURCC_DX10 = 0x30315844; + +// Cubemap texture flag (for DDS_DX10_FIELDS.MISC_FLAG) +const DDS_RESOURCE_MISC_TEXTURECUBE = 0x4; + +/** + * Maps `FOURCC_*` formats to internal formats (see {@link PIXI.INTERNAL_FORMATS}). + * @ignore + */ +const FOURCC_TO_FORMAT: { [id: number]: number } = { + [FOURCC_DXT1]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, + [FOURCC_DXT3]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, + [FOURCC_DXT5]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT +}; + +/** + * Maps {@link DXGI_FORMAT} to types/internal-formats (see {@link PIXI.TYPES}, {@link PIXI.INTERNAL_FORMATS}) + * @ignore + */ +const DXGI_TO_FORMAT: { [id: number]: number } = { + // WEBGL_compressed_texture_s3tc + [DXGI_FORMAT.DXGI_FORMAT_BC1_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC2_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC3_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT, + + // WEBGL_compressed_texture_s3tc_srgb + [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, + [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT +}; + +/** + * @class + * @memberof PIXI + * @implements {PIXI.ILoaderPlugin} + * @see https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dx-graphics-dds-pguide + */ +/** + * Parses the DDS file header, generates base-textures, and puts them into the texture cache. + * @param arrayBuffer + */ +export function parseDDS(arrayBuffer: ArrayBuffer): CompressedTextureResource[] +{ + const data = new Uint32Array(arrayBuffer); + const magicWord = data[0]; + + if (magicWord !== DDS_MAGIC) + { + throw new Error('Invalid DDS file magic word'); + } + + const header = new Uint32Array(arrayBuffer, 0, DDS_HEADER_SIZE / Uint32Array.BYTES_PER_ELEMENT); + + // DDS header fields + const height = header[DDS_FIELDS.HEIGHT]; + const width = header[DDS_FIELDS.WIDTH]; + const mipmapCount = header[DDS_FIELDS.MIPMAP_COUNT]; + + // PIXEL_FORMAT fields + const pixelFormat = new Uint32Array( + arrayBuffer, + DDS_FIELDS.PIXEL_FORMAT * Uint32Array.BYTES_PER_ELEMENT, + DDS_HEADER_PF_SIZE / Uint32Array.BYTES_PER_ELEMENT); + const formatFlags = pixelFormat[PF_FLAGS]; + + // File contains compressed texture(s) + if (formatFlags & DDPF_FOURCC) + { + const fourCC = pixelFormat[DDS_PF_FIELDS.FOURCC]; + + // File contains one DXTn compressed texture + if (fourCC !== FOURCC_DX10) + { + const internalFormat = FOURCC_TO_FORMAT[fourCC]; + + const dataOffset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE; + const texData = new Uint8Array(arrayBuffer, dataOffset); + + const resource = new CompressedTextureResource(texData, { + format: internalFormat, + width, + height, + levels: mipmapCount // CompressedTextureResource will separate the levelBuffers for us! + }); + + return [resource]; + } + + // FOURCC_DX10 indicates there is a 20-byte DDS_HEADER_DX10 after DDS_HEADER + const dx10Offset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE; + const dx10Header = new Uint32Array( + data.buffer, + dx10Offset, + DDS_HEADER_DX10_SIZE / Uint32Array.BYTES_PER_ELEMENT); + const dxgiFormat = dx10Header[DDS_DX10_FIELDS.DXGI_FORMAT]; + const resourceDimension = dx10Header[DDS_DX10_FIELDS.RESOURCE_DIMENSION]; + const miscFlag = dx10Header[DDS_DX10_FIELDS.MISC_FLAG]; + const arraySize = dx10Header[DDS_DX10_FIELDS.ARRAY_SIZE]; + + // Map dxgiFormat to PIXI.INTERNAL_FORMATS + const internalFormat = DXGI_TO_FORMAT[dxgiFormat]; + + if (internalFormat === undefined) + { + throw new Error(`DDSParser cannot parse texture data with DXGI format ${dxgiFormat}`); + } + if (miscFlag === DDS_RESOURCE_MISC_TEXTURECUBE) + { + // FIXME: Anybody excited about cubemap compressed textures? + throw new Error('DDSParser does not support cubemap textures'); + } + if (resourceDimension === D3D10_RESOURCE_DIMENSION.DDS_DIMENSION_TEXTURE3D) + { + // FIXME: Anybody excited about 3D compressed textures? + throw new Error('DDSParser does not supported 3D texture data'); + } + + // Uint8Array buffers of image data, including all mipmap levels in each image + const imageBuffers = new Array(); + const dataOffset = DDS_MAGIC_SIZE + + DDS_HEADER_SIZE + + DDS_HEADER_DX10_SIZE; + + if (arraySize === 1) + { + // No need bothering with the imageSize calculation! + imageBuffers.push(new Uint8Array(arrayBuffer, dataOffset)); + } + else + { + // Calculate imageSize for each texture, and then locate each image's texture data + + const pixelSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[internalFormat]; + let imageSize = 0; + let levelWidth = width; + let levelHeight = height; + + for (let i = 0; i < mipmapCount; i++) + { + const alignedLevelWidth = Math.max(1, (levelWidth + 3) & ~3); + const alignedLevelHeight = Math.max(1, (levelHeight + 3) & ~3); + + const levelSize = alignedLevelWidth * alignedLevelHeight * pixelSize; + + imageSize += levelSize; + + levelWidth = levelWidth >>> 1; + levelHeight = levelHeight >>> 1; + } + + let imageOffset = dataOffset; + + // NOTE: Cubemaps have 6-images per texture (but they aren't supported so ^_^) + for (let i = 0; i < arraySize; i++) + { + imageBuffers.push(new Uint8Array(arrayBuffer, imageOffset, imageSize)); + imageOffset += imageSize; + } + } + + // Uint8Array -> CompressedTextureResource, and we're done! + return imageBuffers.map((buffer) => new CompressedTextureResource(buffer, { + format: internalFormat, + width, + height, + levels: mipmapCount + })); + } + if (formatFlags & DDPF_RGB) + { + // FIXME: We might want to allow uncompressed *.dds files? + throw new Error('DDSParser does not support uncompressed texture data.'); + } + if (formatFlags & DDPF_YUV) + { + // FIXME: Does anybody need this feature? + throw new Error('DDSParser does not supported YUV uncompressed texture data.'); + } + if (formatFlags & DDPF_LUMINANCE) + { + // FIXME: Microsoft says older DDS filers use this feature! Probably not worth the effort! + throw new Error('DDSParser does not support single-channel (lumninance) texture data!'); + } + if (formatFlags & DDPF_ALPHA) + { + // FIXME: I'm tired! See above =) + throw new Error('DDSParser does not support single-channel (alpha) texture data!'); + } + + throw new Error('DDSParser failed to load a texture file due to an unknown reason!'); +} + diff --git a/packages/compressed-textures/src/parsers/parseKTX.ts b/packages/compressed-textures/src/parsers/parseKTX.ts new file mode 100644 index 0000000000..9d11979996 --- /dev/null +++ b/packages/compressed-textures/src/parsers/parseKTX.ts @@ -0,0 +1,374 @@ +import { FORMATS, TYPES } from '@pixi/constants'; +import { BufferResource } from '@pixi/core'; + +import { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const'; +import type { CompressedLevelBuffer } from '../resources'; +import { CompressedTextureResource } from '../resources'; + +/** + * The 12-byte KTX file identifier + * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.1 + * @ignore + */ +const FILE_IDENTIFIER = [0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A]; + +/** + * The value stored in the "endianness" field. + * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.2 + * @ignore + */ +const ENDIANNESS = 0x04030201; + +/** + * Byte offsets of the KTX file header fields + * @ignore + */ +const KTX_FIELDS = { + FILE_IDENTIFIER: 0, + ENDIANNESS: 12, + GL_TYPE: 16, + GL_TYPE_SIZE: 20, + GL_FORMAT: 24, + GL_INTERNAL_FORMAT: 28, + GL_BASE_INTERNAL_FORMAT: 32, + PIXEL_WIDTH: 36, + PIXEL_HEIGHT: 40, + PIXEL_DEPTH: 44, + NUMBER_OF_ARRAY_ELEMENTS: 48, + NUMBER_OF_FACES: 52, + NUMBER_OF_MIPMAP_LEVELS: 56, + BYTES_OF_KEY_VALUE_DATA: 60 +}; + +/** + * Byte size of the file header fields in {@code KTX_FIELDS} + * @ignore + */ +const FILE_HEADER_SIZE = 64; + +/** + * Maps {@link PIXI.TYPES} to the bytes taken per component, excluding those ones that are bit-fields. + * @ignore + */ +export const TYPES_TO_BYTES_PER_COMPONENT: { [id: number]: number } = { + [TYPES.UNSIGNED_BYTE]: 1, + [TYPES.UNSIGNED_SHORT]: 2, + [TYPES.INT]: 4, + [TYPES.UNSIGNED_INT]: 4, + [TYPES.FLOAT]: 4, + [TYPES.HALF_FLOAT]: 8 +}; + +/** + * Number of components in each {@link PIXI.FORMATS} + * @ignore + */ +export const FORMATS_TO_COMPONENTS: { [id: number]: number } = { + [FORMATS.RGBA]: 4, + [FORMATS.RGB]: 3, + [FORMATS.RG]: 2, + [FORMATS.RED]: 1, + [FORMATS.LUMINANCE]: 1, + [FORMATS.LUMINANCE_ALPHA]: 2, + [FORMATS.ALPHA]: 1 +}; + +/** + * Number of bytes per pixel in bit-field types in {@link PIXI.TYPES} + * @ignore + */ +export const TYPES_TO_BYTES_PER_PIXEL: { [id: number]: number } = { + [TYPES.UNSIGNED_SHORT_4_4_4_4]: 2, + [TYPES.UNSIGNED_SHORT_5_5_5_1]: 2, + [TYPES.UNSIGNED_SHORT_5_6_5]: 2 +}; + +export function parseKTX(url: string, arrayBuffer: ArrayBuffer, loadKeyValueData = false): { + compressed?: CompressedTextureResource[] + uncompressed?: { resource: BufferResource, type: TYPES, format: FORMATS }[] + kvData: Map | null +} +{ + const dataView = new DataView(arrayBuffer); + + if (!validate(url, dataView)) + { + return null; + } + + const littleEndian = dataView.getUint32(KTX_FIELDS.ENDIANNESS, true) === ENDIANNESS; + const glType = dataView.getUint32(KTX_FIELDS.GL_TYPE, littleEndian); + // const glTypeSize = dataView.getUint32(KTX_FIELDS.GL_TYPE_SIZE, littleEndian); + const glFormat = dataView.getUint32(KTX_FIELDS.GL_FORMAT, littleEndian); + const glInternalFormat = dataView.getUint32(KTX_FIELDS.GL_INTERNAL_FORMAT, littleEndian); + const pixelWidth = dataView.getUint32(KTX_FIELDS.PIXEL_WIDTH, littleEndian); + const pixelHeight = dataView.getUint32(KTX_FIELDS.PIXEL_HEIGHT, littleEndian) || 1;// "pixelHeight = 0" -> "1" + const pixelDepth = dataView.getUint32(KTX_FIELDS.PIXEL_DEPTH, littleEndian) || 1;// ^^ + const numberOfArrayElements = dataView.getUint32(KTX_FIELDS.NUMBER_OF_ARRAY_ELEMENTS, littleEndian) || 1;// ^^ + const numberOfFaces = dataView.getUint32(KTX_FIELDS.NUMBER_OF_FACES, littleEndian); + const numberOfMipmapLevels = dataView.getUint32(KTX_FIELDS.NUMBER_OF_MIPMAP_LEVELS, littleEndian); + const bytesOfKeyValueData = dataView.getUint32(KTX_FIELDS.BYTES_OF_KEY_VALUE_DATA, littleEndian); + + // Whether the platform architecture is little endian. If littleEndian !== platformLittleEndian, then the + // file contents must be endian-converted! + // TODO: Endianness conversion + // const platformLittleEndian = new Uint8Array((new Uint32Array([ENDIANNESS])).buffer)[0] === 0x01; + + if (pixelHeight === 0 || pixelDepth !== 1) + { + throw new Error('Only 2D textures are supported'); + } + if (numberOfFaces !== 1) + { + throw new Error('CubeTextures are not supported by KTXLoader yet!'); + } + if (numberOfArrayElements !== 1) + { + // TODO: Support splitting array-textures into multiple BaseTextures + throw new Error('WebGL does not support array textures'); + } + + // TODO: 8x4 blocks for 2bpp pvrtc + const blockWidth = 4; + const blockHeight = 4; + + const alignedWidth = (pixelWidth + 3) & ~3; + const alignedHeight = (pixelHeight + 3) & ~3; + const imageBuffers = new Array(numberOfArrayElements); + let imagePixels = pixelWidth * pixelHeight; + + if (glType === 0) + { + // Align to 16 pixels (4x4 blocks) + imagePixels = alignedWidth * alignedHeight; + } + + let imagePixelByteSize: number; + + if (glType !== 0) + { + // Uncompressed texture format + if (TYPES_TO_BYTES_PER_COMPONENT[glType]) + { + imagePixelByteSize = TYPES_TO_BYTES_PER_COMPONENT[glType] * FORMATS_TO_COMPONENTS[glFormat]; + } + else + { + imagePixelByteSize = TYPES_TO_BYTES_PER_PIXEL[glType]; + } + } + else + { + imagePixelByteSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[glInternalFormat]; + } + + if (imagePixelByteSize === undefined) + { + throw new Error('Unable to resolve the pixel format stored in the *.ktx file!'); + } + + const kvData: Map | null = loadKeyValueData + ? parseKvData(dataView, bytesOfKeyValueData, littleEndian) + : null; + + const imageByteSize = imagePixels * imagePixelByteSize; + let mipByteSize = imageByteSize; + let mipWidth = pixelWidth; + let mipHeight = pixelHeight; + let alignedMipWidth = alignedWidth; + let alignedMipHeight = alignedHeight; + let imageOffset = FILE_HEADER_SIZE + bytesOfKeyValueData; + + for (let mipmapLevel = 0; mipmapLevel < numberOfMipmapLevels; mipmapLevel++) + { + const imageSize = dataView.getUint32(imageOffset, littleEndian); + let elementOffset = imageOffset + 4; + + for (let arrayElement = 0; arrayElement < numberOfArrayElements; arrayElement++) + { + // TODO: Maybe support 3D textures? :-) + // for (let zSlice = 0; zSlice < pixelDepth; zSlice) + + let mips = imageBuffers[arrayElement]; + + if (!mips) + { + mips = imageBuffers[arrayElement] = new Array(numberOfMipmapLevels); + } + + mips[mipmapLevel] = { + levelID: mipmapLevel, + + // don't align mipWidth when texture not compressed! (glType not zero) + levelWidth: numberOfMipmapLevels > 1 || glType !== 0 ? mipWidth : alignedMipWidth, + levelHeight: numberOfMipmapLevels > 1 || glType !== 0 ? mipHeight : alignedMipHeight, + levelBuffer: new Uint8Array(arrayBuffer, elementOffset, mipByteSize) + }; + elementOffset += mipByteSize; + } + + // HINT: Aligns to 4-byte boundary after jumping imageSize (in lieu of mipPadding) + imageOffset += imageSize + 4;// (+4 to jump the imageSize field itself) + imageOffset = imageOffset % 4 !== 0 ? imageOffset + 4 - (imageOffset % 4) : imageOffset; + + // Calculate mipWidth, mipHeight for _next_ iteration + mipWidth = (mipWidth >> 1) || 1; + mipHeight = (mipHeight >> 1) || 1; + alignedMipWidth = (mipWidth + blockWidth - 1) & ~(blockWidth - 1); + alignedMipHeight = (mipHeight + blockHeight - 1) & ~(blockHeight - 1); + + // Each mipmap level is 4-times smaller? + mipByteSize = alignedMipWidth * alignedMipHeight * imagePixelByteSize; + } + + // We use the levelBuffers feature of CompressedTextureResource b/c texture data is image-major, not level-major. + if (glType !== 0) + { + return { + uncompressed: imageBuffers.map((levelBuffers) => + { + let buffer: Float32Array | Uint32Array | Int32Array | Uint8Array = levelBuffers[0].levelBuffer; + let convertToInt = false; + + if (glType === TYPES.FLOAT) + { + buffer = new Float32Array( + levelBuffers[0].levelBuffer.buffer, + levelBuffers[0].levelBuffer.byteOffset, + levelBuffers[0].levelBuffer.byteLength / 4); + } + else if (glType === TYPES.UNSIGNED_INT) + { + convertToInt = true; + buffer = new Uint32Array( + levelBuffers[0].levelBuffer.buffer, + levelBuffers[0].levelBuffer.byteOffset, + levelBuffers[0].levelBuffer.byteLength / 4); + } + else if (glType === TYPES.INT) + { + convertToInt = true; + buffer = new Int32Array( + levelBuffers[0].levelBuffer.buffer, + levelBuffers[0].levelBuffer.byteOffset, + levelBuffers[0].levelBuffer.byteLength / 4); + } + + return { + resource: new BufferResource( + buffer, + { + width: levelBuffers[0].levelWidth, + height: levelBuffers[0].levelHeight, + } + ), + type: glType, + format: convertToInt ? convertFormatToInteger(glFormat) : glFormat, + }; + }), + kvData + }; + } + + return { + compressed: imageBuffers.map((levelBuffers) => new CompressedTextureResource(null, { + format: glInternalFormat, + width: pixelWidth, + height: pixelHeight, + levels: numberOfMipmapLevels, + levelBuffers, + })), + kvData + }; +} + +/** + * Checks whether the arrayBuffer contains a valid *.ktx file. + * @param url + * @param dataView + */ +function validate(url: string, dataView: DataView): boolean +{ + // NOTE: Do not optimize this into 3 32-bit integer comparison because the endianness + // of the data is not specified. + for (let i = 0; i < FILE_IDENTIFIER.length; i++) + { + if (dataView.getUint8(i) !== FILE_IDENTIFIER[i]) + { + // #if _DEBUG + console.error(`${url} is not a valid *.ktx file!`); + // #endif + + return false; + } + } + + return true; +} + +function convertFormatToInteger(format: FORMATS) +{ + switch (format) + { + case FORMATS.RGBA: return FORMATS.RGBA_INTEGER; + case FORMATS.RGB: return FORMATS.RGB_INTEGER; + case FORMATS.RG: return FORMATS.RG_INTEGER; + case FORMATS.RED: return FORMATS.RED_INTEGER; + default: return format; + } +} + +function parseKvData(dataView: DataView, bytesOfKeyValueData: number, littleEndian: boolean): Map +{ + const kvData = new Map(); + let bytesIntoKeyValueData = 0; + + while (bytesIntoKeyValueData < bytesOfKeyValueData) + { + const keyAndValueByteSize = dataView.getUint32(FILE_HEADER_SIZE + bytesIntoKeyValueData, littleEndian); + const keyAndValueByteOffset = FILE_HEADER_SIZE + bytesIntoKeyValueData + 4; + const valuePadding = 3 - ((keyAndValueByteSize + 3) % 4); + + // Bounds check + if (keyAndValueByteSize === 0 || keyAndValueByteSize > bytesOfKeyValueData - bytesIntoKeyValueData) + { + console.error('KTXLoader: keyAndValueByteSize out of bounds'); + break; + } + + // Note: keyNulByte can't be 0 otherwise the key is an empty string. + let keyNulByte = 0; + + for (; keyNulByte < keyAndValueByteSize; keyNulByte++) + { + if (dataView.getUint8(keyAndValueByteOffset + keyNulByte) === 0x00) + { + break; + } + } + + if (keyNulByte === -1) + { + console.error('KTXLoader: Failed to find null byte terminating kvData key'); + break; + } + + const key = new TextDecoder().decode( + new Uint8Array(dataView.buffer, keyAndValueByteOffset, keyNulByte) + ); + const value = new DataView( + dataView.buffer, + keyAndValueByteOffset + keyNulByte + 1, + keyAndValueByteSize - keyNulByte - 1, + ); + + kvData.set(key, value); + + // 4 = the keyAndValueByteSize field itself + // keyAndValueByteSize = the bytes taken by the key and value + // valuePadding = extra padding to align with 4 bytes + bytesIntoKeyValueData += 4 + keyAndValueByteSize + valuePadding; + } + + return kvData; +} diff --git a/packages/core/src/extensions.ts b/packages/core/src/extensions.ts index 6b38b0964e..7820a12b2f 100644 --- a/packages/core/src/extensions.ts +++ b/packages/core/src/extensions.ts @@ -13,6 +13,9 @@ enum ExtensionType RendererPlugin = 'renderer-webgl-plugin', CanvasRendererPlugin = 'renderer-canvas-plugin', Loader = 'loader', + LoadParser = 'load-parser', + ResolveParser = 'resolve-parser', + CacheParser = 'cache-parser', } interface ExtensionMetadataDetails @@ -57,8 +60,8 @@ type ExtensionHandler = (extension: ExtensionFormat) => void; */ const normalizeExtension = (ext: ExtensionFormatLoose | any): ExtensionFormat => { - // Class submission, use extension object - if (typeof ext === 'function') + // Class/Object submission, use extension object + if (typeof ext === 'function' || (typeof ext === 'object' && ext.extension)) { // #if _DEBUG if (!ext.extension) diff --git a/packages/core/src/textures/resources/Resource.ts b/packages/core/src/textures/resources/Resource.ts index 9342b0391a..fc206c2366 100644 --- a/packages/core/src/textures/resources/Resource.ts +++ b/packages/core/src/textures/resources/Resource.ts @@ -12,6 +12,9 @@ import type { GLTexture } from '../GLTexture'; */ export abstract class Resource { + /** The url of the resource */ + public src: string; + /** * If resource has been destroyed. * @readonly diff --git a/packages/loaders/src/Loader.ts b/packages/loaders/src/Loader.ts index 5f6151cfbc..7c18081c30 100644 --- a/packages/loaders/src/Loader.ts +++ b/packages/loaders/src/Loader.ts @@ -390,6 +390,10 @@ class Loader */ load(cb?: Loader.OnCompleteSignal): this { + // #if _DEBUG + deprecation('6.5.0', '@pixi/loaders is being replaced with @pixi/assets in the next major release.'); + // #endif + // register complete callback if they pass one if (typeof cb === 'function') { diff --git a/packages/spritesheet/src/Spritesheet.ts b/packages/spritesheet/src/Spritesheet.ts index 47148c746a..1dd647e913 100644 --- a/packages/spritesheet/src/Spritesheet.ts +++ b/packages/spritesheet/src/Spritesheet.ts @@ -34,6 +34,8 @@ export interface ISpritesheetData animations?: Dict; meta: { scale: string; + // eslint-disable-next-line camelcase + related_multi_packs?: string[]; }; } @@ -72,6 +74,9 @@ export class Spritesheet /** The maximum number of Textures to build per process. */ static readonly BATCH_SIZE = 1000; + /** For multi-packed spritesheets, this contains a reference to all the other spritesheets it depends on. */ + public linkedSheets: Spritesheet[] = []; + /** Reference to ths source texture. */ public baseTexture: BaseTexture; @@ -371,6 +376,7 @@ export class Spritesheet } this._texture = null; this.baseTexture = null; + this.linkedSheets = []; } } diff --git a/packages/text-bitmap/src/formats/index.ts b/packages/text-bitmap/src/formats/index.ts index 5514ce27ec..4603462215 100644 --- a/packages/text-bitmap/src/formats/index.ts +++ b/packages/text-bitmap/src/formats/index.ts @@ -27,3 +27,5 @@ export function autoDetectFormat(data: unknown): typeof formats[number] | null return null; } + +export { TextFormat, XMLFormat, XMLStringFormat }; diff --git a/packages/text-bitmap/src/index.ts b/packages/text-bitmap/src/index.ts index b008c048ea..cdb8cee1f7 100644 --- a/packages/text-bitmap/src/index.ts +++ b/packages/text-bitmap/src/index.ts @@ -3,3 +3,4 @@ export * from './BitmapFontLoader'; export * from './BitmapFont'; export * from './BitmapFontData'; export * from './BitmapTextStyle'; +export * from './formats'; diff --git a/test/jest-global-setup.ts b/test/jest-global-setup.ts new file mode 100644 index 0000000000..bfa8b0f8d8 --- /dev/null +++ b/test/jest-global-setup.ts @@ -0,0 +1,19 @@ +import { exec } from 'child_process'; +import path from 'path'; + +// eslint-disable-next-line func-names +module.exports = async function () +{ + if (!process.env.GITHUB_ACTIONS) + { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + globalThis.__SERVER__ = exec(`http-server -c-1 ${path.join(process.cwd(), './packages')}`); + } + + await new Promise((resolve) => + { + // give the server time to start + setTimeout(resolve, 1000); + }); +}; diff --git a/test/jest-global-teardown.ts b/test/jest-global-teardown.ts new file mode 100644 index 0000000000..5dc1e4e748 --- /dev/null +++ b/test/jest-global-teardown.ts @@ -0,0 +1,7 @@ +// eslint-disable-next-line func-names +module.exports = async function () +{ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + globalThis.__SERVER__?.kill(); +};