]> git.r.bdr.sh - rbdr/lissajous/blob - lib/webgl_utils.js
Add a few comments
[rbdr/lissajous] / lib / webgl_utils.js
1 /**
2 * Initializes the WebGL Shader program
3 */
4 export function initializeShaderProgram(gl, vertexShaderSource, fragmentShaderSource) {
5
6 const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
7 const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);
8
9 const shaderProgram = gl.createProgram();
10 gl.attachShader(shaderProgram, vertexShader);
11 gl.attachShader(shaderProgram, fragmentShader);
12
13 gl.linkProgram(shaderProgram);
14
15 if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
16 console.error(`Unable to initialize shader program: ${gl.getProgramInfoLog(shaderProgram)}`);
17 return null;
18 }
19
20 return shaderProgram;
21 }
22
23 /**
24 * Initializes the buffers
25 */
26 export function initializeBuffers(gl) {
27
28 const positionBuffer = gl.createBuffer();
29
30 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
31
32 return {
33 position: positionBuffer
34 };
35 }
36
37
38 /**
39 * Loads and compiles a shader
40 */
41 function loadShader(gl, type, source) {
42
43 const shader = gl.createShader(type);
44 gl.shaderSource(shader, source);
45 gl.compileShader(shader);
46
47 if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
48 console.error(`Unable to compile shader: ${gl.getShaderInfoLog(shader)}`);
49 gl.deleteShader(shader);
50 return null;
51 }
52
53 return shader;
54 }