0

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

4

2 回答 2

2

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

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

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


至于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它的任何味道。

于 2013-11-13T03:12:39.643 回答
0

查看GLee

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

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

于 2013-11-11T13:58:27.383 回答