我想编写独立于平台的代码,但我遇到了问题。在某些机器(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_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库)是一个免费的跨平台扩展 为 OpenGL 加载库。它为OpenGL提供了无缝支持 功能最高为 3.0 和 399 扩展。
兼容性:GLee与Windows,Linux,OS-X和FreeBSD兼容 平台。它也有可能与其他类Unix兼容。 使用 X 窗口的系统。