理解OpenGL 渲染流程圖

OpenGL渲染使用客戶端client<——>服務端server的形式實現,客戶端是我們編寫的代碼,服務端是計算機圖形硬件廠商所提供的OpenGL實現。在移動端OpenGL ES框架相當於Client去發起圖像處理請求,GPU相當於Server負責處理圖形操作。


  1. client
    application中的代碼和OpenGL API是存儲在CPU中的,屬於client,由應用程序執行,在主系統內存的驅動程序中執行,驅動程序將數據傳遞給server。

  2. server
    OpenGL中直接操作GPU繪製圖形的部分是server,client與server是獨立異步執行的,他們分屬於不同的軟件塊或硬件塊。在server端,頂點着色器處理client傳遞過來的頂點數據,然後將圖形進行光柵化,再由片元着色器填充顏色,完成圖形的渲染。

  3. 通道:Attributes、Uniforms、Texture Data
    OpenGL API向GPU傳遞數據有三個通道,分別是Attributes屬性、Uniforms和Texture Data紋理數據

  • Attributes屬性:傳入的數據包括頂點座標、紋理座標、顏色值、光照法線等不斷改變的數據
    屬性總是以4維向量的形式進行內部存儲,頂點座標是(x,y,z),佔3個分量;屬性會從本地client內存中複製存儲在圖形硬件中的一個緩衝區上,這些屬性只提供給頂點着色器使用。
  • Uniforms:Uniforms變量傳遞的是統一的數據,如旋轉矩陣、變換矩陣等,最常見的應用是在頂點渲染中設置變換矩陣,頂點着色器和片元着色器都可以使用uniforms變量。uniforms變量還可以是標量類型、矢量類型、uniform矩陣。
  • Texture Data紋理數據:對圖片的處理,渲染圖形時的線框填充、顏色填充、紋理填充、像素填充等,在頂點着色器、片段着色器中都可以對紋理數據進行採樣和篩選。
    典型的應用場景:片段着色器對一個紋理值進行採樣,然後在一個三角形表面應用渲染紋理數據。
  1. 流程
  • ins輸入:將數據拷貝到着色器中
  • Vertex Shader頂點着色器:處理傳入的頂點數據,包括頂點位置、頂點顏色、光照等,每個頂點都會執行一次
  • Position Vertex頂點位置
  • Primitive Assembly圖元裝配:將頂點鏈接起來組成點、線、面(三角形)三種不同的圖元,然後對超出屏幕的部分進行裁剪,這是對圖形進行裁剪、透視分割、視口變換、光柵化等操作
  • Fragment Shader片元着色器:計算每個像素點的顏色並填充
  • outs輸出:將數據從一個階段傳遞到下一個階段
  • Render渲染:渲染圖形

參考鏈接:
【OpenGL】OpenGL渲染流程詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章