Spaces:
Running
Running
File size: 1,671 Bytes
352fb85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
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 };
|