You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
1.1 KiB

export enum ShaderType {
VERTEX,
FRAGMENT,
}
export const createShader = (
gl: WebGLRenderingContext,
type: ShaderType,
source: string
): WebGLShader | null => {
const SHADER_TYPE_TO_GL_TYPE = {
[ShaderType.VERTEX]: gl.VERTEX_SHADER,
[ShaderType.FRAGMENT]: gl.FRAGMENT_SHADER,
};
const shader = gl.createShader(SHADER_TYPE_TO_GL_TYPE[type]);
gl.shaderSource(shader, source);
gl.compileShader(shader);
const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
if (!success) {
console.error(gl.getShaderInfoLog(shader));
gl.deleteShader(shader);
return null;
}
return shader;
};
export const createProgram = (
gl: WebGLRenderingContext,
vertexShader: WebGLShader,
fragmentShader: WebGLShader
): WebGLProgram | null => {
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
const success = gl.getProgramParameter(program, gl.LINK_STATUS);
if (!success) {
console.error(gl.getProgramInfoLog(program));
gl.deleteProgram(program);
return null;
}
return program;
};