@@ -4,6 +4,7 @@ import ConvertNode from '../utils/ConvertNode.js';
4
4
import JoinNode from '../utils/JoinNode.js' ;
5
5
import SplitNode from '../utils/SplitNode.js' ;
6
6
import SetNode from '../utils/SetNode.js' ;
7
+ import FlipNode from '../utils/FlipNode.js' ;
7
8
import ConstNode from '../core/ConstNode.js' ;
8
9
import { getValueFromType , getValueType } from '../core/NodeUtils.js' ;
9
10
@@ -29,6 +30,7 @@ export function addNodeElement( name, nodeElement ) {
29
30
}
30
31
31
32
const parseSwizzle = ( props ) => props . replace ( / r | s / g, 'x' ) . replace ( / g | t / g, 'y' ) . replace ( / b | p / g, 'z' ) . replace ( / a | q / g, 'w' ) ;
33
+ const parseSwizzleAndSort = ( props ) => parseSwizzle ( props ) . split ( '' ) . sort ( ) . join ( '' ) ;
32
34
33
35
const shaderNodeHandler = {
34
36
@@ -80,15 +82,19 @@ const shaderNodeHandler = {
80
82
81
83
} else if ( / ^ s e t [ X Y Z W R G B A S T P Q ] { 1 , 4 } $ / . test ( prop ) === true ) {
82
84
83
- // set properties ( swizzle )
85
+ // set properties ( swizzle ) and sort to xyzw sequence
84
86
85
- prop = parseSwizzle ( prop . slice ( 3 ) . toLowerCase ( ) ) ;
87
+ prop = parseSwizzleAndSort ( prop . slice ( 3 ) . toLowerCase ( ) ) ;
86
88
87
- // sort to xyzw sequence
89
+ return ( value ) => nodeObject ( new SetNode ( node , prop , value ) ) ;
88
90
89
- prop = prop . split ( '' ) . sort ( ) . join ( '' ) ;
91
+ } else if ( / ^ f l i p [ X Y Z W R G B A S T P Q ] { 1 , 4 } $ / . test ( prop ) === true ) {
90
92
91
- return ( value ) => nodeObject ( new SetNode ( node , prop , value ) ) ;
93
+ // set properties ( swizzle ) and sort to xyzw sequence
94
+
95
+ prop = parseSwizzleAndSort ( prop . slice ( 4 ) . toLowerCase ( ) ) ;
96
+
97
+ return ( ) => nodeObject ( new FlipNode ( nodeObject ( node ) , prop ) ) ;
92
98
93
99
} else if ( prop === 'width' || prop === 'height' || prop === 'depth' ) {
94
100
0 commit comments