Shader在OpenGL ES中是怎樣一般的存在?
05-28
題主是進軍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編譯流程示例
※筆記八——利用頂點投射生成陰影