UNPKG

polygonjs-engine

Version:

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

93 lines (92 loc) 3.74 kB
import {UniformsUtils as UniformsUtils2} from "three/src/renderers/shaders/UniformsUtils"; import {ShaderMaterial as ShaderMaterial2} from "three/src/materials/ShaderMaterial"; import {ShaderLib as ShaderLib2} from "three/src/renderers/shaders/ShaderLib"; import {ShaderAssemblerMaterial, CustomMaterialName} from "./_BaseMaterial"; import {ShaderConfig as ShaderConfig2} from "../../configs/ShaderConfig"; import {VariableConfig as VariableConfig2} from "../../configs/VariableConfig"; import {GlobalsGeometryHandler} from "../../globals/Geometry"; import {ShaderAssemblerCustomLineDepthDOF} from "./CustomLineDepthDOF"; import {ShaderName as ShaderName2} from "../../../../utils/shaders/ShaderName"; import {GlConnectionPointType, GlConnectionPoint} from "../../../../utils/io/connections/Gl"; const ASSEMBLER_MAP = new Map([]); ASSEMBLER_MAP.set(CustomMaterialName.DEPTH_DOF, ShaderAssemblerCustomLineDepthDOF); const LINES_TO_REMOVE_MAP = new Map([ [ShaderName2.VERTEX, ["#include <begin_vertex>", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );"]], [ShaderName2.FRAGMENT, []] ]); export class ShaderAssemblerLine extends ShaderAssemblerMaterial { get _template_shader() { const template = ShaderLib2.dashed; return { vertexShader: template.vertexShader, fragmentShader: template.fragmentShader, uniforms: template.uniforms }; } create_material() { const template_shader = this._template_shader; return new ShaderMaterial2({ depthTest: true, alphaTest: 0.5, linewidth: 100, uniforms: UniformsUtils2.clone(template_shader.uniforms), vertexShader: template_shader.vertexShader, fragmentShader: template_shader.fragmentShader }); } custom_assembler_class_by_custom_name() { return ASSEMBLER_MAP; } create_shader_configs() { return [ new ShaderConfig2(ShaderName2.VERTEX, ["position", "uv"], []), new ShaderConfig2(ShaderName2.FRAGMENT, ["color", "alpha"], [ShaderName2.VERTEX]) ]; } static output_input_connection_points() { return [ new GlConnectionPoint("position", GlConnectionPointType.VEC3), new GlConnectionPoint("color", GlConnectionPointType.VEC3), new GlConnectionPoint("alpha", GlConnectionPointType.FLOAT), new GlConnectionPoint("uv", GlConnectionPointType.VEC2) ]; } add_output_inputs(output_child) { output_child.io.inputs.setNamedInputConnectionPoints(ShaderAssemblerLine.output_input_connection_points()); } static create_globals_node_output_connections() { return [ new GlConnectionPoint("position", GlConnectionPointType.VEC3), new GlConnectionPoint("color", GlConnectionPointType.VEC3), new GlConnectionPoint("uv", GlConnectionPointType.VEC2), new GlConnectionPoint("gl_FragCoord", GlConnectionPointType.VEC4), new GlConnectionPoint("resolution", GlConnectionPointType.VEC2), new GlConnectionPoint("time", GlConnectionPointType.FLOAT) ]; } create_globals_node_output_connections() { return ShaderAssemblerLine.create_globals_node_output_connections(); } create_variable_configs() { return [ new VariableConfig2("position", { default: "vec3( position )", prefix: "vec3 transformed = ", suffix: ";vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 )" }), new VariableConfig2("color", { prefix: "diffuseColor.xyz = " }), new VariableConfig2("alpha", { prefix: "diffuseColor.w = " }), new VariableConfig2("uv", { prefix: "vUv = ", if: GlobalsGeometryHandler.IF_RULE.uv }) ]; } lines_to_remove(shader_name) { return LINES_TO_REMOVE_MAP.get(shader_name); } }