(Python)ARB / EXT的OpenGL问题

时间:2013-11-11 11:05:13

标签: python opengl

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

2 个答案:

答案 0 :(得分:2)

除非您的OpenGL版本低于2.0,否则请勿使用这些扩展程序。老实说,为什么这些天你甚至打算支持这些旧机器呢?为了保持与早于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

答案 1 :(得分:0)

结帐GLee

  

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

     

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