为什么我们在 OpenGL 2 中在运行时编译着色器?

Why do we compile shaders at runtime in OpenGL 2?

我一直在努力学习 OpenGL,特别是为了 Android。我在网上看到了各种教程,我注意到许多 OpenGL 1.0 或 1.2 的教程不需要编译着色器程序,而我能找到的关于 OpenGL 2.0 的唯一教程都涉及创建自定义着色器以在查看。

使用字符串保存代码 (GLSL) 然后在 运行 时编译和链接此代码的过程感觉很麻烦(甚至是 hacky)。这是否必要,因为 GPU 架构可能差异很大?

有没有办法使用某种不需要此步骤的默认着色器(如内置着色器)?我只想能够画出 GL_POINTS、GL_LINES 等原语

Is this necessary because GPU architectures can vary greatly?

是的,虽然已经提到了 IR 版本的着色器,但对于它的外观还没有达成适当的共识。

您可以使用 glShaderBinary 在之前 运行 中预编译着色器并重新使用编译后的输出。