webgl/public/js/shader.js

50 lines
1.6 KiB
JavaScript
Raw Normal View History

2023-01-18 14:30:41 +00:00
const Shader = {}
Shader.load = async (vertexPath, fragmentPath) => {
let vertexCode = await File.read(vertexPath)
if(!vertexCode) {
console.log("Invalid shader path:", vertexPath)
return
}
let fragmentCode = await File.read(fragmentPath)
if(!fragmentCode) {
console.log("Invalid shader path:", fragmentPath)
return
}
var vertexShader = gl.createShader(gl.VERTEX_SHADER)
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
gl.shaderSource(vertexShader, vertexCode)
gl.shaderSource(fragmentShader, fragmentCode)
gl.compileShader(vertexShader)
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
console.error('Failed to compile ' + vertexPath + '!', gl.getShaderInfoLog(vertexShader))
return
}
gl.compileShader(fragmentShader)
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
console.error('Failed to compile ' + fragmentPath + '!', gl.getShaderInfoLog(fragmentShader))
return
}
var program = gl.createProgram()
gl.attachShader(program, vertexShader)
gl.attachShader(program, fragmentShader)
gl.linkProgram(program)
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
console.error("Failed to link shader program!", gl.getProgramInfoLog(program));
return
}
gl.validateProgram(program);
if (!gl.getProgramParameter(program, gl.VALIDATE_STATUS)) {
console.error("Failed to validate shader program!", gl.getProgramInfoLog(program));
return
}
return program
}