pip*_*117 13 c++ opengl porting cross-platform
好的,所以说我正在用opengl用c ++编写游戏.游戏在屏幕上绘制了一些简单的形状,如方块.现在说我想在Windows上运行"游戏".我该如何移植呢?实际的c ++不会是问题,因为它可以根据我的理解重新编译以适应环境.但是对openGL库的调用会被打破吗?将为开发包含的实际opengl库将被编译为os,这将需要重新加载库,这将导致对源的修改.哪个会破坏原有环境下的程序吧?
tl; dr有没有办法为多个操作系统构建一个opengl游戏,而不必将源代码修改为特定于平台或下载外部包装器或库?
Jos*_*eld 18
OpenGL是独立于平台的,而不是跨平台的.它只是图形库界面的规范.它不关心它正在实施的平台.它只描述了功能,它们被称为什么以及它们的作用.
OpenGL库的具体实现可以是跨平台的,也可以不是.例如,Mesa在某种程度上是跨平台的,尽管主要是为Linux开发的.您需要在要编译的每个平台上找到OpenGL的实现.
但是,在开始使用OpenGL接口之前,需要执行一些代码.此代码用于设置OpenGL渲染上下文.你如何做到这一点是特定于平台的.例如,在Linux上,GLX是X Window System的扩展,它提供了用于创建渲染上下文的接口.这仅适用于运行X Window System的系统.在其他系统上,您将不得不做一些不同的事情来完成同样的工作.
有一些跨平台库可用于为您创建渲染上下文.例如,看看GLFW.它是名为GLUT的库的现代替代品,但GLUT不再维护.您可以避免在源中使用特定于平台的代码,并将该作业提供给库来管理.
请注意,OpenGL仅提供图形库.而已.游戏使用的许多其他库和接口可能与平台无关,例如输入,声音等.如果您的游戏仅包含纯C++且唯一的库是OpenGL,则源可以非常顺利地移植到另一个平台,只要您的C++代码不依赖于任何未指定的行为.如果您使用像GLFW这样的库,则甚至可能不必更改渲染上下文设置.
还值得一提的是像SFML和SDL这样的东西.这些库是跨平台的,为各种多媒体提供接口.他们将设置您的OpenGL渲染上下文,为您创建窗口,绘制到屏幕,处理I/O和声音等等.它们在某些方面可能受到限制,但它们的强大之处在于它们可以非常快速地在所有平台上占据优势.