18

好的,所以说我正在用 opengl 用 c++ 编写游戏。游戏在屏幕上绘制了一些简单的形状,例如正方形。现在说我想在 Windows 上运行“游戏”。我将如何移植它?实际的 c++ 不会是问题,因为它可以重新编译以适应我所理解的环境。但是对 openGL 库的调用会被破坏,不是吗?将包含用于开发的实际 opengl 库将为操作系统编译,这将需要重新下载该库,这将导致对源代码的修改。哪个会破坏原始环境中的程序,对吗?

tl;dr 有没有办法为多个操作系统构建一个 opengl 游戏,而无需将源代码修改为特定于平台或下载外部包装器或库?

4

2 回答 2

27

OpenGL 是平台独立的,而不是跨平台的。它只是一个图形库接口的规范。它与正在实施的平台无关。它只是描述了函数,它们被称为什么以及它们做什么。

OpenGL 库的具体实现可能是跨平台的,也可能不是。例如,Mesa在某种程度上是跨平台的,尽管它主要是为 Linux 开发的。您需要在要编译的每个平台上找到 OpenGL 的实现。

但是,在您开始使用 OpenGL 接口之前,需要执行一些代码。此代码用于设置 OpenGL 渲染上下文。你如何做到这一点特定于平台的。例如,在 Linux 上,GLX 是 X Window 系统的扩展,它提供了一个用于创建渲染上下文的接口。这仅适用于运行 X Window 系统的系统。在其他系统上,您将不得不做一些不同的事情来完成同样的工作。

有跨平台库可以为您创建渲染上下文。例如,看看GLFW。它是称为 GLUT 的库的现代替代品,但不再维护 GLUT。您可以避免在源代码中包含特定于平台的代码,并将该工作交给库来管理。

请注意,OpenGL 仅提供图形库。而已。游戏使用的许多其他库和接口可能与平台无关,例如输入、声音等。如果您的游戏仅包含纯 C++ 并且唯一的库是 OpenGL,则源可能会非常顺利地移植到另一个平台,只要您的 C++ 代码不依赖任何未指定的行为。如果您使用像 GLFW 这样的库,您甚至可能不必更改渲染上下文设置。

还值得一提的是SFMLSDL。这些库是跨平台的,并为各种多媒体提供接口。他们将设置您的 OpenGL 渲染上下文、为您创建窗口、绘制到屏幕、处理 I/O 和声音等等。它们在某些方面可能会受到限制,但它们的强大之处在于它们可以让您很快在所有平台上处于有利位置。

于 2012-12-23T00:57:48.050 回答
4

是的,OpenGL 是跨平台的。创建 OpenGL 渲染上下文、处理输入等的代码通常不会。

于 2012-12-23T00:49:30.387 回答