UNPKG

@polygonjs/polygonjs

Version:

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

85 lines (84 loc) 2.73 kB
"use strict"; import { TypedNode } from "../../_Base"; import { GlobalsGeometryHandler } from "./globals/Geometry"; import { GlAssemblerNodeSpareParamsController } from "./GlAssemblerNodeSpareParamsController"; export class BaseGlParentNode extends TypedNode { createNode(node_class, options) { return super.createNode(node_class, options); } children() { return super.children(); } nodesByType(type) { return super.nodesByType(type); } } export class AssemblerGlControllerNode extends BaseGlParentNode { } export class GlAssemblerController { constructor(node, assembler_class) { this.node = node; this._globalsHandler = new GlobalsGeometryHandler(); this._compile_required = true; this._assembler = new assembler_class(this.node); this._spareParamsController = new GlAssemblerNodeSpareParamsController(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) { if (currentType != null) { console.warn( `set a new globals handler of type ${newType} on a node that already has a globals handler of type ${currentType} (node: ${this.node.path()}))` ); } this._globalsHandler = globalsHandler; this.setCompilationRequiredAndDirty(); this._assembler.reset_configs(); } } 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._compile_required = newState; } setCompilationRequiredAndDirty(triggerNode) { this.setCompilationRequired(); this.node.setDirty(triggerNode); } compileRequired() { return this._compile_required; } post_compile() { this.createSpareParameters(); this.setCompilationRequired(false); } // // Create spare params on mat nodes // createSpareParameters() { this._spareParamsController.createSpareParameters(); } addFilterFragmentShaderCallback(callbackName, callback) { this.assembler._addFilterFragmentShaderCallback(callbackName, callback); this.setCompilationRequired(); } removeFilterFragmentShaderCallback(callbackName) { this.assembler._removeFilterFragmentShaderCallback(callbackName); this.setCompilationRequired(); } }