UNPKG

@polygonjs/polygonjs

Version:

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

90 lines (89 loc) 2.78 kB
"use strict"; import { TypedNode } from "../../_Base"; import { GlobalsJsGeometryHandler } from "./globals/Geometry"; import { JsAssemblerNodeSpareParamsController } from "./JsAssemblerNodeSpareParamsController"; class BaseJsParentNode extends TypedNode { createNode(node_class, options) { return super.createNode(node_class, options); } children() { return super.children(); } nodesByType(type) { return super.nodesByType(type); } } export class AssemblerControllerNode extends BaseJsParentNode { } export class JsAssemblerController { constructor(node, assembler_class) { this.node = node; this._globalsHandler = new GlobalsJsGeometryHandler(); this._compileRequired = true; this._assembler = new assembler_class(this.node); this._spareParamsController = new JsAssemblerNodeSpareParamsController(this, this.node); } setAssemblerGlobalsHandler(globalsHandler) { var _a; const currentType = (_a = this._globalsHandler) == null ? void 0 : _a.type(); const newType = globalsHandler == null ? void 0 : globalsHandler.type(); if (currentType != newType) { this._globalsHandler = globalsHandler; this.setCompilationRequiredAndDirty(); this._assembler.resetConfigs(); } } get assembler() { return this._assembler; } globalsHandler() { return this._globalsHandler; } add_output_inputs(output_child) { this._assembler.add_output_inputs(output_child); } add_globals_outputs(globals_node) { this._assembler.add_globals_outputs(globals_node); } allow_attribute_exports() { return this._assembler.allow_attribute_exports(); } setCompilationRequired(newState = true) { this._compileRequired = newState; } setCompilationRequiredAndDirty(triggerNode) { if (this.node.scene().loadingController.isLoading()) { return; } this.setCompilationRequired(); if (this._assembler.makeFunctionNodeDirtyOnChange()) { this.node.setDirty(); } else { if (this.node.isDirty()) { } else { this.node.compile(); } } } compileRequired() { return this._compileRequired; } post_compile() { this.createSpareParameters(); this.setCompilationRequired(false); } // // Create spare params on mat nodes // createSpareParameters() { this._spareParamsController.createSpareParameters(); } // addFilterFragmentShaderCallback(callbackName: string, callback: (s: string) => string) { // this.assembler._addFilterFragmentShaderCallback(callbackName, callback); // this.setCompilationRequired(); // } // removeFilterFragmentShaderCallback(callbackName: string) { // this.assembler._removeFilterFragmentShaderCallback(callbackName); // this.setCompilationRequired(); // } }