var
canvas = document.getElementById(
"canvas"
);
var
gl = canvas.getContext(
"webgl2"
);
if
(!gl) {
alert(
"Your browser does not support WebGL"
);
}
gl.clearColor(0, 0.6, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
const shaders = {
vs: `
#version 300 es
in
vec2 vertPosition;
in
vec3 vertColor;
out vec3 fragColor;
void main() {
fragColor = vertColor;
gl_Position = vec4(vertPosition, 0, 1);
}`,
fs: `
#version 300 es
precision mediump float;
in
vec3 fragColor;
out vec4 outColor;
void main() {
outColor = vec4(fragColor, 1);
}`
};
var
vertexShader = gl.createShader(gl.VERTEX_SHADER);
var
fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(vertexShader, shaders.vs);
gl.shaderSource(fragmentShader, shaders.fs);
gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);
var
program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
const vertexAttributes = {
position: {
numberOfComponents: 2,
data:
new
Float32Array([0.0,
0.5, -0.5, -0.5, 0.5, -0.5])
},
color: {
numberOfComponents: 3,
data:
new
Float32Array([1.0, 0.0,
0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0])
}
};
var
vertexBufferObjectPosition = gl.createBuffer();
var
vertexBufferObjectColor = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBufferObjectPosition);
gl.bufferData(gl.ARRAY_BUFFER,
vertexAttributes.position.data, gl.STATIC_DRAW);
var
positionAttribLocation =
gl.getAttribLocation(program,
'vertPosition'
);
gl.vertexAttribPointer(positionAttribLocation,
vertexAttributes.position.numberOfComponents,
gl.FLOAT, gl.FALSE, 0, 0);
gl.enableVertexAttribArray(positionAttribLocation);
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBufferObjectColor);
gl.bufferData(gl.ARRAY_BUFFER,
vertexAttributes.color.data, gl.STATIC_DRAW);
var
colorAttribLocation =
gl.getAttribLocation(program,
'vertColor'
);
gl.vertexAttribPointer(colorAttribLocation,
vertexAttributes.color.numberOfComponents,
gl.FLOAT, gl.FALSE, 0, 0);
gl.enableVertexAttribArray(colorAttribLocation);
gl.useProgram(program);
gl.drawArrays(gl.TRIANGLES, 0, 3);