OpenGL 的渲染架构图
先对上图中的几个有迷惑性的名词做一下解释:
客户端:指的是运行在 CPU 上的程序
服务端:指的是运行在 GPU 上的程序
从上图可以看到,服务端可以从客户端获取三种类的数据:Attribute、Uniforms和 Tuxture。下面就这三种数据做一个简要的说明。
Attribute
Attribute 类型的数据只能在顶底着色器使用,用来存储一些顶点数据,如:顶点坐标、法线、纹理坐标、顶点颜色等。
Uniforms
Uniforms 是一种GLSL变量。它是全局的(顶点着色器和片元着色器都能够访问Uniform变量),并且只需要被设定一次。Uniforms 的值可以被顶点着色器和片元着色器使用,但是它不能被任何一个着色器修改。一般用来存储转换矩阵、光照参数或者颜色等信息。
Tuxture
Tuxture 类型的数据可以被顶点着色器和片元着色器使用。用来存储纹理数据。
也可以从着色器的角度来解读:
顶点着色器可以接收接收Attribute、Uniforms、Tuxture三个类型的值。
片元着色器可以接收Uniforms、Tuxture两个个类型的值。