最近準備系統的整理和學習下shader編程 查了下網上的一些資料 說一下本身對shader工做原理的理解前端
簡單說來shader 就是能夠運行在gpu上可編程的圖形程序編程
shader 分爲頂點着色器和片斷着色器數組
關於頂點着色器和片斷着色器的含義學習
頂點着色器和片斷着色器被分離爲可編程的編程的單元排序
頂點和片斷着色器都擁有強大的並行計算能力,擅長於矩陣計算(不高於4階),片斷着色器能夠高速查詢紋理數據信息,目前頂點着色器還不行。字符串
從圖中能夠知道GPU渲染管線原理
頂點着色器控制頂點座標轉換過程;片斷着色器控制像素顏色計算過程。簡單明瞭就是頂點着色器負責處理座標信息,片斷着色器負責處理像素顏色數據計算。vert和frag就是這樣分工的;前者的輸出是後者的輸入。渲染
那麼這些着色器都是依賴圖形硬件的 因此圖形硬件的發展和shader 的發展密切相關硬件
咱們再來看看圖形硬件編程的輸出和輸入sso
可編程圖形硬件的輸入/輸出。輸入寄存器存放輸入的圖元信息;輸出寄存器存放處理後的圖元信息;紋理buffer存放紋理數據,目前大多數的可編程圖形硬件只支持片斷處理器處理紋理;從外部宿主程序輸入的常量放在常量寄存器中;臨時寄存器存放着色程序在執行過程當中產生的臨時數據。
咱們再來看看頂點着色器和片斷着色器的數據處理流程
Vertex shader program(頂點着色程序)和Fragment shader program(片段着色程序)分別被Programmable Vertex Processor(可編程頂點處理器)和 Programmable Fragment Processo(可編程片段處理器)所執行。
頂點着色程序從GPU前端模塊(寄存器)中提取圖元信息(頂點位置、法向量、紋理座標等),並完成頂點座標空間轉換、法向量空間轉換、光照計算等操做,最後將計算好的數據傳送到指定寄存器中;而後片段着色程序從中獲取須要的數據,一般爲「紋理座標、光照信息等」,並根據這些信息以及從應用程序傳遞的紋理信息(若是有的話)進行每一個片段的顏色計算,最後將處理後的數據送光柵操做模塊。
片段着色程序對每一個片段進行獨立的顏色計算,最後輸出顏色值的就是該片斷最終顯示的顏色。能夠這樣說,頂點着色程序主要進行幾何方面的運算,而片斷着色程序主要針對最終的顏色值進行計算。
片斷着色程序還有一個突出的特色是:擁有檢索紋理的能力。對於GPU而言,紋理等價於數組,這意味着,若是要作通用計算,例如數組排序、字符串檢索等,就必須使用到片斷着色程序。讓頂點着色器也擁有檢索紋理的能力,是目前的一個研究方向。