diff --git a/e2e/fixtures/images/title-logo-transparent.png b/e2e/fixtures/images/title-logo-transparent.png new file mode 100644 index 00000000..7951bcc7 Binary files /dev/null and b/e2e/fixtures/images/title-logo-transparent.png differ diff --git a/e2e/pages/shape/transparent-premultiply.html b/e2e/pages/shape/transparent-premultiply.html new file mode 100644 index 00000000..c591d220 --- /dev/null +++ b/e2e/pages/shape/transparent-premultiply.html @@ -0,0 +1,58 @@ + + + + + + Next2D E2E - Transparent Image Premultiplied Alpha + + + + + + + + diff --git a/e2e/snapshots/webgl/blendmode.spec.ts-snapshots/blendmode-all-webgl-darwin.png b/e2e/snapshots/webgl/blendmode.spec.ts-snapshots/blendmode-all-webgl-darwin.png index edf0131a..3e8d8f3a 100644 Binary files a/e2e/snapshots/webgl/blendmode.spec.ts-snapshots/blendmode-all-webgl-darwin.png and b/e2e/snapshots/webgl/blendmode.spec.ts-snapshots/blendmode-all-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/mask.spec.ts-snapshots/mask-sprite-webgl-darwin.png b/e2e/snapshots/webgl/mask.spec.ts-snapshots/mask-sprite-webgl-darwin.png index b6be7e67..625b25d7 100644 Binary files a/e2e/snapshots/webgl/mask.spec.ts-snapshots/mask-sprite-webgl-darwin.png and b/e2e/snapshots/webgl/mask.spec.ts-snapshots/mask-sprite-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/shape.spec.ts-snapshots/load-image-flip-webgl-darwin.png b/e2e/snapshots/webgl/shape.spec.ts-snapshots/load-image-flip-webgl-darwin.png index 2cca07b8..d1d1bbc1 100644 Binary files a/e2e/snapshots/webgl/shape.spec.ts-snapshots/load-image-flip-webgl-darwin.png and b/e2e/snapshots/webgl/shape.spec.ts-snapshots/load-image-flip-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/shape.spec.ts-snapshots/transparent-premultiply-webgl-darwin.png b/e2e/snapshots/webgl/shape.spec.ts-snapshots/transparent-premultiply-webgl-darwin.png new file mode 100644 index 00000000..ef3c16a2 Binary files /dev/null and b/e2e/snapshots/webgl/shape.spec.ts-snapshots/transparent-premultiply-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-auto-font-size-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-auto-font-size-webgl-darwin.png index 8f79032a..77e6fa46 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-auto-font-size-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-auto-font-size-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-basic-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-basic-webgl-darwin.png index 878a0b40..e1c04d31 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-basic-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-basic-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-blendmode-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-blendmode-webgl-darwin.png index 6775bc97..3aac9bca 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-blendmode-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-blendmode-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-filter-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-filter-webgl-darwin.png index 79c05297..cc8c675d 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-filter-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-filter-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-format-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-format-webgl-darwin.png index ced9469f..a7a2fd57 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-format-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-format-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-html-text-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-html-text-webgl-darwin.png index 59287e4f..4d0379e7 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-html-text-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-html-text-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-scroll-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-scroll-webgl-darwin.png index 1ed897e3..58f351cb 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-scroll-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-scroll-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-thickness-webgl-darwin.png b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-thickness-webgl-darwin.png index 65e049fc..d9ca91b1 100644 Binary files a/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-thickness-webgl-darwin.png and b/e2e/snapshots/webgl/textfield.spec.ts-snapshots/textfield-thickness-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-blendmode-webgl-darwin.png b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-blendmode-webgl-darwin.png index 1c67eac9..3379d699 100644 Binary files a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-blendmode-webgl-darwin.png and b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-blendmode-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-filter-webgl-darwin.png b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-filter-webgl-darwin.png index af751db4..4fdeac5e 100644 Binary files a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-filter-webgl-darwin.png and b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-filter-webgl-darwin.png differ diff --git a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-playback-webgl-darwin.png b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-playback-webgl-darwin.png index 74e41f0c..3e4dc41d 100644 Binary files a/e2e/snapshots/webgl/video.spec.ts-snapshots/video-playback-webgl-darwin.png and b/e2e/snapshots/webgl/video.spec.ts-snapshots/video-playback-webgl-darwin.png differ diff --git a/e2e/snapshots/webgpu/shape.spec.ts-snapshots/transparent-premultiply-webgpu-darwin.png b/e2e/snapshots/webgpu/shape.spec.ts-snapshots/transparent-premultiply-webgpu-darwin.png new file mode 100644 index 00000000..db705234 Binary files /dev/null and b/e2e/snapshots/webgpu/shape.spec.ts-snapshots/transparent-premultiply-webgpu-darwin.png differ diff --git a/e2e/tests/shape.spec.ts b/e2e/tests/shape.spec.ts index ad14977c..cfa9851d 100644 --- a/e2e/tests/shape.spec.ts +++ b/e2e/tests/shape.spec.ts @@ -89,6 +89,15 @@ test.describe("Shape描画テスト", () => { await expect(page).toHaveScreenshot("load-image-flip.png"); }); + + // 透明PNGがプリマルチプライドアルファで正しく合成されることの回帰テスト。 + // ストレートアルファのまま合成すると半透明領域の白抜け・縁の白線が再発する。 + test("Shape.load - 透明画像のプリマルチプライ合成(白抜け・白縁の回帰)", async ({ page }) => { + await page.goto("/e2e/pages/shape/transparent-premultiply.html"); + await waitForCanvas(page); + + await expect(page).toHaveScreenshot("transparent-premultiply.png"); + }); }); test.describe("Graphics操作", () => { diff --git a/package-lock.json b/package-lock.json index 8855f041..e0836596 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@next2d/player", - "version": "3.7.0", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@next2d/player", - "version": "3.7.0", + "version": "3.8.0", "license": "MIT", "workspaces": [ "packages/*" @@ -26,7 +26,7 @@ "eslint-plugin-unused-imports": "^4.4.1", "globals": "^17.6.0", "jsdom": "^29.1.1", - "rollup": "^4.62.0", + "rollup": "^4.62.2", "typescript": "^6.0.3", "vite": "^8.0.16", "vitest": "^4.1.9", @@ -163,9 +163,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.1.tgz", - "integrity": "sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.8.tgz", + "integrity": "sha512-3chWb7PRLijpJpPIKkDxdu6IBeO5MrFACND57On0j8OPpc0wZibcGc3xAHrSEbOx/KDRyMHoIxGn0w1PhXMYHw==", "dev": true, "funding": [ { @@ -618,14 +618,14 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.1" + "@tybys/wasm-util": "^0.10.2" }, "funding": { "type": "github", @@ -1130,9 +1130,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", - "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", "cpu": [ "arm" ], @@ -1144,9 +1144,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", - "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", "cpu": [ "arm64" ], @@ -1158,9 +1158,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", - "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", "cpu": [ "arm64" ], @@ -1172,9 +1172,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", - "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", "cpu": [ "x64" ], @@ -1186,9 +1186,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", - "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", "cpu": [ "arm64" ], @@ -1200,9 +1200,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", - "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", "cpu": [ "x64" ], @@ -1214,9 +1214,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", - "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", "cpu": [ "arm" ], @@ -1231,9 +1231,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", - "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", "cpu": [ "arm" ], @@ -1248,9 +1248,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", - "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", "cpu": [ "arm64" ], @@ -1265,9 +1265,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", - "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", "cpu": [ "arm64" ], @@ -1282,9 +1282,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", - "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", "cpu": [ "loong64" ], @@ -1299,9 +1299,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", - "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", "cpu": [ "loong64" ], @@ -1316,9 +1316,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", - "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", "cpu": [ "ppc64" ], @@ -1333,9 +1333,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", - "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", "cpu": [ "ppc64" ], @@ -1350,9 +1350,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", - "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", "cpu": [ "riscv64" ], @@ -1367,9 +1367,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", - "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", "cpu": [ "riscv64" ], @@ -1384,9 +1384,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", - "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", "cpu": [ "s390x" ], @@ -1401,9 +1401,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", - "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", "cpu": [ "x64" ], @@ -1418,9 +1418,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", - "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", "cpu": [ "x64" ], @@ -1435,9 +1435,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", - "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", "cpu": [ "x64" ], @@ -1449,9 +1449,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", - "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", "cpu": [ "arm64" ], @@ -1463,9 +1463,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", - "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", "cpu": [ "arm64" ], @@ -1477,9 +1477,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", - "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", "cpu": [ "ia32" ], @@ -1491,9 +1491,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", - "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", "cpu": [ "x64" ], @@ -1505,9 +1505,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", - "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", "cpu": [ "x64" ], @@ -1995,9 +1995,9 @@ "license": "BSD-3-Clause" }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -3276,9 +3276,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.13.tgz", + "integrity": "sha512-sPdqC6ByMVVGvF1ynvvMo0/o+oD1VX7DaHhijt1bFgjvBkHBib4t49GoNDhf2NDta4oeUNlaGbSt5K7qjZ955Q==", "dev": true, "funding": [ { @@ -3302,15 +3302,18 @@ "license": "MIT" }, "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" ], - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } }, "node_modules/optionator": { "version": "0.9.4", @@ -3610,9 +3613,9 @@ } }, "node_modules/rollup": { - "version": "4.62.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.0.tgz", - "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", "dev": true, "license": "MIT", "dependencies": { @@ -3626,31 +3629,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.62.0", - "@rollup/rollup-android-arm64": "4.62.0", - "@rollup/rollup-darwin-arm64": "4.62.0", - "@rollup/rollup-darwin-x64": "4.62.0", - "@rollup/rollup-freebsd-arm64": "4.62.0", - "@rollup/rollup-freebsd-x64": "4.62.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", - "@rollup/rollup-linux-arm-musleabihf": "4.62.0", - "@rollup/rollup-linux-arm64-gnu": "4.62.0", - "@rollup/rollup-linux-arm64-musl": "4.62.0", - "@rollup/rollup-linux-loong64-gnu": "4.62.0", - "@rollup/rollup-linux-loong64-musl": "4.62.0", - "@rollup/rollup-linux-ppc64-gnu": "4.62.0", - "@rollup/rollup-linux-ppc64-musl": "4.62.0", - "@rollup/rollup-linux-riscv64-gnu": "4.62.0", - "@rollup/rollup-linux-riscv64-musl": "4.62.0", - "@rollup/rollup-linux-s390x-gnu": "4.62.0", - "@rollup/rollup-linux-x64-gnu": "4.62.0", - "@rollup/rollup-linux-x64-musl": "4.62.0", - "@rollup/rollup-openbsd-x64": "4.62.0", - "@rollup/rollup-openharmony-arm64": "4.62.0", - "@rollup/rollup-win32-arm64-msvc": "4.62.0", - "@rollup/rollup-win32-ia32-msvc": "4.62.0", - "@rollup/rollup-win32-x64-gnu": "4.62.0", - "@rollup/rollup-win32-x64-msvc": "4.62.0", + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" } }, @@ -3668,9 +3671,9 @@ } }, "node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -3681,9 +3684,9 @@ } }, "node_modules/serialize-javascript": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", - "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.6.tgz", + "integrity": "sha512-ATTK5Q4gFVg0YDp1my2vqygyvhcklD/UV5GIlYHooGTn/NogJqIzpetkD6E5kmuVULqz/S9inUL25XcAgDRJQg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3872,22 +3875,22 @@ } }, "node_modules/tldts": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.2.tgz", - "integrity": "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.3.tgz", + "integrity": "sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.2" + "tldts-core": "^7.4.3" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.2.tgz", - "integrity": "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.3.tgz", + "integrity": "sha512-27ep5H9PzdBrNd5OFM/j3WCU8F3kPwM9D0BOaOf7uYfxMJfyr0K5Tjj69Gri+sZlh2WXd5buIm47NuPF29CDiw==", "dev": true, "license": "MIT" }, @@ -3966,9 +3969,9 @@ } }, "node_modules/undici": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.0.tgz", - "integrity": "sha512-+t2Z/GwkZQDtu00813aP66ygViGtPHKhhoFZpQKpKrE+9jIgES+Zw+mFNaDWOVRKiuJjuqKHzD3B1sfGg8+ZOQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index c3ed0156..02167e97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@next2d/player", - "version": "3.7.0", + "version": "3.8.0", "description": "Experience the fast and beautiful anti-aliased rendering of WebGL/WebGPU. You can create rich, interactive graphics, cross-platform applications and games without worrying about browser or device compatibility.", "author": "Toshiyuki Ienaga (https://github.com/ienaga/)", "license": "MIT", @@ -62,7 +62,7 @@ "eslint-plugin-unused-imports": "^4.4.1", "globals": "^17.6.0", "jsdom": "^29.1.1", - "rollup": "^4.62.0", + "rollup": "^4.62.2", "typescript": "^6.0.3", "vite": "^8.0.16", "vitest": "^4.1.9", diff --git a/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.test.ts b/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.test.ts index 6388e9a5..83743565 100644 --- a/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.test.ts +++ b/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.test.ts @@ -8,7 +8,7 @@ vi.mock("../../TextureManager/usecase/TextureManagerCreateFromCanvasUseCase", () vi.mock("../../TextureManager/usecase/TextureManagerReleaseTextureObjectUseCase", () => ({ execute: vi.fn() })); -vi.mock("../../Shader/Variants/Blend/service/VariantsBlendTextureShaderService", () => ({ +vi.mock("../../Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService", () => ({ execute: vi.fn(() => ({})) })); vi.mock("../../Shader/ShaderManager/service/ShaderManagerSetTextureUniformService", () => ({ diff --git a/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.ts b/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.ts index 5629ecdf..b76552a0 100644 --- a/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.ts +++ b/packages/webgl/src/Context/usecase/ContextDrawElementUseCase.ts @@ -1,7 +1,7 @@ import type { Node } from "@next2d/texture-packer"; import { execute as textureManagerCreateFromCanvasUseCase } from "../../TextureManager/usecase/TextureManagerCreateFromCanvasUseCase"; import { execute as textureManagerReleaseTextureObjectUseCase } from "../../TextureManager/usecase/TextureManagerReleaseTextureObjectUseCase"; -import { execute as variantsBlendTextureShaderService } from "../../Shader/Variants/Blend/service/VariantsBlendTextureShaderService"; +import { execute as variantsBlendTexturePremultiplyShaderService } from "../../Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService"; import { execute as shaderManagerSetTextureUniformService } from "../../Shader/ShaderManager/service/ShaderManagerSetTextureUniformService"; import { execute as shaderManagerDrawTextureUseCase } from "../../Shader/ShaderManager/usecase/ShaderManagerDrawTextureUseCase"; import { execute as blendResetService } from "../../Blend/service/BlendResetService"; @@ -20,7 +20,7 @@ export const execute = (node: Node, element: OffscreenCanvas | ImageBitmap): voi { const textureObject = textureManagerCreateFromCanvasUseCase(node.w, node.h, element); - const shaderManager = variantsBlendTextureShaderService(); + const shaderManager = variantsBlendTexturePremultiplyShaderService(); shaderManagerSetTextureUniformService(shaderManager, node.w, node.h); // テクスチャを描画 diff --git a/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.test.ts b/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.test.ts index db9ec0e6..8a92ea32 100644 --- a/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.test.ts +++ b/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.test.ts @@ -8,7 +8,7 @@ vi.mock("../../TextureManager/usecase/TextureManagerCreateFromPixelsUseCase", () vi.mock("../../TextureManager/usecase/TextureManagerReleaseTextureObjectUseCase", () => ({ execute: vi.fn() })); -vi.mock("../../Shader/Variants/Blend/service/VariantsBlendTextureShaderService", () => ({ +vi.mock("../../Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService", () => ({ execute: vi.fn(() => ({})) })); vi.mock("../../Shader/ShaderManager/service/ShaderManagerSetTextureUniformService", () => ({ diff --git a/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.ts b/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.ts index ad960d82..7dd8c4e6 100644 --- a/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.ts +++ b/packages/webgl/src/Context/usecase/ContextDrawPixelsUseCase.ts @@ -1,7 +1,7 @@ import type { Node } from "@next2d/texture-packer"; import { execute as textureManagerCreateFromPixelsUseCase } from "../../TextureManager/usecase/TextureManagerCreateFromPixelsUseCase"; import { execute as textureManagerReleaseTextureObjectUseCase } from "../../TextureManager/usecase/TextureManagerReleaseTextureObjectUseCase"; -import { execute as variantsBlendTextureShaderService } from "../../Shader/Variants/Blend/service/VariantsBlendTextureShaderService"; +import { execute as variantsBlendTexturePremultiplyShaderService } from "../../Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService"; import { execute as shaderManagerSetTextureUniformService } from "../../Shader/ShaderManager/service/ShaderManagerSetTextureUniformService"; import { execute as shaderManagerDrawTextureUseCase } from "../../Shader/ShaderManager/usecase/ShaderManagerDrawTextureUseCase"; import { execute as blendResetService } from "../../Blend/service/BlendResetService"; @@ -20,7 +20,7 @@ export const execute = (node: Node, pixels: Uint8Array): void => { const textureObject = textureManagerCreateFromPixelsUseCase(node.w, node.h, pixels); - const shaderManager = variantsBlendTextureShaderService(); + const shaderManager = variantsBlendTexturePremultiplyShaderService(); shaderManagerSetTextureUniformService(shaderManager, node.w, node.h); // テクスチャを描画 diff --git a/packages/webgl/src/Shader/Fragment/FragmentShaderSourceTexture.ts b/packages/webgl/src/Shader/Fragment/FragmentShaderSourceTexture.ts index 0032c1ee..afd72fa6 100644 --- a/packages/webgl/src/Shader/Fragment/FragmentShaderSourceTexture.ts +++ b/packages/webgl/src/Shader/Fragment/FragmentShaderSourceTexture.ts @@ -26,6 +26,25 @@ void main() { }`; }; +export const TEXTURE_PREMULTIPLY = (): string => +{ + return `#version 300 es +precision mediump float; + +uniform sampler2D u_texture; + +in vec2 v_coord; +out vec4 o_color; + +void main() { + vec4 src = texture(u_texture, v_coord); + // ストレートアルファのソースをプリマルチプライドアルファへ変換して出力する。 + // アトラスはプリマルチプライ空間で構築され blendFunc(ONE, ONE_MINUS_SRC_ALPHA) で + // 合成されるため、変換しないと透明部の白抜けや縁の白線が発生する。 + o_color = vec4(src.rgb * src.a, src.a); +}`; +}; + export const INSTANCE_TEXTURE = (): string => { return `#version 300 es diff --git a/packages/webgl/src/Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService.ts b/packages/webgl/src/Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService.ts new file mode 100644 index 00000000..c0559872 --- /dev/null +++ b/packages/webgl/src/Shader/Variants/Blend/service/VariantsBlendTexturePremultiplyShaderService.ts @@ -0,0 +1,34 @@ +import { TEXTURE_PREMULTIPLY } from "../../../Fragment/FragmentShaderSourceTexture"; +import { ShaderManager } from "../../../ShaderManager"; +import { BLEND_TEMPLATE } from "../../../Vertex/VertexShaderSource"; +import { $collection } from "../../BlendVariants"; + +/** + * @description ストレートアルファのテクスチャをプリマルチプライドアルファへ変換して描画する + * シェーダーを生成して返却。画像(Bitmap)・TextField・Video など、ストレート + * アルファのソースをプリマルチプライ空間のアトラスへ合成する用途で使用する。 + * Generate and return the shader that converts a straight-alpha texture into + * premultiplied alpha. Used for compositing straight-alpha sources (Bitmap + * image, TextField, Video) into the premultiplied-alpha atlas. + * + * @return {ShaderManager} + * @method + * @protected + */ +export const execute = (): ShaderManager => +{ + const key = "pp"; + + if ($collection.has(key)) { + return $collection.get(key) as NonNullable; + } + + const shaderManager = new ShaderManager( + BLEND_TEMPLATE(), + TEXTURE_PREMULTIPLY() + ); + + $collection.set(key, shaderManager); + + return shaderManager; +}; diff --git a/src/index.ts b/src/index.ts index a56cbd15..0bf27f51 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import { Next2D } from "@next2d/core"; if (!("next2d" in window)) { - console.log("%c Next2D Player %c 3.7.0 %c https://next2d.app", + console.log("%c Next2D Player %c 3.8.0 %c https://next2d.app", "color: #fff; background: #5f5f5f", "color: #fff; background: #4bc729", "");