OpenGL渲染架构解析
请看图:
以上是OpenGL渲染架构流程图,接下来让我们来分析一下这张图的每一步。
Client 和 Server
此图中的Client和Server与平时大家在开发中遇到的前端和后台是不一样的。
- Client:是存储在CPU存储器中的代码,并在应用程序或者在内存的驱动程序中执行。
- Server:通过GPU不断的将数据块和命令组合起来送入顶点着色器和片元着色器。
Shader(着色器)
着色器的介绍在此篇文章中就不介绍,详情请查看博客:https://blog.csdn.net/weixin_40918107/article/details/106870209
先看一下着色器的渲染流程,就能更好的理解。
着色器获取数据数据的方式(Texture Data,Uniforms,Attributes)
Texture Data、Uniforms和Attributes数据都会通过通道传入顶点着色器,但是顶点着色器并不会处理关于纹理的计算,纹理数据更多的是片元着色器来处理。
Texture Data、Uniforms和图元装配的输出值通过通道传入片元着色器。
Attributes(属性)
- 属性就是一个对每个顶点都要做改变的数据元素
- 属性常为需要改变的数据,比如:顶点数据、颜色值、纹理坐标、光照计算法线等等。
- 属性只能顶点着色器中修饰。如果某个颜色值片元着色器中需要使用,那么就需要通过顶点着色器间接传入片元着色器。
Uniforms
- Uniforms值是比较统一的,不需要发生太多改变;
- uniforms传入的值可以是浮点数、整数、布尔数据和矩阵;
- 可以直接传递到顶点着色器和片元着色器;
- 与属性相同点:可以是浮点值、整数、布尔值
- 与属性不同点:顶点着色器和片元着色器都可以使用uniform变量。uniform 变量还可以是标量类型、矢量类型、uniform矩阵。
Texture Data
- 顶点着色器和片段着色器都可以对纹理值进行采样和处理,比如使用场景:滤镜,滤镜实际上是对图片本身做处理的,它是在读取的时候,去改变纹理的颜色值
- 纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的。