|
@@ -1,3 +1,4 @@
|
|
|
+import Node from '../core/Node.js';
|
|
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
|
import ConvertNode from '../utils/ConvertNode.js';
|
|
|
import JoinNode from '../utils/JoinNode.js';
|
|
@@ -147,31 +148,43 @@ const ShaderNodeImmutable = function ( NodeClass, ...params ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
-const ShaderNodeScript = function ( jsFunc ) {
|
|
|
+class ShaderNodeInternal extends Node {
|
|
|
+
|
|
|
+ constructor( jsFunc ) {
|
|
|
|
|
|
- // @TODO: Move this to Node extended class
|
|
|
+ super();
|
|
|
|
|
|
- const self = {
|
|
|
+ this._jsFunc = jsFunc;
|
|
|
|
|
|
- build: ( builder ) => {
|
|
|
+ }
|
|
|
|
|
|
- self.call( {}, builder );
|
|
|
+ call( inputs, builder ) {
|
|
|
|
|
|
- return '';
|
|
|
+ inputs = nodeObjects( inputs );
|
|
|
+
|
|
|
+ return nodeObject( this._jsFunc( inputs, builder ) );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- },
|
|
|
+ generate( builder, output ) {
|
|
|
|
|
|
- call: ( inputs, builder ) => {
|
|
|
+ const nodeCall = this.call( {}, builder );
|
|
|
|
|
|
- inputs = nodeObjects( inputs );
|
|
|
+ if ( nodeCall === undefined ) {
|
|
|
|
|
|
- return nodeObject( jsFunc( inputs, builder ) );
|
|
|
+ return '';
|
|
|
|
|
|
}
|
|
|
|
|
|
- };
|
|
|
+ return builder.format( nodeCall.build( builder ), nodeCall.getNodeType( builder ), output );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+const ShaderNodeScript = function ( jsFunc ) {
|
|
|
|
|
|
- return self;
|
|
|
+ return new ShaderNodeInternal( jsFunc );
|
|
|
|
|
|
};
|
|
|
|