OpenGL的作用就是图形渲染,所以了解它的渲染架构必不可少!我们根据下面这张图分析一下它的具体渲染流程,这个非常重要是我们必须要熟悉的过程!
由上图可以看出,整个框架分为两部分,客户端和服务端
这里的Client和Server指的不是手机端和服务器,客户端可以理解为CPU.而对应的Server指的是GPU
Client
指的是在CPU上存储的一些代码,例如OpenGL的API和一些C/C++代码
Server
1.Attributes 指的是属性,该属性由图可以看出只能有Cpu传递给VertexShader也就是顶点着色器,而不能直接传递给Fragment Shader(片元着色器),Attributes一般传递什么数据呢?这个我们可以通过数据的变化频率来区分,如果说该数据需要不断的发生改变,则可以通过AAttributes来传递,例如:顶点数据/颜色/位移/文理坐标/光照法线等.
2.uniforms 数据可以直接传递给顶点着色器也可以直接传递给片元着色器,uniforms一般传递的数据一般是比较具有统一性的,比如让一个图形发生旋转(顶点x旋转矩阵就可以让图形发生旋转),这里的旋转矩阵就可以通过uniforms传递,你可以理解它为一个数据通道.在视频处理上我们一般用的YUV的颜色空间,而YUV是不能直接被视频渲染使用的,它需要被转化为RGB才可以被现实,而转换颜色的时候需要用到一个转换矩阵,这个矩阵就是用uniforms传递的.
3.Texture Data 传递的是纹理数据. 例如做滤功能,滤镜是对图片本身做处理,也就是对文理做处理(纹理其实就是图片),滤镜其实是改变纹理在读取的时候的颜色值,而我们可以改变它的颜色值来达到滤镜的效果,这里需要改变文理所需要的数据就是Texture Data传递的,别的还有像素填充/颜色填充等也都可以使用.
顶点着色器的Outs(输出)我们目前是无法干预的,应为OpenGL并没有给出相应的接口