什么是着色器
1、glsl:在GPU上运行的程序,是可编程的,OpenGL Shading Language,主要分为两个部分顶点着色器以及片源着色器;
2、attribute:用于各个顶点各不相同的量,如顶点颜色、顶点坐标。只能在顶点着色器中使用;
3、uniform:用于对3D物体中所有顶点都相同的量,例如光源位置,统一变换矩阵。不能被修改,由外部传递进来;
4、varying:表示易变量,用于顶点着色器传递到片元着色器的量;
5、gl_Position:属常用内建变量,顶点的位置,在顶点着色器中使用,四维向量;
6、gl_FragColor:属常用内建变量,顶点颜色,在片元着色器中使用,四维向量;
7、texture2D:属常用内建变量,获取纹理某个位置的纹理,第一个参数是纹理句柄,第二个是纹理位置;
编译着色器
1、获取着色器路径,着色器就是一个program,需要在bundle里面加载资源;
2、创建可执行程序,获取着色器内容,加入、编译、附着、链接、执行;
着色器工作流程
1、基于顶点的操作
顶点着色器处理顶点,每个顶点由空间矩阵变换,有效地将其3D坐标系统改变为新的坐标系统。就像摄影相机将3D风景转换成2D照片一样
2、图元装配
以指定的顺序连接顶点构建基本体状态
3、图元处理
屏幕外面的任何图元都被剪辑并在下一阶段忽略
4、栅格化
测试像素是否在图元的边内。如果他们不是,他们被丢弃。如果他们在图元内,他们被带到下一个阶段。通过测试的像素集被称为片段
5、片面处理
将颜色或纹理应用到片段内的像素
6、基于片段的操作
片段被提交到几个测试,如:透明度(Alpha)测试,模板(Stencil)测试,深度(Depth)测试等
结果
像素被保存在帧缓存(Framebuffer)中,更具体地,保存在Default-Framebuffer中。这些是你在移动设备屏幕上看到的像素