OpenGL ES 2.0 渲染管線 學習筆記

圖中展現整個OpenGL ES 2.0可編程管線

圖中Vertex Shader和Fragment Shader 是可編程管線;編程

 

Vertex Array/Buffer objectside

頂點數據來源,這時渲染管線的頂點輸入,一般使用 Buffer objects效率更好。測試

Vertex Shaderui

頂點着色器經過矩陣變換位置、計算照明公式來生成逐頂點顏色已經生成或變換紋理座標等基於頂點的操做。編碼

Primitive Assemblyspa

圖元裝配通過着色器處理以後的頂點在圖片裝配階段被裝配爲基本圖元。OpenGL ES 支持三種基本圖元:點,線和三角形,它們是可被 OpenGL ES 渲染的。接着對裝配好的圖元進行裁剪(clip):保留徹底在視錐體中的圖元,丟棄徹底不在視錐體中的圖元,對一半在一半不在的圖元進行裁剪;接着再對在視錐體中的圖元進行剔除處理cull):這個過程可編碼來決定是剔除正面,背面仍是所有剔除。blog

Rasterization圖片

光柵化。在光柵化階段,基本圖元被轉換爲二維的片元(fragment),fragment 表示能夠被渲染到屏幕上的像素,它包含位置,顏色,紋理座標等信息,這些值是由圖元的頂點信息進行插值計算獲得的。這些片元接着被送到片元着色器中處理。這是從頂點數據到可渲染在顯示設備上的像素的質變過程。ip

 

Fragment Shaderci

片元着色器經過可編程的方式實現對每一個片元的操做。在這一階段它接受光柵化處理以後的fragment,color,深度值,模版值做爲輸入,片元着色器能夠拋棄片元,也能夠生成一個或多個顏色值做爲輸出。

逐片斷操做

 

像素歸屬測試:這一步驟由OpenGL ES內部進行,不禁開發人員控制;測試肯定幀緩衝區的位置的像素是否歸屬當前OpenGL ES全部,如不屬於或被另外一個窗口遮擋,從而徹底不顯示這些像素。

裁剪測試:判斷像素是否在由 glScissor 定義的剪裁矩形內,不在該剪裁區域內的像素就會被剪裁掉;

模板和深度測試:測試輸入片斷的模板和深度值上進行,以肯定片斷是否應該被拒絕;深度測試比較下一個片斷與幀緩衝區中的片斷的深度,從而決定哪個像素在前面,哪個像素被遮擋;

混合:是將片斷的顏色和幀緩衝區中已有的顏色值進行混合,並將混合所得的新值寫入幀緩衝;

抖動:可用於最小化由於使用有限精度在幀緩衝區中保存顏色值而產生的僞像。

Framebuffer:這是流水線的最後一個階段,Framebuffer 中存儲這能夠用於渲染到屏幕或紋理中的像素值,也能夠從Framebuffer 中讀回像素值,但不能讀取其餘值(如深度值,模版值等)。

 

參考連接

OpenGL ES 2.0 Programming Guide

相關文章
相關標籤/搜索