1- import { DepthTexture , FloatType , RenderTarget , Vector2 , TempNode , QuadMesh , NodeMaterial , RendererUtils , NodeUpdateType } from 'three/webgpu' ;
2- import { Loop , int , exp , min , float , mul , uv , vec2 , vec3 , Fn , textureSize , orthographicDepthToViewZ , screenUV , nodeObject , uniform , vec4 , passTexture , texture , perspectiveDepthToViewZ , positionView , reference } from 'three/tsl' ;
1+ import { DepthTexture , FloatType , RenderTarget , Vector2 , TempNode , QuadMesh , NodeMaterial , SpriteNodeMaterial , RendererUtils , NodeUpdateType } from 'three/webgpu' ;
2+ import { Loop , int , exp , min , float , mul , uv , vec2 , vec3 , Fn , textureSize , orthographicDepthToViewZ , screenUV , nodeObject , uniform , vec4 , passTexture , texture , perspectiveDepthToViewZ , positionView , reference , color } from 'three/tsl' ;
33
44const _quadMesh = /*@__PURE__ */ new QuadMesh ( ) ;
55const _size = /*@__PURE__ */ new Vector2 ( ) ;
@@ -293,9 +293,13 @@ class OutlineNode extends TempNode {
293293 * @type {NodeMaterial }
294294 */
295295 this . _depthMaterial = new NodeMaterial ( ) ;
296- this . _depthMaterial . fragmentNode = vec4 ( 0 , 0 , 0 , 1 ) ;
296+ this . _depthMaterial . colorNode = color ( 0 , 0 , 0 ) ;
297297 this . _depthMaterial . name = 'OutlineNode.depth' ;
298298
299+ this . _depthSpriteMaterial = new SpriteNodeMaterial ( ) ;
300+ this . _depthSpriteMaterial . colorNode = color ( 0 , 0 , 0 ) ;
301+ this . _depthSpriteMaterial . name = 'OutlineNode.depthSprite' ;
302+
299303 /**
300304 * The material for preparing the mask.
301305 *
@@ -305,6 +309,9 @@ class OutlineNode extends TempNode {
305309 this . _prepareMaskMaterial = new NodeMaterial ( ) ;
306310 this . _prepareMaskMaterial . name = 'OutlineNode.prepareMask' ;
307311
312+ this . _prepareMaskSpriteMaterial = new SpriteNodeMaterial ( ) ;
313+ this . _prepareMaskSpriteMaterial . name = 'OutlineNode.prepareMaskSprite' ;
314+
308315 /**
309316 * The copy material
310317 *
@@ -459,14 +466,14 @@ class OutlineNode extends TempNode {
459466
460467 // 1. Draw non-selected objects in the depth buffer
461468
462- scene . overrideMaterial = this . _depthMaterial ;
463-
464469 renderer . setRenderTarget ( this . _renderTargetDepthBuffer ) ;
465- renderer . setRenderObjectFunction ( ( object , ... params ) => {
470+ renderer . setRenderObjectFunction ( ( object , scene , camera , geometry , material , group , lightsNode , clippingContext ) => {
466471
467472 if ( this . _selectionCache . has ( object ) === false ) {
468473
469- renderer . renderObject ( object , ...params ) ;
474+ const overrideMaterial = object . isSprite ? this . _depthSpriteMaterial : this . _depthMaterial ;
475+
476+ renderer . renderObject ( object , scene , camera , geometry , overrideMaterial , group , lightsNode , clippingContext ) ;
470477
471478 }
472479
@@ -477,14 +484,14 @@ class OutlineNode extends TempNode {
477484
478485 // 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
479486
480- scene . overrideMaterial = this . _prepareMaskMaterial ;
481-
482487 renderer . setRenderTarget ( this . _renderTargetMaskBuffer ) ;
483- renderer . setRenderObjectFunction ( ( object , ... params ) => {
488+ renderer . setRenderObjectFunction ( ( object , scene , camera , geometry , material , group , lightsNode , clippingContext ) => {
484489
485490 if ( this . _selectionCache . has ( object ) === true ) {
486491
487- renderer . renderObject ( object , ...params ) ;
492+ const overrideMaterial = object . isSprite ? this . _prepareMaskSpriteMaterial : this . _prepareMaskMaterial ;
493+
494+ renderer . renderObject ( object , scene , camera , geometry , overrideMaterial , group , lightsNode , clippingContext ) ;
488495
489496 }
490497
@@ -587,13 +594,16 @@ class OutlineNode extends TempNode {
587594 }
588595
589596 const depthTest = positionView . z . lessThanEqual ( viewZNode ) . select ( 1 , 0 ) ;
590- return vec4 ( 0.0 , depthTest , 1.0 , 1.0 ) ;
597+ return vec3 ( 0.0 , depthTest , 1.0 ) ;
591598
592599 } ;
593600
594- this . _prepareMaskMaterial . fragmentNode = prepareMask ( ) ;
601+ this . _prepareMaskMaterial . colorNode = prepareMask ( ) ;
595602 this . _prepareMaskMaterial . needsUpdate = true ;
596603
604+ this . _prepareMaskSpriteMaterial . colorNode = prepareMask ( ) ;
605+ this . _prepareMaskSpriteMaterial . needsUpdate = true ;
606+
597607 // copy material
598608
599609 this . _materialCopy . fragmentNode = this . _maskTextureUniform ;
@@ -712,7 +722,9 @@ class OutlineNode extends TempNode {
712722 this . _renderTargetComposite . dispose ( ) ;
713723
714724 this . _depthMaterial . dispose ( ) ;
725+ this . _depthSpriteMaterial . dispose ( ) ;
715726 this . _prepareMaskMaterial . dispose ( ) ;
727+ this . _prepareMaskSpriteMaterial . dispose ( ) ;
716728 this . _materialCopy . dispose ( ) ;
717729 this . _edgeDetectionMaterial . dispose ( ) ;
718730 this . _separableBlurMaterial . dispose ( ) ;
@@ -733,7 +745,7 @@ class OutlineNode extends TempNode {
733745 const selectedObject = this . selectedObjects [ i ] ;
734746 selectedObject . traverse ( ( object ) => {
735747
736- if ( object . isMesh ) this . _selectionCache . add ( object ) ;
748+ if ( object . isMesh || object . isSprite ) this . _selectionCache . add ( object ) ;
737749
738750 } ) ;
739751
0 commit comments