OpenGL 渲染管線流程解析

說到渲染流程,咱們能夠用一張圖,清楚的看到渲染的一系列流程。廢話不說,看圖(圖片取自[Tobesky] 數組

這樣圖很是重要,處理任何圖形渲染,都須要依據這張圖的流程。下面咱們來細細說明這張圖表達的意思。

客戶端/ 服務端

Client(客戶端)/ Server(服務端。在咱們平常開發中手機端稱爲客戶端,後臺稱爲服務端。在這裏是要區分開來的。圖中虛線分爲上下兩部分,上半部分是客戶端,下半部分爲服務端。 客戶端是存儲在CPU存儲器中的,而且在應用程序中執行,或者在主系統內存的驅動程序中執行(咱們寫的代碼,OpenGL 提供的API就是在客戶端執行) 服務端驅動程序會將渲染命令和數組組合起來,發送給服務器執行。(在一臺典型的我的計算機上,服務器就是實際上就是圖形加速卡上的硬件和內存)服務器

着色器

頂點着色器(Vertex Shader)和 Fragment Shader(片元着色器)和圖元裝配(primitive Assembly)code

  • 着色器是使用GLSL編寫的程序
  • 頂點着色器計算頂點數據在交由圖元裝配對每一個片斷進行光柵化,最後片元着色器會輸出咱們將屏幕上看到的最終顏色值。
3種向OpenGL 着色器傳遞渲染數據的方法

1.屬性 2.uniform 值 3.紋理orm

屬性
  • 每個頂點都要做改變的數據元素
  • 屬性值能夠是浮點數、整數、布爾數據
  • 屬性還能夠是:紋理座標、顏色值、關照計算表面法線
  • 屬性只提供給頂點着色器使用,對於片元着色器木有太大意義
  • 屬性能夠經過頂點着色器,間接傳遞給片元着色器
Uniform值
  • uniform變量能夠無數次地使用
  • uniform 變量每一個批次改變一次,而不是每一個頂點改變一次
  • uniform變量最多見的應用是在頂點渲染中設置變換矩陣
  • 與屬性相同點:能夠是浮點值、整數、布爾值
  • 與屬性不一樣點:頂點着色器和片元着色器均可以使用uniform變量。uniform 變量還能夠是標量類型、矢量類型、uniform矩陣
紋理
  • 在頂點着色器、片斷着色器中均可以對紋理數據進行採樣和篩選
  • 典型的應用場景:片元着色器對一個紋理值進行採樣,而後在一個三角形表面應用渲染紋理數據
  • 紋理數據,不單單表如今圖形,不少圖形文件格式都是以無符號字節(每一個顏色通道8位)形式對顏色份量進行存儲的
輸出

在圖表中第四種數據類型是輸出(out);輸出數據是做爲一個階段着色器的輸出定義的,二後續階段的着色器則做爲輸入定義。cdn

  • 輸出數據能夠簡單的從一個階段傳遞到下一個階段,也能夠用不一樣的方式插入。
  • 客戶端的代碼接觸不到,這些內部變量OpenGL開發暫時接觸不到。
相關文章
相關標籤/搜索