]> git.r.bdr.sh - rbdr/lissajous/blame - lib/webgl_utils.js
Add a few comments
[rbdr/lissajous] / lib / webgl_utils.js
CommitLineData
5f6ef99e
RBR
1/**
2 * Initializes the WebGL Shader program
3 */
4export 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 */
26export function initializeBuffers(gl) {
27
362f9116 28 const positionBuffer = gl.createBuffer();
5f6ef99e 29
362f9116 30 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
5f6ef99e 31
362f9116
RBR
32 return {
33 position: positionBuffer
34 };
35}
5f6ef99e
RBR
36
37
32e2eed2
RBR
38/**
39 * Loads and compiles a shader
40 */
5f6ef99e
RBR
41function 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}