@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
150 lines (149 loc) • 7.94 kB
TypeScript
import { ShaderMaterial } from 'three';
import { LineType } from '../utils/LineType';
import { VariableConfig } from '../configs/VariableConfig';
import { JsCodeBuilder, CodeBuilderSetCodeLinesOptions } from '../utils/CodeBuilder';
import { BaseJsNodeType } from '../../_Base';
import { JsShaderConfig } from '../configs/ShaderConfig';
import { TypedAssembler } from '../../../utils/shaders/BaseAssembler';
import { JsFunctionName } from '../../../utils/shaders/ShaderName';
import { OutputJsNode } from '../../Output';
import { JsConnectionPoint, JsConnectionPointType } from '../../../utils/io/connections/Js';
import { GlobalsJsNode } from '../../Globals';
import { AttributeJsNode } from '../../Attribute';
import { AssemblerControllerNode } from '../Controller';
import { GlobalsJsBaseController } from '../globals/_Base';
import { JsLinesCollectionController } from '../utils/JsLinesCollectionController';
import { NodeContext } from '../../../../poly/NodeContext';
import { BaseNamedFunction } from '../../../../functions/_Base';
import { RegisterableVariable } from './_BaseJsPersistedConfigUtils';
import { NamedFunctionMap } from '../../../../poly/registers/functions/All';
import { JsParamConfig } from '../utils/JsParamConfig';
import { ParamType } from '../../../../poly/ParamType';
import { ParamOptions } from '../../../../params/utils/OptionsController';
type StringArrayByJsFunctionName = Map<JsFunctionName, string[]>;
export interface SpareParamOptions {
type: ParamType;
}
export interface BaseFunctionData {
variableNames: string[];
variablesByName: Record<string, RegisterableVariable>;
functionNames: Array<keyof NamedFunctionMap>;
functionsByName: Record<string, Function>;
paramConfigs: JsParamConfig<ParamType>[];
}
export interface VelocityColliderFunctionBody {
velocity: string;
collider: string;
}
export interface SingleBodyFunctionData extends BaseFunctionData {
functionBody: string;
}
export interface VelocityColliderFunctionData extends BaseFunctionData {
functionBody: VelocityColliderFunctionBody;
}
interface JsTemplateShader {
main?: string;
velocity?: string;
collider?: string;
}
export declare const INSERT_MEMBERS_AFTER = "// insert members";
export declare const INSERT_DEFINE_AFTER = "// insert defines";
export declare const INSERT_CONSTRUCTOR_AFTER = "// insert after constructor";
export declare const INSERT_BODY_AFTER = "// insert body";
export declare abstract class BaseJsShaderAssembler extends TypedAssembler<NodeContext.JS> {
protected _jsParentNode: AssemblerControllerNode<BaseJsShaderAssembler>;
protected _shaders_by_name: Map<JsFunctionName, string>;
protected _lines: StringArrayByJsFunctionName;
protected _codeBuilder: JsCodeBuilder | undefined;
private _param_config_owner;
protected _root_nodes: BaseJsNodeType[];
protected _leaf_nodes: BaseJsNodeType[];
protected _material: ShaderMaterial | undefined;
private _shader_configs;
private _variable_configs;
private _uniformsTimeDependent;
private _uniformsResolutionDependent;
private _computedVarNames;
constructor(_jsParentNode: AssemblerControllerNode<BaseJsShaderAssembler>);
perPoint(): boolean;
protected _overridenJsParentNode: AssemblerControllerNode<BaseJsShaderAssembler> | undefined;
setJsParentNode(parentNode: AssemblerControllerNode<BaseJsShaderAssembler>): void;
currentJsParentNode(): AssemblerControllerNode<BaseJsShaderAssembler>;
abstract makeFunctionNodeDirtyOnChange(): boolean;
addComputedVarName(varName: string): void;
registeredAsComputed(varName: string): boolean;
computedVariablesAllowed(): boolean;
memberReference(varName: string): string;
abstract spareParamsOptions(options: SpareParamOptions): ParamOptions;
compile(): void;
abstract defaultObjectVariable(): string;
abstract defaultObject3DMaterialVariable(): string;
abstract defaultPrimitiveGraph(): string;
protected _template_shader_for_shader_name(shaderName: JsFunctionName): string | undefined;
globalsHandler(): GlobalsJsBaseController | undefined;
compileAllowed(): boolean;
shaders_by_name(): Map<JsFunctionName, string>;
protected _buildLines(): void;
set_root_nodes(root_nodes: BaseJsNodeType[]): void;
protected templateShader(): JsTemplateShader | undefined;
protected _reset(): void;
updateFunction(): void;
rootNodesByShaderName(shaderName: JsFunctionName, rootNodes: BaseJsNodeType[]): BaseJsNodeType[];
setNodeLinesGlobals(globalsNode: GlobalsJsNode, linesController: JsLinesCollectionController): void;
setNodeLinesOutput(outputNode: OutputJsNode, linesController: JsLinesCollectionController): void;
setNodeLinesAttribute(attributeNode: AttributeJsNode, linesController: JsLinesCollectionController): void;
codeBuilder(): JsCodeBuilder;
private _createCodeBuilder;
protected buildCodeFromNodes(rootNodes: BaseJsNodeType[], codeBuilderOptions?: CodeBuilderSetCodeLinesOptions): void;
allow_new_param_configs(): void;
disallow_new_param_configs(): void;
builder_param_configs(): readonly JsParamConfig<ParamType>[];
builder_lines(shader_name: JsFunctionName, line_type: LineType): string[];
all_builder_lines(): Map<JsFunctionName, Map<LineType, string[]>>;
param_configs(): readonly JsParamConfig<ParamType>[];
set_param_configs_owner(param_config_owner: JsCodeBuilder): void;
static output_input_connection_points(): JsConnectionPoint<JsConnectionPointType>[];
add_output_inputs(output_child: OutputJsNode): void;
static create_globals_node_output_connections(): never[];
create_globals_node_output_connections(): never[];
add_globals_outputs(globals_node: GlobalsJsNode): void;
allow_attribute_exports(): boolean;
resetConfigs(): void;
shaderConfigs(): JsShaderConfig[];
set_shader_configs(shader_configs: JsShaderConfig[]): void;
shaderNames(): JsFunctionName[];
protected _reset_shader_configs(): void;
create_shader_configs(): JsShaderConfig[];
shader_config(name: string): JsShaderConfig | undefined;
variable_configs(): VariableConfig[];
set_variable_configs(variable_configs: VariableConfig[]): void;
variable_config(name: string): VariableConfig;
static create_variable_configs(): VariableConfig[];
create_variable_configs(): VariableConfig[];
protected _reset_variable_configs(): void;
inputNamesForShaderName(rootNode: BaseJsNodeType, shaderName: JsFunctionName): string[];
protected _resetUniformsTimeDependency(): void;
setUniformsTimeDependent(): void;
uniformsTimeDependent(): boolean;
protected _resetUniformsResolutionDependency(): void;
setUniformsResolutionDependent(): void;
uniformsResolutionDependent(): boolean;
protected _raymarchingLightsWorldCoordsDependent(): boolean;
protected insertMemberAfter(shaderName: JsFunctionName): string | undefined;
protected insertDefineAfter(shaderName: JsFunctionName): string | undefined;
protected insertConstructorAfter(shaderName: JsFunctionName): string | undefined;
protected insertBodyAfter(shaderName: JsFunctionName): string | undefined;
protected linesToRemove(shaderName: JsFunctionName): string[] | undefined;
private _replaceTemplate;
private _insertLines;
private _registeredVariables;
private _registeredVariablesCountByNode;
addVariable(node: BaseJsNodeType, variable: RegisterableVariable, varName?: string): string;
traverseRegisteredVariables(callback: (variable: RegisterableVariable, varName: string) => void): void;
protected _resetRegisteredVariables(): void;
private _registeredFunctions;
addFunction(node: BaseJsNodeType, namedFunction: BaseNamedFunction): void;
traverseRegisteredFunctions(callback: (variable: BaseNamedFunction) => void): void;
protected _resetRegisteredFunctions(): void;
}
export {};