OpenGL 渲染流程图解析
OpenGL渲染架构图
如果,我们想要渲染一个三角形,具体的操作流程是什么呢?如下图:
OpenGL 渲染流程分为两个端。一个叫客户端(Client)一个叫服务端(Server)。
客户端(Client):指的是CPU上存储的一些代码。比如说OpenGL API、C/C++ 的一些代码
服务端(Server): 服务端为GPU硬件部分,主要由Vertex Shader、Primitive Assembly、Fragment Shader组成。
渲染过程中,客户端会不断的将数据块和命令块组合在一起并送入缓冲区,然后缓冲区会发送到服务端执行
OpenGL 数据传递的三种方式
attribute(属性)
就是对⼀个顶点都要作出改变的数据元素。实际上,顶点位置本身就是一个属性。属性可以是浮点类型、整型、布尔类型等。
1、属性总是以思维向量的形式进行内部存储
2、属性包括纹理坐标、颜色值、光照计算的法线、纹理坐标等
3、属性会从客户端内存中复制存储在图形硬件中的一个缓冲区上,供顶点着色器使用。
4、属性不能直接作用于片元着色器。但可以通过顶点着色器进行图元装配后传递给片元着色器
Uniforms(统一值)
Uniform 是从CPU向GPU的着色器发送数据的一种方式
1、Uniform 是全局的。全局意味着uniform变量在每个着色器着色器程序对象中都是独一无二的。
2、uniform 在本质上像属性一样,可以是浮点型、整数或布尔型。不同的是,uniform 可以被着色器程序的任意着色器在任意阶段访问。
3、uniform会一直保存它们的数据,直到它们呗重置或更新。
4、uniform 变量在每个批次改变一次,而不是每个顶点改变一次
Texture Data(纹理数据)
任何大型浮点数据块(例消耗资源很大的函数的大型查询表)都可以通过纹理数据传递给着色器(纹理数据 将在以后文章详细讲解)