2015-02-10 35 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