定义GL_GLEXT_PROTOTYPES与获取函数指针

Div*_*ick 7 opengl

我正在编写一个依赖于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库来实现同样的目标.

der*_*ass 9

这里有两个问题.

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这样的库.