我正在编写一个依赖于OpenGL 2.0或更高版本的程序.看看GL 2.0的规格,我看到ARB_shader_objects中定义的扩展已被提升,我想这意味着GL版本2.0及更高版本不再需要ARB前缀,任何支持> GL2.0的实现都将此作为核心实施.
话虽如此,当我在Linux上编译我的程序gcc时会发出警告:隐式声明函数.获取这些函数的一种方法是在程序本身中声明它们,然后通过*GetProcAddress函数获取函数指针.
另一种方法是在包含glext.h之前定义GL_GLEXT_PROTOTYPES,这避免了获取每个函数的函数指针的问题,这些函数默认现在存在于GL2.0或更高版本中.有人可以建议,如果这是一个推荐和正确的方式?基线是我的程序需要OpenGL 2.0或更高版本,我不想支持任何比GL2.0更少的东西.
如果有人建议使用欢乐或者glew,我不想使用/有选项来使用欢乐或glew库来实现同样的目标.
这里有两个问题.
GL_ARB_shader_objects确实在GL2.0中被提升为核心,但是核心版本的API略有变化,所以它不仅仅是没有ARB前缀的相同函数名称,例如有glCreateShader()代替glCreateShaderObjectARB(),而且两个函数glGetShaderInfoLog()和glGetProgramInfoLog()替换glGetInfoLogARB()和一些这种其他细微差别.
第二个问题是假设GL库导出所有核心功能.在Linux上通常就是这种情况(不仅针对核心功能,而且基本上针对所有内容),但没有标准保证.在OpenGL的ABI为Linux只是要求:
3.4.库必须静态导出所有OpenGL 1.2,GLU 1.3,GLX 1.3和ARB_multitexture入口点.
有更新的建议,但我最近没有听到任何相关的消息.
Windows只导出OpenGL 1.1核心,因为opengl32.dll是操作系统的一部分,而ICD是一个单独的dll.你必须查询函数指针几乎所有的东西.
所以最便携的方式绝对是查询东西,无论你是手动操作还是使用像glew这样的库.
| 归档时间: | 
 | 
| 查看次数: | 9316 次 | 
| 最近记录: |