UNPKG

@polygonjs/polygonjs

Version:

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

61 lines (60 loc) 2.56 kB
"use strict"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { TypedGlNode } from "./_Base"; import FresnelMethods from "./gl/fresnel.glsl"; import { GlConnectionPoint, GlConnectionPointType } from "../utils/io/connections/Gl"; import { ThreeToGl } from "../../../core/ThreeToGl"; import { FunctionGLDefinition } from "./utils/GLDefinition"; import { Vector3Param } from "../../params/Vector3"; const OUTPUT_NAME = "fresnel"; class FresnelGlParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); this.worldPosition = ParamConfig.VECTOR4([0, 0, 0, 0]); this.worldNormal = ParamConfig.VECTOR3([0, 0, 0]); this.cameraPosition = ParamConfig.VECTOR3([0, 0, 0]); } } const ParamsConfig = new FresnelGlParamsConfig(); export class FresnelGlNode extends TypedGlNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "fresnel"; } initializeNode() { super.initializeNode(); this.io.outputs.setNamedOutputConnectionPoints([ new GlConnectionPoint(OUTPUT_NAME, GlConnectionPointType.FLOAT) ]); } setLines(shadersCollectionController) { const args = [ this._varFromParam(this.p.worldPosition, ThreeToGl.vector4, shadersCollectionController), this._varFromParam(this.p.worldNormal, ThreeToGl.vector3, shadersCollectionController), this._varFromParam(this.p.cameraPosition, ThreeToGl.vector3, shadersCollectionController) ]; const output = this.glVarName(OUTPUT_NAME); const body_line = `float ${output} = fresnel(${args.join(",")})`; shadersCollectionController.addBodyLines(this, [body_line]); shadersCollectionController.addDefinitions(this, [new FunctionGLDefinition(this, FresnelMethods)]); } _varFromParam(param, convertMethod, shadersCollectionController) { const varName = param.name(); const input = this.io.inputs.named_input(param.name()); if (input) { return convertMethod(this.variableForInputParam(param)); } else { const glType = param instanceof Vector3Param ? GlConnectionPointType.VEC3 : GlConnectionPointType.VEC4; this._getGlobalVar(varName, glType, shadersCollectionController); return this.glVarName(varName); } } _getGlobalVar(varName, glType, shadersCollectionController) { var _a; const assembler = shadersCollectionController.assembler(); (_a = assembler.globalsHandler()) == null ? void 0 : _a.handleGlobalVar(this, varName, glType, shadersCollectionController); } }