|
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