Spaces:
Running
Running
| import { RenderProgram } from "../programs/RenderProgram"; | |
| import { ShaderProgram } from "../programs/ShaderProgram"; | |
| import { ShaderPass } from "./ShaderPass"; | |
| class FadeInPass implements ShaderPass { | |
| initialize: (program: ShaderProgram) => void; | |
| render: () => void; | |
| constructor(speed: number = 1.0) { | |
| let value = 0.0; | |
| let active = false; | |
| let renderProgram: RenderProgram; | |
| let gl: WebGL2RenderingContext; | |
| let u_useDepthFade: WebGLUniformLocation; | |
| let u_depthFade: WebGLUniformLocation; | |
| this.initialize = (program: ShaderProgram) => { | |
| if (!(program instanceof RenderProgram)) { | |
| throw new Error("FadeInPass requires a RenderProgram"); | |
| } | |
| value = program.started ? 1.0 : 0.0; | |
| active = true; | |
| renderProgram = program; | |
| gl = program.renderer.gl; | |
| u_useDepthFade = gl.getUniformLocation(renderProgram.program, "useDepthFade") as WebGLUniformLocation; | |
| gl.uniform1i(u_useDepthFade, 1); | |
| u_depthFade = gl.getUniformLocation(renderProgram.program, "depthFade") as WebGLUniformLocation; | |
| gl.uniform1f(u_depthFade, value); | |
| }; | |
| this.render = () => { | |
| if (!active || renderProgram.renderData?.updating) return; | |
| gl.useProgram(renderProgram.program); | |
| value = Math.min(value + speed * 0.01, 1.0); | |
| if (value >= 1.0) { | |
| active = false; | |
| gl.uniform1i(u_useDepthFade, 0); | |
| } | |
| gl.uniform1f(u_depthFade, value); | |
| }; | |
| } | |
| dispose() {} | |
| } | |
| export { FadeInPass }; | |