|
1 |
| -const vertexShaderSource = ` |
2 |
| - attribute vec2 pos; |
3 |
| - attribute float a; |
4 |
| - varying float v; |
5 |
| - void main() { |
6 |
| - gl_Position = vec4(pos, 0.0, 1.0); |
7 |
| - v = a; |
8 |
| - } |
9 |
| -`; |
10 |
| - |
11 |
| -/** Create fragmentSource */ |
12 |
| -const fragmentShaderSource = (rgb = [1, 0, 0]) => ` |
13 |
| - precision mediump float; |
14 |
| - varying float v; |
15 |
| - void main() { |
16 |
| - gl_FragColor = vec4(${rgb.join()}, v); |
17 |
| - } |
18 |
| -`; |
| 1 | +import vertexShaderSource from "./shaders/vert.glsl?raw"; |
| 2 | +import fragmentShaderSource from "./shaders/frag.glsl?raw"; |
19 | 3 |
|
20 | 4 | /** Setup trails */
|
21 |
| -export const trails = (gl: WebGLRenderingContext, rgb?: [number, number, number]) => { |
| 5 | +export const trails = (gl: WebGLRenderingContext, rgb: [number, number, number] = [1, 0, 0]) => { |
22 | 6 | gl.enable(gl.BLEND);
|
23 | 7 | gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
24 | 8 |
|
@@ -47,7 +31,7 @@ export const trails = (gl: WebGLRenderingContext, rgb?: [number, number, number]
|
47 | 31 | return buffer;
|
48 | 32 | };
|
49 | 33 | const vertexShader = createShader(gl.VERTEX_SHADER, vertexShaderSource);
|
50 |
| - const fragmentShader = createShader(gl.FRAGMENT_SHADER, fragmentShaderSource(rgb)); |
| 34 | + const fragmentShader = createShader(gl.FRAGMENT_SHADER, fragmentShaderSource); |
51 | 35 | const program = gl.createProgram();
|
52 | 36 | if (!program) throw new Error("Failed to create program");
|
53 | 37 | gl.attachShader(program, vertexShader);
|
@@ -76,6 +60,8 @@ export const trails = (gl: WebGLRenderingContext, rgb?: [number, number, number]
|
76 | 60 | const positionBuffer = createBuffer();
|
77 | 61 | const timeBuffer = createBuffer();
|
78 | 62 |
|
| 63 | + gl.uniform3f(gl.getUniformLocation(program, "c"), ...rgb); |
| 64 | + |
79 | 65 | let runningAnim = false;
|
80 | 66 | let positions: number[] = [];
|
81 | 67 | let fades: number[] = [];
|
|
0 commit comments