OpenGL 是平台独立的,而不是跨平台的。它只是一个图形库接口的规范。它与正在实施的平台无关。它只是描述了函数,它们被称为什么以及它们做什么。
OpenGL 库的具体实现可能是跨平台的,也可能不是。例如,Mesa在某种程度上是跨平台的,尽管它主要是为 Linux 开发的。您需要在要编译的每个平台上找到 OpenGL 的实现。
但是,在您开始使用 OpenGL 接口之前,需要执行一些代码。此代码用于设置 OpenGL 渲染上下文。你如何做到这一点是特定于平台的。例如,在 Linux 上,GLX 是 X Window 系统的扩展,它提供了一个用于创建渲染上下文的接口。这仅适用于运行 X Window 系统的系统。在其他系统上,您将不得不做一些不同的事情来完成同样的工作。
有跨平台库可以为您创建渲染上下文。例如,看看GLFW。它是称为 GLUT 的库的现代替代品,但不再维护 GLUT。您可以避免在源代码中包含特定于平台的代码,并将该工作交给库来管理。
请注意,OpenGL 仅提供图形库。而已。游戏使用的许多其他库和接口可能与平台无关,例如输入、声音等。如果您的游戏仅包含纯 C++ 并且唯一的库是 OpenGL,则源可能会非常顺利地移植到另一个平台,只要您的 C++ 代码不依赖任何未指定的行为。如果您使用像 GLFW 这样的库,您甚至可能不必更改渲染上下文设置。
还值得一提的是SFML和SDL。这些库是跨平台的,并为各种多媒体提供接口。他们将设置您的 OpenGL 渲染上下文、为您创建窗口、绘制到屏幕、处理 I/O 和声音等等。它们在某些方面可能会受到限制,但它们的强大之处在于它们可以让您很快在所有平台上处于有利位置。