/** * Initializes the WebGL Shader program */ export function initializeShaderProgram(gl, vertexShaderSource, fragmentShaderSource) { const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertexShaderSource); const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource); const shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertexShader); gl.attachShader(shaderProgram, fragmentShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { console.error(`Unable to initialize shader program: ${gl.getProgramInfoLog(shaderProgram)}`); return null; } return shaderProgram; } /** * Initializes the buffers */ export function initializeBuffers(gl) { const positionBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); return { position: positionBuffer }; } /** * Loads and compiles a shader */ function loadShader(gl, type, source) { const shader = gl.createShader(type); gl.shaderSource(shader, source); gl.compileShader(shader); if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { console.error(`Unable to compile shader: ${gl.getShaderInfoLog(shader)}`); gl.deleteShader(shader); return null; } return shader; }