1、什么是渲染管线?
渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。
2、管线的大致工作流程
顶点着色器中处理所有定点的位置、颜色,传递给下一阶段组装成精灵、线条和三角形,并根据视截体的可视范围来进行裁剪(抛弃不可见的元素),最后由片段着色器进行光栅化处理,光栅化的片段数量会远远高于顶点的数量。
3、着色器的数据类型
⑴:顶点着色器
attribute //用户自定义的,包含每个定点的属性数据,如定点位置、定点颜色等
uniform //用户自定义的,服务于所有定点的一个统一的值,如变换矩阵、光源位置等
varying //用户自定义的,用于向片段着色器输出数据
gl_Position //用户自定义的,用户接受顶点着色器的运算输出结果
attribute float size; attribute vec3 customColor; attribute float time; uniform float globalTime; varying vec3 vColor; varying float fAlpha; void main() { vColor = customColor; vec3 pos = position; float animTime = min(1.4, max(1.0, globalTime - time)); vec3 animated = vec3( pos.x * animTime, pos.y * animTime, pos.z * animTime ); vec4 mvPosition = modelViewMatrix * vec4( animated, 1.0 ); fAlpha = 1.0; + gl_PointSize = size * ( 300.0 / length( mvPosition.xyz ) ); gl_Position = projectionMatrix * mvPosition; }
⑵:片段着色器
varying//用户自定义的,用于接收由片段着色器发送的数据
uniform//用户自定义的,服务于所有片段的一个恒定的值,如颜色等
sampler//用户自定义的,用户纹理操作的一种特殊类型
gl_FragColor//系统内置变量,用于接收片段着色器的输出结果
precision mediump float;//精度限定符,声明于片段着色器的起始位置
precision mediump float; // lowp, mediump, highp uniform vec3 color; uniform sampler2D texture; varying vec3 vColor; varying float fAlpha; void main() { float depth = gl_FragCoord.z / gl_FragCoord.w; float near = 100.0; float far = 400.0; float fog = 0.0 + smoothstep( near, far, depth ); vec4 outColor = texture2D( texture, gl_PointCoord ); if ( outColor.a < 0.24 ) discard; gl_FragColor = vec4( color * vColor, fAlpha ); gl_FragColor = gl_FragColor * outColor; gl_FragColor = mix( gl_FragColor, vec4( vec3(0.0,0.0,0.0), gl_FragColor.w ), fog ); }