UNPKG

@polygonjs/polygonjs

Version:

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

90 lines (89 loc) 3.27 kB
"use strict"; import { Vector2 } from "three"; export var UniformName = /* @__PURE__ */ ((UniformName2) => { UniformName2["TIME"] = "time"; UniformName2["RESOLUTION"] = "resolution"; UniformName2["SPOTLIGHTS_RAYMARCHING"] = "spotLightsRayMarching"; UniformName2["DIRECTIONALLIGHTS_RAYMARCHING"] = "directionalLightsRayMarching"; UniformName2["POINTLIGHTS_RAYMARCHING"] = "pointLightsRayMarching"; return UniformName2; })(UniformName || {}); const GLOBAL_UNIFORMS = { // [UniformName.TIME]: {value: 0}, ["resolution" /* RESOLUTION */]: { value: new Vector2(1e3, 1e3) } }; export class UniformsController { constructor(scene) { this.scene = scene; } // private _resolution: Vector2 = new Vector2(1, 1); // private _resolutionDependentUniformsMap: Map<string, IUniformsWithResolutionOnly> = new Map(); // private _resolutionDependentUniforms: IUniformsWithResolutionOnly[] = []; // add uniforms from assemblers addUniforms(uniforms, options) { const { paramConfigs, additionalTextureUniforms, timeDependent, resolutionDependent, raymarchingLightsWorldCoordsDependent } = options; for (const paramConfig of paramConfigs) { uniforms[paramConfig.uniformName()] = paramConfig.uniform(); } const additionalUniformNames = Object.keys(additionalTextureUniforms); for (const uniformName of additionalUniformNames) { const uniformValue = additionalTextureUniforms[uniformName]; uniforms[uniformName] = uniformValue; } if (timeDependent) { this.addTimeUniform(uniforms); } else { this.removeTimeUniform(uniforms); } if (resolutionDependent) { this.addResolutionUniforms(uniforms); } else { this.removeResolutionUniform(uniforms); } if (raymarchingLightsWorldCoordsDependent) { this.addRaymarchingUniforms(uniforms); } else { this.removeRaymarchingUniform(uniforms); } } addTimeUniform(uniforms) { uniforms["time" /* TIME */] = this.scene.timeController.timeUniform(); } removeTimeUniform(uniforms) { delete uniforms["time" /* TIME */]; } timeUniformValue() { return this.scene.timeController.timeUniform().value; } // public updateTime() { // GLOBAL_UNIFORMS[UniformName.TIME].value = this.scene.time(); // } // resolution addResolutionUniforms(uniforms) { uniforms["resolution" /* RESOLUTION */] = GLOBAL_UNIFORMS["resolution" /* RESOLUTION */]; } removeResolutionUniform(uniforms) { delete uniforms["resolution" /* RESOLUTION */]; } updateResolution(resolution, pixelRatio) { GLOBAL_UNIFORMS["resolution" /* RESOLUTION */].value.copy(resolution).multiplyScalar(pixelRatio); } // raymarching addRaymarchingUniforms(uniforms) { this.scene.sceneTraverser.addLightsRayMarchingUniform(uniforms); } removeRaymarchingUniform(uniforms) { this.scene.sceneTraverser.removeLightsRayMarchingUniform(uniforms); } // updateResolutionDependentUniforms(uniforms: IUniformsWithResolutionOnly) { // const resolutionUniform = uniforms[UniformName.RESOLUTION]; // resolutionUniform.value.x = this._resolution.x; // * window.devicePixelRatio; // resolutionUniform.value.y = this._resolution.y; // * window.devicePixelRatio; // } }