UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

72 lines (71 loc) 2.11 kB
"use strict"; import { BaseOperationContainer } from "./_Base"; export class SopOperationContainer extends BaseOperationContainer { constructor(operation, name, init_params) { super(operation, name, init_params); this.operation = operation; this.name = name; this.init_params = init_params; // TODO: there may a better to overload add_input this._inputs = []; this._currentInputIndex = 0; this._dirty = true; } operationType() { return this.operation.type(); } addInput(input) { super.setInput(this._currentInputIndex, input); this.incrementInputIndex(); } incrementInputIndex() { this._currentInputIndex++; } currentInputIndex() { return this._currentInputIndex; } setDirty() { if (this._dirty) { return; } this._computeResult = void 0; for (let i = 0; i < this._inputs.length; i++) { const inputOperation = this._inputs[i]; inputOperation.setDirty(); } } async compute(input_contents, operation_inputs_map) { if (this._computeResult) { return this._computeResult; } const operationInputContents = []; const nodeInputsMap = operation_inputs_map.get(this); if (nodeInputsMap) { nodeInputsMap.forEach((node_input_index, operation_input_index) => { operationInputContents[operation_input_index] = input_contents[node_input_index]; }); } for (let i = 0; i < this._inputs.length; i++) { const inputOperation = this._inputs[i]; let result2 = await inputOperation.compute(input_contents, operation_inputs_map); if (result2) { if (this.inputCloneRequired(i)) { result2 = result2.clone(); } operationInputContents[i] = result2; } } const result = this.operation.cook(operationInputContents, this.params); if (result) { if (result instanceof Promise) { this._computeResult = await result; } else { this._computeResult = result; } } else { this._computeResult = void 0; } this._dirty = false; return this._computeResult; } }