webgl-letters/src/utils/shader.ts
2024-09-21 13:25:29 +07:00

48 lines
1.3 KiB
TypeScript

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;
}