我想编写独立于平台的代码,但遇到了问题。在一些机器上(windows/python OpenGL)GL_VERTEX_SHADER
被定义,在其他机器上,GL_VERTEX_SHADER_EXT
还有一些GL_VERTEX_SHADER_ARB
被定义。使用函数glCreateShaderObject
(EXT/ARB) 和也可以找到相同的组合glProgramParameteri
,我必须确保为它们使用正确的枚举。
有没有办法(可能通过配置文件?)来确保您所在的机器支持这些组合?
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_shader4
和EXT_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 library)是一个免费的OpenGL跨平台扩展加载库。它为最高 3.0 版和 399 扩展的 OpenGL 函数提供无缝支持。
兼容性:GLee 与 Windows、Linux、OS-X 和 FreeBSD 平台兼容。它也可能与其他使用 X 窗口的类 unix 系统兼容。