polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
50 lines (49 loc) • 1.9 kB
JavaScript
import {BaseNodeGlMathFunctionArg3GlNode} from "./_BaseMathFunction";
import {GlConnectionPointType} from "../utils/io/connections/Gl";
import {FunctionGLDefinition} from "./utils/GLDefinition";
export function MathFunctionArg3Factory(type, options = {}) {
const gl_method_name = options.method || type;
const gl_output_name = options.out || "val";
const gl_input_names = options.in || ["in0", "in1", "in2"];
const param_default_values = options.default || {};
const out_type = options.out_type || GlConnectionPointType.FLOAT;
const functions = options.functions || [];
return class Node extends BaseNodeGlMathFunctionArg3GlNode {
static type() {
return type;
}
initializeNode() {
super.initializeNode();
this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this));
this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this));
this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this));
}
_gl_input_name(index) {
return gl_input_names[index];
}
_gl_output_name(index) {
return gl_output_name;
}
gl_method_name() {
return gl_method_name;
}
_expected_output_types() {
return [out_type];
}
param_default_value(name) {
return param_default_values[name];
}
gl_function_definitions() {
return functions.map((f) => new FunctionGLDefinition(this, f));
}
};
}
export class ClampGlNode extends MathFunctionArg3Factory("clamp", {in: ["value", "min", "max"], default: {max: 1}}) {
_expected_output_types() {
return [this._expected_input_types()[0]];
}
}
export class FaceforwardGlNode extends MathFunctionArg3Factory("faceForward", {in: ["N", "I", "Nref"]}) {
}
export class SmoothstepGlNode extends MathFunctionArg3Factory("smoothstep", {in: ["edge0", "edge1", "x"]}) {
}