50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
|
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
|
||
|
}
|