Shader在OpenGL ES中是怎樣一般的存在?

題主是進軍OpenGL的小白。準備學習OpenGL ES(Android)。現在在看兩本書,其中又不少疑問。

《OpenGL ES應用開發實踐指南 Android卷》,開篇就來Shader,而且說了所有繪製任務都是通過Shader完成的,沒有Shader就無法繪製(就是說Shader是最重要的,不可缺少的)。

《Pro OpenGL ES for Android》及 Per-Erik Bergman的博客時,開始沒有涉及任何Shader依然可以進行簡單模型的繪製,僅僅需要一個Render、一個Activity及一個繪製模型的類就可以完成Demo。

辣么..............問題來了...........................為什麼兩種框架有如此之大的差異?Shader在ES中到底是怎樣一般的存在?


Shader可以說是現代OpenGL的靈魂。

這牽涉到一個歷史遺留問題:GL 1.x中只有固定管線,渲染效果是固定的,而在GL 2.0中增加了可編程管線,想要什麼渲染效果都可以自己往加。GL 3.0+就廢棄了固定管線,也就是說不寫Shader是不推薦的。不寫Shader的固定管線時代早就在十多年前過去了。

回到GLES中,GLES 1.0是固定管線(為了某些原因),不需要也不能寫Shader;GLES 2.0+是可編程管線,必須寫Shader。

建議題主少走點彎路,直接上可編程管線。雖然比固定管線稍微要多做點工作,但長遠來看是好的,能做出更炫的效果並充分利用GPU。

退固定管線保平安。


推薦閱讀:

Unity移動端動態陰影總結
Unity中Shader LOD控制
3.走近DrawCall
[OpenGL]Shader編譯流程示例
筆記八——利用頂點投射生成陰影

TAG:OpenGLES | Android | 計算機圖形學 | shader |