42_ft_transcendence/frontend/static/js/3D/shaders.js
2024-03-31 10:59:39 +02:00

62 lines
1.3 KiB
JavaScript

const vertex_shader_source = `
attribute vec4 aPos;
attribute vec4 aColor;
uniform mat4 uModView;
uniform mat4 uProj;
varying lowp vec4 vColor;
void main()
{
gl_Position = uProj * uModView * aPos;
vColor = aColor;
}
`;
const fragment_shader_source = `
varying lowp vec4 vColor;
void main()
{
gl_FragColor = vColor;
}
`;
function initShaderProgram(gl)
{
const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertex_shader_source);
const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragment_shader_source);
const shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
if(!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS))
{
alert(`Unable to initialize the shader program: ${gl.getProgramInfoLog(shaderProgram)}`);
return null;
}
return shaderProgram;
}
function loadShader(gl, type, source)
{
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);
if(!gl.getShaderParameter(shader, gl.COMPILE_STATUS))
{
alert(`An error occurred compiling the shaders: ${gl.getShaderInfoLog(shader)}`);
gl.deleteShader(shader);
return null;
}
return shader;
}
export { initShaderProgram };