export function loadShader(gl: WebGL2RenderingContext, type: GLenum, source: string) { const shader = gl.createShader(type); if (!shader) { throw new Error("WebGL fails to create shader for given type"); } gl.shaderSource(shader, source); gl.compileShader(shader); if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { const compileError = gl.getShaderInfoLog(shader); throw new Error("Error when compiling shader: " + compileError); } return shader; } export function loadProgram(gl: WebGL2RenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader) { const program = gl.createProgram(); if (!program) { throw new Error("WebGL fails to create program"); } gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { const linkError = gl.getProgramInfoLog(program); throw new Error("Error when linking program: " + linkError); } return program; } export function loadBuffer(gl: WebGL2RenderingContext, vertices: Float32Array) { const buffer = gl.createBuffer(); if (!buffer) { throw new Error("WebGL fails to create buffer"); } gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); return buffer; }