const vertex_shader_source = ` attribute vec4 aPos; attribute vec4 aColor; uniform mat4 uModView; uniform mat4 uProj; varying lowp vec4 vColor; void main() { gl_Position = uProj * uModView * aPos; vColor = aColor; } `; const fragment_shader_source = ` varying lowp vec4 vColor; void main() { gl_FragColor = vColor; } `; function initShaderProgram(gl) { const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertex_shader_source); const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragment_shader_source); const shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertexShader); gl.attachShader(shaderProgram, fragmentShader); gl.linkProgram(shaderProgram); if(!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { alert(`Unable to initialize the shader program: ${gl.getProgramInfoLog(shaderProgram)}`); return null; } return shaderProgram; } function loadShader(gl, type, source) { const shader = gl.createShader(type); gl.shaderSource(shader, source); gl.compileShader(shader); if(!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { alert(`An error occurred compiling the shaders: ${gl.getShaderInfoLog(shader)}`); gl.deleteShader(shader); return null; } return shader; } export { initShaderProgram };