1:渲染管线:渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。
2:着色器渲染过程:在渲染过程中,必须存储两种着色器。分别是顶点着色器和片元着色器。
顶点着色器是第一个着色器、片元着色器是最后一个。
着色器渲染过程.jpg 顶点、片元着色器原理示意.jpg
1)顶点着色器:顶点着色器中处理顶点。有几个顶点就绘制几次。
顶点着色业务:1: 矩阵变换位置 2:计算光照公式生成逐顶点颜色 3:生成/变换纹理坐标
总结:它可以同于执行自定义的计算,实施新的变换,照明或者传统的固定功能所不允许的基于顶点的效果。
顶点着色器代码shaderv.vsh
attribute vec4 position;
attribute vec2 textCoordinate;
varying lowp vec2 varyTextCoord;
void main()
{
varyTextCoord = textCoordinate;
gl_Position = position;
}
2)片元着色器:片元着色器处理像素顶点颜色。控制图形绘制的样式
片元着色器业务:1:计算颜色 2: 获取纹理 3: 往像素点中填充颜色值
总结:它可以用于图片/视频/图形中每个像素的颜色填充(比如:给视频添加滤镜,实际上就是将视频中每个图片的像素点颜色填充进行修改。)
片元着色器代码shaderf.fsh
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main()
{
lowp vec4 temp = texture2D(colorMap, varyTextCoord);
gl_FragColor = temp;
}
注:uniform统一顶点/片元着色器使用的不变数据。
3)图元装配
顶点着色器之后下一个阶段就是图元装配。图元(primitive)点、线、三角形等。
图元装配:将顶点数据计算成一个个图元。在这个阶段会执行裁剪、透视分割和viewport变换操作,然后进入光栅化阶段。
4)光栅化
在这个阶段绘制对应的图元(点/线/三角形)光栅化就是将图元转换成一组二维片段的过程。而这些转化的片段将由片元着色器处理,这些二维片段就是屏幕上可绘制的像素。
个人理解光栅化就是将图像像素化。弄成一个像素一个像素的小格格。就像下面这张图片的右半部分感觉一样。
2783057_masaike.jpg
3:逐片段操作
逐片操作.png
1)像素归属测试:确定帧缓存区中位置【Xw,Yw】的像素目前是不是归属于OpenGLES所有。例如,如果一个显示OpenGL ES帧缓存区View 被另一个View所遮蔽。则窗口系统可以确定被遮蔽的像素不属于OpenGL ES 上下文。从而不全显示这些像素。注:像素归属测试是OpenGL ES的一部分,它不由开发者人为控制,而是由OpenGL ES 内部进行。
2)裁剪测试:裁剪测试确定【Xw,Yw】是否位于作为OpenGL ES状态的一部分裁剪矩形范围内。如果该片段位于裁剪区域外,则被抛弃。
3)模板和深度测试:输入片段的模板/深度值进行比较,确定片段是否拒绝测试
4)混合:混合将新生成的片段颜色与保存在帧缓存的位置的颜色值混合起来。
5)抖动:抖动可用于最小化因为使用有限精度在帧缓存区
网友评论