4.1 着色器是什么

着色器就是Shader,Shader就是一段GPU程序源码。

我们大学就学过的C语言是CPU程序源码,Shader和C 语言有很多相似之处,也要写代码、编译、链接。

通过下面的表格来做对照。

C语言Shader
目标硬件CPUGPU
编译流程创建项目创建GPU程序
创建多个代码文件创建Shader对象(顶点Shader和片段Shader)
编写多个代码上传Shader源码到Shader对象
编译代码编译Shader
添加到链接列表添加到链接列表
链接链接

是不是很相似呢!

渲染一个图像,其实就是在GPU上执行了Shader代码,然后将顶点坐标、颜色数据作为输入,经由Shader进行处理,然后输出像素数据到屏幕上。

和C语言不一样的是,C语言只需要一个main.c 文件就可以编译成功。 但是Shader是配套出现的, Vertex Shader(顶点着色器)、Fragment Shader(片段着色器),两者缺一不可。

C语言Shader
目标硬件CPUGPU
代码文件列表main.cmain.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
目标硬件CPUGPU
入口void main()void main()

当前小节对Shader有了一个大概的映像即可,后续章节再详细介绍。

Copyright © captainchen all right reserved,powered by GitbookFile Modify: 2021-04-02 11:26:42

results matching ""

    No results matching ""

    results matching ""

      No results matching ""