OpenGL 2.0与GL_ARB_vertex_程序

OpenGL 2.0与GL_ARB_vertex_程序,opengl,glsl,shader,Opengl,Glsl,Shader,我对自GL 2.0起集成到GL标准中的着色器API与GL_ARB_vertex_程序扩展中的着色器API(以及friends)之间的真正区别(如果有)感到困惑 例如,我认为有些机器可能支持glLinkProgramARB,但可能还不支持glLinkProgram。那么,使用非ARB版本有什么好处呢?或者根本就没有。有一些机器可以做很多事情。有些机器可能无法实现EXT\u纹理\u过滤器\u各向异性。有些机器可能实现没有顶点着色器的片段着色器。等等 你应该问自己的问题是:你在乎吗?花时间和精力支持这

我对自GL 2.0起集成到GL标准中的着色器API与GL_ARB_vertex_程序扩展中的着色器API(以及friends)之间的真正区别(如果有)感到困惑


例如,我认为有些机器可能支持glLinkProgramARB,但可能还不支持glLinkProgram。那么,使用非ARB版本有什么好处呢?或者根本就没有。

有一些机器可以做很多事情。有些机器可能无法实现EXT\u纹理\u过滤器\u各向异性。有些机器可能实现没有顶点着色器的片段着色器。等等

你应该问自己的问题是:你在乎吗?花时间和精力支持这样的机器值得吗?您是否希望以这种方式支持它们,而不是编写一个固定的函数解决方案来支持它们以及旧的非着色器硬件

通常,如果驱动程序不支持2.0,那么我建议为该驱动程序编写一个基于1.4的渲染路径。要么完全放弃该硬件的着色器,要么最多使用部件着色器


在任何情况下,GLSL的扩展版本(仅供参考,未使用GL_ARB_vertex_程序公开。它是GL_ARB_shader_对象,具有GL_ARB_vertex_shader和/或GL_ARB_fragment_shader(视情况而定))与核心版本之间都不兼容。因此,此后添加的任何新功能,如2.0和2.1之间、2.1和3.0之间等,都将不适用于它。不能将
GLhandleARB
塞进需要
GLuint
的函数中。查找与
glUseProgram(GLuint)
绑定的对象的函数也不会与扩展等效项一起工作。

Ah,有趣的一点是,2.0->2.1->3.0之间的更新没有打包移植到扩展中。还有,是的,我发现它应该是GL_ARB_shader_对象,只是在我写了这篇文章之后。我的错误。