浏览代码

TSL: Support for split assignment 2 (#27797)

sunag 1 年之前
父节点
当前提交
68c8dc3d31
共有 1 个文件被更改,包括 7 次插入6 次删除
  1. 7 6
      examples/jsm/nodes/core/AssignNode.js

+ 7 - 6
examples/jsm/nodes/core/AssignNode.js

@@ -32,7 +32,7 @@ class AssignNode extends TempNode {
 
 		if ( builder.isAvailable( 'swizzleAssign' ) === false && targetNode.isSplitNode && targetNode.components.length > 1 ) {
 
-			const targetLength = builder.getTypeLength( targetNode.getNodeType( builder ) );
+			const targetLength = builder.getTypeLength( targetNode.node.getNodeType( builder ) );
 			const assignDiferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;
 
 			return assignDiferentVector;
@@ -49,8 +49,6 @@ class AssignNode extends TempNode {
 
 		const needsSplitAssign = this.needsSplitAssign( builder );
 
-		if ( needsSplitAssign ) sourceNode.increaseUsage( builder ); // flag to cache system
-
 		const targetType = targetNode.getNodeType( builder );
 
 		const target = targetNode.context( { assign: true } ).build( builder );
@@ -64,15 +62,18 @@ class AssignNode extends TempNode {
 
 		if ( needsSplitAssign ) {
 
+			const sourceVar = builder.getVarFromNode( this, null, targetType );
+			const sourceProperty = builder.getPropertyName( sourceVar );
+
+			builder.addLineFlowCode( `${ sourceProperty } = ${ source }` );
+
 			const targetRoot = targetNode.node.context( { assign: true } ).build( builder );
 
 			for ( let i = 0; i < targetNode.components.length; i ++ ) {
 
 				const component = targetNode.components[ i ];
 
-				snippet = `${ targetRoot }.${ component } = ${ source }[ ${ i } ]`;
-
-				builder.addLineFlowCode( snippet );
+				builder.addLineFlowCode( `${ targetRoot }.${ component } = ${ sourceProperty }[ ${ i } ]` );
 
 			}