(蟒蛇)ARB / EXT的OpenGL问题



我想编写独立于平台的代码,但我遇到了问题。在某些机器(Windows/python OpenGL)上,GL_VERTEX_SHADER被定义,在其他机器上,GL_VERTEX_SHADER_EXT,还有一些GL_VERTEX_SHADER_ARB被定义。使用函数glCreateShaderObject(EXT/ARB)和glProgramParameteri也可以找到相同的组合,我必须确保为它们使用正确的枚举。
有没有办法(也许通过配置文件?)来确保您所在的机器支持这些组合的一种?

不要使用这些扩展,除非您的目标是低于 2.0 的 OpenGL 版本。老实说,这些天你为什么还要费心支持这样的旧机器呢?为了保持与低于 2.0 的实现的兼容性,您必须做太多不方便的事情,包括重新缩放非二次幂纹理。

有没有办法(也许通过配置文件?)来确保您所在的机器支持这些组合的一种?

是的,

如果您将 OpenGL 2.0 建立为软件的基准要求,则可以使用标准的 GLSL 函数,例如:glUseProgram (...) 。ARB 扩展和核心 GLSL 使用的名称之间没有直接对应关系,例如,我刚才提到的函数的 ARB 版本是glUseProgramObjectARB (...)的。


至于glProgramParameteri及其EXT/ARB品种,这可能不是你想象的那样。它与GL_VERTEX_SHADER无关.在引入核心(OpenGL 4.1)之前,此功能是通过扩展提供的:ARB_geometry_shader4EXT_geometry_shader4。它最初被正式定义为扩展glProgramParameteri的名称:ARB_get_program_binary,如果它提供此扩展,则可能存在于非 OpenGL 4.1 实现中。

简而言之,如果您有一个兼容的 4.1 实现,则可以保证您有一个用于 glProgramParameteri 的过程地址。否则,要使用的相应函数取决于扩展字符串中显示的哪些函数:

 1. ARB_get_program_binary --> glProgramParameteri    (...)
 2. ARB_geometry_shader4   --> glProgramParameteriARB (...)
 3. EXT_geometry_shader4   --> glProgramParameteriEXT (...)

如果这些条件都不满足,那么您就没有glProgramParameteri任何口味。

查看 GLee:

GLee(GL Easy Extension库)是一个免费的跨平台扩展 为 OpenGL 加载库。它为OpenGL提供了无缝支持 功能最高为 3.0 和 399 扩展。

兼容性:GLee与Windows,Linux,OS-X和FreeBSD兼容 平台。它也有可能与其他类Unix兼容。 使用 X 窗口的系统。

最新更新