From f1103c4e48a11bb67f85c1789faaf8f2d976a65c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 23:52:20 -0700 Subject: [PATCH 1/3] Bump basic-ftp from 5.2.0 to 5.2.1 (#33353) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 45 +++------------------------------------------ 1 file changed, 3 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 490e7ed61e5860..628fbdad5f35e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -591,9 +591,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -608,9 +605,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -625,9 +619,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -642,9 +633,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -659,9 +647,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -676,9 +661,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -693,9 +675,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -710,9 +689,6 @@ "ppc64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -727,9 +703,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -744,9 +717,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -761,9 +731,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -778,9 +745,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -795,9 +759,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1236,9 +1197,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", - "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.1.tgz", + "integrity": "sha512-0yaL8JdxTknKDILitVpfYfV2Ob6yb3udX/hK97M7I3jOeznBNxQPtVvTUtnhUkyHlxFWyr5Lvknmgzoc7jf+1Q==", "dev": true, "license": "MIT", "engines": { From 84335585d465607cb53006581624dff46ad38010 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Thu, 9 Apr 2026 11:06:00 +0200 Subject: [PATCH 2/3] GLTFExporter: Make attribute prefix more robust. (#33357) --- examples/jsm/exporters/GLTFExporter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/jsm/exporters/GLTFExporter.js b/examples/jsm/exporters/GLTFExporter.js index 9c67ac5ed16e51..1504033b01af2c 100644 --- a/examples/jsm/exporters/GLTFExporter.js +++ b/examples/jsm/exporters/GLTFExporter.js @@ -1848,7 +1848,7 @@ class GLTFWriter { const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/; - if ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName; + if ( ! validVertexAttributes.test( attributeName ) && ! attributeName.startsWith( '_' ) ) attributeName = '_' + attributeName; if ( cache.attributes.has( this.getUID( attribute ) ) ) { From 551960e4924fd4a0b09bd564f1c09feae1b74f00 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Thu, 9 Apr 2026 11:30:03 +0200 Subject: [PATCH 3/3] OutlineNode: Early out when nothing is selected. (#33358) --- examples/jsm/tsl/display/OutlineNode.js | 42 +++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/examples/jsm/tsl/display/OutlineNode.js b/examples/jsm/tsl/display/OutlineNode.js index 8fc0d015c0072b..9fb1acc3b83051 100644 --- a/examples/jsm/tsl/display/OutlineNode.js +++ b/examples/jsm/tsl/display/OutlineNode.js @@ -365,6 +365,17 @@ class OutlineNode extends TempNode { */ this._selectionCache = new Set(); + /** + * The number of selected objects from the previous frame. Used to detect + * the transition to an empty selection so the composite render target can + * be cleared once and avoid leaving a stale outline on screen. + * + * @private + * @type {number} + * @default 0 + */ + this._lastSelectionCount = 0; + /** * The result of the effect is represented as a separate texture node. * @@ -449,6 +460,35 @@ class OutlineNode extends TempNode { const { renderer } = frame; const { camera, scene } = this; + this._updateSelectionCache(); + + // If no objects are selected, all subsequent passes can be skipped since + // the outline would be empty anyway. The composite render target is cleared + // once when transitioning to an empty selection so a previously rendered + // outline does not linger on screen. + + if ( this._selectionCache.size === 0 ) { + + if ( this._lastSelectionCount > 0 ) { + + _rendererState = RendererUtils.resetRendererState( renderer, _rendererState ); + + renderer.setRenderTarget( this._renderTargetComposite ); + renderer.setClearColor( 0x000000, 0 ); + renderer.clear(); + + RendererUtils.restoreRendererState( renderer, _rendererState ); + + this._lastSelectionCount = 0; + + } + + return; + + } + + this._lastSelectionCount = this._selectionCache.size; + _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState ); // @@ -460,8 +500,6 @@ class OutlineNode extends TempNode { renderer.setClearColor( 0xffffff, 1 ); - this._updateSelectionCache(); - const currentSceneName = scene.name; // 1. Draw non-selected objects in the depth buffer