2015-02-10 32 views
2

我一直在試圖學習OpenGL,專門爲Android。我已經在網上看到了各種教程,並且我注意到許多OpenGL 1.0或1.2的教程不需要編譯着色器程序,而我可以找到的OpenGL 2.0的所有教程都涉及創建自定義着色器來呈現視圖。爲什麼我們在OpenGL 2的運行時編譯着色器?

使用字符串來保存代碼(GLSL),然後在運行時編譯和鏈接此代碼的過程感覺很繁瑣(甚至是哈克)。這是必要的,因爲GPU架構可以有很大的不同?

有沒有辦法使用某種不需要此步驟的默認着色器(如內置着色器)?我只想繪製像GL_POINTS,GL_LINES等圖元。

回答

3

這是必要的嗎,因爲GPU架構可以有很大的不同嗎?

是的,儘管提到了着色器的IR版本,但它並沒有就應該如何看待的問題達成適當的共識。

您可以使用glShaderBinary預先編譯上一次運行中的着色器並重新使用編譯後的輸出。

+0

你是什麼意思的「IR版本」?而關於預編譯,這意味着在應用運行時(至少是第一次)仍然編譯,對吧?還是在開發每種GPU類型期間可以完成的事情,並且在運行時有選擇地加載? – snapfractalpop 2015-02-10 16:31:56

+0

「中間代表」基本上是字節代碼。是的,但是一些優化和驗證可以在手之前完成。 – 2015-02-10 16:33:56

+0

啊,好的。所以,字符串中的代碼是必要的,那麼沒有任何「內置」通用着色器? – snapfractalpop 2015-02-10 16:41:07