/** * Вспомогательные функции для работы с WebGL 2.0 */ 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; }