OpenGL是一个跨平台的API,但它对于现有的图形上下文执行图形操作是非常具体的,并且不包括创建这样的上下文或处理窗口事件或任何需要与平台特定功能。这留给平台特定的API。
每个平台的OpenGL实现都将包含用于执行必要任务的平台特定API。 Windows有WGL,X11有GLX,OS X有低层的CGL或高层的NSOpenGLView。如果没有在某个级别使用这些特定于平台的API,则无法使用OpenGL。此外,获取任何类型的GUI都需要这种平台特定的代码。
有些项目已经封装了各种特定于平台的API,以便为创建上下文以及处理OpenGL范围之外的窗口和其他事件提供便携式API。从OpenGL开始时最常用的是GLUT。 OS X为GLUT提供了一个框架,但它尚未更新为使用OS X的最新OpenGL支持,并且仍然停留在OpenGL 2.x上。随着OpenGL Core配置文件在2.x和3.x之间的引入,OpenGL API发生了很大的变化。这意味着你目前无法使用GLUT在OS X上编写一个现代的OpenGL程序。
此外,由于其跨平台性,GLUT永远无法提供符合平台标准的体面GUI。提供一个像样的图形用户界面通常意味着直接使用特定于平台的API,或者至少在设计具有特定平台的图形用户界面时。
平台之间的另一个区别是,在OS X,你可以使用任何的OpenGL版本的支持,只需要包含标准的OpenGL头和通话功能,并像使用任何其他图书馆使用的标识符。在Windows上,OpenGL头文件没有提供过去的OpenGL 1.2,这是古老的,并且使用任何比OpenGL更新的工具,这意味着通过OpenGL的扩展机制来访问它。还有另一个库,GLEW,目的是在这种情况下可以忍受使用OpenGL。
所以OpenGL是一个跨平台的API,但你很可能需要为了有效地使用它使用的平台特定的代码一定量围绕核心的OpenGL代码。 GLUT可能会是一个很好的跨平台选项,至少对于学习OpenGL来说,除了在OS X上没有更新以支持OpenGL 3.x中引入的OpenGL Core配置文件之外。但即使使用GLUT,您也必须通过OpenGL扩展机制或直接通过最新的头文件处理OpenGL工具访问方式的差异。
FreeGLGL不能在OSX上工作吗? – 2012-08-16 16:23:31
@NicolBolas从未尝试过。我看到他们最近的新闻项目提到了对OS X的改进支持,所以我认为它在某种程度上有效。 GLFW是另一个在OS X上声称支持OpenGL 3.2+的跨平台库,所以也许这是一个不错的选择。 – bames53 2012-08-16 16:39:08