共计 1144 个字符,预计需要花费 3 分钟才能阅读完成。
「游戏引擎 浅入浅出」是一本开源电子书,PDF/ 随书代码 / 资源下载:https://github.com/ThisisGame…
着色器就是 Shader,Shader 就是一段 GPU 程序源码。
咱们大学就学过的 C 语言是 CPU 程序源码,Shader 和 C 语言有很多相似之处,也要写代码、编译、链接。
通过上面的表格来做对照。
C 语言 | Shader | |
---|---|---|
指标硬件 | CPU | GPU |
编译流程 | 创立我的项目 | 创立 GPU 程序 |
创立编写多个 C 代码文件 | 创立编写 Shader(顶点 Shader 和片段 Shader) | |
把 C 代码发给编译器 | 把 Shader 代码发送到编译器 | |
编译 C 代码 | 编译 Shader 代码 | |
增加到链接列表 | 增加到链接列表 | |
链接 | 链接 |
是不是很类似呢!
渲染一个图像,其实就是在 GPU 上执行了 Shader 程序,而后将顶点坐标、色彩数据作为输出,经由 Shader 进行解决,而后输入像素数据到屏幕上。
和 C 语言不一样的是,C 语言只须要一个 main.c 文件就能够编译胜利。
然而 Shader 是配套呈现的,Vertex Shader(顶点着色器)、Fragment Shader(片段着色器),两者缺一不可。
C 语言 | Shader | |
---|---|---|
指标硬件 | CPU | GPU |
代码文件列表 | main.c | main.vs(Vertex Shader) |
… | main.fs(Fragment Shader) |
着色器的品种
Vertex Shader(顶点着色器)、Fragment Shader(片段着色器 / 像素着色器) 咱们听到最多的就是这两个。
Geometry Shader、Computer Shader 看过然而理论我的项目中没用过。
Tessellation Control Shader、Tessellation Evaluation Shader 这两个就简直没有听过。
这是由工作内容决定的,大家都是从事手机游戏开发。
目前市面上的手机,很大一部分依然是 OpenGL ES3.0 的版本或更低。
Computer Shader 在 OpenGL ES 3.1 版本才开始反对。
Geometry Shader 在 OpenGL ES 3.2 版本才开始反对。
更多材料参考 OpenGL 官网:https://www.khronos.org/opengl/wiki/Category:Shaders
本书也仅介绍 Vertex Shader(顶点着色器)、Fragment Shader(片段着色器)。
在 3. 绘制简略图形
这一章的配套我的项目里,ShaderSource.h
外面就寄存着 Vertex Shader 和 Fragment Shader 的源码。
如下图:
察看这段代码,又发现和 C 语言的相同之处 — 入口都是 main
函数。
C 语言 | Shader | |
---|---|---|
指标硬件 | CPU | GPU |
入口 | void main() | void main() |
以后大节对 Shader 有了一个大略的映像即可,后续章节再具体介绍。