|
@@ -4,16 +4,16 @@ import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
|
|
|
|
|
|
class AssignNode extends TempNode {
|
|
|
|
|
|
- constructor( aNode, bNode ) {
|
|
|
+ constructor( targetNode, sourceNode ) {
|
|
|
|
|
|
super();
|
|
|
|
|
|
- this.aNode = aNode;
|
|
|
- this.bNode = bNode;
|
|
|
+ this.targetNode = targetNode;
|
|
|
+ this.sourceNode = sourceNode;
|
|
|
|
|
|
}
|
|
|
|
|
|
- hasDependencies( builder ) {
|
|
|
+ hasDependencies() {
|
|
|
|
|
|
return false;
|
|
|
|
|
@@ -21,34 +21,41 @@ class AssignNode extends TempNode {
|
|
|
|
|
|
getNodeType( builder, output ) {
|
|
|
|
|
|
- const aNode = this.aNode;
|
|
|
- const bNode = this.bNode;
|
|
|
-
|
|
|
- const typeA = aNode.getNodeType( builder );
|
|
|
- const typeB = bNode.getNodeType( builder );
|
|
|
-
|
|
|
- return typeB === 'void' ? 'void' : typeA;
|
|
|
+ return output !== 'void' ? this.targetNode.getNodeType( builder ) : 'void';
|
|
|
|
|
|
}
|
|
|
|
|
|
generate( builder, output ) {
|
|
|
|
|
|
- const aNode = this.aNode;
|
|
|
- const bNode = this.bNode;
|
|
|
+ const targetNode = this.targetNode;
|
|
|
+ const sourceNode = this.sourceNode;
|
|
|
+
|
|
|
+ const targetType = targetNode.getNodeType( builder );
|
|
|
+
|
|
|
+ const target = targetNode.build( builder );
|
|
|
+ const source = sourceNode.build( builder, targetType );
|
|
|
+
|
|
|
+ const snippet = `${ target } = ${ source }`;
|
|
|
+
|
|
|
+ if ( output === 'void' ) {
|
|
|
+
|
|
|
+ builder.addLineFlowCode( snippet );
|
|
|
+
|
|
|
+ return;
|
|
|
+
|
|
|
+ } else {
|
|
|
|
|
|
- const type = this.getNodeType( builder, output );
|
|
|
+ const sourceType = sourceNode.getNodeType( builder );
|
|
|
|
|
|
- const a = aNode.build( builder, type );
|
|
|
- const b = bNode.build( builder, type );
|
|
|
+ if ( sourceType === 'void' ) {
|
|
|
|
|
|
- if ( output !== 'void' ) {
|
|
|
+ builder.addLineFlowCode( snippet );
|
|
|
|
|
|
- builder.addLineFlowCode( `${a} = ${b}` );
|
|
|
- return a;
|
|
|
+ return target;
|
|
|
|
|
|
- } else if ( type !== 'void' ) {
|
|
|
+ }
|
|
|
|
|
|
- return builder.format( `${a} = ${b}`, type, output );
|
|
|
+ return builder.format( snippet, targetType, output );
|
|
|
|
|
|
}
|
|
|
|