在学习webgl的途中, 我们先研究一下一直只用的辅助函数 initShader();
虽然直接使用initShaders()函数也能够编写出相当不错的WebGL程序, 但我们也需要知其所以然, 掌握这部分内容不是必须的, 最好是先对 WebGL 先有一部分了解
initShaders()
函数的作用是,编译 GLSL ES
代码,创建和初始化着色器供WebGL使用。具体分为以下7个步骤:
- 创建着色器对象
gl.createShader()
- 向着色器对象中填充着色器程序源代码
gl.shaderSource()
- 编译着色器
gl.compileShader()
- 创建程序对象
gl.createProgram()
- 为程序对象分配着色器
gl.attachShader()
- 链接程序对象
gl.linkProgram()
- 使用程序对象
gl.useProgram()
在这里出现了两种对象:着色器对象 (shader object) 和程序对象 (program object)。
- 着色器对象: 着色器对象管理一个顶点着色器或一个片元着色器。每一个着色器都有一个着色器对象。
- 程序对象: 程序对象是管理着色器对象的容器。WebGL中,一个程序对象必须包含一个顶点着色器和一个片元着色器。
WebGL 程序包括运行在浏览器重的 JavaScript 和运行在 WebGL 系统的着色器程序这两个部分
具体用法在链接里: https://github.com/bajiu/blog_code/blob/master/webGL/utils/InitShaders.js