![。。](https://img-blog.csdnimg.cn/70f9b2a5aef046eaa1ce8ee8c3341160.png)
function initShader (gl, VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE) {
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(vertexShader, VERTEX_SHADER_SOURCE);
gl.shaderSource(fragmentShader, FRAGMENT_SHADER_SOURCE);
gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
return program;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./initShader.js"></script>
</head>
<body>
<canvas id="canvas" width="300" height="400">
不支持canvas
</canvas>
</body>
<script>
const ctx = document.getElementById('canvas')
const gl = ctx.getContext('webgl')
gl.clearcolor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
const VERTEX_SHADER_SOURCE = `
// 必须要存在 main 函数 (浮点数)
void main() {
// 要绘制的点的坐标
// x, y, z, w齐次坐标(x/w, y/w, z/w)
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
// 点的大小
gl_PointSize = 10.0;
}
`
const FRAGMENT_SHADER_SOURCE = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`
const program = initShader(gl, VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE)
gl.drawArrays(gl.POINTS, 0, 1)
</script>
</html>