我想编写独立于平台的代码,但我遇到了问题。在某些机器(windows/python OpenGL)上定义了GL_VERTEX_SHADER,在其他机器上定义了GL_VERTEX_SHADER_EXT,还有一些机器定义了GL_VERTEX_SHADER_ARB。使用函数glCreateShaderObject(EXT/ARB)和glProgramParameteri也可以找到相同的组合,我必须确保对这些函数使用正确的枚举。
有没有办法(可能是通过个人资料)?以确保您所在的机器支持其中的一个组合?
发布于 2013-11-13 03:12:39
除非您是针对低于2.0的OpenGL版本,否则不要使用这些扩展。老实说,这些天你为什么还要费心去支持这些旧机器呢?为了保持与早于2.0的实现的兼容性,您需要做太多不方便的事情,包括对两个纹理中的非功率进行重新标度。
有没有办法(可能是通过个人资料)?以确保您所在的机器支持其中的一个组合?
是的,如果您将OpenGL 2.0作为软件的基准需求,那么您可以使用诸如:glUseProgram (...)之类的标准GLSL函数。ARB扩展使用的名称与核心GLSL之间没有直接的对应关系,例如,我刚才提到的函数的ARB版本是glUseProgramObjectARB (...)。
至于glProgramParameteri和它的EXT/ARB品种,这可能不是您所认为的那样。这与GL_VERTEX_SHADER无关。在引入core (OpenGL 4.1)之前,这个函数是通过扩展ARB_geometry_shader4和EXT_geometry_shader4提供的。它最初是用扩展名glProgramParameteri正式定义的:ARB_get_program_binary,如果它提供这个扩展,它可能出现在一个非OpenGLOG4.1实现中。
简而言之,如果您有一个兼容的4.1实现,则保证您有一个用于glProgramParameteri的过程地址。否则,要使用的适当函数取决于扩展字符串中出现的这些函数:
1. ARB_get_program_binary --> glProgramParameteri (...)
2. ARB_geometry_shader4 --> glProgramParameteriARB (...)
3. EXT_geometry_shader4 --> glProgramParameteriEXT (...)如果这些条件都不满足,那么您就没有任何一种glProgramParameteri。
发布于 2013-11-11 13:58:27
查看GLee
GLee (GL轻松扩展库)是一个用于OpenGL的免费跨平台扩展加载库.它为版本3.0和399扩展的OpenGL函数提供了无缝支持。 Compatibility:GLee与Windows、Linux、OS和FreeBSD平台兼容.它也可能与其他使用X窗口的类unix系统兼容。
https://stackoverflow.com/questions/19904761
复制相似问题