Open GL ES 3.0渲染流程圖
1.頂點著色器
頂點著色器 輸入
Shader program(著色器程序):頂點著色器程序源代碼或可執行程序,描述將在頂點上執行的操作
Vertex shader inputs / attributes (頂點著色器輸入/屬性):用于裝載每個頂點數據的數組
Uniforms(統一變量):頂點/片元著色器使用的數據(這個值一般是不變的)
Samplers(采樣器):代表頂點著色器使用紋理的特殊統一變量類型
頂點著色器 業務
1.?矩陣變換位置
2.計算光照公式生成逐頂點顏色
3.?成/變換紋理坐標
總結:?它可以?于執行自定義計算,實施新的變換,照明或者傳統的固定功能所不允許的基于頂點的效果
頂點著色器 示例代碼
attribute vec4 position; ? ?//頂點數據
attribute vec2 textCoordinate; ? ? //紋理坐標
uniform mat4 rotateMatrix; ? ? //矩陣
varying lowp vec2 varyTextCoord; ? ? //傳到片元著色器的值
void main()
{
????varyTextCoord = textCoordinate;?
????vec4 vPos = position;
????vPos = vPos * rotateMatrix;?
????gl_Position = vPos; ? ?//結果賦值,不然不生效
}
2.圖元裝配
頂點著色器之后,下一個階段就是圖元裝配
圖元(Primitive):?點,線,三角形等.
圖元裝配:?將頂點數據計算成?個圖元.在這個階段會執行裁剪、透視分割和Viewport變換操作。
圖元類型和頂點索確定將被渲染的單獨圖元。對于每個單獨圖元及其對應的頂點,圖元裝配階段執行的操作包括:將頂點著?器的輸出值執?裁剪、透視分割、視?變換后進?光柵化階段。
3.光柵化
在這個階段繪制對應的圖元(點/線/三?角形).?
光柵化就是將圖元轉化成一組二維?片段的過程.?這些轉化的片段將由?元著色器處理.這些二維片段就是屏幕上可繪制的像素
4.片元著色器
片元著色器 輸入
Shader program(著色器程序):—片段著色器程序源碼或描述將在該片段上可以執行的操作
Input variables (輸入變量):光柵化階段使用插補技術為每個?段生成的頂點著色器輸出?
Uniforms(統一變量):頂點/片元著色器使用的數據(這個值一般是不變的)?
Samplers(采樣器):代表片元著?器使用紋理的特殊統一變量類型
片元著色器 業務
1.?計算顏色
2.?獲取紋理值
3.?往像素點中填充顏色值(紋理值/顏色值);
總結:?它可以?于圖片/視頻/圖形中每個像素的顏?填充(?如給視頻添加濾鏡,實際上就是將視中每個圖片的像素點顏色填充進行修改.)
片元著色器 示例代碼
varying lowp vec2 varyTextCoord; ? ? //用于接收頂點著色器傳來的數據,必須和頂點著色器代碼一致
uniform sampler2D colorMap; ? ? //紋理
void main()
{
????gl_FragColor = texture2D(colorMap, varyTextCoord); //把紋理中對應紋理坐標的那個點填入像素點中
}