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