@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
90 lines (89 loc) • 2.78 kB
JavaScript
"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();
// }
}