/**
 * Вспомогательные функции для работы с WebGL 2.0.
 * Используются в matrix_worker.js при сборке трёх шейдерных программ
 * (matrix/glitch/post-process, см. initWebGL()) — тонкая обёртка над
 * стандартным boilerplate компиляции/линковки с логированием ошибок,
 * без которой WebGL молча возвращает null вместо программы.
 */

export function compileShader(gl, type, source) {
  const shader = gl.createShader(type);
  gl.shaderSource(shader, source);
  gl.compileShader(shader);
  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
    console.error("Shader Compile Error:", gl.getShaderInfoLog(shader));
    gl.deleteShader(shader);
    return null;
  }
  return shader;
}

export function createProgram(gl, vsSource, fsSource) {
  const vs = compileShader(gl, gl.VERTEX_SHADER, vsSource);
  const fs = compileShader(gl, gl.FRAGMENT_SHADER, fsSource);
  if (!vs || !fs) return null;

  const prog = gl.createProgram();
  gl.attachShader(prog, vs);
  gl.attachShader(prog, fs);
  gl.linkProgram(prog);

  if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {
    console.error("Program Link Error:", gl.getProgramInfoLog(prog));
    return null;
  }
  return prog;
}
