
主要分为两个模块, Client和Server.
- Client指的是应用层代码(比如iOS)和OpenGL的API。是在CPU中。
- Server指的是OpenGL底层API,可以直接驱动GPU渲染的,在GPU中。
数据传递
那么客户端的代码怎么把数据传入到顶点着色器、片元着色器的呢?
从图上我们可以看出, 客户端和服务器数据传输有三个通道:
- Attributes、
- Uniforms、
- Texture Data。
通道名 | 参数类型 | 可传入的着色器 |
---|---|---|
Attributes | 顶点坐标(x、y、z)、光照坐标、投影矩阵、模型矩阵、纹理坐标 | 顶点着色器 |
Uniform | 统一批次的数据,不经常发生变动的数据 | 顶点着色器、片元着色器 |
Texture Data |
纹理数据 | 顶点着色器、片元着色器 |
-
Attributes
Attributes通道只能将数据直接传递到顶点着色器,不能直接传递到片元着色器,但是可以通过顶点着色器间接传递给片元着色器。
通过Attributes传递的通常是经常发生变化的数据,例如颜色、顶点等。
Attribute主要传递这些参数:颜色数据、顶点坐标、纹理坐标、光照法线等。 -
Uniforms
用来传输统一批次的数据,不经常改动的数据,比如变换矩阵、颜色、时间戳等。 -
Texture Data
用来传输纹理数据,可以传入顶点着色器、片元着色器。纹理的处理的逻辑主要是在片元着色器中进行的,虽然可以传入顶点着色器,但是顶点着色器不处理纹理的数据,所以没什么意义。
网友评论